From 0904ffa81360462e85bb759413bfd42badfd3484 Mon Sep 17 00:00:00 2001 From: Trung Nguyen Date: Fri, 6 Aug 2021 01:11:31 -0500 Subject: [PATCH 001/372] Enabled newton pair on for gpu pair styles --- lib/gpu/Makefile.cuda | 2 +- src/GPU/Install.sh | 4 ++-- src/GPU/fix_gpu.cpp | 28 ++++++++++++++++++---- src/GPU/pair_beck_gpu.cpp | 2 ++ src/GPU/pair_born_coul_long_cs_gpu.cpp | 2 ++ src/GPU/pair_born_coul_long_gpu.cpp | 2 ++ src/GPU/pair_born_coul_wolf_cs_gpu.cpp | 2 ++ src/GPU/pair_born_coul_wolf_gpu.cpp | 2 ++ src/GPU/pair_born_gpu.cpp | 2 ++ src/GPU/pair_buck_coul_cut_gpu.cpp | 2 ++ src/GPU/pair_buck_coul_long_gpu.cpp | 2 ++ src/GPU/pair_buck_gpu.cpp | 2 ++ src/GPU/pair_colloid_gpu.cpp | 2 ++ src/GPU/pair_coul_cut_gpu.cpp | 2 ++ src/GPU/pair_coul_debye_gpu.cpp | 2 ++ src/GPU/pair_coul_dsf_gpu.cpp | 2 ++ src/GPU/pair_coul_long_cs_gpu.cpp | 2 ++ src/GPU/pair_coul_long_gpu.cpp | 2 ++ src/GPU/pair_dpd_gpu.cpp | 2 ++ src/GPU/pair_dpd_tstat_gpu.cpp | 2 ++ src/GPU/pair_eam_alloy_gpu.cpp | 2 ++ src/GPU/pair_eam_fs_gpu.cpp | 2 ++ src/GPU/pair_eam_gpu.cpp | 2 ++ src/GPU/pair_gauss_gpu.cpp | 2 ++ src/GPU/pair_gayberne_gpu.cpp | 2 ++ src/GPU/pair_lj96_cut_gpu.cpp | 2 ++ src/GPU/pair_lj_charmm_coul_charmm_gpu.cpp | 2 ++ src/GPU/pair_lj_charmm_coul_long_gpu.cpp | 2 ++ src/GPU/pair_lj_class2_coul_long_gpu.cpp | 2 ++ src/GPU/pair_lj_class2_gpu.cpp | 2 ++ src/GPU/pair_lj_cubic_gpu.cpp | 2 ++ src/GPU/pair_lj_cut_coul_cut_gpu.cpp | 2 ++ src/GPU/pair_lj_cut_coul_debye_gpu.cpp | 2 ++ src/GPU/pair_lj_cut_coul_dsf_gpu.cpp | 2 ++ src/GPU/pair_lj_cut_coul_long_gpu.cpp | 2 ++ src/GPU/pair_lj_cut_coul_msm_gpu.cpp | 2 ++ src/GPU/pair_lj_cut_dipole_cut_gpu.cpp | 2 ++ src/GPU/pair_lj_cut_dipole_long_gpu.cpp | 2 ++ src/GPU/pair_lj_cut_gpu.cpp | 2 ++ src/GPU/pair_lj_cut_tip4p_long_gpu.cpp | 2 ++ src/GPU/pair_lj_expand_coul_long_gpu.cpp | 2 ++ src/GPU/pair_lj_expand_gpu.cpp | 2 ++ src/GPU/pair_lj_gromacs_gpu.cpp | 2 ++ src/GPU/pair_lj_sdk_coul_long_gpu.cpp | 2 ++ src/GPU/pair_lj_sdk_gpu.cpp | 2 ++ src/GPU/pair_lj_sf_dipole_sf_gpu.cpp | 2 ++ src/GPU/pair_lj_smooth_gpu.cpp | 2 ++ src/GPU/pair_mie_cut_gpu.cpp | 2 ++ src/GPU/pair_morse_gpu.cpp | 2 ++ src/GPU/pair_resquared_gpu.cpp | 2 ++ src/GPU/pair_soft_gpu.cpp | 2 ++ src/GPU/pair_sw_gpu.cpp | 2 ++ src/GPU/pair_table_gpu.cpp | 2 ++ src/GPU/pair_tersoff_gpu.cpp | 2 ++ src/GPU/pair_tersoff_mod_gpu.cpp | 2 ++ src/GPU/pair_tersoff_zbl_gpu.cpp | 2 ++ src/GPU/pair_ufm_gpu.cpp | 2 ++ src/GPU/pair_vashishta_gpu.cpp | 2 ++ src/GPU/pair_yukawa_colloid_gpu.cpp | 2 ++ src/GPU/pair_yukawa_gpu.cpp | 2 ++ src/GPU/pair_zbl_gpu.cpp | 2 ++ 61 files changed, 142 insertions(+), 8 deletions(-) diff --git a/lib/gpu/Makefile.cuda b/lib/gpu/Makefile.cuda index e02501d080..dfbfc4ca84 100644 --- a/lib/gpu/Makefile.cuda +++ b/lib/gpu/Makefile.cuda @@ -21,7 +21,7 @@ LMP_INC = -DLAMMPS_SMALLBIG # -D_DOUBLE_DOUBLE # Double precision for all calculations # -D_SINGLE_DOUBLE # Accumulation of forces, etc. in double -CUDA_PRECISION = -D_SINGLE_DOUBLE +CUDA_PRECISION = -D_DOUBLE_DOUBLE BIN_DIR = ./ OBJ_DIR = ./ diff --git a/src/GPU/Install.sh b/src/GPU/Install.sh index 2e2b32d96a..f13e87d317 100755 --- a/src/GPU/Install.sh +++ b/src/GPU/Install.sh @@ -113,8 +113,8 @@ action pair_lj_cut_coul_msm_gpu.cpp pair_lj_cut_coul_msm.cpp action pair_lj_cut_coul_msm_gpu.h pair_lj_cut_coul_msm.h action pair_lj_cut_gpu.cpp action pair_lj_cut_gpu.h -action pair_lj_smooth_gpu.cpp -action pair_lj_smooth_gpu.h +action pair_lj_smooth_gpu.cpp pair_lj_smooth.cpp +action pair_lj_smooth_gpu.h pair_lj_smooth.cpp action pair_lj_expand_gpu.cpp action pair_lj_expand_gpu.h action pair_lj_expand_coul_long_gpu.cpp pair_lj_expand_coul_long.cpp diff --git a/src/GPU/fix_gpu.cpp b/src/GPU/fix_gpu.cpp index 71ab3f4cb4..66b938c577 100644 --- a/src/GPU/fix_gpu.cpp +++ b/src/GPU/fix_gpu.cpp @@ -127,7 +127,7 @@ FixGPU::FixGPU(LAMMPS *lmp, int narg, char **arg) : _gpu_mode = GPU_NEIGH; _particle_split = 1.0; int nthreads = 0; - int newtonflag = 0; + int newtonflag = force->newton_pair; int threads_per_atom = -1; double binsize = 0.0; char *opencl_args = nullptr; @@ -211,14 +211,16 @@ FixGPU::FixGPU(LAMMPS *lmp, int narg, char **arg) : #endif // set newton pair flag - // require newtonflag = 0 since currently required by all GPU pair styles - - if (newtonflag == 1) error->all(FLERR,"Illegal package gpu command"); force->newton_pair = newtonflag; if (force->newton_pair || force->newton_bond) force->newton = 1; else force->newton = 0; + // require newton pair off if _particle_split < 1 + + if (force->newton_pair == 1 && _particle_split < 1) + error->all(FLERR,"Cannot use newton pair on for split less than 1"); + if (pair_only_flag) { lmp->suffixp = lmp->suffix; lmp->suffix = nullptr; @@ -341,7 +343,23 @@ void FixGPU::post_force(int /* vflag */) force->pair->virial[4] += lvirial[4]; force->pair->virial[5] += lvirial[5]; - if (force->pair->vflag_fdotr) force->pair->virial_fdotr_compute(); + // for newton pair off: force->pair->vflag_fdotr = 0 + // which has been the case so far, virial_fdotr_compute() is never called + // for newton pair on: force->pair->vflag_fdotr = 1 + // for neigh yes: full neighbor lists are built on the device + // for neigh no: full neighbor lists are built on the host + // either way the virial is tallied to force->pair->virial as above + // so as long as _particle_split == 1 + // no need to call force->pair->virial_fdotr_compute(); + // If _particle_split < 1, the local atom forces computed by + // the gpu pair styles on the host (cpu_compute()) got tallied + // by comm->reverse_comm() (which is done before this post_force() function). + // A call to force->pair->virial_fdotr_compute() would double count + // the virial from the local atoms on the host. + // Here a possible workaround is to comment out the below command + // while enforcing newton pair off for _particle_split < 1. + + //if (force->pair->vflag_fdotr) force->pair->virial_fdotr_compute(); timer->stamp(Timer::PAIR); } diff --git a/src/GPU/pair_beck_gpu.cpp b/src/GPU/pair_beck_gpu.cpp index 5833677d0e..75ae270597 100644 --- a/src/GPU/pair_beck_gpu.cpp +++ b/src/GPU/pair_beck_gpu.cpp @@ -138,8 +138,10 @@ void PairBeckGPU::compute(int eflag, int vflag) void PairBeckGPU::init_style() { +/* if (force->newton_pair) error->all(FLERR,"Pair style beck/gpu requires newton pair off"); +*/ // Repeat cutsq calculation because done after call to init_style double maxcut = -1.0; diff --git a/src/GPU/pair_born_coul_long_cs_gpu.cpp b/src/GPU/pair_born_coul_long_cs_gpu.cpp index f408e81acb..12e00317eb 100644 --- a/src/GPU/pair_born_coul_long_cs_gpu.cpp +++ b/src/GPU/pair_born_coul_long_cs_gpu.cpp @@ -157,8 +157,10 @@ void PairBornCoulLongCSGPU::init_style() { if (!atom->q_flag) error->all(FLERR, "Pair style born/coul/long/cs/gpu requires atom attribute q"); +/* if (force->newton_pair) error->all(FLERR, "Pair style born/coul/long/cs/gpu requires newton pair off"); +*/ // Repeat cutsq calculation because done after call to init_style double maxcut = -1.0; diff --git a/src/GPU/pair_born_coul_long_gpu.cpp b/src/GPU/pair_born_coul_long_gpu.cpp index ccd342fe1f..3cbfa8cd66 100644 --- a/src/GPU/pair_born_coul_long_gpu.cpp +++ b/src/GPU/pair_born_coul_long_gpu.cpp @@ -152,8 +152,10 @@ void PairBornCoulLongGPU::init_style() { if (!atom->q_flag) error->all(FLERR, "Pair style born/coul/long/gpu requires atom attribute q"); +/* if (force->newton_pair) error->all(FLERR, "Pair style born/coul/long/gpu requires newton pair off"); +*/ // Repeat cutsq calculation because done after call to init_style double maxcut = -1.0; diff --git a/src/GPU/pair_born_coul_wolf_cs_gpu.cpp b/src/GPU/pair_born_coul_wolf_cs_gpu.cpp index 5c64d49928..88b706e459 100644 --- a/src/GPU/pair_born_coul_wolf_cs_gpu.cpp +++ b/src/GPU/pair_born_coul_wolf_cs_gpu.cpp @@ -147,8 +147,10 @@ void PairBornCoulWolfCSGPU::init_style() { if (!atom->q_flag) error->all(FLERR, "Pair style born/coul/wolf/cs/gpu requires atom attribute q"); +/* if (force->newton_pair) error->all(FLERR, "Pair style born/coul/wolf/cs/gpu requires newton pair off"); +*/ // Repeat cutsq calculation because done after call to init_style double maxcut = -1.0; diff --git a/src/GPU/pair_born_coul_wolf_gpu.cpp b/src/GPU/pair_born_coul_wolf_gpu.cpp index 43ee7b8267..f3cf65692e 100644 --- a/src/GPU/pair_born_coul_wolf_gpu.cpp +++ b/src/GPU/pair_born_coul_wolf_gpu.cpp @@ -145,8 +145,10 @@ void PairBornCoulWolfGPU::init_style() { if (!atom->q_flag) error->all(FLERR, "Pair style born/coul/wolf/gpu requires atom attribute q"); +/* if (force->newton_pair) error->all(FLERR, "Pair style born/coul/wolf/gpu requires newton pair off"); +*/ // Repeat cutsq calculation because done after call to init_style double maxcut = -1.0; diff --git a/src/GPU/pair_born_gpu.cpp b/src/GPU/pair_born_gpu.cpp index b396788715..a9446f981f 100644 --- a/src/GPU/pair_born_gpu.cpp +++ b/src/GPU/pair_born_gpu.cpp @@ -134,8 +134,10 @@ void PairBornGPU::compute(int eflag, int vflag) void PairBornGPU::init_style() { +/* if (force->newton_pair) error->all(FLERR,"Pair style born/gpu requires newton pair off"); +*/ // Repeat cutsq calculation because done after call to init_style double maxcut = -1.0; diff --git a/src/GPU/pair_buck_coul_cut_gpu.cpp b/src/GPU/pair_buck_coul_cut_gpu.cpp index a80a74fbee..b5a2167abd 100644 --- a/src/GPU/pair_buck_coul_cut_gpu.cpp +++ b/src/GPU/pair_buck_coul_cut_gpu.cpp @@ -139,8 +139,10 @@ void PairBuckCoulCutGPU::init_style() { if (!atom->q_flag) error->all(FLERR, "Pair style buck/coul/cut/gpu requires atom attribute q"); +/* if (force->newton_pair) error->all(FLERR, "Pair style buck/coul/cut/gpu requires newton pair off"); +*/ // Repeat cutsq calculation because done after call to init_style double maxcut = -1.0; diff --git a/src/GPU/pair_buck_coul_long_gpu.cpp b/src/GPU/pair_buck_coul_long_gpu.cpp index 77fd1dd940..e4330f2760 100644 --- a/src/GPU/pair_buck_coul_long_gpu.cpp +++ b/src/GPU/pair_buck_coul_long_gpu.cpp @@ -148,8 +148,10 @@ void PairBuckCoulLongGPU::init_style() { if (!atom->q_flag) error->all(FLERR, "Pair style buck/coul/long/gpu requires atom attribute q"); +/* if (force->newton_pair) error->all(FLERR, "Pair style buck/coul/long/gpu requires newton pair off"); +*/ // Repeat cutsq calculation because done after call to init_style double maxcut = -1.0; diff --git a/src/GPU/pair_buck_gpu.cpp b/src/GPU/pair_buck_gpu.cpp index 0cca58c20a..7a1e5d7abb 100644 --- a/src/GPU/pair_buck_gpu.cpp +++ b/src/GPU/pair_buck_gpu.cpp @@ -132,8 +132,10 @@ void PairBuckGPU::compute(int eflag, int vflag) void PairBuckGPU::init_style() { +/* if (force->newton_pair) error->all(FLERR,"Pair style buck/gpu requires newton pair off"); +*/ // Repeat cutsq calculation because done after call to init_style double maxcut = -1.0; diff --git a/src/GPU/pair_colloid_gpu.cpp b/src/GPU/pair_colloid_gpu.cpp index 813787d451..ed74d0e1d9 100644 --- a/src/GPU/pair_colloid_gpu.cpp +++ b/src/GPU/pair_colloid_gpu.cpp @@ -133,8 +133,10 @@ void PairColloidGPU::compute(int eflag, int vflag) void PairColloidGPU::init_style() { +/* if (force->newton_pair) error->all(FLERR,"Pair style colloid/gpu requires newton pair off"); +*/ // Repeat cutsq calculation because done after call to init_style double maxcut = -1.0; diff --git a/src/GPU/pair_coul_cut_gpu.cpp b/src/GPU/pair_coul_cut_gpu.cpp index a2aa9c6e02..5126914068 100644 --- a/src/GPU/pair_coul_cut_gpu.cpp +++ b/src/GPU/pair_coul_cut_gpu.cpp @@ -137,8 +137,10 @@ void PairCoulCutGPU::init_style() if (!atom->q_flag) error->all(FLERR,"Pair style coul/cut/gpu requires atom attribute q"); +/* if (force->newton_pair) error->all(FLERR,"Pair style coul/cut/gpu requires newton pair off"); +*/ // Repeat cutsq calculation because done after call to init_style double maxcut = -1.0; diff --git a/src/GPU/pair_coul_debye_gpu.cpp b/src/GPU/pair_coul_debye_gpu.cpp index cc16c97770..e7d3525835 100644 --- a/src/GPU/pair_coul_debye_gpu.cpp +++ b/src/GPU/pair_coul_debye_gpu.cpp @@ -138,8 +138,10 @@ void PairCoulDebyeGPU::init_style() if (!atom->q_flag) error->all(FLERR,"Pair style coul/debye/gpu requires atom attribute q"); +/* if (force->newton_pair) error->all(FLERR,"Pair style coul/debye/gpu requires newton pair off"); +*/ // Repeat cutsq calculation because done after call to init_style double maxcut = -1.0; diff --git a/src/GPU/pair_coul_dsf_gpu.cpp b/src/GPU/pair_coul_dsf_gpu.cpp index b377ddff66..56eaa4def3 100644 --- a/src/GPU/pair_coul_dsf_gpu.cpp +++ b/src/GPU/pair_coul_dsf_gpu.cpp @@ -149,8 +149,10 @@ void PairCoulDSFGPU::init_style() if (!atom->q_flag) error->all(FLERR,"Pair style coul/dsf/gpu requires atom attribute q"); +/* if (force->newton_pair) error->all(FLERR,"Pair style coul/dsf/gpu requires newton pair off"); +*/ // Repeat cutsq calculation because done after call to init_style double maxcut = -1.0; diff --git a/src/GPU/pair_coul_long_cs_gpu.cpp b/src/GPU/pair_coul_long_cs_gpu.cpp index a3332f49c3..15b32dcebf 100644 --- a/src/GPU/pair_coul_long_cs_gpu.cpp +++ b/src/GPU/pair_coul_long_cs_gpu.cpp @@ -152,8 +152,10 @@ void PairCoulLongCSGPU::init_style() if (!atom->q_flag) error->all(FLERR,"Pair style coul/long/cs/gpu requires atom attribute q"); +/* if (force->newton_pair) error->all(FLERR,"Pair style coul/long/cs/gpu requires newton pair off"); +*/ // Call init_one calculation make sure scale is correct for (int i = 1; i <= atom->ntypes; i++) { diff --git a/src/GPU/pair_coul_long_gpu.cpp b/src/GPU/pair_coul_long_gpu.cpp index be43359238..2236b2825f 100644 --- a/src/GPU/pair_coul_long_gpu.cpp +++ b/src/GPU/pair_coul_long_gpu.cpp @@ -147,8 +147,10 @@ void PairCoulLongGPU::init_style() if (!atom->q_flag) error->all(FLERR,"Pair style coul/long/gpu requires atom attribute q"); +/* if (force->newton_pair) error->all(FLERR,"Pair style coul/long/gpu requires newton pair off"); +*/ // Call init_one calculation make sure scale is correct for (int i = 1; i <= atom->ntypes; i++) { diff --git a/src/GPU/pair_dpd_gpu.cpp b/src/GPU/pair_dpd_gpu.cpp index 44856464b7..269c03e7b4 100644 --- a/src/GPU/pair_dpd_gpu.cpp +++ b/src/GPU/pair_dpd_gpu.cpp @@ -279,8 +279,10 @@ void PairDPDGPU::compute(int eflag, int vflag) void PairDPDGPU::init_style() { +/* if (force->newton_pair) error->all(FLERR,"Pair style dpd/gpu requires newton pair off"); +*/ // Repeat cutsq calculation because done after call to init_style double maxcut = -1.0; diff --git a/src/GPU/pair_dpd_tstat_gpu.cpp b/src/GPU/pair_dpd_tstat_gpu.cpp index d0580a1061..8acc00d9bc 100644 --- a/src/GPU/pair_dpd_tstat_gpu.cpp +++ b/src/GPU/pair_dpd_tstat_gpu.cpp @@ -298,8 +298,10 @@ void PairDPDTstatGPU::compute(int eflag, int vflag) void PairDPDTstatGPU::init_style() { +/* if (force->newton_pair) error->all(FLERR,"Pair style dpd/tstat/gpu requires newton pair off"); +*/ // Repeat cutsq calculation because done after call to init_style double maxcut = -1.0; diff --git a/src/GPU/pair_eam_alloy_gpu.cpp b/src/GPU/pair_eam_alloy_gpu.cpp index 9c4ee76f15..4129014aa6 100644 --- a/src/GPU/pair_eam_alloy_gpu.cpp +++ b/src/GPU/pair_eam_alloy_gpu.cpp @@ -156,8 +156,10 @@ void PairEAMAlloyGPU::compute(int eflag, int vflag) void PairEAMAlloyGPU::init_style() { +/* if (force->newton_pair) error->all(FLERR,"Pair style eam/alloy/gpu requires newton pair off"); +*/ // convert read-in file(s) to arrays and spline them diff --git a/src/GPU/pair_eam_fs_gpu.cpp b/src/GPU/pair_eam_fs_gpu.cpp index b4c14d62cd..046d530c80 100644 --- a/src/GPU/pair_eam_fs_gpu.cpp +++ b/src/GPU/pair_eam_fs_gpu.cpp @@ -155,8 +155,10 @@ void PairEAMFSGPU::compute(int eflag, int vflag) void PairEAMFSGPU::init_style() { +/* if (force->newton_pair) error->all(FLERR,"Pair style eam/fs/gpu requires newton pair off"); +*/ // convert read-in file(s) to arrays and spline them diff --git a/src/GPU/pair_eam_gpu.cpp b/src/GPU/pair_eam_gpu.cpp index f12262278c..58d914e7ca 100644 --- a/src/GPU/pair_eam_gpu.cpp +++ b/src/GPU/pair_eam_gpu.cpp @@ -155,8 +155,10 @@ void PairEAMGPU::compute(int eflag, int vflag) void PairEAMGPU::init_style() { +/* if (force->newton_pair) error->all(FLERR,"Pair style eam/gpu requires newton pair off"); +*/ // convert read-in file(s) to arrays and spline them diff --git a/src/GPU/pair_gauss_gpu.cpp b/src/GPU/pair_gauss_gpu.cpp index 355476664a..debe84b2b5 100644 --- a/src/GPU/pair_gauss_gpu.cpp +++ b/src/GPU/pair_gauss_gpu.cpp @@ -130,8 +130,10 @@ void PairGaussGPU::compute(int eflag, int vflag) void PairGaussGPU::init_style() { +/* if (force->newton_pair) error->all(FLERR,"Pair style gauss/gpu requires newton pair off"); +*/ // Repeat cutsq calculation because done after call to init_style double maxcut = -1.0; diff --git a/src/GPU/pair_gayberne_gpu.cpp b/src/GPU/pair_gayberne_gpu.cpp index fe4c15c430..88f451b6a7 100644 --- a/src/GPU/pair_gayberne_gpu.cpp +++ b/src/GPU/pair_gayberne_gpu.cpp @@ -160,8 +160,10 @@ void PairGayBerneGPU::init_style() avec = (AtomVecEllipsoid *) atom->style_match("ellipsoid"); if (!avec) error->all(FLERR,"Pair gayberne/gpu requires atom style ellipsoid"); +/* if (force->newton_pair) error->all(FLERR,"Pair style gayberne/gpu requires newton pair off"); +*/ if (!atom->ellipsoid_flag) error->all(FLERR,"Pair gayberne/gpu requires atom style ellipsoid"); diff --git a/src/GPU/pair_lj96_cut_gpu.cpp b/src/GPU/pair_lj96_cut_gpu.cpp index f03fbc9d7f..51fb18dd65 100644 --- a/src/GPU/pair_lj96_cut_gpu.cpp +++ b/src/GPU/pair_lj96_cut_gpu.cpp @@ -131,8 +131,10 @@ void PairLJ96CutGPU::init_style() { cut_respa = nullptr; +/* if (force->newton_pair) error->all(FLERR,"Pair style lj96/cut/gpu requires newton pair off"); +*/ // Repeat cutsq calculation because done after call to init_style double maxcut = -1.0; diff --git a/src/GPU/pair_lj_charmm_coul_charmm_gpu.cpp b/src/GPU/pair_lj_charmm_coul_charmm_gpu.cpp index 9176adacff..62f3a84c48 100644 --- a/src/GPU/pair_lj_charmm_coul_charmm_gpu.cpp +++ b/src/GPU/pair_lj_charmm_coul_charmm_gpu.cpp @@ -129,8 +129,10 @@ void PairLJCharmmCoulCharmmGPU::init_style() { if (!atom->q_flag) error->all(FLERR, "Pair style lj/charmm/coul/long/gpu requires atom attribute q"); +/* if (force->newton_pair) error->all(FLERR, "Pair style lj/charmm/coul/long/gpu requires newton pair off"); +*/ // Repeated cutsq calculation in init_one() is required for GPU package diff --git a/src/GPU/pair_lj_charmm_coul_long_gpu.cpp b/src/GPU/pair_lj_charmm_coul_long_gpu.cpp index 09ca241119..bcfb740bcd 100644 --- a/src/GPU/pair_lj_charmm_coul_long_gpu.cpp +++ b/src/GPU/pair_lj_charmm_coul_long_gpu.cpp @@ -152,8 +152,10 @@ void PairLJCharmmCoulLongGPU::init_style() if (!atom->q_flag) error->all(FLERR,"Pair style lj/charmm/coul/long/gpu requires atom attribute q"); +/* if (force->newton_pair) error->all(FLERR,"Pair style lj/charmm/coul/long/gpu requires newton pair off"); +*/ // Repeat cutsq calculation because done after call to init_style diff --git a/src/GPU/pair_lj_class2_coul_long_gpu.cpp b/src/GPU/pair_lj_class2_coul_long_gpu.cpp index 476134bd0e..b21b4504af 100644 --- a/src/GPU/pair_lj_class2_coul_long_gpu.cpp +++ b/src/GPU/pair_lj_class2_coul_long_gpu.cpp @@ -147,8 +147,10 @@ void PairLJClass2CoulLongGPU::init_style() { if (!atom->q_flag) error->all(FLERR,"Pair style lj/class2/coul/long/gpu requires atom attribute q"); +/* if (force->newton_pair) error->all(FLERR,"Pair style lj/class2/coul/long/gpu requires newton pair off"); +*/ // Repeat cutsq calculation because done after call to init_style double maxcut = -1.0; diff --git a/src/GPU/pair_lj_class2_gpu.cpp b/src/GPU/pair_lj_class2_gpu.cpp index fb2a7b4b5a..d24d6dde81 100644 --- a/src/GPU/pair_lj_class2_gpu.cpp +++ b/src/GPU/pair_lj_class2_gpu.cpp @@ -129,8 +129,10 @@ void PairLJClass2GPU::compute(int eflag, int vflag) void PairLJClass2GPU::init_style() { +/* if (force->newton_pair) error->all(FLERR,"Pair style lj/class2/gpu requires newton pair off"); +*/ // Repeat cutsq calculation because done after call to init_style double maxcut = -1.0; diff --git a/src/GPU/pair_lj_cubic_gpu.cpp b/src/GPU/pair_lj_cubic_gpu.cpp index 36255604be..56a9b43371 100644 --- a/src/GPU/pair_lj_cubic_gpu.cpp +++ b/src/GPU/pair_lj_cubic_gpu.cpp @@ -135,8 +135,10 @@ void PairLJCubicGPU::compute(int eflag, int vflag) void PairLJCubicGPU::init_style() { +/* if (force->newton_pair) error->all(FLERR,"Pair style lj/cubic/gpu requires newton pair off"); +*/ // Repeat cutsq calculation because done after call to init_style double maxcut = -1.0; diff --git a/src/GPU/pair_lj_cut_coul_cut_gpu.cpp b/src/GPU/pair_lj_cut_coul_cut_gpu.cpp index 87904ad8f6..eed98edb88 100644 --- a/src/GPU/pair_lj_cut_coul_cut_gpu.cpp +++ b/src/GPU/pair_lj_cut_coul_cut_gpu.cpp @@ -139,8 +139,10 @@ void PairLJCutCoulCutGPU::init_style() if (!atom->q_flag) error->all(FLERR,"Pair style lj/cut/coul/cut/gpu requires atom attribute q"); +/* if (force->newton_pair) error->all(FLERR,"Pair style lj/cut/coul/cut/gpu requires newton pair off"); +*/ // Repeat cutsq calculation because done after call to init_style double maxcut = -1.0; diff --git a/src/GPU/pair_lj_cut_coul_debye_gpu.cpp b/src/GPU/pair_lj_cut_coul_debye_gpu.cpp index e288a21263..ac96812146 100644 --- a/src/GPU/pair_lj_cut_coul_debye_gpu.cpp +++ b/src/GPU/pair_lj_cut_coul_debye_gpu.cpp @@ -141,8 +141,10 @@ void PairLJCutCoulDebyeGPU::init_style() if (!atom->q_flag) error->all(FLERR,"Pair style lj/cut/coul/debye/gpu requires atom attribute q"); +/* if (force->newton_pair) error->all(FLERR,"Pair style lj/cut/coul/debye/gpu requires newton pair off"); +*/ // Repeat cutsq calculation because done after call to init_style double maxcut = -1.0; diff --git a/src/GPU/pair_lj_cut_coul_dsf_gpu.cpp b/src/GPU/pair_lj_cut_coul_dsf_gpu.cpp index afc4d15224..b941c1f8ca 100644 --- a/src/GPU/pair_lj_cut_coul_dsf_gpu.cpp +++ b/src/GPU/pair_lj_cut_coul_dsf_gpu.cpp @@ -151,8 +151,10 @@ void PairLJCutCoulDSFGPU::init_style() if (!atom->q_flag) error->all(FLERR,"Pair style lj/cut/coul/dsf/gpu requires atom attribute q"); +/* if (force->newton_pair) error->all(FLERR,"Pair style lj/cut/coul/dsf/gpu requires newton pair off"); +*/ // Repeat cutsq calculation because done after call to init_style double maxcut = -1.0; diff --git a/src/GPU/pair_lj_cut_coul_long_gpu.cpp b/src/GPU/pair_lj_cut_coul_long_gpu.cpp index c38b0b406d..3ebf8a2dbe 100644 --- a/src/GPU/pair_lj_cut_coul_long_gpu.cpp +++ b/src/GPU/pair_lj_cut_coul_long_gpu.cpp @@ -152,8 +152,10 @@ void PairLJCutCoulLongGPU::init_style() if (!atom->q_flag) error->all(FLERR,"Pair style lj/cut/coul/long/gpu requires atom attribute q"); +/* if (force->newton_pair) error->all(FLERR,"Pair style lj/cut/coul/long/gpu requires newton pair off"); +*/ // Repeat cutsq calculation because done after call to init_style double maxcut = -1.0; diff --git a/src/GPU/pair_lj_cut_coul_msm_gpu.cpp b/src/GPU/pair_lj_cut_coul_msm_gpu.cpp index b19305de3a..0c064f9e62 100644 --- a/src/GPU/pair_lj_cut_coul_msm_gpu.cpp +++ b/src/GPU/pair_lj_cut_coul_msm_gpu.cpp @@ -144,8 +144,10 @@ void PairLJCutCoulMSMGPU::init_style() if (!atom->q_flag) error->all(FLERR,"Pair style lj/cut/coul/cut/gpu requires atom attribute q"); +/* if (force->newton_pair) error->all(FLERR,"Pair style lj/cut/coul/msm/gpu requires newton pair off"); +*/ if (force->kspace->scalar_pressure_flag) error->all(FLERR,"Must use 'kspace_modify pressure/scalar no' with GPU MSM Pair styles"); diff --git a/src/GPU/pair_lj_cut_dipole_cut_gpu.cpp b/src/GPU/pair_lj_cut_dipole_cut_gpu.cpp index ecfcc76f9f..2282546917 100644 --- a/src/GPU/pair_lj_cut_dipole_cut_gpu.cpp +++ b/src/GPU/pair_lj_cut_dipole_cut_gpu.cpp @@ -143,8 +143,10 @@ void PairLJCutDipoleCutGPU::init_style() if (!atom->q_flag || !atom->mu_flag || !atom->torque_flag) error->all(FLERR,"Pair dipole/cut/gpu requires atom attributes q, mu, torque"); +/* if (force->newton_pair) error->all(FLERR,"Pair style dipole/cut/gpu requires newton pair off"); +*/ if (strcmp(update->unit_style,"electron") == 0) error->all(FLERR,"Cannot (yet) use 'electron' units with dipoles"); diff --git a/src/GPU/pair_lj_cut_dipole_long_gpu.cpp b/src/GPU/pair_lj_cut_dipole_long_gpu.cpp index ced65dfd28..1caa1090ad 100644 --- a/src/GPU/pair_lj_cut_dipole_long_gpu.cpp +++ b/src/GPU/pair_lj_cut_dipole_long_gpu.cpp @@ -155,8 +155,10 @@ void PairLJCutDipoleLongGPU::init_style() if (!atom->q_flag || !atom->mu_flag || !atom->torque_flag) error->all(FLERR,"Pair dipole/cut/gpu requires atom attributes q, mu, torque"); +/* if (force->newton_pair) error->all(FLERR,"Pair style dipole/cut/gpu requires newton pair off"); +*/ if (strcmp(update->unit_style,"electron") == 0) error->all(FLERR,"Cannot (yet) use 'electron' units with dipoles"); diff --git a/src/GPU/pair_lj_cut_gpu.cpp b/src/GPU/pair_lj_cut_gpu.cpp index fd8dc8e049..24496d6d8d 100644 --- a/src/GPU/pair_lj_cut_gpu.cpp +++ b/src/GPU/pair_lj_cut_gpu.cpp @@ -135,8 +135,10 @@ void PairLJCutGPU::init_style() { cut_respa = nullptr; +/* if (force->newton_pair) error->all(FLERR,"Pair style lj/cut/gpu requires newton pair off"); +*/ // Repeat cutsq calculation because done after call to init_style double maxcut = -1.0; diff --git a/src/GPU/pair_lj_cut_tip4p_long_gpu.cpp b/src/GPU/pair_lj_cut_tip4p_long_gpu.cpp index c0716b8de4..4fe16b7a48 100644 --- a/src/GPU/pair_lj_cut_tip4p_long_gpu.cpp +++ b/src/GPU/pair_lj_cut_tip4p_long_gpu.cpp @@ -168,8 +168,10 @@ void PairLJCutTIP4PLongGPU::init_style() error->all(FLERR,"Pair style lj/cut/tip4p/long/gpu requires atom IDs"); if (!atom->q_flag) error->all(FLERR, "Pair style lj/cut/tip4p/long/gpu requires atom attribute q"); +/* if (force->newton_pair) error->all(FLERR,"Pair style lj/cut/tip4p/long/gpu requires newton pair off"); +*/ if (force->bond == nullptr) error->all(FLERR,"Must use a bond style with TIP4P potential"); if (force->angle == nullptr) diff --git a/src/GPU/pair_lj_expand_coul_long_gpu.cpp b/src/GPU/pair_lj_expand_coul_long_gpu.cpp index 5d30aff46a..051a61cb79 100644 --- a/src/GPU/pair_lj_expand_coul_long_gpu.cpp +++ b/src/GPU/pair_lj_expand_coul_long_gpu.cpp @@ -152,8 +152,10 @@ void PairLJExpandCoulLongGPU::init_style() if (!atom->q_flag) error->all(FLERR,"Pair style lj/cut/coul/long/gpu requires atom attribute q"); +/* if (force->newton_pair) error->all(FLERR,"Pair style lj/cut/coul/long/gpu requires newton pair off"); +*/ // Repeat cutsq calculation because done after call to init_style double maxcut = -1.0; diff --git a/src/GPU/pair_lj_expand_gpu.cpp b/src/GPU/pair_lj_expand_gpu.cpp index 1975241200..da125b7778 100644 --- a/src/GPU/pair_lj_expand_gpu.cpp +++ b/src/GPU/pair_lj_expand_gpu.cpp @@ -132,8 +132,10 @@ void PairLJExpandGPU::compute(int eflag, int vflag) void PairLJExpandGPU::init_style() { +/* if (force->newton_pair) error->all(FLERR,"Pair style lj/expand/gpu requires newton pair off"); +*/ // Repeat cutsq calculation because done after call to init_style double maxcut = -1.0; diff --git a/src/GPU/pair_lj_gromacs_gpu.cpp b/src/GPU/pair_lj_gromacs_gpu.cpp index e8f89f7ab9..abfc415ac5 100644 --- a/src/GPU/pair_lj_gromacs_gpu.cpp +++ b/src/GPU/pair_lj_gromacs_gpu.cpp @@ -134,8 +134,10 @@ void PairLJGromacsGPU::compute(int eflag, int vflag) void PairLJGromacsGPU::init_style() { +/* if (force->newton_pair) error->all(FLERR,"Pair style lj/gromacs/gpu requires newton pair off"); +*/ // Repeat cutsq calculation because done after call to init_style double maxcut = -1.0; diff --git a/src/GPU/pair_lj_sdk_coul_long_gpu.cpp b/src/GPU/pair_lj_sdk_coul_long_gpu.cpp index a4fa2981a4..2e9bc6619e 100644 --- a/src/GPU/pair_lj_sdk_coul_long_gpu.cpp +++ b/src/GPU/pair_lj_sdk_coul_long_gpu.cpp @@ -156,8 +156,10 @@ void PairLJSDKCoulLongGPU::init_style() { if (!atom->q_flag) error->all(FLERR,"Pair style lj/sdk/coul/long/gpu requires atom attribute q"); +/* if (force->newton_pair) error->all(FLERR,"Pair style lj/sdk/coul/long/gpu requires newton pair off"); +*/ // Repeat cutsq calculation because done after call to init_style double maxcut = -1.0; diff --git a/src/GPU/pair_lj_sdk_gpu.cpp b/src/GPU/pair_lj_sdk_gpu.cpp index 9f925d0250..6e7eeea20b 100644 --- a/src/GPU/pair_lj_sdk_gpu.cpp +++ b/src/GPU/pair_lj_sdk_gpu.cpp @@ -137,8 +137,10 @@ void PairLJSDKGPU::compute(int eflag, int vflag) void PairLJSDKGPU::init_style() { +/* if (force->newton_pair) error->all(FLERR,"Pair style lj/sdk/gpu requires newton pair off"); +*/ // Repeat cutsq calculation because done after call to init_style double maxcut = -1.0; diff --git a/src/GPU/pair_lj_sf_dipole_sf_gpu.cpp b/src/GPU/pair_lj_sf_dipole_sf_gpu.cpp index bd40f855dc..cfaede824a 100644 --- a/src/GPU/pair_lj_sf_dipole_sf_gpu.cpp +++ b/src/GPU/pair_lj_sf_dipole_sf_gpu.cpp @@ -142,8 +142,10 @@ void PairLJSFDipoleSFGPU::init_style() if (!atom->q_flag || !atom->mu_flag || !atom->torque_flag) error->all(FLERR,"Pair dipole/sf/gpu requires atom attributes q, mu, torque"); +/* if (force->newton_pair) error->all(FLERR,"Pair style dipole/sf/gpu requires newton pair off"); +*/ if (strcmp(update->unit_style,"electron") == 0) error->all(FLERR,"Cannot (yet) use 'electron' units with dipoles"); diff --git a/src/GPU/pair_lj_smooth_gpu.cpp b/src/GPU/pair_lj_smooth_gpu.cpp index 58ce6dadc6..d5ad58bd56 100644 --- a/src/GPU/pair_lj_smooth_gpu.cpp +++ b/src/GPU/pair_lj_smooth_gpu.cpp @@ -136,8 +136,10 @@ void PairLJSmoothGPU::compute(int eflag, int vflag) void PairLJSmoothGPU::init_style() { //cut_respa = nullptr; +/* if (force->newton_pair) error->all(FLERR, "Pair style lj/smooth/gpu requires newton pair off"); +*/ // Repeat cutsq calculation because done after call to init_style double maxcut = -1.0; diff --git a/src/GPU/pair_mie_cut_gpu.cpp b/src/GPU/pair_mie_cut_gpu.cpp index 568b4dbc18..abb797a723 100644 --- a/src/GPU/pair_mie_cut_gpu.cpp +++ b/src/GPU/pair_mie_cut_gpu.cpp @@ -132,8 +132,10 @@ void PairMIECutGPU::init_style() { cut_respa = nullptr; +/* if (force->newton_pair) error->all(FLERR,"Pair style mie/cut/gpu requires newton pair off"); +*/ // Repeat cutsq calculation because done after call to init_style double maxcut = -1.0; diff --git a/src/GPU/pair_morse_gpu.cpp b/src/GPU/pair_morse_gpu.cpp index 689905efb5..b89848c03a 100644 --- a/src/GPU/pair_morse_gpu.cpp +++ b/src/GPU/pair_morse_gpu.cpp @@ -128,8 +128,10 @@ void PairMorseGPU::compute(int eflag, int vflag) void PairMorseGPU::init_style() { +/* if (force->newton_pair) error->all(FLERR,"Pair style morse/gpu requires newton pair off"); +*/ // Repeat cutsq calculation because done after call to init_style double maxcut = -1.0; diff --git a/src/GPU/pair_resquared_gpu.cpp b/src/GPU/pair_resquared_gpu.cpp index 1bc83d0641..6293526cc5 100644 --- a/src/GPU/pair_resquared_gpu.cpp +++ b/src/GPU/pair_resquared_gpu.cpp @@ -159,8 +159,10 @@ void PairRESquaredGPU::compute(int eflag, int vflag) void PairRESquaredGPU::init_style() { +/* if (force->newton_pair) error->all(FLERR,"Pair style resquared/gpu requires newton pair off"); +*/ if (!atom->ellipsoid_flag) error->all(FLERR,"Pair resquared/gpu requires atom style ellipsoid"); diff --git a/src/GPU/pair_soft_gpu.cpp b/src/GPU/pair_soft_gpu.cpp index 9b6fc6a39a..45af05895f 100644 --- a/src/GPU/pair_soft_gpu.cpp +++ b/src/GPU/pair_soft_gpu.cpp @@ -133,8 +133,10 @@ void PairSoftGPU::compute(int eflag, int vflag) void PairSoftGPU::init_style() { +/* if (force->newton_pair) error->all(FLERR,"Pair style soft/gpu requires newton pair off"); +*/ // Repeat cutsq calculation because done after call to init_style double maxcut = -1.0; diff --git a/src/GPU/pair_sw_gpu.cpp b/src/GPU/pair_sw_gpu.cpp index d4b322c0a0..c4ffeb0a12 100644 --- a/src/GPU/pair_sw_gpu.cpp +++ b/src/GPU/pair_sw_gpu.cpp @@ -148,8 +148,10 @@ void PairSWGPU::init_style() if (atom->tag_enable == 0) error->all(FLERR,"Pair style sw/gpu requires atom IDs"); +/* if (force->newton_pair != 0) error->all(FLERR,"Pair style sw/gpu requires newton pair off"); +*/ double **c1, **c2, **c3, **c4, **c5, **c6; double **ncutsq, **ncut, **sigma, **powerp, **powerq, **sigma_gamma; diff --git a/src/GPU/pair_table_gpu.cpp b/src/GPU/pair_table_gpu.cpp index 2849a66085..f6d1b83204 100644 --- a/src/GPU/pair_table_gpu.cpp +++ b/src/GPU/pair_table_gpu.cpp @@ -132,8 +132,10 @@ void PairTableGPU::compute(int eflag, int vflag) void PairTableGPU::init_style() { +/* if (force->newton_pair) error->all(FLERR,"Pair style table/gpu requires newton pair off"); +*/ int ntypes = atom->ntypes; diff --git a/src/GPU/pair_tersoff_gpu.cpp b/src/GPU/pair_tersoff_gpu.cpp index 7b3f953840..3e3e812018 100644 --- a/src/GPU/pair_tersoff_gpu.cpp +++ b/src/GPU/pair_tersoff_gpu.cpp @@ -154,8 +154,10 @@ void PairTersoffGPU::init_style() if (atom->tag_enable == 0) error->all(FLERR,"Pair style tersoff/gpu requires atom IDs"); +/* if (force->newton_pair != 0) error->all(FLERR,"Pair style tersoff/gpu requires newton pair off"); +*/ double *lam1, *lam2, *lam3, *powermint; double *biga, *bigb, *bigr, *bigd; diff --git a/src/GPU/pair_tersoff_mod_gpu.cpp b/src/GPU/pair_tersoff_mod_gpu.cpp index 4f3f769d89..cce1e18006 100644 --- a/src/GPU/pair_tersoff_mod_gpu.cpp +++ b/src/GPU/pair_tersoff_mod_gpu.cpp @@ -148,8 +148,10 @@ void PairTersoffMODGPU::init_style() if (atom->tag_enable == 0) error->all(FLERR,"Pair style tersoff/mod/gpu requires atom IDs"); +/* if (force->newton_pair != 0) error->all(FLERR,"Pair style tersoff/mod/gpu requires newton pair off"); +*/ double *lam1, *lam2, *lam3, *powermint; double *biga, *bigb, *bigr, *bigd; diff --git a/src/GPU/pair_tersoff_zbl_gpu.cpp b/src/GPU/pair_tersoff_zbl_gpu.cpp index 7139e07f7d..3b0e876ca8 100644 --- a/src/GPU/pair_tersoff_zbl_gpu.cpp +++ b/src/GPU/pair_tersoff_zbl_gpu.cpp @@ -155,8 +155,10 @@ void PairTersoffZBLGPU::init_style() if (atom->tag_enable == 0) error->all(FLERR,"Pair style tersoff/zbl/gpu requires atom IDs"); +/* if (force->newton_pair != 0) error->all(FLERR,"Pair style tersoff/zbl/gpu requires newton pair off"); +*/ double *lam1, *lam2, *lam3, *powermint; double *biga, *bigb, *bigr, *bigd; diff --git a/src/GPU/pair_ufm_gpu.cpp b/src/GPU/pair_ufm_gpu.cpp index 25019b7b5d..01d8675f9a 100644 --- a/src/GPU/pair_ufm_gpu.cpp +++ b/src/GPU/pair_ufm_gpu.cpp @@ -136,8 +136,10 @@ void PairUFMGPU::init_style() { // cut_respa = nullptr; +/* if (force->newton_pair) error->all(FLERR,"Pair style ufm/gpu requires newton pair off"); +*/ // Repeat cutsq calculation because done after call to init_style double maxcut = -1.0; diff --git a/src/GPU/pair_vashishta_gpu.cpp b/src/GPU/pair_vashishta_gpu.cpp index 277ac036cd..6cab954c10 100644 --- a/src/GPU/pair_vashishta_gpu.cpp +++ b/src/GPU/pair_vashishta_gpu.cpp @@ -156,8 +156,10 @@ void PairVashishtaGPU::init_style() if (atom->tag_enable == 0) error->all(FLERR,"Pair style vashishta/gpu requires atom IDs"); +/* if (force->newton_pair != 0) error->all(FLERR,"Pair style vashishta/gpu requires newton pair off"); +*/ double *cutsq, *r0, *gamma, *eta; double *lam1inv, *lam4inv, *zizj, *mbigd; diff --git a/src/GPU/pair_yukawa_colloid_gpu.cpp b/src/GPU/pair_yukawa_colloid_gpu.cpp index 1b13f4d5be..0505eac4bd 100644 --- a/src/GPU/pair_yukawa_colloid_gpu.cpp +++ b/src/GPU/pair_yukawa_colloid_gpu.cpp @@ -141,8 +141,10 @@ void PairYukawaColloidGPU::init_style() if (!atom->sphere_flag) error->all(FLERR,"Pair yukawa/colloid/gpu requires atom style sphere"); +/* if (force->newton_pair) error->all(FLERR,"Pair style yukawa/colloid/gpu requires newton pair off"); +*/ // Repeat cutsq calculation because done after call to init_style double maxcut = -1.0; diff --git a/src/GPU/pair_yukawa_gpu.cpp b/src/GPU/pair_yukawa_gpu.cpp index cc5ef44adc..336efd5d40 100644 --- a/src/GPU/pair_yukawa_gpu.cpp +++ b/src/GPU/pair_yukawa_gpu.cpp @@ -130,8 +130,10 @@ void PairYukawaGPU::compute(int eflag, int vflag) void PairYukawaGPU::init_style() { +/* if (force->newton_pair) error->all(FLERR,"Pair style yukawa/gpu requires newton pair off"); +*/ // Repeat cutsq calculation because done after call to init_style double maxcut = -1.0; diff --git a/src/GPU/pair_zbl_gpu.cpp b/src/GPU/pair_zbl_gpu.cpp index 1bff770c95..3552e0127a 100644 --- a/src/GPU/pair_zbl_gpu.cpp +++ b/src/GPU/pair_zbl_gpu.cpp @@ -132,8 +132,10 @@ void PairZBLGPU::compute(int eflag, int vflag) void PairZBLGPU::init_style() { +/* if (force->newton_pair) error->all(FLERR,"Pair style zbl/gpu requires newton pair off"); +*/ // Repeat cutsq calculation because done after call to init_style double maxcut = -1.0; From 904a2ef91067d8502d1e928551eabcb9645b8e38 Mon Sep 17 00:00:00 2001 From: Trung Nguyen Date: Thu, 19 Aug 2021 22:54:06 -0500 Subject: [PATCH 002/372] Reverted the default setting of newton_pair off for FixGPU; newton_pair can be set to be on via command-line options of package gpu --- src/GPU/fix_gpu.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/GPU/fix_gpu.cpp b/src/GPU/fix_gpu.cpp index 66b938c577..1c6d2655ba 100644 --- a/src/GPU/fix_gpu.cpp +++ b/src/GPU/fix_gpu.cpp @@ -127,7 +127,7 @@ FixGPU::FixGPU(LAMMPS *lmp, int narg, char **arg) : _gpu_mode = GPU_NEIGH; _particle_split = 1.0; int nthreads = 0; - int newtonflag = force->newton_pair; + int newtonflag = 0; int threads_per_atom = -1; double binsize = 0.0; char *opencl_args = nullptr; From 8b9dd6b0c1c4a57110899858733ccc12a24ad19d Mon Sep 17 00:00:00 2001 From: Stan Gerald Moore Date: Wed, 8 Sep 2021 15:06:23 -0600 Subject: [PATCH 003/372] Add ACKS2 charge equilibration method to REAXFF and support for electric fields in QEq --- doc/src/fix_acks2_reaxff.rst | 97 ++ doc/src/pair_reaxff.rst | 11 +- src/.gitignore | 2 + src/KOKKOS/Install.sh | 2 + src/KOKKOS/fix_acks2_reaxff_kokkos.cpp | 1930 ++++++++++++++++++++++++ src/KOKKOS/fix_acks2_reaxff_kokkos.h | 368 +++++ src/KOKKOS/fix_qeq_reaxff_kokkos.cpp | 24 +- src/KOKKOS/fix_qeq_reaxff_kokkos.h | 5 +- src/KOKKOS/kokkos.h | 4 +- src/KOKKOS/pair_reaxff_kokkos.cpp | 135 +- src/KOKKOS/pair_reaxff_kokkos.h | 10 +- src/OPENMP/pair_reaxff_omp.cpp | 14 +- src/OPENMP/reaxff_nonbonded_omp.cpp | 4 +- src/REAXFF/fix_acks2_reaxff.cpp | 1091 ++++++++++++++ src/REAXFF/fix_acks2_reaxff.h | 90 ++ src/REAXFF/fix_qeq_reaxff.cpp | 58 +- src/REAXFF/fix_qeq_reaxff.h | 9 +- src/REAXFF/pair_reaxff.cpp | 33 +- src/REAXFF/pair_reaxff.h | 2 +- src/REAXFF/reaxff_api.h | 2 +- src/REAXFF/reaxff_ffield.cpp | 1 + src/REAXFF/reaxff_nonbonded.cpp | 166 +- src/REAXFF/reaxff_types.h | 5 + src/fix_efield.cpp | 73 +- src/fix_efield.h | 5 +- 25 files changed, 4090 insertions(+), 51 deletions(-) create mode 100644 doc/src/fix_acks2_reaxff.rst create mode 100644 src/KOKKOS/fix_acks2_reaxff_kokkos.cpp create mode 100644 src/KOKKOS/fix_acks2_reaxff_kokkos.h create mode 100644 src/REAXFF/fix_acks2_reaxff.cpp create mode 100644 src/REAXFF/fix_acks2_reaxff.h diff --git a/doc/src/fix_acks2_reaxff.rst b/doc/src/fix_acks2_reaxff.rst new file mode 100644 index 0000000000..d4b176ad22 --- /dev/null +++ b/doc/src/fix_acks2_reaxff.rst @@ -0,0 +1,97 @@ +.. index:: fix acks2/reaxff + +fix acks2/reaxff command +==================== + +Syntax +"""""" + +.. parsed-literal:: + + fix ID group-ID acks2/reaxff Nevery cutlo cuthi tolerance params args + +* ID, group-ID are documented in :doc:`fix ` command +* acks2/reaxff = style name of this fix command +* Nevery = perform QEq every this many steps +* cutlo,cuthi = lo and hi cutoff for Taper radius +* tolerance = precision to which charges will be equilibrated +* params = reaxff or a filename + +Examples +"""""""" + +.. code-block:: LAMMPS + + fix 1 all acks2/reaxff 1 0.0 10.0 1.0e-6 reaxff + fix 1 all acks2/reaxff 1 0.0 10.0 1.0e-6 param.acks2 + +Description +""""""""""" + +Perform the charge equilibration (QEq) method as described in :ref:`(Verstraelen) `. It is +typically used in conjunction with the ReaxFF force field model as +implemented in the :doc:`pair_style reaxff ` command, but +it can be used with any potential in LAMMPS, so long as it defines and +uses charges on each atom. For more technical details about the +charge equilibration performed by fix acks2/reaxff, see the +:ref:`(O'Hearn) ` paper. + +The QEq method minimizes the electrostatic energy of the system by +adjusting the partial charge on individual atoms based on interactions +with their neighbors. It requires some parameters for each atom type. +If the *params* setting above is the word "reaxff", then these are +extracted from the :doc:`pair_style reaxff ` command and +the ReaxFF force field file it reads in. If a file name is specified +for *params*\ , then the parameters are taken from the specified file +and the file must contain one line for each atom type. The latter +form must be used when performing QeQ with a non-ReaxFF potential. +Each line should be formatted as follows: + +.. parsed-literal:: + + bond_softness + itype chi eta gamma bcut + +where the first line is the global parameter *bond_softness*. The remaining +1 to Ntypes lines include *itype*, the atom type from 1 to Ntypes, *chi*, the +electronegativity in eV, *eta*, the self-Coulomb +potential in eV, *gamma*, the valence orbital +exponent, and *bcut*, the bond cutoff distance. Note that these 4 quantities are also in the ReaxFF +potential file, except that eta is defined here as twice the eta value +in the ReaxFF file. Note that unlike the rest of LAMMPS, the units +of this fix are hard-coded to be A, eV, and electronic charge. + +**Restart, fix_modify, output, run start/stop, minimize info:** + +No information about this fix is written to :doc:`binary restart files `. No global scalar or vector or per-atom +quantities are stored by this fix for access by various :doc:`output commands `. No parameter of this fix can be used +with the *start/stop* keywords of the :doc:`run ` command. + +This fix is invoked during :doc:`energy minimization `. + +Restrictions +"""""""""""" + +This fix is part of the REAXFF package. It is only enabled if +LAMMPS was built with that package. See the :doc:`Build package ` doc page for more info. + +This fix does not correctly handle interactions +involving multiple periodic images of the same atom. Hence, it should not +be used for periodic cell dimensions less than 10 angstroms. + +Related commands +"""""""""""""""" + +:doc:`pair_style reaxff ` + +**Default:** none + +---------- + +.. _O'Hearn: + +**(O'Hearn)** O'Hearn, Alperen, Aktulga, SIAM J. Sci. Comput., 42(1), C1–C22 (2020). + +.. _Verstraelen: + +**(Verstraelen)** Verstraelen, Ayers, Speybroeck, Waroquier, J. Chem. Phys. 138, 074108 (2013). diff --git a/doc/src/pair_reaxff.rst b/doc/src/pair_reaxff.rst index a3a9c81cb8..be49f565c2 100644 --- a/doc/src/pair_reaxff.rst +++ b/doc/src/pair_reaxff.rst @@ -20,7 +20,7 @@ Syntax .. parsed-literal:: keyword = *checkqeq* or *lgvdw* or *safezone* or *mincap* or *minhbonds* - *checkqeq* value = *yes* or *no* = whether or not to require qeq/reaxff fix + *checkqeq* value = *yes* or *no* = whether or not to require qeq/reaxff or acks2/reax fix *enobonds* value = *yes* or *no* = whether or not to tally energy of atoms with no bonds *lgvdw* value = *yes* or *no* = whether or not to use a low gradient vdW correction *safezone* = factor used for array allocation @@ -119,7 +119,8 @@ The ReaxFF parameter files provided were created using a charge equilibration (QEq) model for handling the electrostatic interactions. Therefore, by default, LAMMPS requires that either the :doc:`fix qeq/reaxff ` or the -:doc:`fix qeq/shielded ` command be used with +:doc:`fix qeq/shielded ` or :doc:`fix acks2/reaxff ` +command be used with *pair_style reaxff* when simulating a ReaxFF model, to equilibrate the charges each timestep. @@ -128,7 +129,8 @@ for the QEq fixes, allowing a simulation to be run without charge equilibration. In this case, the static charges you assign to each atom will be used for computing the electrostatic interactions in the system. See the :doc:`fix qeq/reaxff ` or -:doc:`fix qeq/shielded ` command documentation for more details. +:doc:`fix qeq/shielded ` or :doc:`fix acks2/reaxff ` +command documentation for more details. Using the optional keyword *lgvdw* with the value *yes* turns on the low-gradient correction of ReaxFF for long-range London Dispersion, @@ -352,7 +354,8 @@ Related commands """""""""""""""" :doc:`pair_coeff `, :doc:`fix qeq/reaxff `, -:doc:`fix reaxff/bonds `, :doc:`fix reaxff/species ` +:doc:`fix acks2/reax `, :doc:`fix reaxff/bonds `, +:doc:`fix reaxff/species ` Default """"""" diff --git a/src/.gitignore b/src/.gitignore index 6c0a838c1b..2fc68c0e5d 100644 --- a/src/.gitignore +++ b/src/.gitignore @@ -613,6 +613,8 @@ /fft3d_wrap.h /fix_accelerate_cos.cpp /fix_accelerate_cos.h +/fix_acks2_reaxff.cpp +/fix_acks2_reaxff.h /fix_adapt_fep.cpp /fix_adapt_fep.h /fix_addtorque.cpp diff --git a/src/KOKKOS/Install.sh b/src/KOKKOS/Install.sh index e23dd11500..412cae72a4 100755 --- a/src/KOKKOS/Install.sh +++ b/src/KOKKOS/Install.sh @@ -109,6 +109,8 @@ action domain_kokkos.h action fftdata_kokkos.h fft3d.h action fft3d_kokkos.cpp fft3d.cpp action fft3d_kokkos.h fft3d.h +action fix_acks2_reaxff_kokkos.cpp fix_acks2_reaxff.cpp +action fix_acks2_reaxff_kokkos.h fix_acks2_reaxff.h action fix_deform_kokkos.cpp action fix_deform_kokkos.h action fix_enforce2d_kokkos.cpp diff --git a/src/KOKKOS/fix_acks2_reaxff_kokkos.cpp b/src/KOKKOS/fix_acks2_reaxff_kokkos.cpp new file mode 100644 index 0000000000..c4b6a6b931 --- /dev/null +++ b/src/KOKKOS/fix_acks2_reaxff_kokkos.cpp @@ -0,0 +1,1930 @@ +/* ---------------------------------------------------------------------- + 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: Stan Moore (SNL) +------------------------------------------------------------------------- */ + +#include "fix_acks2_reaxff_kokkos.h" +#include +#include "kokkos.h" +#include "atom.h" +#include "atom_masks.h" +#include "atom_kokkos.h" +#include "comm.h" +#include "force.h" +#include "neighbor.h" +#include "neigh_list_kokkos.h" +#include "neigh_request.h" +#include "update.h" +#include "integrate.h" +#include "memory_kokkos.h" +#include "error.h" +#include "pair_reaxff_kokkos.h" + +using namespace LAMMPS_NS; +using namespace FixConst; + +#define SMALL 0.0001 +#define EV_TO_KCAL_PER_MOL 14.4 + +/* ---------------------------------------------------------------------- */ + +template +FixACKS2ReaxFFKokkos:: +FixACKS2ReaxFFKokkos(LAMMPS *lmp, int narg, char **arg) : + FixACKS2ReaxFF(lmp, narg, arg) +{ + kokkosable = 1; + atomKK = (AtomKokkos *) atom; + execution_space = ExecutionSpaceFromDevice::space; + + datamask_read = X_MASK | V_MASK | F_MASK | MASK_MASK | Q_MASK | TYPE_MASK | TAG_MASK; + datamask_modify = Q_MASK | X_MASK; + + nmax = m_cap = 0; + allocated_flag = 0; + nprev = 4; + + memory->destroy(s_hist); + memory->destroy(s_hist_X); + memory->destroy(s_hist_last); + grow_arrays(atom->nmax); + memoryKK->create_kokkos(k_s_hist_last,s_hist_last,2,nprev,"acks2/reax:s_hist_last"); + d_s_hist_last = k_s_hist_last.template view(); + + d_mfill_offset = typename AT::t_int_scalar("acks2/kk:mfill_offset"); + + comm_me_0_flag = (comm->me == 0); +} + +/* ---------------------------------------------------------------------- */ + +template +FixACKS2ReaxFFKokkos::~FixACKS2ReaxFFKokkos() +{ + if (copymode) return; + + memoryKK->destroy_kokkos(k_s_hist,s_hist); + memoryKK->destroy_kokkos(k_s_hist_X,s_hist_X); + memoryKK->destroy_kokkos(k_s_hist_last,s_hist_last); + + deallocate_array(); +} + +/* ---------------------------------------------------------------------- */ + +template +void FixACKS2ReaxFFKokkos::init() +{ + atomKK->k_q.modify(); + atomKK->k_q.sync(); + + FixACKS2ReaxFF::init(); + + neighflag = lmp->kokkos->neighflag_qeq; + int irequest = neighbor->nrequest - 1; + + neighbor->requests[irequest]-> + kokkos_host = std::is_same::value && + !std::is_same::value; + neighbor->requests[irequest]-> + kokkos_device = std::is_same::value; + + if (neighflag == FULL) { + neighbor->requests[irequest]->fix = 1; + neighbor->requests[irequest]->pair = 0; + neighbor->requests[irequest]->full = 1; + neighbor->requests[irequest]->half = 0; + } else { //if (neighflag == HALF || neighflag == HALFTHREAD) + neighbor->requests[irequest]->fix = 1; + neighbor->requests[irequest]->pair = 0; + neighbor->requests[irequest]->full = 0; + neighbor->requests[irequest]->half = 1; + neighbor->requests[irequest]->ghost = 1; + } + + int ntypes = atom->ntypes; + k_params = Kokkos::DualView + ("FixACKS2ReaxFF::params",ntypes+1); + params = k_params.template view(); + + for (int n = 1; n <= ntypes; n++) { + k_params.h_view(n).chi = chi[n]; + k_params.h_view(n).eta = eta[n]; + k_params.h_view(n).gamma = gamma[n]; + k_params.h_view(n).bcut_acks2 = bcut_acks2[n]; + } + k_params.template modify(); + + cutsq = swb * swb; + + init_shielding_k(); + init_hist(); +} + +/* ---------------------------------------------------------------------- */ + +template +void FixACKS2ReaxFFKokkos::init_shielding_k() +{ + int i,j; + int ntypes = atom->ntypes; + + k_shield = DAT::tdual_ffloat_2d("acks2/kk:shield",ntypes+1,ntypes+1); + d_shield = k_shield.template view(); + + for( i = 1; i <= ntypes; ++i ) + for( j = 1; j <= ntypes; ++j ) + k_shield.h_view(i,j) = pow( gamma[i] * gamma[j], -1.5 ); + + k_shield.template modify(); + k_shield.template sync(); + + k_bcut = DAT::tdual_ffloat_2d("acks2/kk:bcut",ntypes+1,ntypes+1); + d_bcut = k_bcut.template view(); + + for( i = 1; i <= ntypes; ++i ) + for( j = 1; j <= ntypes; ++j ) + k_bcut.h_view(i,j) = 0.5*(bcut_acks2[i] + bcut_acks2[j]); + + k_bcut.template modify(); + k_bcut.template sync(); + + k_tap = DAT::tdual_ffloat_1d("acks2/kk:tap",8); + d_tap = k_tap.template view(); + + for (i = 0; i < 8; i ++) + k_tap.h_view(i) = Tap[i]; + + k_tap.template modify(); + k_tap.template sync(); +} + +/* ---------------------------------------------------------------------- */ + +template +void FixACKS2ReaxFFKokkos::init_hist() +{ + k_s_hist.clear_sync_state(); + k_s_hist_X.clear_sync_state(); + k_s_hist_last.clear_sync_state(); + + Kokkos::deep_copy(d_s_hist,0.0); + Kokkos::deep_copy(d_s_hist_X,0.0); + Kokkos::deep_copy(d_s_hist_last,0.0); + + k_s_hist.template modify(); + k_s_hist_X.template modify(); + k_s_hist_last.template modify(); +} + +/* ---------------------------------------------------------------------- */ + +template +void FixACKS2ReaxFFKokkos::setup_pre_force(int vflag) +{ + pre_force(vflag); +} + +/* ---------------------------------------------------------------------- */ + +template +void FixACKS2ReaxFFKokkos::pre_force(int vflag) +{ + if (update->ntimestep % nevery) return; + + atomKK->sync(execution_space,datamask_read); + + x = atomKK->k_x.view(); + v = atomKK->k_v.view(); + f = atomKK->k_f.view(); + q = atomKK->k_q.view(); + tag = atomKK->k_tag.view(); + type = atomKK->k_type.view(); + mask = atomKK->k_mask.view(); + nlocal = atomKK->nlocal; + nall = atom->nlocal + atom->nghost; + newton_pair = force->newton_pair; + + k_params.template sync(); + k_shield.template sync(); + k_bcut.template sync(); + k_tap.template sync(); + + NeighListKokkos* k_list = static_cast*>(list); + d_numneigh = k_list->d_numneigh; + d_neighbors = k_list->d_neighbors; + d_ilist = k_list->d_ilist; + + nn = list->inum; + NN = list->inum + list->gnum; + + copymode = 1; + + // allocate + + allocate_array(); + + // get max number of neighbor + + if (!allocated_flag || last_allocate < neighbor->lastcall) { + allocate_matrix(); + last_allocate = update->ntimestep; + } + + // compute_H + + if (execution_space == Host) { // CPU + if (neighflag == FULL) { + FixACKS2ReaxFFKokkosComputeHFunctor computeH_functor(this); + Kokkos::parallel_scan(nn,computeH_functor); + } else { // HALF and HALFTHREAD are the same + FixACKS2ReaxFFKokkosComputeHFunctor computeH_functor(this); + Kokkos::parallel_scan(nn,computeH_functor); + } + } else { // GPU, use teams + Kokkos::deep_copy(d_mfill_offset,0); + + int vector_length = 32; + int atoms_per_team = 4; + int num_teams = nn / atoms_per_team + (nn % atoms_per_team ? 1 : 0); + + Kokkos::TeamPolicy policy(num_teams, atoms_per_team, + vector_length); + + if (neighflag == FULL) { + FixACKS2ReaxFFKokkosComputeHFunctor computeH_functor( + this, atoms_per_team, vector_length); + Kokkos::parallel_for(policy, computeH_functor); + } else { // HALF and HALFTHREAD are the same + FixACKS2ReaxFFKokkosComputeHFunctor computeH_functor( + this, atoms_per_team, vector_length); + Kokkos::parallel_for(policy, computeH_functor); + } + } + + need_dup = lmp->kokkos->need_dup(1); + + if (need_dup) + dup_X_diag = Kokkos::Experimental::create_scatter_view (d_X_diag); // allocate duplicated memory + else + ndup_X_diag = Kokkos::Experimental::create_scatter_view (d_X_diag); + + // compute_X + + Kokkos::deep_copy(d_X_diag,0.0); + + if (execution_space == Host || 1) { // CPU + if (neighflag == FULL) { + FixACKS2ReaxFFKokkosComputeXFunctor computeX_functor(this); + Kokkos::parallel_scan(nn,computeX_functor); + } else if (neighflag == HALFTHREAD) { + FixACKS2ReaxFFKokkosComputeXFunctor computeX_functor(this); + Kokkos::parallel_scan(nn,computeX_functor); + } else { + FixACKS2ReaxFFKokkosComputeXFunctor computeX_functor(this); + Kokkos::parallel_scan(nn,computeX_functor); + } + } else { // GPU, use teams + Kokkos::deep_copy(d_mfill_offset,0); + + int vector_length = 32; + int atoms_per_team = 4; + int num_teams = nn / atoms_per_team + (nn % atoms_per_team ? 1 : 0); + + Kokkos::TeamPolicy policy(num_teams, atoms_per_team, + vector_length); + if (neighflag == FULL) { + FixACKS2ReaxFFKokkosComputeXFunctor computeX_functor( + this, atoms_per_team, vector_length); + Kokkos::parallel_for(policy, computeX_functor); + } else if (neighflag == HALFTHREAD) { + FixACKS2ReaxFFKokkosComputeXFunctor computeX_functor( + this, atoms_per_team, vector_length); + Kokkos::parallel_for(policy, computeX_functor); + } else { + FixACKS2ReaxFFKokkosComputeXFunctor computeX_functor( + this, atoms_per_team, vector_length); + Kokkos::parallel_for(policy, computeX_functor); + } + } + + if (need_dup) { + Kokkos::Experimental::contribute(d_X_diag, dup_X_diag); + + // free duplicated memory + + dup_X_diag = decltype(dup_X_diag)(); + } + + if (neighflag != FULL) { + pack_flag = 4; + //comm->reverse_comm_fix(this); //Coll_Vector( X_diag ); + k_X_diag.template modify(); + k_X_diag.template sync(); + comm->reverse_comm_fix(this); + k_X_diag.template modify(); + k_X_diag.template sync(); + } + + if (field_flag) + get_chi_field(); + + // init_matvec + + k_s_hist.template sync(); + k_s_hist_X.template sync(); + k_s_hist_last.template sync(); + Kokkos::parallel_for(Kokkos::RangePolicy(0,nn),*this); + + pack_flag = 2; + // comm->forward_comm_fix(this); //Dist_vector( s ); + k_s.template modify(); + k_s.template sync(); + comm->forward_comm_fix(this); + more_forward_comm(k_s.h_view.data()); + k_s.template modify(); + k_s.template sync(); + + // bicgstab solve over b_s, s + + bicgstab_solve(); + + calculate_Q(); + + k_s_hist.template modify(); + k_s_hist_X.template modify(); + k_s_hist_last.template modify(); + + copymode = 0; + + if (!allocated_flag) + allocated_flag = 1; + + atomKK->modified(execution_space,datamask_modify); + k_s.modify(); +} + +/* ---------------------------------------------------------------------- */ + +template +KOKKOS_INLINE_FUNCTION +void FixACKS2ReaxFFKokkos::num_neigh_item(int ii, int &maxneigh) const +{ + const int i = d_ilist[ii]; + maxneigh += d_numneigh[i]; +} + +/* ---------------------------------------------------------------------- */ + +template +void FixACKS2ReaxFFKokkos::allocate_matrix() +{ + nmax = atom->nmax; + + // determine the total space for the H matrix + + m_cap = 0; + FixACKS2ReaxFFKokkosNumNeighFunctor neigh_functor(this); + Kokkos::parallel_reduce(nn,neigh_functor,m_cap); + + // H matrix + + d_firstnbr = typename AT::t_int_1d("acks2/kk:firstnbr",nmax); + d_numnbrs = typename AT::t_int_1d("acks2/kk:numnbrs",nmax); + d_jlist = typename AT::t_int_1d("acks2/kk:jlist",m_cap); + d_val = typename AT::t_ffloat_1d("acks2/kk:val",m_cap); + + // X matrix + + d_firstnbr_X = typename AT::t_int_1d("acks2/kk:firstnbr_X",nmax); + d_numnbrs_X = typename AT::t_int_1d("acks2/kk:numnbrs_X",nmax); + d_jlist_X = typename AT::t_int_1d("acks2/kk:jlist_X",m_cap); + d_val_X = typename AT::t_ffloat_1d("acks2/kk:val_X",m_cap); +} + +/* ---------------------------------------------------------------------- */ + +template +void FixACKS2ReaxFFKokkos::allocate_array() +{ + // 0 to nn-1: owned atoms related to H matrix + // nn to NN-1: ghost atoms related to H matrix + // NN to NN+nn-1: owned atoms related to X matrix + // NN+nn to 2*NN-1: ghost atoms related X matrix + // 2*NN to 2*NN+1: last two rows, owned by proc 0 + + if (atom->nmax > nmax) { + nmax = atom->nmax; + int size = nmax*2 + 2; + + d_q = typename AT::t_ffloat_1d("acks2/kk:q",size); + + memoryKK->create_kokkos(k_s,s,size,"acks2/kk:s"); + d_s = k_s.template view(); + + d_b_s = typename AT::t_ffloat_1d("acks2/kk:b_s",size); + + d_Hdia_inv = typename AT::t_ffloat_1d("acks2/kk:Hdia_inv",nmax); + + memoryKK->create_kokkos(k_chi_field,chi_field,nmax,"acks2/kk:chi_field"); + d_chi_field = k_chi_field.template view(); + + memoryKK->create_kokkos(k_X_diag,X_diag,nmax,"acks2/kk:X_diag"); + d_X_diag = k_X_diag.template view(); + + d_Xdia_inv = typename AT::t_ffloat_1d("acks2/kk:Xdia_inv",nmax); + + d_p = typename AT::t_ffloat_1d("acks2/kk:p",size); + d_r = typename AT::t_ffloat_1d("acks2/kk:r",size); + + memoryKK->create_kokkos(k_d,d,size,"acks2/kk:d"); + d_d = k_d.template view(); + + d_g = typename AT::t_ffloat_1d("acks2/kk:g",size); + + memoryKK->create_kokkos(k_q_hat,q_hat,size,"acks2/kk:q_hat"); + d_q_hat = k_q_hat.template view(); + + d_r_hat = typename AT::t_ffloat_1d("acks2/kk:r_hat",size); + + memoryKK->create_kokkos(k_y,y,size,"acks2/kk:y"); + d_y = k_y.template view(); + + memoryKK->create_kokkos(k_z,z,size,"acks2/kk:z"); + d_z = k_z.template view(); + } + + if (field_flag) + get_chi_field(); + + // init_storage + Kokkos::parallel_for(Kokkos::RangePolicy(0,NN),*this); + +} + +/* ---------------------------------------------------------------------- */ + +template +void FixACKS2ReaxFFKokkos::deallocate_array() +{ + memoryKK->destroy_kokkos(k_s,s); + memoryKK->destroy_kokkos(k_chi_field,chi_field); + memoryKK->destroy_kokkos(X_diag); + memoryKK->destroy_kokkos(k_d,d); + memoryKK->destroy_kokkos(k_q_hat,q_hat); + memoryKK->destroy_kokkos(k_y,y); + memoryKK->destroy_kokkos(k_z,z); +} + +/* ---------------------------------------------------------------------- */ + +template +KOKKOS_INLINE_FUNCTION +void FixACKS2ReaxFFKokkos::operator() (TagACKS2Zero, const int &ii) const +{ + const int i = d_ilist[ii]; + const int itype = type(i); + + if (mask[i] & groupbit) { + d_Hdia_inv[i] = 1.0 / params(itype).eta; + d_b_s[i] = -params(itype).chi - d_chi_field[i]; + d_s[i] = 0.0; + d_p[i] = 0.0; + d_r[i] = 0.0; + d_d[i] = 0.0; + } + +} + +/* ---------------------------------------------------------------------- */ + +template +template +KOKKOS_INLINE_FUNCTION +void FixACKS2ReaxFFKokkos::compute_h_item(int ii, int &m_fill, const bool &final) const +{ + const int i = d_ilist[ii]; + int j,jj,jtype; + + if (mask[i] & groupbit) { + + const X_FLOAT xtmp = x(i,0); + const X_FLOAT ytmp = x(i,1); + const X_FLOAT ztmp = x(i,2); + const int itype = type(i); + const tagint itag = tag(i); + const int jnum = d_numneigh[i]; + if (final) + d_firstnbr[i] = m_fill; + + for (jj = 0; jj < jnum; jj++) { + j = d_neighbors(i,jj); + j &= NEIGHMASK; + jtype = type(j); + + const X_FLOAT delx = x(j,0) - xtmp; + const X_FLOAT dely = x(j,1) - ytmp; + const X_FLOAT delz = x(j,2) - ztmp; + + if (NEIGHFLAG != FULL) { + // skip half of the interactions + const tagint jtag = tag(j); + if (j >= nlocal) { + if (itag > jtag) { + if ((itag+jtag) % 2 == 0) continue; + } else if (itag < jtag) { + if ((itag+jtag) % 2 == 1) continue; + } else { + if (x(j,2) < ztmp) continue; + if (x(j,2) == ztmp && x(j,1) < ytmp) continue; + if (x(j,2) == ztmp && x(j,1) == ytmp && x(j,0) < xtmp) continue; + } + } + } + + const F_FLOAT rsq = delx*delx + dely*dely + delz*delz; + if (rsq > cutsq) continue; + + if (final) { + const F_FLOAT r = sqrt(rsq); + d_jlist(m_fill) = j; + const F_FLOAT shldij = d_shield(itype,jtype); + d_val(m_fill) = calculate_H_k(r,shldij); + } + m_fill++; + } + if (final) + d_numnbrs[i] = m_fill - d_firstnbr[i]; + } +} + +/* ---------------------------------------------------------------------- */ + +// Calculate Qeq matrix H where H is a sparse matrix and H[i][j] represents the electrostatic interaction coefficients on atom-i with atom-j +// d_val - contains the non-zero entries of sparse matrix H +// d_numnbrs - d_numnbrs[i] contains the # of non-zero entries in the i-th row of H (which also represents the # of neighbor atoms with electrostatic interaction coefficients with atom-i) +// d_firstnbr- d_firstnbr[i] contains the beginning index from where the H matrix entries corresponding to row-i is stored in d_val +// d_jlist - contains the column index corresponding to each entry in d_val + +template +template +void FixACKS2ReaxFFKokkos::compute_h_team( + const typename Kokkos::TeamPolicy::member_type &team, + int atoms_per_team, int vector_length) const { + + // scratch space setup + Kokkos::View, + Kokkos::MemoryTraits> + s_ilist(team.team_shmem(), atoms_per_team); + Kokkos::View, + Kokkos::MemoryTraits> + s_numnbrs(team.team_shmem(), atoms_per_team); + Kokkos::View, + Kokkos::MemoryTraits> + s_firstnbr(team.team_shmem(), atoms_per_team); + + Kokkos::View, + Kokkos::MemoryTraits> + s_jtype(team.team_shmem(), atoms_per_team, vector_length); + Kokkos::View, + Kokkos::MemoryTraits> + s_jlist(team.team_shmem(), atoms_per_team, vector_length); + Kokkos::View, + Kokkos::MemoryTraits> + s_r(team.team_shmem(), atoms_per_team, vector_length); + + // team of threads work on atoms with index in [firstatom, lastatom) + int firstatom = team.league_rank() * atoms_per_team; + int lastatom = + (firstatom + atoms_per_team < nn) ? (firstatom + atoms_per_team) : nn; + + // kokkos-thread-0 is used to load info from global memory into scratch space + if (team.team_rank() == 0) { + + // copy atom indices from d_ilist[firstatom:lastatom] to scratch space s_ilist[0:atoms_per_team] + // copy # of neighbor atoms for all the atoms with indices in d_ilist[firstatom:lastatom] from d_numneigh to scratch space s_numneigh[0:atoms_per_team] + // calculate total number of neighbor atoms for all atoms assigned to the current team of threads (Note - Total # of neighbor atoms here provides the + // upper bound space requirement to store the H matrix values corresponding to the atoms with indices in d_ilist[firstatom:lastatom]) + + Kokkos::parallel_scan(Kokkos::ThreadVectorRange(team, atoms_per_team), + [&](const int &idx, int &totalnbrs, bool final) { + int ii = firstatom + idx; + + if (ii < nn) { + const int i = d_ilist[ii]; + int jnum = d_numneigh[i]; + + if (final) { + s_ilist[idx] = i; + s_numnbrs[idx] = jnum; + s_firstnbr[idx] = totalnbrs; + } + totalnbrs += jnum; + } else { + s_numnbrs[idx] = 0; + } + }); + } + + // barrier ensures that the data moved to scratch space is visible to all the + // threads of the corresponding team + team.team_barrier(); + + // calculate the global memory offset from where the H matrix values to be + // calculated by the current team will be stored in d_val + int team_firstnbr_idx = 0; + Kokkos::single(Kokkos::PerTeam(team), + [=](int &val) { + int totalnbrs = s_firstnbr[lastatom - firstatom - 1] + + s_numnbrs[lastatom - firstatom - 1]; + val = Kokkos::atomic_fetch_add(&d_mfill_offset(), totalnbrs); + }, + team_firstnbr_idx); + + // map the H matrix computation of each atom to kokkos-thread (one atom per + // kokkos-thread) neighbor computation for each atom is assigned to vector + // lanes of the corresponding thread + Kokkos::parallel_for( + Kokkos::TeamThreadRange(team, atoms_per_team), [&](const int &idx) { + int ii = firstatom + idx; + + if (ii < nn) { + const int i = s_ilist[idx]; + + if (mask[i] & groupbit) { + const X_FLOAT xtmp = x(i, 0); + const X_FLOAT ytmp = x(i, 1); + const X_FLOAT ztmp = x(i, 2); + const int itype = type(i); + const tagint itag = tag(i); + const int jnum = s_numnbrs[idx]; + + // calculate the write-offset for atom-i's first neighbor + int atomi_firstnbr_idx = team_firstnbr_idx + s_firstnbr[idx]; + Kokkos::single(Kokkos::PerThread(team), + [&]() { d_firstnbr[i] = atomi_firstnbr_idx; }); + + // current # of neighbor atoms with non-zero electrostatic + // interaction coefficients with atom-i which represents the # of + // non-zero elements in row-i of H matrix + int atomi_nbrs_inH = 0; + + // calculate H matrix values corresponding to atom-i where neighbors + // are processed in batches and the batch size is vector_length + for (int jj_start = 0; jj_start < jnum; jj_start += vector_length) { + + int atomi_nbr_writeIdx = atomi_firstnbr_idx + atomi_nbrs_inH; + + // count the # of neighbor atoms with non-zero electrostatic + // interaction coefficients with atom-i in the current batch + int atomi_nbrs_curbatch = 0; + + // compute rsq, jtype, j and store in scratch space which is + // reused later + Kokkos::parallel_reduce( + Kokkos::ThreadVectorRange(team, vector_length), + [&](const int &idx, int &m_fill) { + const int jj = jj_start + idx; + + // initialize: -1 represents no interaction with atom-j + // where j = d_neighbors(i,jj) + s_jlist(team.team_rank(), idx) = -1; + + if (jj < jnum) { + int j = d_neighbors(i, jj); + j &= NEIGHMASK; + const int jtype = type(j); + + const X_FLOAT delx = x(j, 0) - xtmp; + const X_FLOAT dely = x(j, 1) - ytmp; + const X_FLOAT delz = x(j, 2) - ztmp; + + // valid nbr interaction + bool valid = true; + if (NEIGHFLAG != FULL) { + // skip half of the interactions + const tagint jtag = tag(j); + if (j >= nlocal) { + if (itag > jtag) { + if ((itag + jtag) % 2 == 0) + valid = false; + } else if (itag < jtag) { + if ((itag + jtag) % 2 == 1) + valid = false; + } else { + if (x(j, 2) < ztmp) + valid = false; + if (x(j, 2) == ztmp && x(j, 1) < ytmp) + valid = false; + if (x(j, 2) == ztmp && x(j, 1) == ytmp && x(j, 0) < xtmp) + valid = false; + } + } + } + + const F_FLOAT rsq = + delx * delx + dely * dely + delz * delz; + if (rsq > cutsq) + valid = false; + + if (valid) { + s_jlist(team.team_rank(), idx) = j; + s_jtype(team.team_rank(), idx) = jtype; + s_r(team.team_rank(), idx) = sqrt(rsq); + m_fill++; + } + } + }, + atomi_nbrs_curbatch); + + // write non-zero entries of H to global memory + Kokkos::parallel_scan( + Kokkos::ThreadVectorRange(team, vector_length), + [&](const int &idx, int &m_fill, bool final) { + int j = s_jlist(team.team_rank(), idx); + if (final) { + if (j != -1) { + const int jtype = s_jtype(team.team_rank(), idx); + const F_FLOAT r = s_r(team.team_rank(), idx); + const F_FLOAT shldij = d_shield(itype, jtype); + + d_jlist[atomi_nbr_writeIdx + m_fill] = j; + d_val[atomi_nbr_writeIdx + m_fill] = + calculate_H_k(r, shldij); + } + } + + if (j != -1) { + m_fill++; + } + }); + atomi_nbrs_inH += atomi_nbrs_curbatch; + } + + Kokkos::single(Kokkos::PerThread(team), + [&]() { d_numnbrs[i] = atomi_nbrs_inH; }); + } + } + }); +} + +/* ---------------------------------------------------------------------- */ + +template +KOKKOS_INLINE_FUNCTION +double FixACKS2ReaxFFKokkos::calculate_H_k(const F_FLOAT &r, const F_FLOAT &shld) const +{ + F_FLOAT taper, denom; + + taper = d_tap[7] * r + d_tap[6]; + taper = taper * r + d_tap[5]; + taper = taper * r + d_tap[4]; + taper = taper * r + d_tap[3]; + taper = taper * r + d_tap[2]; + taper = taper * r + d_tap[1]; + taper = taper * r + d_tap[0]; + + denom = r * r * r + shld; + denom = pow(denom,0.3333333333333); + + return taper * EV_TO_KCAL_PER_MOL / denom; +} + +/* ---------------------------------------------------------------------- */ + +template +template +KOKKOS_INLINE_FUNCTION +void FixACKS2ReaxFFKokkos::compute_x_item(int ii, int &m_fill, const bool &final) const +{ + // The X_diag array is duplicated for OpenMP, atomic for CUDA, and neither for Serial + auto v_X_diag = ScatterViewHelper::value,decltype(dup_X_diag),decltype(ndup_X_diag)>::get(dup_X_diag,ndup_X_diag); + auto a_X_diag = v_X_diag.template access::value>(); + + const int i = d_ilist[ii]; + int j,jj,jtype; + F_FLOAT tmp = 0.0; + + if (mask[i] & groupbit) { + + const X_FLOAT xtmp = x(i,0); + const X_FLOAT ytmp = x(i,1); + const X_FLOAT ztmp = x(i,2); + const int itype = type(i); + const tagint itag = tag(i); + const int jnum = d_numneigh[i]; + if (final) + d_firstnbr_X[i] = m_fill; + + for (jj = 0; jj < jnum; jj++) { + j = d_neighbors(i,jj); + j &= NEIGHMASK; + jtype = type(j); + + const X_FLOAT delx = x(j,0) - xtmp; + const X_FLOAT dely = x(j,1) - ytmp; + const X_FLOAT delz = x(j,2) - ztmp; + + if (NEIGHFLAG != FULL) { + // skip half of the interactions + const tagint jtag = tag(j); + if (j >= nlocal) { + if (itag > jtag) { + if ((itag+jtag) % 2 == 0) continue; + } else if (itag < jtag) { + if ((itag+jtag) % 2 == 1) continue; + } else { + if (x(j,2) < ztmp) continue; + if (x(j,2) == ztmp && x(j,1) < ytmp) continue; + if (x(j,2) == ztmp && x(j,1) == ytmp && x(j,0) < xtmp) continue; + } + } + } + + const F_FLOAT rsq = delx*delx + dely*dely + delz*delz; + if (rsq > cutsq) continue; + + const F_FLOAT bcutoff = d_bcut(itype,jtype); + const F_FLOAT bcutoff2 = bcutoff*bcutoff; + if (rsq > bcutoff2) continue; + + if (final) { + const F_FLOAT r = sqrt(rsq); + d_jlist_X(m_fill) = j; + const F_FLOAT X_val = calculate_X_k(r,bcutoff); + d_val_X(m_fill) = X_val; + tmp -= X_val; + if (NEIGHFLAG != FULL) + a_X_diag[j] -= X_val; + } + m_fill++; + } + if (final) { + a_X_diag[i] += tmp; + d_numnbrs_X[i] = m_fill - d_firstnbr_X[i]; + } + } +} + +/* ---------------------------------------------------------------------- */ + +template +template +void FixACKS2ReaxFFKokkos::compute_x_team( + const typename Kokkos::TeamPolicy::member_type &team, + int atoms_per_team, int vector_length) const { + + // The X_diag array is duplicated for OpenMP, atomic for CUDA, and neither for Serial + auto v_X_diag = ScatterViewHelper::value,decltype(dup_X_diag),decltype(ndup_X_diag)>::get(dup_X_diag,ndup_X_diag); + auto a_X_diag = v_X_diag.template access::value>(); + + // scratch space setup + Kokkos::View, + Kokkos::MemoryTraits> + s_ilist(team.team_shmem(), atoms_per_team); + Kokkos::View, + Kokkos::MemoryTraits> + s_numnbrs(team.team_shmem(), atoms_per_team); + Kokkos::View, + Kokkos::MemoryTraits> + s_firstnbr(team.team_shmem(), atoms_per_team); + + Kokkos::View, + Kokkos::MemoryTraits> + s_jtype(team.team_shmem(), atoms_per_team, vector_length); + Kokkos::View, + Kokkos::MemoryTraits> + s_jlist(team.team_shmem(), atoms_per_team, vector_length); + Kokkos::View, + Kokkos::MemoryTraits> + s_r(team.team_shmem(), atoms_per_team, vector_length); + + // team of threads work on atoms with index in [firstatom, lastatom) + int firstatom = team.league_rank() * atoms_per_team; + int lastatom = + (firstatom + atoms_per_team < nn) ? (firstatom + atoms_per_team) : nn; + + // kokkos-thread-0 is used to load info from global memory into scratch space + if (team.team_rank() == 0) { + + // copy atom indices from d_ilist[firstatom:lastatom] to scratch space s_ilist[0:atoms_per_team] + // copy # of neighbor atoms for all the atoms with indices in d_ilist[firstatom:lastatom] from d_numneigh to scratch space s_numneigh[0:atoms_per_team] + // calculate total number of neighbor atoms for all atoms assigned to the current team of threads (Note - Total # of neighbor atoms here provides the + // upper bound space requirement to store the H matrix values corresponding to the atoms with indices in d_ilist[firstatom:lastatom]) + + Kokkos::parallel_scan(Kokkos::ThreadVectorRange(team, atoms_per_team), + [&](const int &idx, int &totalnbrs, bool final) { + int ii = firstatom + idx; + + if (ii < nn) { + const int i = d_ilist[ii]; + int jnum = d_numneigh[i]; + + if (final) { + s_ilist[idx] = i; + s_numnbrs[idx] = jnum; + s_firstnbr[idx] = totalnbrs; + } + totalnbrs += jnum; + } else { + s_numnbrs[idx] = 0; + } + }); + } + + // barrier ensures that the data moved to scratch space is visible to all the + // threads of the corresponding team + team.team_barrier(); + + // calculate the global memory offset from where the H matrix values to be + // calculated by the current team will be stored in d_val_X + int team_firstnbr_idx = 0; + Kokkos::single(Kokkos::PerTeam(team), + [=](int &val) { + int totalnbrs = s_firstnbr[lastatom - firstatom - 1] + + s_numnbrs[lastatom - firstatom - 1]; + val = Kokkos::atomic_fetch_add(&d_mfill_offset(), totalnbrs); + }, + team_firstnbr_idx); + + // map the H matrix computation of each atom to kokkos-thread (one atom per + // kokkos-thread) neighbor computation for each atom is assigned to vector + // lanes of the corresponding thread + Kokkos::parallel_for( + Kokkos::TeamThreadRange(team, atoms_per_team), [&](const int &idx) { + int ii = firstatom + idx; + + if (ii < nn) { + const int i = s_ilist[idx]; + + if (mask[i] & groupbit) { + const X_FLOAT xtmp = x(i, 0); + const X_FLOAT ytmp = x(i, 1); + const X_FLOAT ztmp = x(i, 2); + const int itype = type(i); + const tagint itag = tag(i); + const int jnum = s_numnbrs[idx]; + + // calculate the write-offset for atom-i's first neighbor + int atomi_firstnbr_idx = team_firstnbr_idx + s_firstnbr[idx]; + Kokkos::single(Kokkos::PerThread(team), + [&]() { d_firstnbr_X[i] = atomi_firstnbr_idx; }); + + // current # of neighbor atoms with non-zero electrostatic + // interaction coefficients with atom-i which represents the # of + // non-zero elements in row-i of H matrix + int atomi_nbrs_inH = 0; + + // calculate H matrix values corresponding to atom-i where neighbors + // are processed in batches and the batch size is vector_length + for (int jj_start = 0; jj_start < jnum; jj_start += vector_length) { + + int atomi_nbr_writeIdx = atomi_firstnbr_idx + atomi_nbrs_inH; + + // count the # of neighbor atoms with non-zero electrostatic + // interaction coefficients with atom-i in the current batch + int atomi_nbrs_curbatch = 0; + + // compute rsq, jtype, j and store in scratch space which is + // reused later + Kokkos::parallel_reduce( + Kokkos::ThreadVectorRange(team, vector_length), + [&](const int &idx, int &m_fill) { + const int jj = jj_start + idx; + + // initialize: -1 represents no interaction with atom-j + // where j = d_neighbors(i,jj) + s_jlist(team.team_rank(), idx) = -1; + + if (jj < jnum) { + int j = d_neighbors(i, jj); + j &= NEIGHMASK; + const int jtype = type(j); + + const X_FLOAT delx = x(j, 0) - xtmp; + const X_FLOAT dely = x(j, 1) - ytmp; + const X_FLOAT delz = x(j, 2) - ztmp; + + // valid nbr interaction + bool valid = true; + if (NEIGHFLAG != FULL) { + // skip half of the interactions + const tagint jtag = tag(j); + if (j >= nlocal) { + if (itag > jtag) { + if ((itag + jtag) % 2 == 0) + valid = false; + } else if (itag < jtag) { + if ((itag + jtag) % 2 == 1) + valid = false; + } else { + if (x(j, 2) < ztmp) + valid = false; + if (x(j, 2) == ztmp && x(j, 1) < ytmp) + valid = false; + if (x(j, 2) == ztmp && x(j, 1) == ytmp && + x(j, 0) < xtmp) + valid = false; + } + } + } + + const F_FLOAT rsq = + delx * delx + dely * dely + delz * delz; + if (rsq > cutsq) + valid = false; + + const F_FLOAT bcutoff = d_bcut(itype,jtype); + const F_FLOAT bcutoff2 = bcutoff*bcutoff; + if (rsq > bcutoff2) + valid = false; + + if (valid) { + s_jlist(team.team_rank(), idx) = j; + s_jtype(team.team_rank(), idx) = jtype; + s_r(team.team_rank(), idx) = sqrt(rsq); + m_fill++; + } + } + }, + atomi_nbrs_curbatch); + + // write non-zero entries of H to global memory + Kokkos::parallel_scan( + Kokkos::ThreadVectorRange(team, vector_length), + [&](const int &idx, int &m_fill, bool final) { + int j = s_jlist(team.team_rank(), idx); + if (final) { + if (j != -1) { + const int jtype = s_jtype(team.team_rank(), idx); + const F_FLOAT r = s_r(team.team_rank(), idx); + const F_FLOAT bcutoff = d_bcut(itype, jtype); + + d_jlist_X[atomi_nbr_writeIdx + m_fill] = j; + const F_FLOAT X_val = calculate_X_k(r, bcutoff); + d_val_X[atomi_nbr_writeIdx + m_fill] = + X_val; + a_X_diag[i] -= X_val; + if (NEIGHFLAG != FULL) + a_X_diag[j] -= X_val; + } + } + + if (j != -1) { + m_fill++; + } + }); + atomi_nbrs_inH += atomi_nbrs_curbatch; + } + + Kokkos::single(Kokkos::PerThread(team), + [&]() { d_numnbrs_X[i] = atomi_nbrs_inH; }); + } + } + }); +} + +/* ---------------------------------------------------------------------- */ + +template +KOKKOS_INLINE_FUNCTION +double FixACKS2ReaxFFKokkos::calculate_X_k( const double &r, const double &bcut) const +{ + const F_FLOAT d = r/bcut; + const F_FLOAT d3 = d*d*d; + const F_FLOAT omd = 1.0 - d; + const F_FLOAT omd2 = omd*omd; + const F_FLOAT omd6 = omd2*omd2*omd2; + + return bond_softness*d3*omd6; +} + +/* ---------------------------------------------------------------------- */ + +template +KOKKOS_INLINE_FUNCTION +void FixACKS2ReaxFFKokkos::operator() (TagACKS2InitMatvec, const int &ii) const +{ + if (d_X_diag[ii] == 0.0) + d_Xdia_inv[ii] = 1.0; + else + d_Xdia_inv[ii] = 1.0 / d_X_diag[ii]; + + const int i = d_ilist[ii]; + const int itype = type(i); + + if (mask[i] & groupbit) { + d_Hdia_inv[i] = 1.0 / params(itype).eta; + d_b_s[i] = -params(itype).chi - d_chi_field[i]; + d_b_s[NN+i] = 0.0; + + d_s[i] = 4*(d_s_hist(i,0)+d_s_hist(i,2))-(6*d_s_hist(i,1)+d_s_hist(i,3)); + d_s[NN+i] = 4*(d_s_hist_X(i,0)+d_s_hist_X(i,2))-(6*d_s_hist_X(i,1)+d_s_hist_X(i,3)); + } + + // last two rows + if (comm_me_0_flag && ii == 0) { + for (int k = 0; k < 2; k++) { + d_b_s[2*NN+i] = 0.0; + d_s[2*NN+k] = 4*(d_s_hist_last(k,0)+d_s_hist_last(k,2))-(6*d_s_hist_last(k,1)+d_s_hist_last(k,3)); + } + } + +} + +/* ---------------------------------------------------------------------- */ + +template +int FixACKS2ReaxFFKokkos::bicgstab_solve() +{ + int i; + F_FLOAT my_norm,norm_sqr,my_dot,dot_sqr; + double tmp, sigma, rho, rho_old, rnorm, bnorm; + + // sparse_matvec( &H, &X, x, d ); + sparse_matvec_acks2(d_s, d_d); + + pack_flag = 1; + k_d.template modify(); + k_d.template sync(); + if (neighflag != FULL) + comm->reverse_comm_fix(this); //Coll_vector( d ); + more_reverse_comm(k_d.h_view.data()); + k_d.template modify(); + k_d.template sync(); + + // vector_sum( r , 1., b, -1., d, nn ); + // bnorm = parallel_norm( b, nn ); + my_norm = 0.0; + Kokkos::parallel_reduce(Kokkos::RangePolicy(0,nn),*this,my_norm); + norm_sqr = 0.0; + MPI_Allreduce( &my_norm, &norm_sqr, 1, MPI_DOUBLE, MPI_SUM, world ); + bnorm = sqrt(norm_sqr); + + // rnorm = parallel_norm( r, nn); + my_norm = 0.0; + Kokkos::parallel_reduce(Kokkos::RangePolicy(0,nn),*this,my_norm); + norm_sqr = 0.0; + MPI_Allreduce( &my_norm, &norm_sqr, 1, MPI_DOUBLE, MPI_SUM, world ); + rnorm = sqrt(norm_sqr); + + if (bnorm == 0.0 ) bnorm = 1.0; + deep_copy(d_r_hat,d_r); + omega = 1.0; + rho = 1.0; + + for (i = 1; i < imax && rnorm / bnorm > tolerance; ++i) { + // rho = parallel_dot( r_hat, r, nn); + my_dot = 0.0; + Kokkos::parallel_reduce(Kokkos::RangePolicy(0,nn),*this,my_dot); + dot_sqr = 0.0; + MPI_Allreduce( &my_dot, &dot_sqr, 1, MPI_DOUBLE, MPI_SUM, world ); + rho = dot_sqr; + if (rho == 0.0) break; + + if (i > 1) { + beta = (rho / rho_old) * (alpha / omega); + + // vector_sum( p , 1., r, beta, q, nn); + // vector_sum( q , 1., p, -omega, z, nn); + // pre-conditioning + Kokkos::parallel_for(Kokkos::RangePolicy(0,nn),*this); + } else { + + // vector_copy( p , r nn); + // pre-conditioning + Kokkos::parallel_for(Kokkos::RangePolicy(0,nn),*this); + } + + pack_flag = 1; + // comm->forward_comm_fix(this); //Dist_vector( d ); + k_d.template modify(); + k_d.template sync(); + comm->forward_comm_fix(this); + more_forward_comm(k_d.h_view.data()); + k_d.template modify(); + k_d.template sync(); + + // sparse_matvec( &H, &X, d, z ); + sparse_matvec_acks2(d_d, d_z); + + pack_flag = 2; + k_z.template modify(); + k_z.template sync(); + if (neighflag != FULL) + comm->reverse_comm_fix(this); //Coll_vector( z ); + more_reverse_comm(k_z.h_view.data()); + k_z.template modify(); + k_z.template sync(); + + // tmp = parallel_dot( r_hat, z, nn); + my_dot = dot_sqr = 0.0; + Kokkos::parallel_reduce(Kokkos::RangePolicy(0,nn),*this,my_dot); + MPI_Allreduce( &my_dot, &dot_sqr, 1, MPI_DOUBLE, MPI_SUM, world ); + tmp = dot_sqr; + alpha = rho / tmp; + + // vector_sum( q, 1., r, -alpha, z, nn); + // tmp = parallel_dot( q, q, nn); + my_dot = dot_sqr = 0.0; + Kokkos::parallel_reduce(Kokkos::RangePolicy(0,nn),*this,my_dot); + MPI_Allreduce( &my_dot, &dot_sqr, 1, MPI_DOUBLE, MPI_SUM, world ); + tmp = dot_sqr; + + // early convergence check + if (tmp < tolerance) { + // vector_add( x, alpha, d, nn); + Kokkos::parallel_for(Kokkos::RangePolicy(0,nn),*this); + break; + } + + // pre-conditioning + Kokkos::parallel_for(Kokkos::RangePolicy(0,nn),*this); + + // sparse_matvec( &H, &X, q_hat, y ); + pack_flag = 3; + // comm->forward_comm_fix(this); //Dist_vector( q_hat ); + k_q_hat.template modify(); + k_q_hat.template sync(); + comm->forward_comm_fix(this); + more_forward_comm(k_q_hat.h_view.data()); + k_q_hat.template modify(); + k_q_hat.template sync(); + + sparse_matvec_acks2(d_q_hat, d_y); + + pack_flag = 3; + k_y.template modify(); + k_y.template sync(); + if (neighflag != FULL) + comm->reverse_comm_fix(this); //Coll_vector( y ); + more_reverse_comm(k_y.h_view.data()); + k_y.template modify(); + k_y.template sync(); + + // sigma = parallel_dot( y, q, nn); + my_dot = dot_sqr = 0.0; + Kokkos::parallel_reduce(Kokkos::RangePolicy(0,nn),*this,my_dot); + MPI_Allreduce( &my_dot, &dot_sqr, 1, MPI_DOUBLE, MPI_SUM, world ); + sigma = dot_sqr; + + // tmp = parallel_dot( y, y, nn); + my_dot = dot_sqr = 0.0; + Kokkos::parallel_reduce(Kokkos::RangePolicy(0,nn),*this,my_dot); + MPI_Allreduce( &my_dot, &dot_sqr, 1, MPI_DOUBLE, MPI_SUM, world ); + tmp = dot_sqr; + + omega = sigma / tmp; + + // vector_sum( g , alpha, d, omega, q_hat, nn); + // vector_add( x, 1., g, nn); + // vector_sum( r , 1., q, -omega, y, nn); + // rnorm = parallel_norm( r, nn); + my_dot = dot_sqr = 0.0; + Kokkos::parallel_reduce(Kokkos::RangePolicy(0,nn),*this,my_dot); + MPI_Allreduce( &my_dot, &dot_sqr, 1, MPI_DOUBLE, MPI_SUM, world ); + rnorm = sqrt(dot_sqr); + + if (omega == 0) break; + rho_old = rho; + } + + if (comm->me == 0) { + if (omega == 0 || rho == 0) { + char str[128]; + sprintf(str,"Fix acks2/reax/kk BiCGStab numerical breakdown, omega = %g, rho = %g",omega,rho); + error->warning(FLERR,str); + } else if (i >= imax) { + char str[128]; + sprintf(str,"Fix acks2/reax/kk BiCGStab convergence failed after %d iterations " + "at " BIGINT_FORMAT " step",i,update->ntimestep); + error->warning(FLERR,str); + } + } + + return i; +} + + +/* ---------------------------------------------------------------------- */ + +template +void FixACKS2ReaxFFKokkos::calculate_Q() +{ + + Kokkos::parallel_for(Kokkos::RangePolicy(0,nn),*this); + + pack_flag = 2; + //comm->forward_comm_fix( this ); //Dist_vector( s ); + k_s.modify(); + k_s.sync(); + comm->forward_comm_fix(this); + k_s.modify(); + k_s.sync(); + + Kokkos::parallel_for(Kokkos::RangePolicy(0,NN),*this); + +} + +/* ---------------------------------------------------------------------- */ + +template +void FixACKS2ReaxFFKokkos::sparse_matvec_acks2(typename AT::t_ffloat_1d &d_xx_in, typename AT::t_ffloat_1d &d_bb_in) +{ + d_xx = d_xx_in; + d_bb = d_bb_in; + + if (need_dup) + dup_bb = Kokkos::Experimental::create_scatter_view (d_bb); // allocate duplicated memory + else + ndup_bb = Kokkos::Experimental::create_scatter_view (d_bb); + + Kokkos::parallel_for(Kokkos::RangePolicy(0,nn),*this); + + if (neighflag != FULL) + Kokkos::parallel_for(Kokkos::RangePolicy(nn,NN),*this); + + if (neighflag == FULL) { + int teamsize; + if (execution_space == Host) teamsize = 1; + else teamsize = 128; + + Kokkos::parallel_for(Kokkos::TeamPolicy(nn,teamsize),*this); + } else if (neighflag == HALFTHREAD) + Kokkos::parallel_for(Kokkos::RangePolicy >(0,nn),*this); + else if (neighflag == HALF) + Kokkos::parallel_for(Kokkos::RangePolicy >(0,nn),*this); + + if (need_dup) { + Kokkos::Experimental::contribute(d_bb, dup_bb); + + // free duplicated memory + + dup_bb = decltype(dup_bb)(); + } +} + +/* ---------------------------------------------------------------------- */ + +template +KOKKOS_INLINE_FUNCTION +void FixACKS2ReaxFFKokkos::operator() (TagACKS2SparseMatvec1, const int &ii) const +{ + const int i = d_ilist[ii]; + const int itype = type(i); + if (mask[i] & groupbit) { + d_bb[i] = params(itype).eta * d_xx[i]; + d_bb[NN + i] = d_X_diag[i] * d_xx[NN + i]; + } + + // last two rows + if (ii == 0) { + d_bb[2*NN] = 0.0; + d_bb[2*NN + 1] = 0.0; + } +} + +/* ---------------------------------------------------------------------- */ + +template +KOKKOS_INLINE_FUNCTION +void FixACKS2ReaxFFKokkos::operator() (TagACKS2SparseMatvec2, const int &ii) const +{ + const int i = d_ilist[ii]; + if (mask[i] & groupbit) { + d_bb[i] = 0.0; + d_bb[NN + i] = 0.0; + } +} + +/* ---------------------------------------------------------------------- */ + +template +template +KOKKOS_INLINE_FUNCTION +void FixACKS2ReaxFFKokkos::operator() (TagACKS2SparseMatvec3_Half, const int &ii) const +{ + // The bb array is duplicated for OpenMP, atomic for CUDA, and neither for Serial + auto v_bb = ScatterViewHelper::value,decltype(dup_bb),decltype(ndup_bb)>::get(dup_bb,ndup_bb); + auto a_bb = v_bb.template access::value>(); + + const int i = d_ilist[ii]; + if (mask[i] & groupbit) { + F_FLOAT tmp = 0.0; + + // H Matrix + for(int jj = d_firstnbr[i]; jj < d_firstnbr[i] + d_numnbrs[i]; jj++) { + const int j = d_jlist(jj); + tmp += d_val(jj) * d_xx[j]; + a_bb[j] += d_val(jj) * d_xx[i]; + } + a_bb[i] += tmp; + + // X Matrix + tmp = 0.0; + for(int jj = d_firstnbr_X[i]; jj < d_firstnbr_X[i] + d_numnbrs_X[i]; jj++) { + const int j = d_jlist_X(jj); + tmp += d_val_X(jj) * d_xx[NN + j]; + a_bb[NN + j] += d_val_X(jj) * d_xx[NN + i]; + } + a_bb[NN + i] += tmp; + + // Identity Matrix + a_bb[NN + i] += d_xx[i]; + a_bb[i] += d_xx[NN + i]; + + // Second-to-last row/column + a_bb[2*NN] += d_xx[NN + i]; + a_bb[NN + i] += d_xx[2*NN]; + + // Last row/column + a_bb[2*NN + 1] += d_xx[i]; + a_bb[i] += d_xx[2*NN + 1]; + } +} + +/* ---------------------------------------------------------------------- */ + +template +KOKKOS_INLINE_FUNCTION +void FixACKS2ReaxFFKokkos::operator() (TagACKS2SparseMatvec3_Full, const membertype &team) const +{ + const int i = d_ilist[team.league_rank()]; + if (mask[i] & groupbit) { + F_FLOAT sum; + F_FLOAT sum2; + + Kokkos::parallel_reduce(Kokkos::TeamThreadRange(team, d_firstnbr[i], d_firstnbr[i] + d_numnbrs[i]), [&] (const int &jj, F_FLOAT &sum) { + const int j = d_jlist(jj); + sum += d_val(jj) * d_xx[j]; + }, sum); + team.team_barrier(); + + Kokkos::parallel_reduce(Kokkos::TeamThreadRange(team, d_firstnbr_X[i], d_firstnbr_X[i] + d_numnbrs_X[i]), [&] (const int &jj, F_FLOAT &sum2) { + const int j = d_jlist_X(jj); + sum2 += d_val_X(jj) * d_xx[NN + j]; + }, sum2); + + Kokkos::single(Kokkos::PerTeam(team), [&] () { + d_bb[i] += sum; + d_bb[NN + i] += sum2; + + // Identity Matrix + d_bb[NN + i] += d_xx[i]; + d_bb[i] += d_xx[NN + i]; + + // Second-to-last row/column + Kokkos::atomic_add(&(d_bb[2*NN]),d_xx[NN + i]); + d_bb[NN + i] += d_xx[2*NN]; + + // Last row/column + Kokkos::atomic_add(&(d_bb[2*NN + 1]),d_xx[i]); + d_bb[i] += d_xx[2*NN + 1]; + }); + } +} + +/* ---------------------------------------------------------------------- */ + +template +KOKKOS_INLINE_FUNCTION +void FixACKS2ReaxFFKokkos::operator() (TagACKS2Norm1, const int &ii, double &lsum) const +{ + const int i = d_ilist[ii]; + if (mask[i] & groupbit) { + d_r[i] = d_b_s[i] - d_d[i]; + d_r[NN+i] = d_b_s[NN+i] - d_d[NN+i]; + + lsum += d_b_s[i] * d_b_s[i]; + lsum += d_b_s[NN+i] * d_b_s[NN+i]; + } + + // last two rows + if (comm_me_0_flag && ii == 0) { + d_r[2*NN] = d_b_s[2*NN] - d_d[2*NN]; + d_r[2*NN + 1] = d_b_s[2*NN + 1] - d_d[2*NN + 1]; + + lsum += d_b_s[2*NN] * d_b_s[2*NN]; + lsum += d_b_s[2*NN + 1] * d_b_s[2*NN + 1]; + } +} + +/* ---------------------------------------------------------------------- */ + +template +KOKKOS_INLINE_FUNCTION +void FixACKS2ReaxFFKokkos::operator() (TagACKS2Norm2, const int &ii, double &lsum) const +{ + const int i = d_ilist[ii]; + if (mask[i] & groupbit) { + lsum += d_r[i] * d_r[i]; + lsum += d_r[NN + i] * d_r[NN + i]; + } + + // last two rows + if (comm_me_0_flag && ii == 0) { + lsum += d_r[2*NN] * d_r[2*NN]; + lsum += d_r[2*NN + 1] * d_r[2*NN + 1]; + } +} + +/* ---------------------------------------------------------------------- */ + +template +KOKKOS_INLINE_FUNCTION +void FixACKS2ReaxFFKokkos::operator() (TagACKS2Dot1, const int &ii, double &lsum) const +{ + const int i = d_ilist[ii]; + if (mask[i] & groupbit) { + lsum += d_r_hat[i] * d_r[i]; + lsum += d_r_hat[NN+i] * d_r[NN+i]; + } + + // last two rows + if (comm_me_0_flag && ii == 0) { + lsum += d_r_hat[2*NN] * d_r[2*NN]; + lsum += d_r_hat[2*NN + 1] * d_r[2*NN + 1]; + } +} + +/* ---------------------------------------------------------------------- */ + +template +KOKKOS_INLINE_FUNCTION +void FixACKS2ReaxFFKokkos::operator() (TagACKS2Precon1A, const int &ii) const +{ + const int i = d_ilist[ii]; + if (mask[i] & groupbit) { + d_q[i] = d_p[i] - omega*d_z[i]; + d_q[NN+i] = d_p[NN+i] - omega*d_z[NN+i]; + + d_p[i] = d_r[i] + beta*d_q[i]; + d_p[NN+i] = d_r[NN+i] + beta*d_q[NN+i]; + + d_d[i] = d_p[i]*d_Hdia_inv[i]; + d_d[NN+i] = d_p[NN+i]*d_Xdia_inv[i]; + } + + // last two rows + if (comm_me_0_flag && ii == 0) { + d_q[2*NN] = d_p[2*NN] - omega*d_z[2*NN]; + d_q[2*NN + 1] = d_p[2*NN + 1] - omega*d_z[2*NN + 1]; + + d_p[2*NN] = d_r[2*NN] + beta*d_q[2*NN]; + d_p[2*NN + 1] = d_r[2*NN + 1] + beta*d_q[2*NN + 1]; + + d_d[2*NN] = d_p[2*NN]; + d_d[2*NN + 1] = d_p[2*NN + 1]; + } +} + +/* ---------------------------------------------------------------------- */ + +template +KOKKOS_INLINE_FUNCTION +void FixACKS2ReaxFFKokkos::operator() (TagACKS2Precon1B, const int &ii) const +{ + const int i = d_ilist[ii]; + if (mask[i] & groupbit) { + d_p[i] = d_r[i] ; + d_p[NN+i] = d_r[NN+i]; + + d_d[i] = d_p[i]*d_Hdia_inv[i]; + d_d[NN+i] = d_p[NN+i]*d_Xdia_inv[i]; + } + + // last two rows + if (comm_me_0_flag && ii == 0) { + d_p[2*NN] = d_r[2*NN]; + d_p[2*NN + 1] = d_r[2*NN + 1]; + + d_d[2*NN] = d_p[2*NN]; + d_d[2*NN + 1] = d_p[2*NN + 1]; + } +} + +/* ---------------------------------------------------------------------- */ + +template +KOKKOS_INLINE_FUNCTION +void FixACKS2ReaxFFKokkos::operator() (TagACKS2Dot2, const int &ii, double &lsum) const +{ + const int i = d_ilist[ii]; + if (mask[i] & groupbit) { + lsum += d_r_hat[i] * d_z[i]; + lsum += d_r_hat[NN+i] * d_z[NN+i]; + } + + // last two rows + if (comm_me_0_flag && ii == 0) { + lsum += d_r_hat[2*NN] * d_z[2*NN]; + lsum += d_r_hat[2*NN + 1] * d_z[2*NN + 1]; + } +} + +/* ---------------------------------------------------------------------- */ + +template +KOKKOS_INLINE_FUNCTION +void FixACKS2ReaxFFKokkos::operator() (TagACKS2Dot3, const int &ii, double &lsum) const +{ + const int i = d_ilist[ii]; + if (mask[i] & groupbit) { + d_q[i] = d_r[i] - alpha*d_z[i]; + d_q[NN+i] = d_r[NN+i] - alpha*d_z[NN+i]; + + lsum += d_q[i] * d_q[i]; + lsum += d_q[NN+i] * d_q[NN+i]; + } + + // last two rows + if (comm_me_0_flag && ii == 0) { + d_q[2*NN] = d_r[2*NN] - alpha*d_z[2*NN]; + d_q[2*NN + 1] = d_r[2*NN + 1] - alpha*d_z[2*NN + 1]; + + lsum += d_q[2*NN] * d_q[2*NN]; + lsum += d_q[2*NN + 1] * d_q[2*NN + 1]; + } +} + +/* ---------------------------------------------------------------------- */ + +template +KOKKOS_INLINE_FUNCTION +void FixACKS2ReaxFFKokkos::operator() (TagACKS2Dot4, const int &ii, double &lsum) const +{ + const int i = d_ilist[ii]; + if (mask[i] & groupbit) { + lsum += d_y[i] * d_q[i]; + lsum += d_y[NN+i] * d_q[NN+i]; + } + + // last two rows + if (comm_me_0_flag && ii == 0) { + lsum += d_y[2*NN] * d_q[2*NN]; + lsum += d_y[2*NN + 1] * d_q[2*NN + 1]; + } +} + +/* ---------------------------------------------------------------------- */ + +template +KOKKOS_INLINE_FUNCTION +void FixACKS2ReaxFFKokkos::operator() (TagACKS2Dot5, const int &ii, double &lsum) const +{ + const int i = d_ilist[ii]; + if (mask[i] & groupbit) { + lsum += d_y[i] * d_y[i]; + lsum += d_y[NN+i] * d_y[NN+i]; + } + + // last two rows + if (comm_me_0_flag && ii == 0) { + lsum += d_y[2*NN] * d_y[2*NN]; + lsum += d_y[2*NN + 1] * d_y[2*NN + 1]; + } +} + +/* ---------------------------------------------------------------------- */ + +template +KOKKOS_INLINE_FUNCTION +void FixACKS2ReaxFFKokkos::operator() (TagACKS2Add, const int &ii) const +{ + const int i = d_ilist[ii]; + if (mask[i] & groupbit) { + d_s[i] += alpha * d_d[i]; + d_s[NN+i] += alpha * d_d[NN+i]; + } + + // last two rows + if (comm_me_0_flag && ii == 0) { + d_s[2*NN] += alpha*d_d[2*NN]; + d_s[2*NN + 1] += alpha*d_d[2*NN + 1]; + } +} + +/* ---------------------------------------------------------------------- */ + +template +KOKKOS_INLINE_FUNCTION +void FixACKS2ReaxFFKokkos::operator() (TagACKS2Precon2, const int &ii) const +{ + const int i = d_ilist[ii]; + if (mask[i] & groupbit) { + d_q_hat[i] = d_q[i]*d_Hdia_inv[i]; + d_q_hat[NN+i] = d_q[NN+i]*d_Xdia_inv[i]; + } + + // last two rows + if (comm_me_0_flag && ii == 0) { + d_q_hat[2*NN] = d_q[2*NN]; + d_q_hat[2*NN + 1] = d_q[2*NN + 1]; + } +} + +/* ---------------------------------------------------------------------- */ + +template +KOKKOS_INLINE_FUNCTION +void FixACKS2ReaxFFKokkos::operator() (TagACKS2Norm3, const int &ii, double &lsum) const +{ + const int i = d_ilist[ii]; + if (mask[i] & groupbit) { + d_g[i] = alpha*d_d[i] + omega*d_q_hat[i]; + d_g[NN+i] = alpha*d_d[NN+i] + omega*d_q_hat[NN+i]; + + d_s[i] += d_g[i]; + d_s[NN+i] += d_g[NN+i]; + + d_r[i] = d_q[i] - omega*d_y[i]; + d_r[NN+i] = d_q[NN+i] - omega*d_y[NN+i]; + + lsum += d_r[i] * d_r[i]; + lsum += d_r[NN+i] * d_r[NN+i]; + } + + // last two rows + if (comm_me_0_flag && ii == 0) { + d_g[2*NN] = alpha*d_d[2*NN] + omega*d_q_hat[2*NN]; + d_g[2*NN + 1] = alpha*d_d[2*NN + 1] + omega*d_q_hat[2*NN + 1]; + + d_s[2*NN] += d_g[2*NN]; + d_s[2*NN + 1] += d_g[2*NN + 1]; + + d_r[2*NN] = d_q[2*NN] - omega*d_y[2*NN]; + d_r[2*NN + 1] = d_q[2*NN + 1] - omega*d_y[2*NN + 1]; + + lsum += d_r[2*NN] * d_r[2*NN]; + lsum += d_r[2*NN + 1] * d_r[2*NN + 1]; + } +} + +/* ---------------------------------------------------------------------- */ + +template +KOKKOS_INLINE_FUNCTION +void FixACKS2ReaxFFKokkos::operator() (TagACKS2CalculateQ1, const int &ii) const +{ + const int i = d_ilist[ii]; + if (mask[i] & groupbit) { + + /* backup s */ + for (int k = nprev-1; k > 0; --k) { + d_s_hist(i,k) = d_s_hist(i,k-1); + d_s_hist_X(i,k) = d_s_hist_X(i,k-1); + } + d_s_hist(i,0) = d_s[i]; + d_s_hist_X(i,0) = d_s[NN+i]; + } + + // last two rows + if (comm_me_0_flag && ii == 0) { + for (int i = 0; i < 2; ++i) { + for (int k = nprev-1; k > 0; --k) + d_s_hist_last(i,k) = d_s_hist_last(i,k-1); + d_s_hist_last(i,0) = d_s[2*NN+i]; + } + } +} + +/* ---------------------------------------------------------------------- */ + +template +KOKKOS_INLINE_FUNCTION +void FixACKS2ReaxFFKokkos::operator() (TagACKS2CalculateQ2, const int &ii) const +{ + const int i = d_ilist[ii]; + if (mask[i] & groupbit) + q(i) = d_s(i); +} + +/* ---------------------------------------------------------------------- */ + +template +void FixACKS2ReaxFFKokkos::cleanup_copy() +{ + id = style = NULL; +} + +/* ---------------------------------------------------------------------- + memory usage of local atom-based arrays +------------------------------------------------------------------------- */ + +template +double FixACKS2ReaxFFKokkos::memory_usage() +{ + double bytes; + + int size = 2*nmax + 2; + + bytes = size*nprev * sizeof(double); // s_hist + bytes += nmax*4 * sizeof(double); // storage + bytes += size*11 * sizeof(double); // storage + bytes += n_cap*4 * sizeof(int); // matrix... + bytes += m_cap*2 * sizeof(int); + bytes += m_cap*2 * sizeof(double); + + return bytes; +} + +/* ---------------------------------------------------------------------- + allocate fictitious charge arrays +------------------------------------------------------------------------- */ + +template +void FixACKS2ReaxFFKokkos::grow_arrays(int nmax) +{ + k_s_hist.template sync(); + k_s_hist_X.template sync(); + + k_s_hist.template modify(); // force reallocation on host + k_s_hist_X.template modify(); + + memoryKK->grow_kokkos(k_s_hist,s_hist,nmax,nprev,"acks2:s_hist"); + memoryKK->grow_kokkos(k_s_hist_X,s_hist_X,nmax,nprev,"acks2:s_hist_X"); + + d_s_hist = k_s_hist.template view(); + d_s_hist_X = k_s_hist_X.template view(); + + k_s_hist.template modify(); + k_s_hist_X.template modify(); +} + +/* ---------------------------------------------------------------------- + copy values within fictitious charge arrays +------------------------------------------------------------------------- */ + +template +void FixACKS2ReaxFFKokkos::copy_arrays(int i, int j, int delflag) +{ + k_s_hist.template sync(); + k_s_hist_X.template sync(); + + FixACKS2ReaxFF::copy_arrays(i,j,delflag); + + k_s_hist.template modify(); + k_s_hist_X.template modify(); +} + +/* ---------------------------------------------------------------------- + pack values in local atom-based array for exchange with another proc +------------------------------------------------------------------------- */ + +template +int FixACKS2ReaxFFKokkos::pack_exchange(int i, double *buf) +{ + k_s_hist.template sync(); + k_s_hist_X.template sync(); + + return FixACKS2ReaxFF::pack_exchange(i,buf); +} + +/* ---------------------------------------------------------------------- + unpack values in local atom-based array from exchange with another proc +------------------------------------------------------------------------- */ + +template +int FixACKS2ReaxFFKokkos::unpack_exchange(int nlocal, double *buf) +{ + k_s_hist.template sync(); + k_s_hist_X.template sync(); + + int n = FixACKS2ReaxFF::unpack_exchange(nlocal,buf); + + k_s_hist.template modify(); + k_s_hist_X.template modify(); + + return n; +} + +/* ---------------------------------------------------------------------- */ + +template +void FixACKS2ReaxFFKokkos::get_chi_field() +{ + FixQEqReaxFF::get_chi_field(); + k_chi_field.modify_host(); + k_chi_field.sync_device(); +} + +/* ---------------------------------------------------------------------- */ + +namespace LAMMPS_NS { +template class FixACKS2ReaxFFKokkos; +#ifdef KOKKOS_ENABLE_CUDA +template class FixACKS2ReaxFFKokkos; +#endif +} diff --git a/src/KOKKOS/fix_acks2_reaxff_kokkos.h b/src/KOKKOS/fix_acks2_reaxff_kokkos.h new file mode 100644 index 0000000000..2fbeafc6b3 --- /dev/null +++ b/src/KOKKOS/fix_acks2_reaxff_kokkos.h @@ -0,0 +1,368 @@ +/* -*- 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(acks2/reaxff/kk,FixACKS2ReaxFFKokkos) +FixStyle(acks2/reaxff/kk/device,FixACKS2ReaxFFKokkos) +FixStyle(acks2/reaxff/kk/host,FixACKS2ReaxFFKokkos) + +#else + +#ifndef LMP_FIX_ACKS2_REAXFF_KOKKOS_H +#define LMP_FIX_ACKS2_REAXFF_KOKKOS_H + +#include "fix_acks2_reaxff.h" +#include "kokkos_type.h" +#include "neigh_list.h" +#include "neigh_list_kokkos.h" + +namespace LAMMPS_NS { + +struct TagACKS2Zero{}; +struct TagACKS2InitMatvec{}; +struct TagACKS2SparseMatvec1{}; +struct TagACKS2SparseMatvec2{}; + +template +struct TagACKS2SparseMatvec3_Half{}; + +struct TagACKS2SparseMatvec3_Full{}; +struct TagACKS2Norm1{}; +struct TagACKS2Norm2{}; +struct TagACKS2Norm3{}; +struct TagACKS2Dot1{}; +struct TagACKS2Dot2{}; +struct TagACKS2Dot3{}; +struct TagACKS2Dot4{}; +struct TagACKS2Dot5{}; +struct TagACKS2Precon1A{}; +struct TagACKS2Precon1B{}; +struct TagACKS2Precon2{}; +struct TagACKS2Add{}; +struct TagACKS2ZeroQGhosts{}; +struct TagACKS2CalculateQ1{}; +struct TagACKS2CalculateQ2{}; + +template +class FixACKS2ReaxFFKokkos : public FixACKS2ReaxFF { + public: + typedef DeviceType device_type; + typedef double value_type; + typedef ArrayTypes AT; + FixACKS2ReaxFFKokkos(class LAMMPS *, int, char **); + ~FixACKS2ReaxFFKokkos(); + + void cleanup_copy(); + void init(); + void setup_pre_force(int); + void pre_force(int); + + DAT::tdual_ffloat_1d get_s() {return k_s;} + + KOKKOS_INLINE_FUNCTION + void num_neigh_item(int, int&) const; + + KOKKOS_INLINE_FUNCTION + void operator()(TagACKS2Zero, const int&) const; + + KOKKOS_INLINE_FUNCTION + void operator()(TagACKS2InitMatvec, const int&) const; + + template + KOKKOS_INLINE_FUNCTION + void compute_h_item(int, int &, const bool &) const; + + template + KOKKOS_INLINE_FUNCTION + void compute_h_team(const typename Kokkos::TeamPolicy ::member_type &team, int, int) const; + + template + KOKKOS_INLINE_FUNCTION + void compute_x_item(int, int &, const bool &) const; + + template + KOKKOS_INLINE_FUNCTION + void compute_x_team(const typename Kokkos::TeamPolicy ::member_type &team, int, int) const; + + KOKKOS_INLINE_FUNCTION + void operator()(TagACKS2SparseMatvec1, const int&) const; + + KOKKOS_INLINE_FUNCTION + void operator()(TagACKS2SparseMatvec2, const int&) const; + + template + KOKKOS_INLINE_FUNCTION + void operator()(TagACKS2SparseMatvec3_Half, const int&) const; + + typedef typename Kokkos::TeamPolicy::member_type membertype; + KOKKOS_INLINE_FUNCTION + void operator() (TagACKS2SparseMatvec3_Full, const membertype &team) const; + + KOKKOS_INLINE_FUNCTION + void operator()(TagACKS2Norm1, const int&, double&) const; + + KOKKOS_INLINE_FUNCTION + void operator()(TagACKS2Norm2, const int&, double&) const; + + KOKKOS_INLINE_FUNCTION + void operator()(TagACKS2Norm3, const int&, double&) const; + + KOKKOS_INLINE_FUNCTION + void operator()(TagACKS2Dot1, const int&, double&) const; + + KOKKOS_INLINE_FUNCTION + void operator()(TagACKS2Dot2, const int&, double&) const; + + KOKKOS_INLINE_FUNCTION + void operator()(TagACKS2Dot3, const int&, double&) const; + + KOKKOS_INLINE_FUNCTION + void operator()(TagACKS2Dot4, const int&, double&) const; + + KOKKOS_INLINE_FUNCTION + void operator()(TagACKS2Dot5, const int&, double&) const; + + KOKKOS_INLINE_FUNCTION + void operator()(TagACKS2Precon1A, const int&) const; + + KOKKOS_INLINE_FUNCTION + void operator()(TagACKS2Precon1B, const int&) const; + + KOKKOS_INLINE_FUNCTION + void operator()(TagACKS2Precon2, const int&) const; + + KOKKOS_INLINE_FUNCTION + void operator()(TagACKS2Add, const int&) const; + + KOKKOS_INLINE_FUNCTION + void operator()(TagACKS2ZeroQGhosts, const int&) const; + + KOKKOS_INLINE_FUNCTION + void operator()(TagACKS2CalculateQ1, const int&) const; + + KOKKOS_INLINE_FUNCTION + void operator()(TagACKS2CalculateQ2, const int&) const; + + KOKKOS_INLINE_FUNCTION + double calculate_H_k(const F_FLOAT &r, const F_FLOAT &shld) const; + + KOKKOS_INLINE_FUNCTION + double calculate_X_k(const F_FLOAT &r, const F_FLOAT &bcut) const; + + struct params_acks2{ + KOKKOS_INLINE_FUNCTION + params_acks2(){chi=0;eta=0;gamma=0;bcut_acks2=0;}; + KOKKOS_INLINE_FUNCTION + params_acks2(int i){chi=0;eta=0;gamma=0;bcut_acks2=0;}; + F_FLOAT chi, eta, gamma, bcut_acks2; + }; + + private: + int inum; + int allocated_flag, last_allocate; + int need_dup,comm_me_0_flag; + + typename AT::t_int_scalar d_mfill_offset; + + typedef Kokkos::DualView tdual_int_1d; + Kokkos::DualView k_params; + typename Kokkos::DualView::t_dev_const params; + + typename ArrayTypes::t_x_array x; + typename ArrayTypes::t_v_array v; + typename ArrayTypes::t_f_array_const f; + typename ArrayTypes::t_ffloat_1d_randomread mass; + typename ArrayTypes::t_ffloat_1d q; + typename ArrayTypes::t_int_1d type, mask; + typename ArrayTypes::t_tagint_1d tag; + + typename ArrayTypes::t_neighbors_2d d_neighbors; + typename ArrayTypes::t_int_1d_randomread d_ilist, d_numneigh; + + DAT::tdual_ffloat_1d k_tap; + typename AT::t_ffloat_1d d_tap; + + DAT::tdual_ffloat_2d k_bcut; + typename AT::t_ffloat_2d d_bcut; + + typename AT::t_int_1d d_firstnbr; + typename AT::t_int_1d d_numnbrs; + typename AT::t_int_1d d_jlist; + typename AT::t_ffloat_1d d_val; + + typename AT::t_int_1d d_firstnbr_X; + typename AT::t_int_1d d_numnbrs_X; + typename AT::t_int_1d d_jlist_X; + typename AT::t_ffloat_1d d_val_X; + + DAT::tdual_ffloat_1d k_s, k_X_diag, k_chi_field; + typename AT::t_ffloat_1d d_Hdia_inv,d_Xdia_inv, d_X_diag, d_chi_field, d_b_s, d_s; + typename AT::t_ffloat_1d_randomread r_b_s, r_s; + + DAT::tdual_ffloat_1d k_d, k_q_hat, k_z, k_y; + typename AT::t_ffloat_1d d_p, d_q, d_r, d_d, d_g, d_q_hat, d_r_hat, d_y, d_z, d_bb, d_xx; + typename AT::t_ffloat_1d_randomread r_p, r_r, r_d; + + DAT::tdual_ffloat_2d k_shield, k_s_hist, k_s_hist_X, k_s_hist_last; + typename AT::t_ffloat_2d d_shield, d_s_hist, d_s_hist_X, d_s_hist_last; + typename AT::t_ffloat_2d_randomread r_s_hist, r_s_hist_X, r_s_hist_last; + + Kokkos::Experimental::ScatterView::value, Kokkos::Experimental::ScatterSum, Kokkos::Experimental::ScatterDuplicated> dup_X_diag; + Kokkos::Experimental::ScatterView::value, Kokkos::Experimental::ScatterSum, Kokkos::Experimental::ScatterNonDuplicated> ndup_X_diag; + + Kokkos::Experimental::ScatterView::value, Kokkos::Experimental::ScatterSum, Kokkos::Experimental::ScatterDuplicated> dup_bb; + Kokkos::Experimental::ScatterView::value, Kokkos::Experimental::ScatterSum, Kokkos::Experimental::ScatterNonDuplicated> ndup_bb; + + void init_shielding_k(); + void init_hist(); + void allocate_matrix(); + void allocate_array(); + void deallocate_array(); + int bicgstab_solve(); + void calculate_Q(); + + int neighflag; + int nlocal,nall,nmax,newton_pair; + int count, isuccess; + double alpha, beta, omega, cutsq; + + int iswap; + int first; + typename AT::t_int_2d d_sendlist; + typename AT::t_xfloat_1d_um v_buf; + + void grow_arrays(int); + void copy_arrays(int, int, int); + int pack_exchange(int, double *); + int unpack_exchange(int, double *); + void get_chi_field(); + double memory_usage(); + + void sparse_matvec_acks2(typename AT::t_ffloat_1d &, typename AT::t_ffloat_1d &); +}; + +template +struct FixACKS2ReaxFFKokkosNumNeighFunctor { + typedef DeviceType device_type; + typedef int value_type; + FixACKS2ReaxFFKokkos c; + FixACKS2ReaxFFKokkosNumNeighFunctor(FixACKS2ReaxFFKokkos* c_ptr):c(*c_ptr) { + c.cleanup_copy(); + }; + KOKKOS_INLINE_FUNCTION + void operator()(const int ii, int &maxneigh) const { + c.num_neigh_item(ii, maxneigh); + } +}; + +template +struct FixACKS2ReaxFFKokkosComputeHFunctor { + int atoms_per_team, vector_length; + typedef int value_type; + typedef Kokkos::ScratchMemorySpace scratch_space; + FixACKS2ReaxFFKokkos c; + + FixACKS2ReaxFFKokkosComputeHFunctor(FixACKS2ReaxFFKokkos* c_ptr):c(*c_ptr) { + c.cleanup_copy(); + }; + + FixACKS2ReaxFFKokkosComputeHFunctor(FixACKS2ReaxFFKokkos *c_ptr, + int _atoms_per_team, int _vector_length) + : c(*c_ptr), atoms_per_team(_atoms_per_team), + vector_length(_vector_length) { + c.cleanup_copy(); + }; + + KOKKOS_INLINE_FUNCTION + void operator()(const int ii, int &m_fill, const bool &final) const { + c.template compute_h_item(ii,m_fill,final); + } + + KOKKOS_INLINE_FUNCTION + void operator()( + const typename Kokkos::TeamPolicy::member_type &team) const { + c.template compute_h_team(team, atoms_per_team, vector_length); + } + + size_t team_shmem_size(int team_size) const { + size_t shmem_size = + Kokkos::View::shmem_size( + atoms_per_team) + // s_ilist + Kokkos::View::shmem_size( + atoms_per_team) + // s_numnbrs + Kokkos::View::shmem_size( + atoms_per_team) + // s_firstnbr + Kokkos::View:: + shmem_size(atoms_per_team, vector_length) + // s_jtype + Kokkos::View:: + shmem_size(atoms_per_team, vector_length) + // s_j + Kokkos::View::shmem_size(atoms_per_team, + vector_length); // s_r + return shmem_size; + } +}; + +template +struct FixACKS2ReaxFFKokkosComputeXFunctor { + int atoms_per_team, vector_length; + typedef int value_type; + typedef Kokkos::ScratchMemorySpace scratch_space; + FixACKS2ReaxFFKokkos c; + + FixACKS2ReaxFFKokkosComputeXFunctor(FixACKS2ReaxFFKokkos* c_ptr):c(*c_ptr) { + c.cleanup_copy(); + }; + + FixACKS2ReaxFFKokkosComputeXFunctor(FixACKS2ReaxFFKokkos *c_ptr, + int _atoms_per_team, int _vector_length) + : c(*c_ptr), atoms_per_team(_atoms_per_team), + vector_length(_vector_length) { + c.cleanup_copy(); + }; + + KOKKOS_INLINE_FUNCTION + void operator()(const int ii, int &m_fill, const bool &final) const { + c.template compute_x_item(ii,m_fill,final); + } + + KOKKOS_INLINE_FUNCTION + void operator()( + const typename Kokkos::TeamPolicy::member_type &team) const { + c.template compute_x_team(team, atoms_per_team, vector_length); + } + + size_t team_shmem_size(int team_size) const { + size_t shmem_size = + Kokkos::View::shmem_size( + atoms_per_team) + // s_ilist + Kokkos::View::shmem_size( + atoms_per_team) + // s_numnbrs + Kokkos::View::shmem_size( + atoms_per_team) + // s_firstnbr + Kokkos::View:: + shmem_size(atoms_per_team, vector_length) + // s_jtype + Kokkos::View:: + shmem_size(atoms_per_team, vector_length) + // s_j + Kokkos::View::shmem_size(atoms_per_team, + vector_length); // s_r + return shmem_size; + } +}; + +} + +#endif +#endif diff --git a/src/KOKKOS/fix_qeq_reaxff_kokkos.cpp b/src/KOKKOS/fix_qeq_reaxff_kokkos.cpp index 6761ab9b0e..0aab94071f 100644 --- a/src/KOKKOS/fix_qeq_reaxff_kokkos.cpp +++ b/src/KOKKOS/fix_qeq_reaxff_kokkos.cpp @@ -75,6 +75,7 @@ FixQEqReaxFFKokkos::~FixQEqReaxFFKokkos() memoryKK->destroy_kokkos(k_s_hist,s_hist); memoryKK->destroy_kokkos(k_t_hist,t_hist); + memoryKK->destroy_kokkos(k_chi_field,chi_field); } /* ---------------------------------------------------------------------- */ @@ -256,6 +257,9 @@ void FixQEqReaxFFKokkos::pre_force(int /*vflag*/) // init_matvec + if (field_flag) + get_chi_field(); + k_s_hist.template sync(); k_t_hist.template sync(); FixQEqReaxFFKokkosMatVecFunctor matvec_functor(this); @@ -373,10 +377,16 @@ void FixQEqReaxFFKokkos::allocate_array() k_d = DAT::tdual_ffloat_1d("qeq/kk:d",nmax); d_d = k_d.template view(); h_d = k_d.h_view; + + memoryKK->create_kokkos(k_chi_field,chi_field,nmax,"acks2/kk:chi_field"); + d_chi_field = k_chi_field.template view(); } // init_storage + if (field_flag) + get_chi_field(); + FixQEqReaxFFKokkosZeroFunctor zero_functor(this); Kokkos::parallel_for(ignum,zero_functor); @@ -392,7 +402,7 @@ void FixQEqReaxFFKokkos::zero_item(int ii) const if (mask[i] & groupbit) { d_Hdia_inv[i] = 1.0 / params(itype).eta; - d_b_s[i] = -params(itype).chi; + d_b_s[i] = -params(itype).chi - d_chi_field[i]; d_b_t[i] = -1.0; d_s[i] = 0.0; d_t[i] = 0.0; @@ -711,7 +721,7 @@ void FixQEqReaxFFKokkos::matvec_item(int ii) const if (mask[i] & groupbit) { d_Hdia_inv[i] = 1.0 / params(itype).eta; - d_b_s[i] = -params(itype).chi; + d_b_s[i] = -params(itype).chi - d_chi_field[i]; d_b_t[i] = -1.0; d_t[i] = d_t_hist(i,2) + 3*(d_t_hist(i,0) - d_t_hist(i,1)); d_s[i] = 4*(d_s_hist(i,0)+d_s_hist(i,2))-(6*d_s_hist(i,1)+d_s_hist(i,3)); @@ -1575,6 +1585,16 @@ int FixQEqReaxFFKokkos::unpack_exchange(int nlocal, double *buf) /* ---------------------------------------------------------------------- */ +template +void FixQEqReaxFFKokkos::get_chi_field() +{ + FixQEqReaxFF::get_chi_field(); + k_chi_field.modify_host(); + k_chi_field.sync_device(); +} + +/* ---------------------------------------------------------------------- */ + namespace LAMMPS_NS { template class FixQEqReaxFFKokkos; #ifdef LMP_KOKKOS_GPU diff --git a/src/KOKKOS/fix_qeq_reaxff_kokkos.h b/src/KOKKOS/fix_qeq_reaxff_kokkos.h index 3965770236..3256e56aef 100644 --- a/src/KOKKOS/fix_qeq_reaxff_kokkos.h +++ b/src/KOKKOS/fix_qeq_reaxff_kokkos.h @@ -201,8 +201,8 @@ class FixQEqReaxFFKokkos : public FixQEqReaxFF, public KokkosBase { typename AT::t_int_1d d_jlist; typename AT::t_ffloat_1d d_val; - DAT::tdual_ffloat_1d k_t, k_s; - typename AT::t_ffloat_1d d_Hdia_inv, d_b_s, d_b_t, d_t, d_s; + DAT::tdual_ffloat_1d k_t, k_s, k_chi_field; + typename AT::t_ffloat_1d d_Hdia_inv, d_b_s, d_b_t, d_t, d_s, d_chi_field; HAT::t_ffloat_1d h_t, h_s; typename AT::t_ffloat_1d_randomread r_b_s, r_b_t, r_t, r_s; @@ -241,6 +241,7 @@ class FixQEqReaxFFKokkos : public FixQEqReaxFF, public KokkosBase { void copy_arrays(int, int, int); int pack_exchange(int, double *); int unpack_exchange(int, double *); + void get_chi_field(); }; template diff --git a/src/KOKKOS/kokkos.h b/src/KOKKOS/kokkos.h index 65990544ad..fa5ff42a44 100644 --- a/src/KOKKOS/kokkos.h +++ b/src/KOKKOS/kokkos.h @@ -61,9 +61,11 @@ class KokkosLMP : protected Pointers { int neigh_count(int); template - int need_dup() + int need_dup(int qeq_flag = 0) { int value = 0; + int neighflag = this->neighflag; + if (qeq_flag) neighflag = this->neighflag_qeq; if (neighflag == HALFTHREAD) value = std::is_same::value,Kokkos::Experimental::ScatterDuplicated>::value; diff --git a/src/KOKKOS/pair_reaxff_kokkos.cpp b/src/KOKKOS/pair_reaxff_kokkos.cpp index aac0229f87..5e5b439eea 100644 --- a/src/KOKKOS/pair_reaxff_kokkos.cpp +++ b/src/KOKKOS/pair_reaxff_kokkos.cpp @@ -23,6 +23,7 @@ #include "comm.h" #include "error.h" #include "force.h" +#include "fix_acks2_reaxff_kokkos.h" #include "kokkos.h" #include "math_const.h" #include "math_special.h" @@ -141,6 +142,25 @@ void PairReaxFFKokkos::init_style() if (fix_reaxff) modify->delete_fix(fix_id); // not needed in the Kokkos version fix_reaxff = nullptr; + acks2_flag = api->system->acks2_flag; + if (acks2_flag) { + int ifix = modify->find_fix_by_style("^acks2/reax"); + Fix* fix = modify->fix[ifix]; + if (!fix->kokkosable) + error->all(FLERR,"Must use Kokkos version of acks2/reax with pair reaxc/kk"); + if (fix->execution_space == Host) { + FixACKS2ReaxFFKokkos* acks2_fix = (FixACKS2ReaxFFKokkos*) modify->fix[ifix]; + auto k_s = acks2_fix->get_s(); + k_s.sync(); + d_s = k_s.view(); + } else { + FixACKS2ReaxFFKokkos* acks2_fix = (FixACKS2ReaxFFKokkos*) modify->fix[ifix]; + auto k_s = acks2_fix->get_s(); + k_s.sync(); + d_s = k_s.view(); + } + } + // irequest = neigh request made by parent class neighflag = lmp->kokkos->neighflag; @@ -230,6 +250,9 @@ void PairReaxFFKokkos::setup() // hydrogen bond k_params_sing.h_view(i).p_hbond = api->system->reax_param.sbp[map[i]].p_hbond; + // acks2 + k_params_sing.h_view(i).bcut_acks2 = api->system->reax_param.sbp[map[i]].bcut_acks2; + for (j = 1; j <= n; j++) { if (map[j] == -1) continue; @@ -690,9 +713,11 @@ void PairReaxFFKokkos::compute(int eflag_in, int vflag_in) tag = atomKK->k_tag.view(); type = atomKK->k_type.view(); nlocal = atomKK->nlocal; - nall = atom->nlocal + atom->nghost; newton_pair = force->newton_pair; + nn = list->inum; + NN = list->inum + list->gnum; + const int inum = list->inum; const int ignum = inum + list->gnum; NeighListKokkos* k_list = static_cast*>(list); @@ -700,6 +725,22 @@ void PairReaxFFKokkos::compute(int eflag_in, int vflag_in) d_neighbors = k_list->d_neighbors; d_ilist = k_list->d_ilist; + if (acks2_flag) { + int ifix = modify->find_fix_by_style("^acks2/reax"); + Fix* fix = modify->fix[ifix]; + if (fix->execution_space == Host) { + FixACKS2ReaxFFKokkos* acks2_fix = (FixACKS2ReaxFFKokkos*) modify->fix[ifix]; + auto k_s = acks2_fix->get_s(); + k_s.sync(); + d_s = k_s.view(); + } else { + FixACKS2ReaxFFKokkos* acks2_fix = (FixACKS2ReaxFFKokkos*) modify->fix[ifix]; + auto k_s = acks2_fix->get_s(); + k_s.sync(); + d_s = k_s.view(); + } + } + need_dup = lmp->kokkos->need_dup(); // allocate duplicated memory @@ -1057,7 +1098,12 @@ void PairReaxFFKokkos::operator()(PairReaxFFComputePolartemplate ev_tally(ev,i,i,epol,0.0,0.0,0.0,0.0); if (eflag_atom) this->template e_tally_single(ev,i,epol); @@ -1195,8 +1241,47 @@ void PairReaxFFKokkos::operator()(PairReaxFFComputeLJCoulomb 0.0) { + /* Coulombic energy contribution */ + const F_FLOAT effpot_diff = d_s[NN + i] + - d_s[NN + j]; + const F_FLOAT e_ele = -0.5 * KCALpMOL_to_EV * bond_softness + * SQR( effpot_diff ); + + ecoul += e_ele; + + /* forces contribution */ + F_FLOAT d_bond_softness; + d_bond_softness = gp[34] + * 3.0 / xcut * pow( d, 2.0 ) + * pow( 1.0 - d, 5.0 ) * (1.0 - 3.0 * d); + d_bond_softness = -0.5 * d_bond_softness + * SQR( effpot_diff ); + d_bond_softness = KCALpMOL_to_EV * d_bond_softness + / rij; + + fcoul += d_bond_softness; + } + } + } + const F_FLOAT ftotal = fvdwl + fcoul; fxtmp += delx*ftotal; @@ -1296,15 +1381,53 @@ void PairReaxFFKokkos::operator()(PairReaxFFComputeTabulatedLJCoulom const F_FLOAT evdwl = ((vdW.d*dif + vdW.c)*dif + vdW.b)*dif + vdW.a; - const F_FLOAT ecoul = (((ele.d*dif + ele.c)*dif + ele.b)*dif + + F_FLOAT ecoul = (((ele.d*dif + ele.c)*dif + ele.b)*dif + ele.a)*qi*qj; const F_FLOAT fvdwl = ((CEvd.d*dif + CEvd.c)*dif + CEvd.b)*dif + CEvd.a; - const F_FLOAT fcoul = (((CEclmb.d*dif+CEclmb.c)*dif+CEclmb.b)*dif + + F_FLOAT fcoul = (((CEclmb.d*dif+CEclmb.c)*dif+CEclmb.b)*dif + CEclmb.a)*qi*qj; + /* contribution to energy and gradients (atoms and cell) + * due to geometry-dependent terms in the ACKS2 + * kinetic energy */ + if (acks2_flag) { + + /* kinetic energy terms */ + double xcut = 0.5 * (paramssing(itype).bcut_acks2 + + paramssing(jtype).bcut_acks2); + + if (rij <= xcut) { + const F_FLOAT d = rij / xcut; + const F_FLOAT bond_softness = gp[34] * pow( d, 3.0 ) + * pow( 1.0 - d, 6.0 ); + + if (bond_softness > 0.0) { + /* Coulombic energy contribution */ + const F_FLOAT effpot_diff = d_s[NN + i] + - d_s[NN + j]; + const F_FLOAT e_ele = -0.5 * KCALpMOL_to_EV * bond_softness + * SQR( effpot_diff ); + + ecoul += e_ele; + + /* forces contribution */ + F_FLOAT d_bond_softness; + d_bond_softness = gp[34] + * 3.0 / xcut * pow( d, 2.0 ) + * pow( 1.0 - d, 5.0 ) * (1.0 - 3.0 * d); + d_bond_softness = -0.5 * d_bond_softness + * SQR( effpot_diff ); + d_bond_softness = KCALpMOL_to_EV * d_bond_softness + / rij; + + fcoul += d_bond_softness; + } + } + } + const F_FLOAT ftotal = fvdwl + fcoul; fxtmp += delx*ftotal; fytmp += dely*ftotal; diff --git a/src/KOKKOS/pair_reaxff_kokkos.h b/src/KOKKOS/pair_reaxff_kokkos.h index 5ed89bf62f..a88248a717 100644 --- a/src/KOKKOS/pair_reaxff_kokkos.h +++ b/src/KOKKOS/pair_reaxff_kokkos.h @@ -252,12 +252,12 @@ class PairReaxFFKokkos : public PairReaxFF { struct params_sing{ KOKKOS_INLINE_FUNCTION params_sing() {mass=0;chi=0;eta=0;r_s=0;r_pi=0;r_pi2=0;valency=0;valency_val=0;valency_e=0;valency_boc=0;nlp_opt=0; - p_lp2=0;p_ovun2=0;p_ovun5=0;p_val3=0;p_val5=0;p_hbond=0;}; + p_lp2=0;p_ovun2=0;p_ovun5=0;p_val3=0;p_val5=0;p_hbond=0;bcut_acks2=0;}; KOKKOS_INLINE_FUNCTION params_sing(int /*i*/) {mass=0;chi=0;eta=0;r_s=0;r_pi=0;r_pi2=0;valency=0;valency_val=0;valency_e=0;valency_boc=0;nlp_opt=0; - p_lp2=0;p_ovun2=0;p_ovun5=0;p_val3=0;p_val5=0;p_hbond=0;}; + p_lp2=0;p_ovun2=0;p_ovun5=0;p_val3=0;p_val5=0;p_hbond=0;bcut_acks2=0;}; F_FLOAT mass,chi,eta,r_s,r_pi,r_pi2,valency,valency_val,valency_e,valency_boc,nlp_opt, - p_lp2,p_ovun2,p_ovun5, p_val3, p_val5, p_hbond; + p_lp2,p_ovun2,p_ovun5, p_val3, p_val5, p_hbond, bcut_acks2; }; struct params_twbp{ @@ -377,7 +377,7 @@ class PairReaxFFKokkos : public PairReaxFF { typename AT::t_float_1d d_tap; HAT::t_float_1d h_tap; - typename AT::t_float_1d d_bo_rij, d_hb_rsq, d_Deltap, d_Deltap_boc, d_total_bo; + typename AT::t_float_1d d_bo_rij, d_hb_rsq, d_Deltap, d_Deltap_boc, d_total_bo, d_s; typename AT::t_float_1d d_Delta, d_Delta_boc, d_Delta_lp, d_dDelta_lp, d_Delta_lp_temp, d_CdDelta; typename AT::t_ffloat_2d_dl d_BO, d_BO_s, d_BO_pi, d_BO_pi2, d_dBOp; typename AT::t_ffloat_2d_dl d_dln_BOp_pix, d_dln_BOp_piy, d_dln_BOp_piz; @@ -426,7 +426,7 @@ class PairReaxFFKokkos : public PairReaxFF { typename AT::t_ffloat_2d_dl d_dBOpx, d_dBOpy, d_dBOpz; int neighflag, newton_pair, maxnumneigh, maxhb, maxbo; - int nlocal,nall,eflag,vflag; + int nlocal,nn,NN,eflag,vflag,acks2_flag; F_FLOAT cut_nbsq, cut_hbsq, cut_bosq, bo_cut, thb_cut, thb_cutsq; F_FLOAT bo_cut_bond; diff --git a/src/OPENMP/pair_reaxff_omp.cpp b/src/OPENMP/pair_reaxff_omp.cpp index 6cf3e90575..d39672f09b 100644 --- a/src/OPENMP/pair_reaxff_omp.cpp +++ b/src/OPENMP/pair_reaxff_omp.cpp @@ -101,13 +101,17 @@ PairReaxFFOMP::~PairReaxFFOMP() void PairReaxFFOMP::init_style() { - if (!atom->q_flag) - error->all(FLERR,"Pair style reaxff/omp requires atom attribute q"); - bool have_qeq = ((modify->find_fix_by_style("^qeq/reax") != -1) - || (modify->find_fix_by_style("^qeq/shielded") != -1)); + || (modify->find_fix_by_style("^qeq/shielded") != -1) + || (modify->find_fix_by_style("^acks2/reax") != -1)); if (!have_qeq && qeqflag == 1) - error->all(FLERR,"Pair reaxff/omp requires use of fix qeq/reaxff or qeq/shielded"); + error->all(FLERR,"Pair reaxff/omp requires use of fix qeq/reaxff or qeq/shielded" + " or fix acks2/reaxff"); + + int have_acks2 = (modify->find_fix_by_style("^acks2/reax") != -1); + api->system->acks2_flag = have_acks2; + if (api->system->acks2_flag) + error->all(FLERR,"Cannot (yet) use ACKS2 with OPENMP ReaxFF"); api->system->n = atom->nlocal; // my atoms api->system->N = atom->nlocal + atom->nghost; // mine + ghosts diff --git a/src/OPENMP/reaxff_nonbonded_omp.cpp b/src/OPENMP/reaxff_nonbonded_omp.cpp index a57542f550..a2888e1993 100644 --- a/src/OPENMP/reaxff_nonbonded_omp.cpp +++ b/src/OPENMP/reaxff_nonbonded_omp.cpp @@ -221,7 +221,7 @@ namespace ReaxFF { data->my_en.e_vdW = total_EvdW; data->my_en.e_ele = total_Eele; - Compute_Polarization_Energy(system, data); + Compute_Polarization_Energy(system, data, workspace); } /* ---------------------------------------------------------------------- */ @@ -343,6 +343,6 @@ namespace ReaxFF { data->my_en.e_vdW = total_EvdW; data->my_en.e_ele = total_Eele; - Compute_Polarization_Energy(system, data); + Compute_Polarization_Energy(system, data, workspace); } } diff --git a/src/REAXFF/fix_acks2_reaxff.cpp b/src/REAXFF/fix_acks2_reaxff.cpp new file mode 100644 index 0000000000..9240bb1cee --- /dev/null +++ b/src/REAXFF/fix_acks2_reaxff.cpp @@ -0,0 +1,1091 @@ +/* ---------------------------------------------------------------------- + LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator + http://lammps.sandia.gov, Sandia National Laboratories + Steve Plimpton, sjplimp@sandia.gov + + Copyright (2003) Sandia Corporation. Under the terms of Contract + DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains + certain rights in this software. This software is distributed under + the GNU General Public License. + + See the README file in the top-level LAMMPS directory. +------------------------------------------------------------------------- */ + +/* ---------------------------------------------------------------------- + Contributing author: Stan Moore (Sandia) +------------------------------------------------------------------------- */ + +#include "fix_acks2_reaxff.h" +#include +#include +#include +#include "pair_reaxff.h" +#include "atom.h" +#include "comm.h" +#include "neighbor.h" +#include "neigh_list.h" +#include "neigh_request.h" +#include "update.h" +#include "force.h" +#include "group.h" +#include "pair.h" +#include "respa.h" +#include "memory.h" +#include "citeme.h" +#include "error.h" +#include "fix_efield.h" +#include "utils.h" +#include "reaxff_api.h" + +#include "text_file_reader.h" + +using namespace LAMMPS_NS; +using namespace FixConst; + +class parser_error : public std::exception { + std::string message; +public: + parser_error(const std::string &mesg) { message = mesg; } + const char *what() const noexcept { return message.c_str(); } +}; + +static const char cite_fix_acks2_reax[] = + "fix acks2/reaxff command:\n\n" + "@Article{O'Hearn2020,\n" + " author = {K. A. O'Hearn, A. Alperen, and H. M. Aktulga},\n" + " title = {Fast Solvers for Charge Distribution Models on Shared Memory Platforms},\n" + " journal = {SIAM J. Sci. Comput.},\n" + " year = 2020,\n" + " volume = 42,\n" + " pages = {1--22}\n" + "}\n\n"; + +/* ---------------------------------------------------------------------- */ + +FixACKS2ReaxFF::FixACKS2ReaxFF(LAMMPS *lmp, int narg, char **arg) : + FixQEqReaxFF(lmp, narg, arg) +{ + bcut = NULL; + + X_diag = NULL; + Xdia_inv = NULL; + + // BiCGStab + g = NULL; + q_hat = NULL; + r_hat = NULL; + y = NULL; + z = NULL; + + // X matrix + X.firstnbr = NULL; + X.numnbrs = NULL; + X.jlist = NULL; + X.val = NULL; + + // Update comm sizes for this fix + comm_forward = comm_reverse = 2; + + s_hist_X = s_hist_last = NULL; +} + +/* ---------------------------------------------------------------------- */ + +FixACKS2ReaxFF::~FixACKS2ReaxFF() +{ + if (copymode) return; + + memory->destroy(bcut); + + if (!reaxflag) + memory->destroy(bcut_acks2); + + memory->destroy(s_hist_X); + memory->destroy(s_hist_last); + + deallocate_storage(); + deallocate_matrix(); +} + +/* ---------------------------------------------------------------------- */ + +void FixACKS2ReaxFF::post_constructor() +{ + if (lmp->citeme) lmp->citeme->add(cite_fix_acks2_reax); + + memory->create(s_hist_last,2,nprev,"acks2/reax:s_hist_last"); + for (int i = 0; i < 2; i++) + for (int j = 0; j < nprev; ++j) + s_hist_last[i][j] = 0.0; + + grow_arrays(atom->nmax); + for (int i = 0; i < atom->nmax; i++) + for (int j = 0; j < nprev; ++j) + s_hist[i][j] = s_hist_X[i][j] = 0.0; + + pertype_parameters(pertype_option); + if (dual_enabled) + error->all(FLERR,"Dual keyword only supported with fix qeq/reax/omp"); +} + +/* ---------------------------------------------------------------------- */ + +void FixACKS2ReaxFF::pertype_parameters(char *arg) +{ + // match either new keyword "reaxff" or old keyword "reax/c" + if (utils::strmatch(arg,"^reax..$")) { + reaxflag = 1; + Pair *pair = force->pair_match("^reax..",0); + if (!pair) error->all(FLERR,"No reaxff pair style for fix qeq/reaxff"); + + int tmp; + chi = (double *) pair->extract("chi",tmp); + eta = (double *) pair->extract("eta",tmp); + gamma = (double *) pair->extract("gamma",tmp); + bcut_acks2 = (double *) pair->extract("bcut_acks2",tmp); + double* bond_softness_ptr = (double *) pair->extract("bond_softness",tmp); + + if (chi == NULL || eta == NULL || gamma == NULL || + bcut_acks2 == NULL || bond_softness_ptr == NULL) + error->all(FLERR, + "Fix acks2/reaxff could not extract params from pair reaxff"); + bond_softness = *bond_softness_ptr; + return; + } + + reaxflag = 0; + const int ntypes = atom->ntypes; + + memory->create(chi,ntypes+1,"acks2/reaxff:chi"); + memory->create(eta,ntypes+1,"acks2/reaxff:eta"); + memory->create(gamma,ntypes+1,"acks2/reaxff:gamma"); + memory->create(bcut_acks2,ntypes+1,"acks2/reaxff:bcut_acks2"); + + if (comm->me == 0) { + bond_softness = chi[0] = eta[0] = gamma[0] = 0.0; + try { + TextFileReader reader(arg,"acks2/reaxff parameter"); + reader.ignore_comments = false; + + const char *line = reader.next_line(); + if (!line) + throw parser_error("Invalid param file for fix acks2/reaxff"); + ValueTokenizer values(line); + + if (values.count() != 1) + throw parser_error("Fix acks2/reaxff: Incorrect format of param file"); + + bond_softness = values.next_double(); + + for (int i = 1; i <= ntypes; i++) { + const char *line = reader.next_line(); + if (!line) + throw parser_error("Invalid param file for fix acks2/reaxff"); + ValueTokenizer values(line); + + if (values.count() != 5) + throw parser_error("Fix acks2/reaxff: Incorrect format of param file"); + + int itype = values.next_int(); + if ((itype < 1) || (itype > ntypes)) + throw parser_error("Fix acks2/reaxff: invalid atom type in param file"); + + chi[itype] = values.next_double(); + eta[itype] = values.next_double(); + gamma[itype] = values.next_double(); + bcut_acks2[itype] = values.next_double(); + } + } catch (std::exception &e) { + error->one(FLERR,e.what()); + } + } + + MPI_Bcast(chi,ntypes+1,MPI_DOUBLE,0,world); + MPI_Bcast(eta,ntypes+1,MPI_DOUBLE,0,world); + MPI_Bcast(gamma,ntypes+1,MPI_DOUBLE,0,world); + MPI_Bcast(bcut_acks2,ntypes+1,MPI_DOUBLE,0,world); +} + +/* ---------------------------------------------------------------------- */ + +void FixACKS2ReaxFF::allocate_storage() +{ + nmax = atom->nmax; + int size = nmax*2 + 2; + + // 0 to nn-1: owned atoms related to H matrix + // nn to NN-1: ghost atoms related to H matrix + // NN to NN+nn-1: owned atoms related to X matrix + // NN+nn to 2*NN-1: ghost atoms related X matrix + // 2*NN to 2*NN+1: last two rows, owned by proc 0 + + memory->create(s,size,"acks2:s"); + memory->create(b_s,size,"acks2:b_s"); + + memory->create(Hdia_inv,nmax,"acks2:Hdia_inv"); + memory->create(chi_field,nmax,"acks2:chi_field"); + + memory->create(X_diag,nmax,"acks2:X_diag"); + memory->create(Xdia_inv,nmax,"acks2:Xdia_inv"); + + memory->create(p,size,"acks2:p"); + memory->create(q,size,"acks2:q"); + memory->create(r,size,"acks2:r"); + memory->create(d,size,"acks2:d"); + + memory->create(g,size,"acks2:g"); + memory->create(q_hat,size,"acks2:q_hat"); + memory->create(r_hat,size,"acks2:r_hat"); + memory->create(y,size,"acks2:y"); + memory->create(z,size,"acks2:z"); +} + +/* ---------------------------------------------------------------------- */ + +void FixACKS2ReaxFF::deallocate_storage() +{ + FixQEqReaxFF::deallocate_storage(); + + memory->destroy(X_diag); + memory->destroy(Xdia_inv); + + memory->destroy(g); + memory->destroy(q_hat); + memory->destroy(r_hat); + memory->destroy(y); + memory->destroy(z); +} + +/* ---------------------------------------------------------------------- */ + +void FixACKS2ReaxFF::allocate_matrix() +{ + FixQEqReaxFF::allocate_matrix(); + + X.n = n_cap; + X.m = m_cap; + memory->create(X.firstnbr,n_cap,"acks2:X.firstnbr"); + memory->create(X.numnbrs,n_cap,"acks2:X.numnbrs"); + memory->create(X.jlist,m_cap,"acks2:X.jlist"); + memory->create(X.val,m_cap,"acks2:X.val"); +} + +/* ---------------------------------------------------------------------- */ + +void FixACKS2ReaxFF::deallocate_matrix() +{ + FixQEqReaxFF::deallocate_matrix(); + + memory->destroy(X.firstnbr); + memory->destroy(X.numnbrs); + memory->destroy(X.jlist); + memory->destroy(X.val); +} + +/* ---------------------------------------------------------------------- */ + +void FixACKS2ReaxFF::init() +{ + FixQEqReaxFF::init(); + + init_bondcut(); +} + +/* ---------------------------------------------------------------------- */ + +void FixACKS2ReaxFF::init_bondcut() +{ + int i,j; + int ntypes; + + ntypes = atom->ntypes; + if (bcut == NULL) + memory->create(bcut,ntypes+1,ntypes+1,"acks2:bondcut"); + + for (i = 1; i <= ntypes; ++i) + for (j = 1; j <= ntypes; ++j) { + bcut[i][j] = 0.5*(bcut_acks2[i] + bcut_acks2[j]); + } +} + +/* ---------------------------------------------------------------------- */ + +void FixACKS2ReaxFF::init_storage() +{ + if (field_flag) + get_chi_field(); + + for (int ii = 0; ii < NN; ii++) { + int i = ilist[ii]; + if (atom->mask[i] & groupbit) { + b_s[i] = -chi[atom->type[i]]; + if (field_flag) + b_s[i] -= chi_field[i]; + b_s[NN + i] = 0.0; + s[i] = 0.0; + s[NN + i] = 0.0; + } + } + + for (int i = 0; i < 2; i++) { + b_s[2*NN + i] = 0.0; + s[2*NN + i] = 0.0; + } +} + +/* ---------------------------------------------------------------------- */ + +void FixACKS2ReaxFF::pre_force(int /*vflag*/) +{ + double t_start, t_end; + + if (update->ntimestep % nevery) return; + if (comm->me == 0) t_start = MPI_Wtime(); + + int n = atom->nlocal; + + if (reaxff) { + nn = reaxff->list->inum; + NN = reaxff->list->inum + reaxff->list->gnum; + ilist = reaxff->list->ilist; + numneigh = reaxff->list->numneigh; + firstneigh = reaxff->list->firstneigh; + } else { + nn = list->inum; + NN = list->inum + list->gnum; + ilist = list->ilist; + numneigh = list->numneigh; + firstneigh = list->firstneigh; + } + + // grow arrays if necessary + // need to be atom->nmax in length + + if (atom->nmax > nmax) reallocate_storage(); + if (n > n_cap*DANGER_ZONE || m_fill > m_cap*DANGER_ZONE) + reallocate_matrix(); + + if (field_flag) + get_chi_field(); + + init_matvec(); + + matvecs = BiCGStab(b_s, s); // BiCGStab on s - parallel + + calculate_Q(); +} + +/* ---------------------------------------------------------------------- */ + +void FixACKS2ReaxFF::init_matvec() +{ + /* fill-in H matrix */ + compute_H(); + + /* fill-in X matrix */ + compute_X(); + pack_flag = 4; + comm->reverse_comm_fix(this); //Coll_Vector(X_diag); + + int ii, i; + + for (ii = 0; ii < nn; ++ii) { + if (X_diag[ii] == 0.0) + Xdia_inv[ii] = 1.0; + else + Xdia_inv[ii] = 1.0 / X_diag[ii]; + + i = ilist[ii]; + if (atom->mask[i] & groupbit) { + + /* init pre-conditioner for H and init solution vectors */ + Hdia_inv[i] = 1. / eta[atom->type[i]]; + b_s[i] = -chi[atom->type[i]]; + if (field_flag) + b_s[i] -= chi_field[i]; + b_s[NN+i] = 0.0; + + /* cubic extrapolation for s from previous solutions */ + s[i] = 4*(s_hist[i][0]+s_hist[i][2])-(6*s_hist[i][1]+s_hist[i][3]); + s[NN+i] = 4*(s_hist_X[i][0]+s_hist_X[i][2])-(6*s_hist_X[i][1]+s_hist_X[i][3]); + } + } + + // last two rows + if (comm->me == 0) { + for (i = 0; i < 2; i++) { + b_s[2*NN+i] = 0.0; + s[2*NN+i] = 4*(s_hist_last[i][0]+s_hist_last[i][2])-(6*s_hist_last[i][1]+s_hist_last[i][3]); + } + } + + pack_flag = 2; + comm->forward_comm_fix(this); //Dist_vector(s); + more_forward_comm(s); +} + +/* ---------------------------------------------------------------------- */ + +void FixACKS2ReaxFF::compute_X() +{ + int jnum; + int i, j, ii, jj, flag; + double dx, dy, dz, r_sqr; + const double SMALL = 0.0001; + + int *type = atom->type; + tagint *tag = atom->tag; + double **x = atom->x; + int *mask = atom->mask; + + memset(X_diag,0.0,atom->nmax*sizeof(double)); + + // fill in the X matrix + m_fill = 0; + r_sqr = 0; + for (ii = 0; ii < nn; ii++) { + i = ilist[ii]; + if (mask[i] & groupbit) { + jlist = firstneigh[i]; + jnum = numneigh[i]; + X.firstnbr[i] = m_fill; + + for (jj = 0; jj < jnum; jj++) { + j = jlist[jj]; + j &= NEIGHMASK; + + dx = x[j][0] - x[i][0]; + dy = x[j][1] - x[i][1]; + dz = x[j][2] - x[i][2]; + r_sqr = SQR(dx) + SQR(dy) + SQR(dz); + + flag = 0; + if (r_sqr <= SQR(swb)) { + if (j < atom->nlocal) flag = 1; + else if (tag[i] < tag[j]) flag = 1; + else if (tag[i] == tag[j]) { + if (dz > SMALL) flag = 1; + else if (fabs(dz) < SMALL) { + if (dy > SMALL) flag = 1; + else if (fabs(dy) < SMALL && dx > SMALL) + flag = 1; + } + } + } + + if (flag) { + double bcutoff = bcut[type[i]][type[j]]; + double bcutoff2 = bcutoff*bcutoff; + if (r_sqr <= bcutoff2) { + X.jlist[m_fill] = j; + double X_val = calculate_X(sqrt(r_sqr), bcutoff); + X.val[m_fill] = X_val; + X_diag[i] -= X_val; + X_diag[j] -= X_val; + m_fill++; + } + } + } + + X.numnbrs[i] = m_fill - X.firstnbr[i]; + } + } + + if (m_fill >= X.m) { + char str[128]; + sprintf(str,"X matrix size has been exceeded: m_fill=%d X.m=%d\n", + m_fill, X.m); + error->warning(FLERR,str); + error->all(FLERR,"Fix acks2/reaxff has insufficient ACKS2 matrix size"); + } +} + +/* ---------------------------------------------------------------------- */ + +double FixACKS2ReaxFF::calculate_X(double r, double bcut) +{ + double d = r/bcut; + double d3 = d*d*d; + double omd = 1.0 - d; + double omd2 = omd*omd; + double omd6 = omd2*omd2*omd2; + + return bond_softness*d3*omd6; +} + +/* ---------------------------------------------------------------------- */ + +int FixACKS2ReaxFF::BiCGStab(double *b, double *x) +{ + int i, j; + double tmp, alpha, beta, omega, sigma, rho, rho_old, rnorm, bnorm; + + int jj; + + sparse_matvec_acks2(&H, &X, x, d); + pack_flag = 1; + comm->reverse_comm_fix(this); //Coll_Vector(d); + more_reverse_comm(d); + + vector_sum(r , 1., b, -1., d, nn); + bnorm = parallel_norm(b, nn); + rnorm = parallel_norm(r, nn); + + if (bnorm == 0.0) bnorm = 1.0; + vector_copy(r_hat, r, nn); + omega = 1.0; + rho = 1.0; + + for (i = 1; i < imax && rnorm / bnorm > tolerance; ++i) { + rho = parallel_dot(r_hat, r, nn); + if (rho == 0.0) break; + + if (i > 1) { + beta = (rho / rho_old) * (alpha / omega); + vector_sum(q , 1., p, -omega, z, nn); + vector_sum(p , 1., r, beta, q, nn); + } else { + vector_copy(p, r, nn); + } + + // pre-conditioning + for (jj = 0; jj < nn; ++jj) { + j = ilist[jj]; + if (atom->mask[j] & groupbit) { + d[j] = p[j] * Hdia_inv[j]; + d[NN+j] = p[NN+j] * Xdia_inv[j]; + } + } + // last two rows + if (comm->me == 0) { + d[2*NN] = p[2*NN]; + d[2*NN + 1] = p[2*NN + 1]; + } + + pack_flag = 1; + comm->forward_comm_fix(this); //Dist_vector(d); + more_forward_comm(d); + sparse_matvec_acks2(&H, &X, d, z); + pack_flag = 2; + comm->reverse_comm_fix(this); //Coll_vector(z); + more_reverse_comm(z); + + tmp = parallel_dot(r_hat, z, nn); + alpha = rho / tmp; + + vector_sum(q , 1., r, -alpha, z, nn); + + tmp = parallel_dot(q, q, nn); + + // early convergence check + if (tmp < tolerance) { + vector_add(x, alpha, d, nn); + break; + } + + // pre-conditioning + for (jj = 0; jj < nn; ++jj) { + j = ilist[jj]; + if (atom->mask[j] & groupbit) { + q_hat[j] = q[j] * Hdia_inv[j]; + q_hat[NN+j] = q[NN+j] * Xdia_inv[j]; + } + } + // last two rows + if (comm->me == 0) { + q_hat[2*NN] = q[2*NN]; + q_hat[2*NN + 1] = q[2*NN + 1]; + } + + pack_flag = 3; + comm->forward_comm_fix(this); //Dist_vector(q_hat); + more_forward_comm(q_hat); + sparse_matvec_acks2(&H, &X, q_hat, y); + pack_flag = 3; + comm->reverse_comm_fix(this); //Dist_vector(y); + more_reverse_comm(y); + + sigma = parallel_dot(y, q, nn); + tmp = parallel_dot(y, y, nn); + omega = sigma / tmp; + + vector_sum(g , alpha, d, omega, q_hat, nn); + vector_add(x, 1., g, nn); + vector_sum(r , 1., q, -omega, y, nn); + + rnorm = parallel_norm(r, nn); + if (omega == 0) break; + rho_old = rho; + } + + if (comm->me == 0) { + if (omega == 0 || rho == 0) { + char str[128]; + sprintf(str,"Fix acks2/reaxff BiCGStab numerical breakdown, omega = %g, rho = %g",omega,rho); + error->warning(FLERR,str); + } else if (i >= imax) { + char str[128]; + sprintf(str,"Fix acks2/reaxff BiCGStab convergence failed after %d iterations " + "at " BIGINT_FORMAT " step",i,update->ntimestep); + error->warning(FLERR,str); + } + } + + return i; +} + +/* ---------------------------------------------------------------------- */ + +void FixACKS2ReaxFF::sparse_matvec_acks2(sparse_matrix *H, sparse_matrix *X, double *x, double *b) +{ + int i, j, itr_j; + int ii; + + for (ii = 0; ii < nn; ++ii) { + i = ilist[ii]; + if (atom->mask[i] & groupbit) { + b[i] = eta[atom->type[i]] * x[i]; + b[NN + i] = X_diag[i] * x[NN + i]; + } + } + + for (ii = nn; ii < NN; ++ii) { + i = ilist[ii]; + if (atom->mask[i] & groupbit) + b[i] = 0; + b[NN + i] = 0; + } + // last two rows + b[2*NN] = 0; + b[2*NN + 1] = 0; + + for (ii = 0; ii < nn; ++ii) { + i = ilist[ii]; + if (atom->mask[i] & groupbit) { + // H Matrix + for (itr_j=H->firstnbr[i]; itr_jfirstnbr[i]+H->numnbrs[i]; itr_j++) { + j = H->jlist[itr_j]; + b[i] += H->val[itr_j] * x[j]; + b[j] += H->val[itr_j] * x[i]; + } + + // X Matrix + for (itr_j=X->firstnbr[i]; itr_jfirstnbr[i]+X->numnbrs[i]; itr_j++) { + j = X->jlist[itr_j]; + b[NN + i] += X->val[itr_j] * x[NN + j]; + b[NN + j] += X->val[itr_j] * x[NN + i]; + } + + // Identity Matrix + b[NN + i] += x[i]; + b[i] += x[NN + i]; + + // Second-to-last row/column + b[2*NN] += x[NN + i]; + b[NN + i] += x[2*NN]; + + // Last row/column + b[2*NN + 1] += x[i]; + b[i] += x[2*NN + 1]; + } + } + +} + +/* ---------------------------------------------------------------------- */ + +void FixACKS2ReaxFF::calculate_Q() +{ + int i, k; + + for (int ii = 0; ii < nn; ++ii) { + i = ilist[ii]; + if (atom->mask[i] & groupbit) { + + /* backup s */ + for (k = nprev-1; k > 0; --k) { + s_hist[i][k] = s_hist[i][k-1]; + s_hist_X[i][k] = s_hist_X[i][k-1]; + } + s_hist[i][0] = s[i]; + s_hist_X[i][0] = s[NN+i]; + } + } + // last two rows + if (comm->me == 0) { + for (int i = 0; i < 2; ++i) { + for (k = nprev-1; k > 0; --k) + s_hist_last[i][k] = s_hist_last[i][k-1]; + s_hist_last[i][0] = s[2*NN+i]; + } + } + + pack_flag = 2; + comm->forward_comm_fix(this); //Dist_vector(s); + + for (int ii = 0; ii < NN; ++ii) { + i = ilist[ii]; + if (atom->mask[i] & groupbit) + atom->q[i] = s[i]; + } +} + +/* ---------------------------------------------------------------------- */ + +int FixACKS2ReaxFF::pack_forward_comm(int n, int *list, double *buf, + int /*pbc_flag*/, int * /*pbc*/) +{ + int m = 0; + + if (pack_flag == 1) { + for(int i = 0; i < n; i++) { + int j = list[i]; + buf[m++] = d[j]; + buf[m++] = d[NN+j]; + } + } else if (pack_flag == 2) { + for(int i = 0; i < n; i++) { + int j = list[i]; + buf[m++] = s[j]; + buf[m++] = s[NN+j]; + } + } else if (pack_flag == 3) { + for(int i = 0; i < n; i++) { + int j = list[i]; + buf[m++] = q_hat[j]; + buf[m++] = q_hat[NN+j]; + } + } + return m; +} + +/* ---------------------------------------------------------------------- */ + +void FixACKS2ReaxFF::unpack_forward_comm(int n, int first, double *buf) +{ + int i, m; + + int last = first + n; + m = 0; + + if (pack_flag == 1) { + for(i = first; i < last; i++) { + d[i] = buf[m++]; + d[NN+i] = buf[m++]; + } + } else if (pack_flag == 2) { + for(i = first; i < last; i++) { + s[i] = buf[m++]; + s[NN+i] = buf[m++]; + } + } else if (pack_flag == 3) { + for(i = first; i < last; i++) { + q_hat[i] = buf[m++]; + q_hat[NN+i] = buf[m++]; + } + } +} + +/* ---------------------------------------------------------------------- */ + +int FixACKS2ReaxFF::pack_reverse_comm(int n, int first, double *buf) +{ + int i, m; + m = 0; + int last = first + n; + + if (pack_flag == 1) { + for(i = first; i < last; i++) { + buf[m++] = d[i]; + buf[m++] = d[NN+i]; + } + } else if (pack_flag == 2) { + for(i = first; i < last; i++) { + buf[m++] = z[i]; + buf[m++] = z[NN+i]; + } + } else if (pack_flag == 3) { + for(i = first; i < last; i++) { + buf[m++] = y[i]; + buf[m++] = y[NN+i]; + } + } else if (pack_flag == 4) { + for(i = first; i < last; i++) + buf[m++] = X_diag[i]; + } + + return m; +} + +/* ---------------------------------------------------------------------- */ + +void FixACKS2ReaxFF::unpack_reverse_comm(int n, int *list, double *buf) +{ + int j; + int m = 0; + if (pack_flag == 1) { + for(int i = 0; i < n; i++) { + j = list[i]; + d[j] += buf[m++]; + d[NN+j] += buf[m++]; + } + } else if (pack_flag == 2) { + for(int i = 0; i < n; i++) { + j = list[i]; + z[j] += buf[m++]; + z[NN+j] += buf[m++]; + } + } else if (pack_flag == 3) { + for(int i = 0; i < n; i++) { + j = list[i]; + y[j] += buf[m++]; + y[NN+j] += buf[m++]; + } + } else if (pack_flag == 4) { + for(int i = 0; i < n; i++) { + j = list[i]; + X_diag[j] += buf[m++]; + } + } +} + +/* ---------------------------------------------------------------------- + proc 0 broadcasts last two rows of vector to everyone else +------------------------------------------------------------------------- */ + +void FixACKS2ReaxFF::more_forward_comm(double *vec) +{ + MPI_Bcast(&vec[2*NN],2,MPI_DOUBLE,0,world); +} + +/* ---------------------------------------------------------------------- + reduce last two rows of vector and give to proc 0 +------------------------------------------------------------------------- */ + +void FixACKS2ReaxFF::more_reverse_comm(double *vec) +{ + if (comm->me == 0) + MPI_Reduce(MPI_IN_PLACE,&vec[2*NN],2,MPI_DOUBLE,MPI_SUM,0,world); + else + MPI_Reduce(&vec[2*NN],NULL,2,MPI_DOUBLE,MPI_SUM,0,world); +} + +/* ---------------------------------------------------------------------- + memory usage of local atom-based arrays +------------------------------------------------------------------------- */ + +double FixACKS2ReaxFF::memory_usage() +{ + double bytes; + + int size = 2*nmax + 2; + + bytes = size*nprev * sizeof(double); // s_hist + bytes += nmax*4 * sizeof(double); // storage + bytes += size*11 * sizeof(double); // storage + bytes += n_cap*4 * sizeof(int); // matrix... + bytes += m_cap*2 * sizeof(int); + bytes += m_cap*2 * sizeof(double); + + return bytes; +} + +/* ---------------------------------------------------------------------- + allocate solution history array +------------------------------------------------------------------------- */ + +void FixACKS2ReaxFF::grow_arrays(int nmax) +{ + memory->grow(s_hist,nmax,nprev,"acks2:s_hist"); + memory->grow(s_hist_X,nmax,nprev,"acks2:s_hist_X"); +} + +/* ---------------------------------------------------------------------- + copy values within solution history array +------------------------------------------------------------------------- */ + +void FixACKS2ReaxFF::copy_arrays(int i, int j, int /*delflag*/) +{ + for (int m = 0; m < nprev; m++) { + s_hist[j][m] = s_hist[i][m]; + s_hist_X[j][m] = s_hist_X[i][m]; + } +} + +/* ---------------------------------------------------------------------- + pack values in local atom-based array for exchange with another proc +------------------------------------------------------------------------- */ + +int FixACKS2ReaxFF::pack_exchange(int i, double *buf) +{ + for (int m = 0; m < nprev; m++) buf[m] = s_hist[i][m]; + for (int m = 0; m < nprev; m++) buf[nprev+m] = s_hist_X[i][m]; + return nprev*2; +} + +/* ---------------------------------------------------------------------- + unpack values in local atom-based array from exchange with another proc +------------------------------------------------------------------------- */ + +int FixACKS2ReaxFF::unpack_exchange(int nlocal, double *buf) +{ + for (int m = 0; m < nprev; m++) s_hist[nlocal][m] = buf[m]; + for (int m = 0; m < nprev; m++) s_hist_X[nlocal][m] = buf[nprev+m]; + return nprev*2; +} + +/* ---------------------------------------------------------------------- */ + +double FixACKS2ReaxFF::parallel_norm(double *v, int n) +{ + int i; + double my_sum, norm_sqr; + + int ii; + + my_sum = 0.0; + norm_sqr = 0.0; + for (ii = 0; ii < n; ++ii) { + i = ilist[ii]; + if (atom->mask[i] & groupbit) { + my_sum += SQR(v[i]); + my_sum += SQR(v[NN+i]); + } + } + + // last two rows + if (comm->me == 0) { + my_sum += SQR(v[2*NN]); + my_sum += SQR(v[2*NN + 1]); + } + + MPI_Allreduce(&my_sum, &norm_sqr, 1, MPI_DOUBLE, MPI_SUM, world); + + return sqrt(norm_sqr); +} + +/* ---------------------------------------------------------------------- */ + +double FixACKS2ReaxFF::parallel_dot(double *v1, double *v2, int n) +{ + int i; + double my_dot, res; + + int ii; + + my_dot = 0.0; + res = 0.0; + for (ii = 0; ii < n; ++ii) { + i = ilist[ii]; + if (atom->mask[i] & groupbit) { + my_dot += v1[i] * v2[i]; + my_dot += v1[NN+i] * v2[NN+i]; + } + } + + // last two rows + if (comm->me == 0) { + my_dot += v1[2*NN] * v2[2*NN]; + my_dot += v1[2*NN + 1] * v2[2*NN + 1]; + } + + MPI_Allreduce(&my_dot, &res, 1, MPI_DOUBLE, MPI_SUM, world); + + return res; +} + +/* ---------------------------------------------------------------------- */ + +double FixACKS2ReaxFF::parallel_vector_acc(double *v, int n) +{ + int i; + double my_acc, res; + + int ii; + + my_acc = 0.0; + res = 0.0; + for (ii = 0; ii < n; ++ii) { + i = ilist[ii]; + if (atom->mask[i] & groupbit) { + my_acc += v[i]; + my_acc += v[NN+i]; + } + } + + // last two rows + if (comm->me == 0) { + my_acc += v[2*NN]; + my_acc += v[2*NN + 1]; + } + + MPI_Allreduce(&my_acc, &res, 1, MPI_DOUBLE, MPI_SUM, world); + + return res; +} + +/* ---------------------------------------------------------------------- */ + +void FixACKS2ReaxFF::vector_sum(double* dest, double c, double* v, + double d, double* y, int k) +{ + int kk; + + for (--k; k>=0; --k) { + kk = ilist[k]; + if (atom->mask[kk] & groupbit) { + dest[kk] = c * v[kk] + d * y[kk]; + dest[NN + kk] = c * v[NN + kk] + d * y[NN + kk]; + } + } + + // last two rows + if (comm->me == 0) { + dest[2*NN] = c * v[2*NN] + d * y[2*NN]; + dest[2*NN + 1] = c * v[2*NN + 1] + d * y[2*NN + 1]; + } +} + +/* ---------------------------------------------------------------------- */ + +void FixACKS2ReaxFF::vector_add(double* dest, double c, double* v, int k) +{ + int kk; + + for (--k; k>=0; --k) { + kk = ilist[k]; + if (atom->mask[kk] & groupbit) { + dest[kk] += c * v[kk]; + dest[NN + kk] += c * v[NN + kk]; + } + } + + // last two rows + if (comm->me == 0) { + dest[2*NN] += c * v[2*NN]; + dest[2*NN + 1] += c * v[2*NN + 1]; + } +} + + +/* ---------------------------------------------------------------------- */ + +void FixACKS2ReaxFF::vector_copy(double* dest, double* v, int k) +{ + int kk; + + for (--k; k>=0; --k) { + kk = ilist[k]; + if (atom->mask[kk] & groupbit) { + dest[kk] = v[kk]; + dest[NN + kk] = v[NN + kk]; + } + } + + // last two rows + if (comm->me == 0) { + dest[2*NN] = v[2*NN]; + dest[2*NN + 1] = v[2*NN + 1]; + } +} + diff --git a/src/REAXFF/fix_acks2_reaxff.h b/src/REAXFF/fix_acks2_reaxff.h new file mode 100644 index 0000000000..221c751bb2 --- /dev/null +++ b/src/REAXFF/fix_acks2_reaxff.h @@ -0,0 +1,90 @@ +/* -*- 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(acks2/reax,FixACKS2ReaxFF) +FixStyle(acks2/reaxff,FixACKS2ReaxFF) + +#else + +#ifndef LMP_FIX_ACKS2_REAXFF_H +#define LMP_FIX_ACKS2_REAXFF_H + +#include "fix_qeq_reaxff.h" + +namespace LAMMPS_NS { + +class FixACKS2ReaxFF : public FixQEqReaxFF { + public: + FixACKS2ReaxFF(class LAMMPS *, int, char **); + virtual ~FixACKS2ReaxFF(); + void post_constructor(); + virtual void init(); + void init_storage(); + virtual void pre_force(int); + + double* get_s() {return s;} + + protected: + double **s_hist_X,**s_hist_last; + + double *bcut_acks2,bond_softness,**bcut; // acks2 parameters + + sparse_matrix X; + double *Xdia_inv; + double *X_diag; + + //BiCGStab storage + double *g, *q_hat, *r_hat, *y, *z; + + void pertype_parameters(char*); + void init_bondcut(); + void allocate_storage(); + void deallocate_storage(); + void allocate_matrix(); + void deallocate_matrix(); + + void init_matvec(); + void compute_X(); + double calculate_X(double,double); + void calculate_Q(); + + int BiCGStab(double*,double*); + void sparse_matvec_acks2(sparse_matrix*,sparse_matrix*,double*,double*); + + 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 more_forward_comm(double *); + void more_reverse_comm(double *); + double memory_usage(); + virtual void grow_arrays(int); + virtual void copy_arrays(int, int, int); + virtual int pack_exchange(int, double *); + virtual int unpack_exchange(int, double *); + + double parallel_norm( double*, int ); + double parallel_dot( double*, double*, int ); + double parallel_vector_acc( double*, int ); + + void vector_sum(double*,double,double*,double,double*,int); + void vector_add(double*, double, double*,int); + void vector_copy(double*, double*,int); +}; + +} + +#endif +#endif diff --git a/src/REAXFF/fix_qeq_reaxff.cpp b/src/REAXFF/fix_qeq_reaxff.cpp index 06c9414fbd..55d7958e07 100644 --- a/src/REAXFF/fix_qeq_reaxff.cpp +++ b/src/REAXFF/fix_qeq_reaxff.cpp @@ -25,6 +25,7 @@ #include "citeme.h" #include "comm.h" #include "error.h" +#include "fix_efield.h" #include "force.h" #include "group.h" #include "memory.h" @@ -97,10 +98,10 @@ FixQEqReaxFF::FixQEqReaxFF(LAMMPS *lmp, int narg, char **arg) : else if (strcmp(arg[iarg],"nowarn") == 0) maxwarn = 0; else if (strcmp(arg[iarg],"maxiter") == 0) { if (iarg+1 > narg-1) - error->all(FLERR,"Illegal fix qeq/reaxff command"); + error->all(FLERR,fmt::format("Illegal fix {} command", style)); imax = utils::numeric(FLERR,arg[iarg+1],false,lmp); iarg++; - } else error->all(FLERR,"Illegal fix qeq/reaxff command"); + } else error->all(FLERR,fmt::format("Illegal fix {} command", style)); iarg++; } shld = nullptr; @@ -115,6 +116,7 @@ FixQEqReaxFF::FixQEqReaxFF(LAMMPS *lmp, int narg, char **arg) : Hdia_inv = nullptr; b_s = nullptr; + chi_field = nullptr; b_t = nullptr; b_prc = nullptr; b_prm = nullptr; @@ -271,6 +273,7 @@ void FixQEqReaxFF::allocate_storage() memory->create(Hdia_inv,nmax,"qeq:Hdia_inv"); memory->create(b_s,nmax,"qeq:b_s"); + memory->create(chi_field,nmax,"qeq:chi_field"); memory->create(b_t,nmax,"qeq:b_t"); memory->create(b_prc,nmax,"qeq:b_prc"); memory->create(b_prm,nmax,"qeq:b_prm"); @@ -297,6 +300,7 @@ void FixQEqReaxFF::deallocate_storage() memory->destroy(b_t); memory->destroy(b_prc); memory->destroy(b_prm); + memory->destroy(chi_field); memory->destroy(p); memory->destroy(q); @@ -378,6 +382,11 @@ void FixQEqReaxFF::init() if (group->count(igroup) == 0) error->all(FLERR,"Fix qeq/reaxff group has no atoms"); + field_flag = 0; + for (int n = 0; n < modify->nfix; n++) + if (utils::strmatch(modify->fix[n]->style,"^efield")) + field_flag = 1; + // need a half neighbor list w/ Newton off and ghost neighbors // built whenever re-neighboring occurs @@ -502,22 +511,16 @@ void FixQEqReaxFF::min_setup_pre_force(int vflag) void FixQEqReaxFF::init_storage() { - int NN; - int *ilist; - - if (reaxff) { - NN = reaxff->list->inum + reaxff->list->gnum; - ilist = reaxff->list->ilist; - } else { - NN = list->inum + list->gnum; - ilist = list->ilist; - } + if (field_flag) + get_chi_field(); for (int ii = 0; ii < NN; ii++) { int i = ilist[ii]; if (atom->mask[i] & groupbit) { Hdia_inv[i] = 1. / eta[atom->type[i]]; b_s[i] = -chi[atom->type[i]]; + if (field_flag) + b_s[i] -= chi_field[i]; b_t[i] = -1.0; b_prc[i] = 0; b_prm[i] = 0; @@ -555,6 +558,9 @@ void FixQEqReaxFF::pre_force(int /*vflag*/) if (n > n_cap*DANGER_ZONE || m_fill > m_cap*DANGER_ZONE) reallocate_matrix(); + if (field_flag) + get_chi_field(); + init_matvec(); matvecs_s = CG(b_s, s); // CG on s - parallel @@ -594,6 +600,8 @@ void FixQEqReaxFF::init_matvec() /* init pre-conditioner for H and init solution vectors */ Hdia_inv[i] = 1. / eta[atom->type[i]]; b_s[i] = -chi[atom->type[i]]; + if (field_flag) + b_s[i] -= chi_field[i]; b_t[i] = -1.0; /* quadratic extrapolation for s & t from previous solutions */ @@ -1060,3 +1068,29 @@ void FixQEqReaxFF::vector_add(double* dest, double c, double* v, int k) } } +/* ---------------------------------------------------------------------- */ + +void FixQEqReaxFF::get_chi_field() +{ + int nlocal = atom->nlocal; + + memset(&chi_field[0],0.0,atom->nmax*sizeof(double)); + + if (!(strcmp(update->unit_style,"real") == 0)) + error->all(FLERR,"Must use unit_style real with fix qeq/reax and external fields"); + + double factor = 1.0/force->qe2f; + + // loop over all fixes, find fix efield + + for (int n = 0; n < modify->nfix; n++) { + if (utils::strmatch(modify->fix[n]->style,"^efield")) { + + FixEfield* fix_efield = (FixEfield*) modify->fix[n]; + double* field_energy = fix_efield->get_energy(); // Real units of kcal/mol/angstrom, need to convert to eV + + for (int i = 0; i < nlocal; i++) + chi_field[i] += field_energy[i]*factor; + } + } +} diff --git a/src/REAXFF/fix_qeq_reaxff.h b/src/REAXFF/fix_qeq_reaxff.h index ab037aea6b..cc5bd09791 100644 --- a/src/REAXFF/fix_qeq_reaxff.h +++ b/src/REAXFF/fix_qeq_reaxff.h @@ -45,7 +45,7 @@ class FixQEqReaxFF : public Fix { virtual void init(); void init_list(int, class NeighList *); virtual void init_storage(); - void setup_pre_force(int); + virtual void setup_pre_force(int); virtual void pre_force(int); void setup_pre_force_respa(int, int); @@ -92,6 +92,7 @@ class FixQEqReaxFF : public Fix { double *Hdia_inv; double *b_s, *b_t; double *b_prc, *b_prm; + double *chi_field; //CG storage double *p, *q, *r, *d; @@ -105,7 +106,7 @@ class FixQEqReaxFF : public Fix { virtual void deallocate_storage(); void reallocate_storage(); virtual void allocate_matrix(); - void deallocate_matrix(); + virtual void deallocate_matrix(); void reallocate_matrix(); virtual void init_matvec(); @@ -134,9 +135,13 @@ class FixQEqReaxFF : public Fix { virtual void vector_sum(double *, double, double *, double, double *, int); virtual void vector_add(double *, double, double *, int); + virtual void get_chi_field(); + // dual CG support int dual_enabled; // 0: Original, separate s & t optimization; 1: dual optimization int matvecs_s, matvecs_t; // Iteration count for each system + + int field_flag; // 1: field enabled }; } // namespace LAMMPS_NS diff --git a/src/REAXFF/pair_reaxff.cpp b/src/REAXFF/pair_reaxff.cpp index 758ee70ab7..27c85ffb1c 100644 --- a/src/REAXFF/pair_reaxff.cpp +++ b/src/REAXFF/pair_reaxff.cpp @@ -36,6 +36,7 @@ #include "neigh_request.h" #include "neighbor.h" #include "update.h" +#include "fix_acks2_reaxff.h" #include #include @@ -155,6 +156,7 @@ PairReaxFF::~PairReaxFF() delete [] chi; delete [] eta; delete [] gamma; + delete [] bcut_acks2; } memory->destroy(tmpid); @@ -179,6 +181,7 @@ void PairReaxFF::allocate() chi = new double[n+1]; eta = new double[n+1]; gamma = new double[n+1]; + bcut_acks2 = new double[n+1]; } /* ---------------------------------------------------------------------- */ @@ -337,9 +340,19 @@ void PairReaxFF::init_style() error->all(FLERR,"Pair style reaxff requires atom attribute q"); bool have_qeq = ((modify->find_fix_by_style("^qeq/reax") != -1) - || (modify->find_fix_by_style("^qeq/shielded") != -1)); + || (modify->find_fix_by_style("^qeq/shielded") != -1) + || (modify->find_fix_by_style("^acks2/reax") != -1)); if (!have_qeq && qeqflag == 1) - error->all(FLERR,"Pair reaxff requires use of fix qeq/reaxff or qeq/shielded"); + error->all(FLERR,"Pair reax/c requires use of fix qeq/reax or qeq/shielded" + " or fix acks2/reax"); + + int have_acks2 = (modify->find_fix_by_style("^acks2/reax") != -1); + api->system->acks2_flag = have_acks2; + if (api->system->acks2_flag) { + int ifix = modify->find_fix_by_style("^acks2/reax"); + FixACKS2ReaxFF* acks2_fix = (FixACKS2ReaxFF*) modify->fix[ifix]; + api->workspace->s = acks2_fix->get_s(); + } api->system->n = atom->nlocal; // my atoms api->system->N = atom->nlocal + atom->nghost; // mine + ghosts @@ -466,6 +479,12 @@ void PairReaxFF::compute(int eflag, int vflag) api->system->N = atom->nlocal + atom->nghost; // mine + ghosts api->system->bigN = static_cast (atom->natoms); // all atoms in the system + if (api->system->acks2_flag) { + int ifix = modify->find_fix_by_style("^acks2/reax"); + FixACKS2ReaxFF* acks2_fix = (FixACKS2ReaxFF*) modify->fix[ifix]; + api->workspace->s = acks2_fix->get_s(); + } + // setup data structures setup(); @@ -731,6 +750,16 @@ void *PairReaxFF::extract(const char *str, int &dim) if (map[i] >= 0) gamma[i] = api->system->reax_param.sbp[map[i]].gamma; else gamma[i] = 0.0; return (void *) gamma; + } + if (strcmp(str,"bcut_acks2") == 0 && bcut_acks2) { + for (int i = 1; i <= atom->ntypes; i++) + if (map[i] >= 0) bcut_acks2[i] = api->system->reax_param.sbp[map[i]].bcut_acks2; + else bcut_acks2[i] = 0.0; + return (void *) bcut_acks2; + } + if (strcmp(str,"bond_softness") == 0) { + double* bond_softness = &api->system->reax_param.gp.l[34]; + return (void *) bond_softness; } return nullptr; } diff --git a/src/REAXFF/pair_reaxff.h b/src/REAXFF/pair_reaxff.h index 846d4e8408..23b2ae894a 100644 --- a/src/REAXFF/pair_reaxff.h +++ b/src/REAXFF/pair_reaxff.h @@ -63,7 +63,7 @@ class PairReaxFF : public Pair { double cutmax; class FixReaxFF *fix_reaxff; - double *chi, *eta, *gamma; + double *chi, *eta, *gamma, *bcut_acks2; int qeqflag; int setup_flag; int firstwarn; diff --git a/src/REAXFF/reaxff_api.h b/src/REAXFF/reaxff_api.h index 68eb7d25a2..5c3221c188 100644 --- a/src/REAXFF/reaxff_api.h +++ b/src/REAXFF/reaxff_api.h @@ -125,7 +125,7 @@ extern void Atom_Energy(reax_system *, control_params *, simulation_data *, stor // nonbonded -extern void Compute_Polarization_Energy(reax_system *, simulation_data *); +extern void Compute_Polarization_Energy(reax_system *, simulation_data *, storage *); extern void vdW_Coulomb_Energy(reax_system *, control_params *, simulation_data *, storage *, reax_list **); extern void Tabulated_vdW_Coulomb_Energy(reax_system *, control_params *, simulation_data *, diff --git a/src/REAXFF/reaxff_ffield.cpp b/src/REAXFF/reaxff_ffield.cpp index f43ab440ff..4c3068a089 100644 --- a/src/REAXFF/reaxff_ffield.cpp +++ b/src/REAXFF/reaxff_ffield.cpp @@ -204,6 +204,7 @@ namespace ReaxFF { sbp[i].b_o_131 = values.next_double(); sbp[i].b_o_132 = values.next_double(); sbp[i].b_o_133 = values.next_double(); + sbp[i].bcut_acks2 = values.next_double(); // line four diff --git a/src/REAXFF/reaxff_nonbonded.cpp b/src/REAXFF/reaxff_nonbonded.cpp index 8a1e41da29..f7ca9e750d 100644 --- a/src/REAXFF/reaxff_nonbonded.cpp +++ b/src/REAXFF/reaxff_nonbonded.cpp @@ -32,7 +32,7 @@ #include namespace ReaxFF { - void Compute_Polarization_Energy(reax_system *system, simulation_data *data) + void Compute_Polarization_Energy(reax_system *system, simulation_data *data, storage *workspace) { int i, type_i; double q, en_tmp; @@ -45,6 +45,12 @@ namespace ReaxFF { en_tmp = KCALpMOL_to_EV * (system->reax_param.sbp[type_i].chi * q + (system->reax_param.sbp[type_i].eta / 2.) * SQR(q)); + + if (system->acks2_flag) { + /* energy due to coupling with kinetic energy potential */ + en_tmp += KCALpMOL_to_EV * q * workspace->s[ system->N + i ]; + } + data->my_en.e_pol += en_tmp; /* tally energy into global or per-atom energy accumulators */ @@ -67,6 +73,7 @@ namespace ReaxFF { double dr3gamij_1, dr3gamij_3; double e_ele, e_vdW, e_core, SMALL = 0.0001; double e_lg, de_lg, r_ij5, r_ij6, re6; + double xcut, bond_softness, d_bond_softness, d, effpot_diff; two_body_parameters *twbp; far_neighbor_data *nbr_pj; reax_list *far_nbrs; @@ -207,7 +214,83 @@ namespace ReaxFF { } } - Compute_Polarization_Energy(system, data); + /* contribution to energy and gradients (atoms and cell) + * due to geometry-dependent terms in the ACKS2 + * kinetic energy */ + if (system->acks2_flag) + for( i = 0; i < natoms; ++i ) { + if (system->my_atoms[i].type < 0) continue; + start_i = Start_Index(i, far_nbrs); + end_i = End_Index(i, far_nbrs); + orig_i = system->my_atoms[i].orig_id; + + for( pj = start_i; pj < end_i; ++pj ) { + nbr_pj = &(far_nbrs->select.far_nbr_list[pj]); + j = nbr_pj->nbr; + if (system->my_atoms[j].type < 0) continue; + orig_j = system->my_atoms[j].orig_id; + + flag = 0; + + /* kinetic energy terms */ + double xcut = 0.5 * ( system->reax_param.sbp[ system->my_atoms[i].type ].bcut_acks2 + + system->reax_param.sbp[ system->my_atoms[j].type ].bcut_acks2 ); + + if(nbr_pj->d <= xcut) { + if (j < natoms) flag = 1; + else if (orig_i < orig_j) flag = 1; + else if (orig_i == orig_j) { + if (nbr_pj->dvec[2] > SMALL) flag = 1; + else if (fabs(nbr_pj->dvec[2]) < SMALL) { + if (nbr_pj->dvec[1] > SMALL) flag = 1; + else if (fabs(nbr_pj->dvec[1]) < SMALL && nbr_pj->dvec[0] > SMALL) + flag = 1; + } + } + } + + if (flag) { + + d = nbr_pj->d / xcut; + bond_softness = system->reax_param.gp.l[34] * pow( d, 3.0 ) + * pow( 1.0 - d, 6.0 ); + + if ( bond_softness > 0.0 ) + { + /* Coulombic energy contribution */ + effpot_diff = workspace->s[system->N + i] + - workspace->s[system->N + j]; + e_ele = -0.5 * KCALpMOL_to_EV * bond_softness + * SQR( effpot_diff ); + + data->my_en.e_ele += e_ele; + + /* forces contribution */ + d_bond_softness = system->reax_param.gp.l[34] + * 3.0 / xcut * pow( d, 2.0 ) + * pow( 1.0 - d, 5.0 ) * (1.0 - 3.0 * d); + d_bond_softness = -0.5 * d_bond_softness + * SQR( effpot_diff ); + d_bond_softness = KCALpMOL_to_EV * d_bond_softness + / nbr_pj->d; + + /* tally into per-atom energy */ + if (system->pair_ptr->evflag || system->pair_ptr->vflag_atom) { + rvec_ScaledSum( delij, 1., system->my_atoms[i].x, + -1., system->my_atoms[j].x ); + f_tmp = -d_bond_softness; + system->pair_ptr->ev_tally(i,j,natoms,1,0.0,e_ele, + f_tmp,delij[0],delij[1],delij[2]); + } + + rvec_ScaledAdd( workspace->f[i], -d_bond_softness, nbr_pj->dvec ); + rvec_ScaledAdd( workspace->f[j], d_bond_softness, nbr_pj->dvec ); + } + } + } + } + + Compute_Polarization_Energy( system, data, workspace ); } void Tabulated_vdW_Coulomb_Energy(reax_system *system, control_params *control, @@ -222,6 +305,7 @@ namespace ReaxFF { double e_vdW, e_ele; double CEvd, CEclmb, SMALL = 0.0001; double f_tmp, delij[3]; + double xcut, bond_softness, d_bond_softness, d, effpot_diff; far_neighbor_data *nbr_pj; reax_list *far_nbrs; @@ -306,7 +390,83 @@ namespace ReaxFF { } } - Compute_Polarization_Energy(system, data); + /* contribution to energy and gradients (atoms and cell) + * due to geometry-dependent terms in the ACKS2 + * kinetic energy */ + if (system->acks2_flag) + for( i = 0; i < natoms; ++i ) { + if (system->my_atoms[i].type < 0) continue; + start_i = Start_Index(i, far_nbrs); + end_i = End_Index(i, far_nbrs); + orig_i = system->my_atoms[i].orig_id; + + for( pj = start_i; pj < end_i; ++pj ) { + nbr_pj = &(far_nbrs->select.far_nbr_list[pj]); + j = nbr_pj->nbr; + if (system->my_atoms[j].type < 0) continue; + orig_j = system->my_atoms[j].orig_id; + + flag = 0; + + /* kinetic energy terms */ + xcut = 0.5 * ( system->reax_param.sbp[ system->my_atoms[i].type ].bcut_acks2 + + system->reax_param.sbp[ system->my_atoms[j].type ].bcut_acks2 ); + + if(nbr_pj->d <= xcut) { + if (j < natoms) flag = 1; + else if (orig_i < orig_j) flag = 1; + else if (orig_i == orig_j) { + if (nbr_pj->dvec[2] > SMALL) flag = 1; + else if (fabs(nbr_pj->dvec[2]) < SMALL) { + if (nbr_pj->dvec[1] > SMALL) flag = 1; + else if (fabs(nbr_pj->dvec[1]) < SMALL && nbr_pj->dvec[0] > SMALL) + flag = 1; + } + } + } + + if (flag) { + + d = nbr_pj->d / xcut; + bond_softness = system->reax_param.gp.l[34] * pow( d, 3.0 ) + * pow( 1.0 - d, 6.0 ); + + if ( bond_softness > 0.0 ) + { + /* Coulombic energy contribution */ + effpot_diff = workspace->s[system->N + i] + - workspace->s[system->N + j]; + e_ele = -0.5 * KCALpMOL_to_EV * bond_softness + * SQR( effpot_diff ); + + data->my_en.e_ele += e_ele; + + /* forces contribution */ + d_bond_softness = system->reax_param.gp.l[34] + * 3.0 / xcut * pow( d, 2.0 ) + * pow( 1.0 - d, 5.0 ) * (1.0 - 3.0 * d); + d_bond_softness = -0.5 * d_bond_softness + * SQR( effpot_diff ); + d_bond_softness = KCALpMOL_to_EV * d_bond_softness + / nbr_pj->d; + + /* tally into per-atom energy */ + if (system->pair_ptr->evflag || system->pair_ptr->vflag_atom) { + rvec_ScaledSum( delij, 1., system->my_atoms[i].x, + -1., system->my_atoms[j].x ); + f_tmp = -d_bond_softness; + system->pair_ptr->ev_tally(i,j,natoms,1,0.0,e_ele, + f_tmp,delij[0],delij[1],delij[2]); + } + + rvec_ScaledAdd( workspace->f[i], -d_bond_softness, nbr_pj->dvec ); + rvec_ScaledAdd( workspace->f[j], d_bond_softness, nbr_pj->dvec ); + } + } + } + } + + Compute_Polarization_Energy(system, data, workspace); } void LR_vdW_Coulomb(reax_system *system, storage *workspace, diff --git a/src/REAXFF/reaxff_types.h b/src/REAXFF/reaxff_types.h index 6bd752f58a..57df7fe975 100644 --- a/src/REAXFF/reaxff_types.h +++ b/src/REAXFF/reaxff_types.h @@ -77,6 +77,7 @@ struct single_body_parameters { double b_o_131; double b_o_132; double b_o_133; + double bcut_acks2; // ACKS2 bond cutoff /* Line four in the field file */ double p_ovun2; @@ -212,6 +213,7 @@ struct reax_system { LR_lookup_table **LR; int omp_active; + int acks2_flag; }; /* system control parameters */ @@ -340,6 +342,9 @@ struct storage { double *CdDeltaReduction; int *valence_angle_atom_myoffset; + /* acks2 */ + double *s; + reallocate_data realloc; }; diff --git a/src/fix_efield.cpp b/src/fix_efield.cpp index 98cecd8a01..4009e3de3d 100644 --- a/src/fix_efield.cpp +++ b/src/fix_efield.cpp @@ -42,7 +42,7 @@ enum{NONE,CONSTANT,EQUAL,ATOM}; FixEfield::FixEfield(LAMMPS *lmp, int narg, char **arg) : Fix(lmp, narg, arg), xstr(nullptr), ystr(nullptr), zstr(nullptr), - estr(nullptr), idregion(nullptr), efield(nullptr) + estr(nullptr), idregion(nullptr), efield(nullptr), energy(nullptr) { if (narg < 6) error->all(FLERR,"Illegal fix efield command"); @@ -111,6 +111,8 @@ FixEfield::FixEfield(LAMMPS *lmp, int narg, char **arg) : maxatom = atom->nmax; memory->create(efield,maxatom,4,"efield:efield"); + + maxatom_energy = 0; } /* ---------------------------------------------------------------------- */ @@ -123,6 +125,7 @@ FixEfield::~FixEfield() delete [] estr; delete [] idregion; memory->destroy(efield); + memory->destroy(energy); } /* ---------------------------------------------------------------------- */ @@ -449,3 +452,71 @@ double FixEfield::compute_vector(int n) } return fsum_all[n+1]; } + +/* ---------------------------------------------------------------------- + get E +------------------------------------------------------------------------- */ + +double* FixEfield::get_energy() +{ + double **x = atom->x; + double *q = atom->q; + int *mask = atom->mask; + imageint *image = atom->image; + + int nlocal = atom->nlocal; + + // reallocate energy array if necessary + + if (atom->nmax > maxatom_energy) { + maxatom_energy = atom->nmax; + memory->destroy(energy); + memory->create(energy,maxatom_energy,"efield:energy"); + } + memset(&energy[0],0.0,maxatom_energy*sizeof(double)); + + // update region if necessary + + Region *region = NULL; + if (iregion >= 0) { + region = domain->regions[iregion]; + region->prematch(); + } + + int warn_flag_local = 0; + + // constant efield + + if (varflag == CONSTANT) { + double unwrap[3]; + + // charge interactions + // force = qE, potential energy = F dot x in unwrapped coords + + if (qflag) { + for (int i = 0; i < nlocal; i++) { + if (mask[i] & groupbit) { + if (region && !region->match(x[i][0],x[i][1],x[i][2])) continue; + const double fx = ex; + const double fy = ey; + const double fz = ez; + + domain->unmap(x[i],image[i],unwrap); + energy[i] -= fx*unwrap[0] + fy*unwrap[1] + fz*unwrap[2]; + if (fabs(fx*(x[i][0]-unwrap[0])) + fabs(fy*(x[i][1]-unwrap[1])) + + fabs(fz*(x[i][2]-unwrap[2])) > 0.0) + warn_flag_local = 1; + } + } + } + } else { + error->all(FLERR,"Cannot yet use fix qeq/reaxff with variable efield"); + } + + int warn_flag; + MPI_Allreduce(&warn_flag_local,&warn_flag,1,MPI_INT,MPI_SUM,world); + if (warn_flag && comm->me == 0) + error->warning(FLERR,"Using non-zero image flags in field direction with fix qeq/reaxff"); + + return energy; +} diff --git a/src/fix_efield.h b/src/fix_efield.h index c9496e29d2..86ccdae7e5 100644 --- a/src/fix_efield.h +++ b/src/fix_efield.h @@ -38,6 +38,7 @@ class FixEfield : public Fix { double memory_usage(); double compute_scalar(); double compute_vector(int); + double* get_energy(); private: double ex, ey, ez; @@ -49,8 +50,8 @@ class FixEfield : public Fix { double qe2f; int qflag, muflag; - int maxatom; - double **efield; + int maxatom,maxatom_energy; + double **efield,*energy; int force_flag; double fsum[4], fsum_all[4]; From ede892c83f8759cad83b71814243f316a569be21 Mon Sep 17 00:00:00 2001 From: Stan Gerald Moore Date: Wed, 8 Sep 2021 15:45:54 -0600 Subject: [PATCH 004/372] whitespace --- src/KOKKOS/fix_acks2_reaxff_kokkos.cpp | 12 ++++++------ src/REAXFF/fix_acks2_reaxff.cpp | 2 +- src/REAXFF/reaxff_types.h | 4 ++-- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/src/KOKKOS/fix_acks2_reaxff_kokkos.cpp b/src/KOKKOS/fix_acks2_reaxff_kokkos.cpp index c4b6a6b931..93d7dec277 100644 --- a/src/KOKKOS/fix_acks2_reaxff_kokkos.cpp +++ b/src/KOKKOS/fix_acks2_reaxff_kokkos.cpp @@ -289,7 +289,7 @@ void FixACKS2ReaxFFKokkos::pre_force(int vflag) if (neighflag == FULL) { FixACKS2ReaxFFKokkosComputeXFunctor computeX_functor(this); Kokkos::parallel_scan(nn,computeX_functor); - } else if (neighflag == HALFTHREAD) { + } else if (neighflag == HALFTHREAD) { FixACKS2ReaxFFKokkosComputeXFunctor computeX_functor(this); Kokkos::parallel_scan(nn,computeX_functor); } else { @@ -478,7 +478,7 @@ void FixACKS2ReaxFFKokkos::allocate_array() template void FixACKS2ReaxFFKokkos::deallocate_array() -{ +{ memoryKK->destroy_kokkos(k_s,s); memoryKK->destroy_kokkos(k_chi_field,chi_field); memoryKK->destroy_kokkos(X_diag); @@ -1268,7 +1268,7 @@ int FixACKS2ReaxFFKokkos::bicgstab_solve() pack_flag = 3; k_y.template modify(); k_y.template sync(); - if (neighflag != FULL) + if (neighflag != FULL) comm->reverse_comm_fix(this); //Coll_vector( y ); more_reverse_comm(k_y.h_view.data()); k_y.template modify(); @@ -1683,13 +1683,13 @@ void FixACKS2ReaxFFKokkos::operator() (TagACKS2Dot4, const int &ii, template KOKKOS_INLINE_FUNCTION void FixACKS2ReaxFFKokkos::operator() (TagACKS2Dot5, const int &ii, double &lsum) const -{ +{ const int i = d_ilist[ii]; if (mask[i] & groupbit) { lsum += d_y[i] * d_y[i]; lsum += d_y[NN+i] * d_y[NN+i]; } - + // last two rows if (comm_me_0_flag && ii == 0) { lsum += d_y[2*NN] * d_y[2*NN]; @@ -1732,7 +1732,7 @@ void FixACKS2ReaxFFKokkos::operator() (TagACKS2Precon2, const int &i if (comm_me_0_flag && ii == 0) { d_q_hat[2*NN] = d_q[2*NN]; d_q_hat[2*NN + 1] = d_q[2*NN + 1]; - } + } } /* ---------------------------------------------------------------------- */ diff --git a/src/REAXFF/fix_acks2_reaxff.cpp b/src/REAXFF/fix_acks2_reaxff.cpp index 9240bb1cee..e2287a06da 100644 --- a/src/REAXFF/fix_acks2_reaxff.cpp +++ b/src/REAXFF/fix_acks2_reaxff.cpp @@ -543,7 +543,7 @@ int FixACKS2ReaxFF::BiCGStab(double *b, double *x) if (i > 1) { beta = (rho / rho_old) * (alpha / omega); vector_sum(q , 1., p, -omega, z, nn); - vector_sum(p , 1., r, beta, q, nn); + vector_sum(p , 1., r, beta, q, nn); } else { vector_copy(p, r, nn); } diff --git a/src/REAXFF/reaxff_types.h b/src/REAXFF/reaxff_types.h index 57df7fe975..081b297200 100644 --- a/src/REAXFF/reaxff_types.h +++ b/src/REAXFF/reaxff_types.h @@ -77,7 +77,7 @@ struct single_body_parameters { double b_o_131; double b_o_132; double b_o_133; - double bcut_acks2; // ACKS2 bond cutoff + double bcut_acks2; // ACKS2 bond cutoff /* Line four in the field file */ double p_ovun2; @@ -213,7 +213,7 @@ struct reax_system { LR_lookup_table **LR; int omp_active; - int acks2_flag; + int acks2_flag; }; /* system control parameters */ From 165efcdb0720ecb6dccc1e2dea664f25aae5f8e3 Mon Sep 17 00:00:00 2001 From: Stan Gerald Moore Date: Wed, 8 Sep 2021 15:50:53 -0600 Subject: [PATCH 005/372] homepage --- src/KOKKOS/fix_acks2_reaxff_kokkos.cpp | 2 +- src/KOKKOS/fix_acks2_reaxff_kokkos.h | 2 +- src/REAXFF/fix_acks2_reaxff.cpp | 3 ++- src/REAXFF/fix_acks2_reaxff.h | 3 ++- 4 files changed, 6 insertions(+), 4 deletions(-) diff --git a/src/KOKKOS/fix_acks2_reaxff_kokkos.cpp b/src/KOKKOS/fix_acks2_reaxff_kokkos.cpp index 93d7dec277..7d60009366 100644 --- a/src/KOKKOS/fix_acks2_reaxff_kokkos.cpp +++ b/src/KOKKOS/fix_acks2_reaxff_kokkos.cpp @@ -1,6 +1,6 @@ /* ---------------------------------------------------------------------- LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator - http://lammps.sandia.gov, Sandia National Laboratories + https://www.lammps.org/, Sandia National Laboratories Steve Plimpton, sjplimp@sandia.gov Copyright (2003) Sandia Corporation. Under the terms of Contract diff --git a/src/KOKKOS/fix_acks2_reaxff_kokkos.h b/src/KOKKOS/fix_acks2_reaxff_kokkos.h index 2fbeafc6b3..70ed58ecb4 100644 --- a/src/KOKKOS/fix_acks2_reaxff_kokkos.h +++ b/src/KOKKOS/fix_acks2_reaxff_kokkos.h @@ -1,6 +1,6 @@ /* -*- c++ -*- ---------------------------------------------------------- LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator - http://lammps.sandia.gov, Sandia National Laboratories + https://www.lammps.org/, Sandia National Laboratories Steve Plimpton, sjplimp@sandia.gov Copyright (2003) Sandia Corporation. Under the terms of Contract diff --git a/src/REAXFF/fix_acks2_reaxff.cpp b/src/REAXFF/fix_acks2_reaxff.cpp index e2287a06da..0196b1319b 100644 --- a/src/REAXFF/fix_acks2_reaxff.cpp +++ b/src/REAXFF/fix_acks2_reaxff.cpp @@ -1,6 +1,7 @@ +// clang-format off /* ---------------------------------------------------------------------- LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator - http://lammps.sandia.gov, Sandia National Laboratories + https://www.lammps.org/, Sandia National Laboratories Steve Plimpton, sjplimp@sandia.gov Copyright (2003) Sandia Corporation. Under the terms of Contract diff --git a/src/REAXFF/fix_acks2_reaxff.h b/src/REAXFF/fix_acks2_reaxff.h index 221c751bb2..71104f13dc 100644 --- a/src/REAXFF/fix_acks2_reaxff.h +++ b/src/REAXFF/fix_acks2_reaxff.h @@ -1,6 +1,7 @@ +// clang-format off /* -*- c++ -*- ---------------------------------------------------------- LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator - http://lammps.sandia.gov, Sandia National Laboratories + https://www.lammps.org/, Sandia National Laboratories Steve Plimpton, sjplimp@sandia.gov Copyright (2003) Sandia Corporation. Under the terms of Contract From 7c5a9841f73fd8e0ab5aea51951c56eda1d167cf Mon Sep 17 00:00:00 2001 From: Stan Gerald Moore Date: Wed, 8 Sep 2021 16:01:45 -0600 Subject: [PATCH 006/372] more whitespace --- src/REAXFF/reaxff_nonbonded.cpp | 208 ++++++++++++++++---------------- src/fix_efield.cpp | 2 +- 2 files changed, 105 insertions(+), 105 deletions(-) diff --git a/src/REAXFF/reaxff_nonbonded.cpp b/src/REAXFF/reaxff_nonbonded.cpp index f7ca9e750d..c09a259568 100644 --- a/src/REAXFF/reaxff_nonbonded.cpp +++ b/src/REAXFF/reaxff_nonbonded.cpp @@ -225,68 +225,68 @@ namespace ReaxFF { orig_i = system->my_atoms[i].orig_id; for( pj = start_i; pj < end_i; ++pj ) { - nbr_pj = &(far_nbrs->select.far_nbr_list[pj]); - j = nbr_pj->nbr; - if (system->my_atoms[j].type < 0) continue; - orig_j = system->my_atoms[j].orig_id; + nbr_pj = &(far_nbrs->select.far_nbr_list[pj]); + j = nbr_pj->nbr; + if (system->my_atoms[j].type < 0) continue; + orig_j = system->my_atoms[j].orig_id; - flag = 0; + flag = 0; - /* kinetic energy terms */ - double xcut = 0.5 * ( system->reax_param.sbp[ system->my_atoms[i].type ].bcut_acks2 - + system->reax_param.sbp[ system->my_atoms[j].type ].bcut_acks2 ); + /* kinetic energy terms */ + double xcut = 0.5 * ( system->reax_param.sbp[ system->my_atoms[i].type ].bcut_acks2 + + system->reax_param.sbp[ system->my_atoms[j].type ].bcut_acks2 ); - if(nbr_pj->d <= xcut) { - if (j < natoms) flag = 1; - else if (orig_i < orig_j) flag = 1; - else if (orig_i == orig_j) { - if (nbr_pj->dvec[2] > SMALL) flag = 1; - else if (fabs(nbr_pj->dvec[2]) < SMALL) { - if (nbr_pj->dvec[1] > SMALL) flag = 1; - else if (fabs(nbr_pj->dvec[1]) < SMALL && nbr_pj->dvec[0] > SMALL) - flag = 1; - } - } - } + if(nbr_pj->d <= xcut) { + if (j < natoms) flag = 1; + else if (orig_i < orig_j) flag = 1; + else if (orig_i == orig_j) { + if (nbr_pj->dvec[2] > SMALL) flag = 1; + else if (fabs(nbr_pj->dvec[2]) < SMALL) { + if (nbr_pj->dvec[1] > SMALL) flag = 1; + else if (fabs(nbr_pj->dvec[1]) < SMALL && nbr_pj->dvec[0] > SMALL) + flag = 1; + } + } + } - if (flag) { + if (flag) { - d = nbr_pj->d / xcut; - bond_softness = system->reax_param.gp.l[34] * pow( d, 3.0 ) - * pow( 1.0 - d, 6.0 ); + d = nbr_pj->d / xcut; + bond_softness = system->reax_param.gp.l[34] * pow( d, 3.0 ) + * pow( 1.0 - d, 6.0 ); - if ( bond_softness > 0.0 ) - { - /* Coulombic energy contribution */ - effpot_diff = workspace->s[system->N + i] - - workspace->s[system->N + j]; - e_ele = -0.5 * KCALpMOL_to_EV * bond_softness - * SQR( effpot_diff ); + if ( bond_softness > 0.0 ) + { + /* Coulombic energy contribution */ + effpot_diff = workspace->s[system->N + i] + - workspace->s[system->N + j]; + e_ele = -0.5 * KCALpMOL_to_EV * bond_softness + * SQR( effpot_diff ); - data->my_en.e_ele += e_ele; + data->my_en.e_ele += e_ele; - /* forces contribution */ - d_bond_softness = system->reax_param.gp.l[34] - * 3.0 / xcut * pow( d, 2.0 ) - * pow( 1.0 - d, 5.0 ) * (1.0 - 3.0 * d); - d_bond_softness = -0.5 * d_bond_softness - * SQR( effpot_diff ); - d_bond_softness = KCALpMOL_to_EV * d_bond_softness - / nbr_pj->d; + /* forces contribution */ + d_bond_softness = system->reax_param.gp.l[34] + * 3.0 / xcut * pow( d, 2.0 ) + * pow( 1.0 - d, 5.0 ) * (1.0 - 3.0 * d); + d_bond_softness = -0.5 * d_bond_softness + * SQR( effpot_diff ); + d_bond_softness = KCALpMOL_to_EV * d_bond_softness + / nbr_pj->d; - /* tally into per-atom energy */ - if (system->pair_ptr->evflag || system->pair_ptr->vflag_atom) { - rvec_ScaledSum( delij, 1., system->my_atoms[i].x, - -1., system->my_atoms[j].x ); - f_tmp = -d_bond_softness; - system->pair_ptr->ev_tally(i,j,natoms,1,0.0,e_ele, - f_tmp,delij[0],delij[1],delij[2]); - } + /* tally into per-atom energy */ + if (system->pair_ptr->evflag || system->pair_ptr->vflag_atom) { + rvec_ScaledSum( delij, 1., system->my_atoms[i].x, + -1., system->my_atoms[j].x ); + f_tmp = -d_bond_softness; + system->pair_ptr->ev_tally(i,j,natoms,1,0.0,e_ele, + f_tmp,delij[0],delij[1],delij[2]); + } - rvec_ScaledAdd( workspace->f[i], -d_bond_softness, nbr_pj->dvec ); - rvec_ScaledAdd( workspace->f[j], d_bond_softness, nbr_pj->dvec ); - } - } + rvec_ScaledAdd( workspace->f[i], -d_bond_softness, nbr_pj->dvec ); + rvec_ScaledAdd( workspace->f[j], d_bond_softness, nbr_pj->dvec ); + } + } } } @@ -401,68 +401,68 @@ namespace ReaxFF { orig_i = system->my_atoms[i].orig_id; for( pj = start_i; pj < end_i; ++pj ) { - nbr_pj = &(far_nbrs->select.far_nbr_list[pj]); - j = nbr_pj->nbr; - if (system->my_atoms[j].type < 0) continue; - orig_j = system->my_atoms[j].orig_id; + nbr_pj = &(far_nbrs->select.far_nbr_list[pj]); + j = nbr_pj->nbr; + if (system->my_atoms[j].type < 0) continue; + orig_j = system->my_atoms[j].orig_id; - flag = 0; + flag = 0; - /* kinetic energy terms */ - xcut = 0.5 * ( system->reax_param.sbp[ system->my_atoms[i].type ].bcut_acks2 - + system->reax_param.sbp[ system->my_atoms[j].type ].bcut_acks2 ); + /* kinetic energy terms */ + xcut = 0.5 * ( system->reax_param.sbp[ system->my_atoms[i].type ].bcut_acks2 + + system->reax_param.sbp[ system->my_atoms[j].type ].bcut_acks2 ); - if(nbr_pj->d <= xcut) { - if (j < natoms) flag = 1; - else if (orig_i < orig_j) flag = 1; - else if (orig_i == orig_j) { - if (nbr_pj->dvec[2] > SMALL) flag = 1; - else if (fabs(nbr_pj->dvec[2]) < SMALL) { - if (nbr_pj->dvec[1] > SMALL) flag = 1; - else if (fabs(nbr_pj->dvec[1]) < SMALL && nbr_pj->dvec[0] > SMALL) - flag = 1; - } - } - } + if(nbr_pj->d <= xcut) { + if (j < natoms) flag = 1; + else if (orig_i < orig_j) flag = 1; + else if (orig_i == orig_j) { + if (nbr_pj->dvec[2] > SMALL) flag = 1; + else if (fabs(nbr_pj->dvec[2]) < SMALL) { + if (nbr_pj->dvec[1] > SMALL) flag = 1; + else if (fabs(nbr_pj->dvec[1]) < SMALL && nbr_pj->dvec[0] > SMALL) + flag = 1; + } + } + } - if (flag) { + if (flag) { - d = nbr_pj->d / xcut; - bond_softness = system->reax_param.gp.l[34] * pow( d, 3.0 ) - * pow( 1.0 - d, 6.0 ); + d = nbr_pj->d / xcut; + bond_softness = system->reax_param.gp.l[34] * pow( d, 3.0 ) + * pow( 1.0 - d, 6.0 ); - if ( bond_softness > 0.0 ) - { - /* Coulombic energy contribution */ - effpot_diff = workspace->s[system->N + i] - - workspace->s[system->N + j]; - e_ele = -0.5 * KCALpMOL_to_EV * bond_softness - * SQR( effpot_diff ); + if ( bond_softness > 0.0 ) + { + /* Coulombic energy contribution */ + effpot_diff = workspace->s[system->N + i] + - workspace->s[system->N + j]; + e_ele = -0.5 * KCALpMOL_to_EV * bond_softness + * SQR( effpot_diff ); - data->my_en.e_ele += e_ele; + data->my_en.e_ele += e_ele; - /* forces contribution */ - d_bond_softness = system->reax_param.gp.l[34] - * 3.0 / xcut * pow( d, 2.0 ) - * pow( 1.0 - d, 5.0 ) * (1.0 - 3.0 * d); - d_bond_softness = -0.5 * d_bond_softness - * SQR( effpot_diff ); - d_bond_softness = KCALpMOL_to_EV * d_bond_softness - / nbr_pj->d; + /* forces contribution */ + d_bond_softness = system->reax_param.gp.l[34] + * 3.0 / xcut * pow( d, 2.0 ) + * pow( 1.0 - d, 5.0 ) * (1.0 - 3.0 * d); + d_bond_softness = -0.5 * d_bond_softness + * SQR( effpot_diff ); + d_bond_softness = KCALpMOL_to_EV * d_bond_softness + / nbr_pj->d; - /* tally into per-atom energy */ - if (system->pair_ptr->evflag || system->pair_ptr->vflag_atom) { - rvec_ScaledSum( delij, 1., system->my_atoms[i].x, - -1., system->my_atoms[j].x ); - f_tmp = -d_bond_softness; - system->pair_ptr->ev_tally(i,j,natoms,1,0.0,e_ele, - f_tmp,delij[0],delij[1],delij[2]); - } + /* tally into per-atom energy */ + if (system->pair_ptr->evflag || system->pair_ptr->vflag_atom) { + rvec_ScaledSum( delij, 1., system->my_atoms[i].x, + -1., system->my_atoms[j].x ); + f_tmp = -d_bond_softness; + system->pair_ptr->ev_tally(i,j,natoms,1,0.0,e_ele, + f_tmp,delij[0],delij[1],delij[2]); + } - rvec_ScaledAdd( workspace->f[i], -d_bond_softness, nbr_pj->dvec ); - rvec_ScaledAdd( workspace->f[j], d_bond_softness, nbr_pj->dvec ); - } - } + rvec_ScaledAdd( workspace->f[i], -d_bond_softness, nbr_pj->dvec ); + rvec_ScaledAdd( workspace->f[j], d_bond_softness, nbr_pj->dvec ); + } + } } } diff --git a/src/fix_efield.cpp b/src/fix_efield.cpp index 4009e3de3d..fc260e2622 100644 --- a/src/fix_efield.cpp +++ b/src/fix_efield.cpp @@ -503,7 +503,7 @@ double* FixEfield::get_energy() domain->unmap(x[i],image[i],unwrap); energy[i] -= fx*unwrap[0] + fy*unwrap[1] + fz*unwrap[2]; - if (fabs(fx*(x[i][0]-unwrap[0])) + fabs(fy*(x[i][1]-unwrap[1])) + + if (fabs(fx*(x[i][0]-unwrap[0])) + fabs(fy*(x[i][1]-unwrap[1])) + fabs(fz*(x[i][2]-unwrap[2])) > 0.0) warn_flag_local = 1; } From 826c4e1cd7cedeaf8f2feeb038f761a8e9354d14 Mon Sep 17 00:00:00 2001 From: Stan Gerald Moore Date: Wed, 8 Sep 2021 20:40:35 -0600 Subject: [PATCH 007/372] Allow fix acks2 to be backwards compatible with old reax name style --- src/KOKKOS/fix_acks2_reaxff_kokkos.h | 3 +++ src/KOKKOS/pair_reaxff_kokkos.cpp | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/src/KOKKOS/fix_acks2_reaxff_kokkos.h b/src/KOKKOS/fix_acks2_reaxff_kokkos.h index 70ed58ecb4..852cab141b 100644 --- a/src/KOKKOS/fix_acks2_reaxff_kokkos.h +++ b/src/KOKKOS/fix_acks2_reaxff_kokkos.h @@ -16,6 +16,9 @@ FixStyle(acks2/reaxff/kk,FixACKS2ReaxFFKokkos) FixStyle(acks2/reaxff/kk/device,FixACKS2ReaxFFKokkos) FixStyle(acks2/reaxff/kk/host,FixACKS2ReaxFFKokkos) +FixStyle(acks2/reax/kk,FixACKS2ReaxFFKokkos) +FixStyle(acks2/reax/kk/device,FixACKS2ReaxFFKokkos) +FixStyle(acks2/reax/kk/host,FixACKS2ReaxFFKokkos) #else diff --git a/src/KOKKOS/pair_reaxff_kokkos.cpp b/src/KOKKOS/pair_reaxff_kokkos.cpp index 5e5b439eea..43a650efb2 100644 --- a/src/KOKKOS/pair_reaxff_kokkos.cpp +++ b/src/KOKKOS/pair_reaxff_kokkos.cpp @@ -147,7 +147,7 @@ void PairReaxFFKokkos::init_style() int ifix = modify->find_fix_by_style("^acks2/reax"); Fix* fix = modify->fix[ifix]; if (!fix->kokkosable) - error->all(FLERR,"Must use Kokkos version of acks2/reax with pair reaxc/kk"); + error->all(FLERR,"Must use Kokkos version of acks2/reaxff with pair reaxff/kk"); if (fix->execution_space == Host) { FixACKS2ReaxFFKokkos* acks2_fix = (FixACKS2ReaxFFKokkos*) modify->fix[ifix]; auto k_s = acks2_fix->get_s(); From 4f825db5ab0eab7792e28fd80c9fcdd834f05390 Mon Sep 17 00:00:00 2001 From: Stan Gerald Moore Date: Wed, 8 Sep 2021 20:54:42 -0600 Subject: [PATCH 008/372] Add external field contribution to OPENMP QEq --- src/OPENMP/fix_qeq_reaxff_omp.cpp | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/OPENMP/fix_qeq_reaxff_omp.cpp b/src/OPENMP/fix_qeq_reaxff_omp.cpp index 89b75bfe7a..e3a087959a 100644 --- a/src/OPENMP/fix_qeq_reaxff_omp.cpp +++ b/src/OPENMP/fix_qeq_reaxff_omp.cpp @@ -232,12 +232,17 @@ void FixQEqReaxFFOMP::compute_H() void FixQEqReaxFFOMP::init_storage() { + if (field_flag) + get_chi_field(); + #if defined(_OPENMP) #pragma omp parallel for schedule(static) #endif for (int i = 0; i < NN; i++) { Hdia_inv[i] = 1. / eta[atom->type[i]]; b_s[i] = -chi[atom->type[i]]; + if (field_flag) + b_s[i] -= chi_field[i]; b_t[i] = -1.0; b_prc[i] = 0; b_prm[i] = 0; @@ -274,6 +279,9 @@ void FixQEqReaxFFOMP::pre_force(int /* vflag */) if (n > n_cap*DANGER_ZONE || m_fill > m_cap*DANGER_ZONE) reallocate_matrix(); + if (field_flag) + get_chi_field(); + init_matvec(); if (dual_enabled) { @@ -310,6 +318,8 @@ void FixQEqReaxFFOMP::init_matvec() /* init pre-conditioner for H and init solution vectors */ Hdia_inv[i] = 1. / eta[atom->type[i]]; b_s[i] = -chi[atom->type[i]]; + if (field_flag) + b_s[i] -= chi_field[i]; b_t[i] = -1.0; // Predictor Step From ccbd24352e120490367854aac7bd3b154a01e047 Mon Sep 17 00:00:00 2001 From: Stan Moore Date: Thu, 9 Sep 2021 08:03:06 -0600 Subject: [PATCH 009/372] Remove const to work around GCC 7 compiler bug --- src/KOKKOS/fix_acks2_reaxff_kokkos.cpp | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/KOKKOS/fix_acks2_reaxff_kokkos.cpp b/src/KOKKOS/fix_acks2_reaxff_kokkos.cpp index 7d60009366..6802d89a25 100644 --- a/src/KOKKOS/fix_acks2_reaxff_kokkos.cpp +++ b/src/KOKKOS/fix_acks2_reaxff_kokkos.cpp @@ -668,8 +668,8 @@ void FixACKS2ReaxFFKokkos::compute_h_team( const X_FLOAT ytmp = x(i, 1); const X_FLOAT ztmp = x(i, 2); const int itype = type(i); - const tagint itag = tag(i); - const int jnum = s_numnbrs[idx]; + tagint itag = tag(i); + int jnum = s_numnbrs[idx]; // calculate the write-offset for atom-i's first neighbor int atomi_firstnbr_idx = team_firstnbr_idx + s_firstnbr[idx]; @@ -974,8 +974,8 @@ void FixACKS2ReaxFFKokkos::compute_x_team( const X_FLOAT ytmp = x(i, 1); const X_FLOAT ztmp = x(i, 2); const int itype = type(i); - const tagint itag = tag(i); - const int jnum = s_numnbrs[idx]; + tagint itag = tag(i); + int jnum = s_numnbrs[idx]; // calculate the write-offset for atom-i's first neighbor int atomi_firstnbr_idx = team_firstnbr_idx + s_firstnbr[idx]; @@ -1461,7 +1461,7 @@ template KOKKOS_INLINE_FUNCTION void FixACKS2ReaxFFKokkos::operator() (TagACKS2SparseMatvec3_Full, const membertype &team) const { - const int i = d_ilist[team.league_rank()]; + int i = d_ilist[team.league_rank()]; if (mask[i] & groupbit) { F_FLOAT sum; F_FLOAT sum2; From 70cbc5e364aff8adf977392f33439141d2678cde Mon Sep 17 00:00:00 2001 From: Stan Gerald Moore Date: Thu, 9 Sep 2021 08:30:57 -0600 Subject: [PATCH 010/372] Add external field contribution to OPENMP QEq --- src/OPENMP/fix_qeq_reaxff_omp.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/OPENMP/fix_qeq_reaxff_omp.cpp b/src/OPENMP/fix_qeq_reaxff_omp.cpp index e3a087959a..2071755fd1 100644 --- a/src/OPENMP/fix_qeq_reaxff_omp.cpp +++ b/src/OPENMP/fix_qeq_reaxff_omp.cpp @@ -348,6 +348,8 @@ void FixQEqReaxFFOMP::init_matvec() /* init pre-conditioner for H and init solution vectors */ Hdia_inv[i] = 1. / eta[atom->type[i]]; b_s[i] = -chi[atom->type[i]]; + if (field_flag) + b_s[i] -= chi_field[i]; b_t[i] = -1.0; /* linear extrapolation for s & t from previous solutions */ From 214725d1eec9b45540378a72d6eae7b6d025b24d Mon Sep 17 00:00:00 2001 From: Stan Gerald Moore Date: Thu, 9 Sep 2021 09:20:24 -0600 Subject: [PATCH 011/372] Use full precision for 1/3 --- src/KOKKOS/fix_acks2_reaxff_kokkos.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/KOKKOS/fix_acks2_reaxff_kokkos.cpp b/src/KOKKOS/fix_acks2_reaxff_kokkos.cpp index 6802d89a25..ffe1bf65b8 100644 --- a/src/KOKKOS/fix_acks2_reaxff_kokkos.cpp +++ b/src/KOKKOS/fix_acks2_reaxff_kokkos.cpp @@ -797,7 +797,7 @@ double FixACKS2ReaxFFKokkos::calculate_H_k(const F_FLOAT &r, const F taper = taper * r + d_tap[0]; denom = r * r * r + shld; - denom = pow(denom,0.3333333333333); + denom = pow(denom,1.0/3.0); return taper * EV_TO_KCAL_PER_MOL / denom; } From 31214de51a8886d8e79254711337564f464e5e68 Mon Sep 17 00:00:00 2001 From: Stan Gerald Moore Date: Thu, 9 Sep 2021 12:08:09 -0600 Subject: [PATCH 012/372] Update name --- src/KOKKOS/fix_acks2_reaxff_kokkos.cpp | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/KOKKOS/fix_acks2_reaxff_kokkos.cpp b/src/KOKKOS/fix_acks2_reaxff_kokkos.cpp index ffe1bf65b8..22a67ec0c4 100644 --- a/src/KOKKOS/fix_acks2_reaxff_kokkos.cpp +++ b/src/KOKKOS/fix_acks2_reaxff_kokkos.cpp @@ -1304,11 +1304,11 @@ int FixACKS2ReaxFFKokkos::bicgstab_solve() if (comm->me == 0) { if (omega == 0 || rho == 0) { char str[128]; - sprintf(str,"Fix acks2/reax/kk BiCGStab numerical breakdown, omega = %g, rho = %g",omega,rho); + sprintf(str,"Fix acks2/reaxff/kk BiCGStab numerical breakdown, omega = %g, rho = %g",omega,rho); error->warning(FLERR,str); } else if (i >= imax) { char str[128]; - sprintf(str,"Fix acks2/reax/kk BiCGStab convergence failed after %d iterations " + sprintf(str,"Fix acks2/reaxff/kk BiCGStab convergence failed after %d iterations " "at " BIGINT_FORMAT " step",i,update->ntimestep); error->warning(FLERR,str); } @@ -1317,7 +1317,6 @@ int FixACKS2ReaxFFKokkos::bicgstab_solve() return i; } - /* ---------------------------------------------------------------------- */ template From 84c945f7fb4d31d08b0e6428baeccfb2befdf966 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sat, 11 Sep 2021 04:46:13 -0400 Subject: [PATCH 013/372] Use multi-config compatible way to integrate googletest for unit testing --- cmake/Modules/GTest.cmake | 81 ---------------------------- unittest/CMakeLists.txt | 51 ++++++++++++++++-- unittest/c-library/CMakeLists.txt | 14 ++--- unittest/commands/CMakeLists.txt | 14 ++--- unittest/cplusplus/CMakeLists.txt | 6 +-- unittest/force-styles/CMakeLists.txt | 4 +- unittest/formats/CMakeLists.txt | 34 ++++++------ unittest/fortran/CMakeLists.txt | 4 +- unittest/python/CMakeLists.txt | 2 +- unittest/utils/CMakeLists.txt | 10 ++-- 10 files changed, 91 insertions(+), 129 deletions(-) delete mode 100644 cmake/Modules/GTest.cmake diff --git a/cmake/Modules/GTest.cmake b/cmake/Modules/GTest.cmake deleted file mode 100644 index 211b506d2f..0000000000 --- a/cmake/Modules/GTest.cmake +++ /dev/null @@ -1,81 +0,0 @@ -message(STATUS "Downloading and building Google Test library") - -if(CMAKE_BUILD_TYPE STREQUAL "Debug") - set(GTEST_LIB_POSTFIX d) -else() - set(GTEST_LIB_POSTFIX) -endif() - -include(ExternalProject) -set(GTEST_URL "https://github.com/google/googletest/archive/release-1.10.0.tar.gz" CACHE STRING "URL for GTest tarball") -set(GTEST_MD5 "ecd1fa65e7de707cd5c00bdac56022cd" CACHE STRING "MD5 checksum of GTest tarball") -mark_as_advanced(GTEST_URL) -mark_as_advanced(GTEST_MD5) -ExternalProject_Add(googletest - URL ${GTEST_URL} - URL_MD5 ${GTEST_MD5} - SOURCE_DIR "${CMAKE_BINARY_DIR}/gtest-src" - BINARY_DIR "${CMAKE_BINARY_DIR}/gtest-build" - CMAKE_ARGS ${CMAKE_REQUEST_PIC} ${CMAKE_EXTRA_GTEST_OPTS} - -DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER} - -DCMAKE_INSTALL_PREFIX= - -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} - -DCMAKE_MAKE_PROGRAM=${CMAKE_MAKE_PROGRAM} - -DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE} - BUILD_BYPRODUCTS /lib/libgtest${GTEST_LIB_POSTFIX}${CMAKE_STATIC_LIBRARY_SUFFIX} - /lib/libgmock${GTEST_LIB_POSTFIX}${CMAKE_STATIC_LIBRARY_SUFFIX} - /lib/libgtest_main${GTEST_LIB_POSTFIX}${CMAKE_STATIC_LIBRARY_SUFFIX} - /lib/libgmock_main${GTEST_LIB_POSTFIX}${CMAKE_STATIC_LIBRARY_SUFFIX} - LOG_DOWNLOAD ON - LOG_CONFIGURE ON - LOG_BUILD ON - INSTALL_COMMAND "" - TEST_COMMAND "") - -ExternalProject_Get_Property(googletest SOURCE_DIR) -set(GTEST_INCLUDE_DIR ${SOURCE_DIR}/googletest/include) -set(GMOCK_INCLUDE_DIR ${SOURCE_DIR}/googlemock/include) - -# workaround for CMake 3.10 on ubuntu 18.04 -file(MAKE_DIRECTORY ${GTEST_INCLUDE_DIR}) -file(MAKE_DIRECTORY ${GMOCK_INCLUDE_DIR}) - -ExternalProject_Get_Property(googletest BINARY_DIR) -set(GTEST_LIBRARY_PATH ${BINARY_DIR}/lib/libgtest${GTEST_LIB_POSTFIX}${CMAKE_STATIC_LIBRARY_SUFFIX}) -set(GMOCK_LIBRARY_PATH ${BINARY_DIR}/lib/libgmock${GTEST_LIB_POSTFIX}${CMAKE_STATIC_LIBRARY_SUFFIX}) -set(GTEST_MAIN_LIBRARY_PATH ${BINARY_DIR}/lib/libgtest_main${GTEST_LIB_POSTFIX}${CMAKE_STATIC_LIBRARY_SUFFIX}) -set(GMOCK_MAIN_LIBRARY_PATH ${BINARY_DIR}/lib/libgmock_main${GTEST_LIB_POSTFIX}${CMAKE_STATIC_LIBRARY_SUFFIX}) - -# Prevent GoogleTest from overriding our compiler/linker options -# when building with Visual Studio -set(gtest_force_shared_crt ON CACHE BOOL "" FORCE) - -find_package(Threads QUIET) - -add_library(GTest::GTest UNKNOWN IMPORTED) -set_target_properties(GTest::GTest PROPERTIES - IMPORTED_LOCATION ${GTEST_LIBRARY_PATH} - INTERFACE_INCLUDE_DIRECTORIES ${GTEST_INCLUDE_DIR} - INTERFACE_LINK_LIBRARIES "${CMAKE_THREAD_LIBS_INIT}") -add_dependencies(GTest::GTest googletest) - -add_library(GTest::GMock UNKNOWN IMPORTED) -set_target_properties(GTest::GMock PROPERTIES - IMPORTED_LOCATION ${GMOCK_LIBRARY_PATH} - INTERFACE_INCLUDE_DIRECTORIES ${GMOCK_INCLUDE_DIR} - INTERFACE_LINK_LIBRARIES "${CMAKE_THREAD_LIBS_INIT}") -add_dependencies(GTest::GMock googletest) - -add_library(GTest::GTestMain UNKNOWN IMPORTED) -set_target_properties(GTest::GTestMain PROPERTIES - IMPORTED_LOCATION ${GTEST_MAIN_LIBRARY_PATH} - INTERFACE_INCLUDE_DIRECTORIES ${GTEST_INCLUDE_DIR} - INTERFACE_LINK_LIBRARIES "${CMAKE_THREAD_LIBS_INIT}") -add_dependencies(GTest::GTestMain googletest) - -add_library(GTest::GMockMain UNKNOWN IMPORTED) -set_target_properties(GTest::GMockMain PROPERTIES - IMPORTED_LOCATION ${GMOCK_MAIN_LIBRARY_PATH} - INTERFACE_INCLUDE_DIRECTORIES ${GMOCK_INCLUDE_DIR} - INTERFACE_LINK_LIBRARIES "${CMAKE_THREAD_LIBS_INIT}") -add_dependencies(GTest::GMockMain googletest) diff --git a/unittest/CMakeLists.txt b/unittest/CMakeLists.txt index bb746c13ec..ac57f11e8e 100644 --- a/unittest/CMakeLists.txt +++ b/unittest/CMakeLists.txt @@ -1,4 +1,38 @@ -include(GTest) +######################################## +# CMake build for automated testing +# This file is part of LAMMPS +# Created by Axel Kohlmeyer and Richard Berger +######################################## +# download and build googletest framework +message(STATUS "Downloading and building googletest framework") +set(GTEST_URL "https://github.com/google/googletest/archive/release-1.11.0.tar.gz" CACHE STRING "URL of googletest source") +set(GTEST_MD5 "e8a8df240b6938bb6384155d4c37d937" CACHE STRING "MD5 sum for googletest source") +mark_as_advanced(GTEST_URL) +mark_as_advanced(GTEST_MD5) +set(gtest_force_shared_crt ON CACHE BOOL "" FORCE) + +# workaround for older CMake versions (tested on Ubuntu 18.04 with CMake 3.10) +if(CMAKE_VERSION VERSION_LESS 3.14) + file(MAKE_DIRECTORY ${CMAKE_BINARY_DIR}/_deps) + file(DOWNLOAD ${GTEST_URL} ${CMAKE_BINARY_DIR}/_deps/googletest.tar.gz EXPECTED_HASH MD5=${GTEST_MD5}) + execute_process(COMMAND ${CMAKE_COMMAND} -E tar xzf ${CMAKE_BINARY_DIR}/_deps/googletest.tar.gz + WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/_deps) + file(GLOB GTEST_SOURCE "${CMAKE_BINARY_DIR}/_deps/googletest-*") + # sanity check. do not allow to have multiple downloaded and extracted versions of the source + list(LENGTH GTEST_SOURCE _num) + if(_num GREATER 1) + message(FATAL_ERROR "Inconsistent googletest sources. Please delete ${CMAKE_BINARY_DIR}/_deps and re-run cmake") + endif() + add_subdirectory(${GTEST_SOURCE}) +else() + include(FetchContent) + FetchContent_Declare(googletest URL ${GTEST_URL} URL_HASH MD5=${GTEST_MD5}) + FetchContent_MakeAvailable(googletest) +endif() + +######################################## +# General tests using the LAMMPS executable itself +######################################## # check if we can run the compiled executable and whether it prints # the LAMMPS version header in the output for an empty input @@ -26,6 +60,7 @@ set_tests_properties(InvalidFlag PROPERTIES ENVIRONMENT "TSAN_OPTIONS=ignore_noninstrumented_modules=1" PASS_REGULAR_EXPRESSION "ERROR: Invalid command-line argument.*") +# convenience function for adding tests requiring to be run in parallel with MPI if(BUILD_MPI) function(add_mpi_test) set(MPI_TEST_NUM_PROCS 1) @@ -36,12 +71,18 @@ if(BUILD_MPI) set(ARGS ${MPI_TEST_COMMAND}) add_test(NAME ${MPI_TEST_NAME} WORKING_DIRECTORY ${MPI_TEST_WORKING_DIRECTORY} - COMMAND ${MPIEXEC_EXECUTABLE} ${MPIEXEC_NUMPROC_FLAG} ${MPI_TEST_NUM_PROCS} ${MPIEXEC_PREFLAGS} - ${EXECUTABLE} ${MPIEXEC_POSTFLAGS} ${ARGS} - ) + COMMAND ${MPIEXEC_EXECUTABLE} ${MPIEXEC_NUMPROC_FLAG} ${MPI_TEST_NUM_PROCS} + ${MPIEXEC_PREFLAGS} ${EXECUTABLE} ${MPIEXEC_POSTFLAGS} ${ARGS}) + endfunction() +else() + function(add_mpi_test) + cmake_parse_arguments(MPI_TEST "" "NAME;NUM_PROCS;WORKING_DIRECTORY" "COMMAND" ${ARGN}) + message(STATUS "Skipping test ${NAME} on non-MPI compilation") endfunction() endif() +# incorporate categories of specific tests from subdirectories + add_subdirectory(utils) add_subdirectory(formats) add_subdirectory(commands) @@ -52,6 +93,8 @@ add_subdirectory(python) add_subdirectory(tools) add_subdirectory(force-styles) +# clang-format support for test sources + find_package(ClangFormat 8.0) if(ClangFormat_FOUND) diff --git a/unittest/c-library/CMakeLists.txt b/unittest/c-library/CMakeLists.txt index ee7f323c0f..fac27eaf63 100644 --- a/unittest/c-library/CMakeLists.txt +++ b/unittest/c-library/CMakeLists.txt @@ -1,24 +1,24 @@ add_executable(test_library_open test_library_open.cpp test_main.cpp) -target_link_libraries(test_library_open PRIVATE lammps GTest::GTest GTest::GMock) +target_link_libraries(test_library_open PRIVATE lammps gmock) add_test(LibraryOpen test_library_open) add_executable(test_library_commands test_library_commands.cpp test_main.cpp) -target_link_libraries(test_library_commands PRIVATE lammps GTest::GTest GTest::GMock) +target_link_libraries(test_library_commands PRIVATE lammps gmock) add_test(LibraryCommands test_library_commands) add_executable(test_library_external test_library_external.cpp test_main.cpp) -target_link_libraries(test_library_external PRIVATE lammps GTest::GTest GTest::GMock) +target_link_libraries(test_library_external PRIVATE lammps gmock) add_test(LibraryExternal test_library_external) add_executable(test_library_properties test_library_properties.cpp test_main.cpp) -target_link_libraries(test_library_properties PRIVATE lammps GTest::GTest GTest::GMock) +target_link_libraries(test_library_properties PRIVATE lammps gmock) target_compile_definitions(test_library_properties PRIVATE -DTEST_INPUT_FOLDER=${CMAKE_CURRENT_SOURCE_DIR}) add_test(LibraryProperties test_library_properties) set_tests_properties(LibraryProperties PROPERTIES ENVIRONMENT "LAMMPS_POTENTIALS=${LAMMPS_POTENTIALS_DIR}") add_executable(test_library_scatter_gather test_library_scatter_gather.cpp test_main.cpp) -target_link_libraries(test_library_scatter_gather PRIVATE lammps GTest::GTest GTest::GMock) +target_link_libraries(test_library_scatter_gather PRIVATE lammps gmock) target_compile_definitions(test_library_scatter_gather PRIVATE -DTEST_INPUT_FOLDER=${CMAKE_CURRENT_SOURCE_DIR}) add_test(LibraryScatterGather test_library_scatter_gather) set_tests_properties(LibraryScatterGather PROPERTIES ENVIRONMENT "LAMMPS_POTENTIALS=${LAMMPS_POTENTIALS_DIR}") @@ -63,13 +63,13 @@ foreach(WITH "JPEG" "PNG" "GZIP" "FFMPEG") endforeach() add_executable(test_library_config test_library_config.cpp test_main.cpp) -target_link_libraries(test_library_config PRIVATE lammps GTest::GTest GTest::GMock) +target_link_libraries(test_library_config PRIVATE lammps gmock) target_compile_definitions(test_library_config PRIVATE ${TEST_CONFIG_DEFS}) add_test(LibraryConfig test_library_config) if(BUILD_MPI) add_executable(test_library_mpi test_library_mpi.cpp) - target_link_libraries(test_library_mpi PRIVATE lammps GTest::GTest GTest::GMock) + target_link_libraries(test_library_mpi PRIVATE lammps gmock) target_compile_definitions(test_library_mpi PRIVATE ${TEST_CONFIG_DEFS}) add_mpi_test(NAME LibraryMPI NUM_PROCS 4 COMMAND $) endif() diff --git a/unittest/commands/CMakeLists.txt b/unittest/commands/CMakeLists.txt index 176e22a391..28c2cc084f 100644 --- a/unittest/commands/CMakeLists.txt +++ b/unittest/commands/CMakeLists.txt @@ -26,19 +26,19 @@ add_executable(test_simple_commands test_simple_commands.cpp) if(PKG_PLUGIN) add_dependencies(test_simple_commands plugins) endif() -target_link_libraries(test_simple_commands PRIVATE lammps GTest::GMock GTest::GTest) +target_link_libraries(test_simple_commands PRIVATE lammps gmock) add_test(NAME SimpleCommands COMMAND test_simple_commands WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}) add_executable(test_lattice_region test_lattice_region.cpp) -target_link_libraries(test_lattice_region PRIVATE lammps GTest::GMock GTest::GTest) +target_link_libraries(test_lattice_region PRIVATE lammps gmock) add_test(NAME LatticeRegion COMMAND test_lattice_region WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}) add_executable(test_groups test_groups.cpp) -target_link_libraries(test_groups PRIVATE lammps GTest::GMock GTest::GTest) +target_link_libraries(test_groups PRIVATE lammps gmock) add_test(NAME Groups COMMAND test_groups WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}) add_executable(test_variables test_variables.cpp) -target_link_libraries(test_variables PRIVATE lammps GTest::GMock GTest::GTest) +target_link_libraries(test_variables PRIVATE lammps gmock) add_test(NAME Variables COMMAND test_variables WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}) add_executable(test_kim_commands test_kim_commands.cpp) @@ -49,17 +49,17 @@ if(KIM_EXTRA_UNITTESTS) message(FATAL_ERROR "CURL not found. Enabling KIM extra unit tests requires to have libcurl installed.") endif() endif() -target_link_libraries(test_kim_commands PRIVATE lammps GTest::GMock GTest::GTest) +target_link_libraries(test_kim_commands PRIVATE lammps gmock) add_test(NAME KimCommands COMMAND test_kim_commands WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}) add_executable(test_reset_ids test_reset_ids.cpp) target_compile_definitions(test_reset_ids PRIVATE -DTEST_INPUT_FOLDER=${CMAKE_CURRENT_SOURCE_DIR}) -target_link_libraries(test_reset_ids PRIVATE lammps GTest::GMock GTest::GTest) +target_link_libraries(test_reset_ids PRIVATE lammps gmock) add_test(NAME ResetIDs COMMAND test_reset_ids WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}) if(BUILD_MPI) add_executable(test_mpi_load_balancing test_mpi_load_balancing.cpp) - target_link_libraries(test_mpi_load_balancing PRIVATE lammps GTest::GTest GTest::GMock) + target_link_libraries(test_mpi_load_balancing PRIVATE lammps gmock) target_compile_definitions(test_mpi_load_balancing PRIVATE ${TEST_CONFIG_DEFS}) add_mpi_test(NAME MPILoadBalancing NUM_PROCS 4 COMMAND $) endif() diff --git a/unittest/cplusplus/CMakeLists.txt b/unittest/cplusplus/CMakeLists.txt index b0b2550e8c..ef6155f986 100644 --- a/unittest/cplusplus/CMakeLists.txt +++ b/unittest/cplusplus/CMakeLists.txt @@ -1,13 +1,13 @@ add_executable(test_lammps_class test_lammps_class.cpp) -target_link_libraries(test_lammps_class PRIVATE lammps GTest::GMockMain GTest::GTest GTest::GMock) +target_link_libraries(test_lammps_class PRIVATE lammps gmock_main) add_test(LammpsClass test_lammps_class) set_tests_properties(LammpsClass PROPERTIES ENVIRONMENT "OMP_NUM_THREADS=1") add_executable(test_input_class test_input_class.cpp) -target_link_libraries(test_input_class PRIVATE lammps GTest::GTest GTest::GTestMain) +target_link_libraries(test_input_class PRIVATE lammps gtest_main) add_test(InputClass test_input_class) add_executable(test_error_class test_error_class.cpp) -target_link_libraries(test_error_class PRIVATE lammps GTest::GMock GTest::GTest) +target_link_libraries(test_error_class PRIVATE lammps gmock) add_test(ErrorClass test_error_class) diff --git a/unittest/force-styles/CMakeLists.txt b/unittest/force-styles/CMakeLists.txt index 75e95c3bf0..487433c9c8 100644 --- a/unittest/force-styles/CMakeLists.txt +++ b/unittest/force-styles/CMakeLists.txt @@ -26,7 +26,7 @@ set(TEST_INPUT_FOLDER ${CMAKE_CURRENT_SOURCE_DIR}/tests) add_library(style_tests STATIC yaml_writer.cpp error_stats.cpp test_config_reader.cpp test_main.cpp) target_compile_definitions(style_tests PRIVATE -DTEST_INPUT_FOLDER=${TEST_INPUT_FOLDER}) target_include_directories(style_tests PRIVATE ${LAMMPS_SOURCE_DIR}) -target_link_libraries(style_tests PUBLIC GTest::GTest GTest::GMock Yaml::Yaml lammps) +target_link_libraries(style_tests PUBLIC gmock Yaml::Yaml lammps) if(BUILD_MPI) target_link_libraries(style_tests PUBLIC MPI::MPI_CXX) else() @@ -43,7 +43,7 @@ endif() # unit test for error stats class add_executable(test_error_stats test_error_stats.cpp) target_include_directories(test_error_stats PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${LAMMPS_SOURCE_DIR}) -target_link_libraries(test_error_stats PRIVATE GTest::GTestMain GTest::GTest) +target_link_libraries(test_error_stats PRIVATE gtest_main) add_test(NAME ErrorStats COMMAND test_error_stats) # pair style tester diff --git a/unittest/formats/CMakeLists.txt b/unittest/formats/CMakeLists.txt index b4c637edfb..ae5919ba2a 100644 --- a/unittest/formats/CMakeLists.txt +++ b/unittest/formats/CMakeLists.txt @@ -1,44 +1,44 @@ add_executable(test_atom_styles test_atom_styles.cpp) -target_link_libraries(test_atom_styles PRIVATE lammps GTest::GMock GTest::GTest) +target_link_libraries(test_atom_styles PRIVATE lammps gmock) add_test(NAME AtomStyles COMMAND test_atom_styles WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}) add_executable(test_image_flags test_image_flags.cpp) -target_link_libraries(test_image_flags PRIVATE lammps GTest::GMock GTest::GTest) +target_link_libraries(test_image_flags PRIVATE lammps gmock) add_test(NAME ImageFlags COMMAND test_image_flags WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}) add_executable(test_molecule_file test_molecule_file.cpp) -target_link_libraries(test_molecule_file PRIVATE lammps GTest::GMock GTest::GTest) +target_link_libraries(test_molecule_file PRIVATE lammps gmock) add_test(NAME MoleculeFile COMMAND test_molecule_file WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}) add_executable(test_pair_unit_convert test_pair_unit_convert.cpp) -target_link_libraries(test_pair_unit_convert PRIVATE lammps GTest::GMock GTest::GTest) +target_link_libraries(test_pair_unit_convert PRIVATE lammps gmock) add_test(NAME PairUnitConvert COMMAND test_pair_unit_convert WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}) set_tests_properties(PairUnitConvert PROPERTIES ENVIRONMENT "LAMMPS_POTENTIALS=${LAMMPS_POTENTIALS_DIR}") add_executable(test_potential_file_reader test_potential_file_reader.cpp) -target_link_libraries(test_potential_file_reader PRIVATE lammps GTest::GMock GTest::GTest) +target_link_libraries(test_potential_file_reader PRIVATE lammps gmock) add_test(NAME PotentialFileReader COMMAND test_potential_file_reader WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}) set_tests_properties(PotentialFileReader PROPERTIES ENVIRONMENT "LAMMPS_POTENTIALS=${LAMMPS_POTENTIALS_DIR}") if(PKG_MANYBODY) add_executable(test_eim_potential_file_reader test_eim_potential_file_reader.cpp) - target_link_libraries(test_eim_potential_file_reader PRIVATE lammps GTest::GMock GTest::GTest) + target_link_libraries(test_eim_potential_file_reader PRIVATE lammps gmock) add_test(NAME EIMPotentialFileReader COMMAND test_eim_potential_file_reader WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}) set_tests_properties(EIMPotentialFileReader PROPERTIES ENVIRONMENT "LAMMPS_POTENTIALS=${LAMMPS_POTENTIALS_DIR}") endif() add_executable(test_text_file_reader test_text_file_reader.cpp) -target_link_libraries(test_text_file_reader PRIVATE lammps GTest::GMock GTest::GTest) +target_link_libraries(test_text_file_reader PRIVATE lammps gmock) add_test(NAME TextFileReader COMMAND test_text_file_reader WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}) set_tests_properties(TextFileReader PROPERTIES ENVIRONMENT "LAMMPS_POTENTIALS=${LAMMPS_POTENTIALS_DIR}") add_executable(test_file_operations test_file_operations.cpp) -target_link_libraries(test_file_operations PRIVATE lammps GTest::GMock GTest::GTest) +target_link_libraries(test_file_operations PRIVATE lammps gmock) add_test(NAME FileOperations COMMAND test_file_operations WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}) add_executable(test_dump_atom test_dump_atom.cpp) -target_link_libraries(test_dump_atom PRIVATE lammps GTest::GMock GTest::GTest) +target_link_libraries(test_dump_atom PRIVATE lammps gmock) add_test(NAME DumpAtom COMMAND test_dump_atom WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}) set_tests_properties(DumpAtom PROPERTIES ENVIRONMENT "LAMMPS_POTENTIALS=${LAMMPS_POTENTIALS_DIR}") @@ -46,19 +46,19 @@ if(PKG_COMPRESS) find_program(GZIP_BINARY NAMES gzip REQUIRED) add_executable(test_dump_atom_compressed test_dump_atom_compressed.cpp compressed_dump_test_main.cpp) - target_link_libraries(test_dump_atom_compressed PRIVATE lammps GTest::GMock GTest::GTest) + target_link_libraries(test_dump_atom_compressed PRIVATE lammps gmock) add_executable(test_dump_custom_compressed test_dump_custom_compressed.cpp compressed_dump_test_main.cpp) - target_link_libraries(test_dump_custom_compressed PRIVATE lammps GTest::GMock GTest::GTest) + target_link_libraries(test_dump_custom_compressed PRIVATE lammps gmock) add_executable(test_dump_cfg_compressed test_dump_cfg_compressed.cpp compressed_dump_test_main.cpp) - target_link_libraries(test_dump_cfg_compressed PRIVATE lammps GTest::GMock GTest::GTest) + target_link_libraries(test_dump_cfg_compressed PRIVATE lammps gmock) add_executable(test_dump_local_compressed test_dump_local_compressed.cpp compressed_dump_test_main.cpp) - target_link_libraries(test_dump_local_compressed PRIVATE lammps GTest::GMock GTest::GTest) + target_link_libraries(test_dump_local_compressed PRIVATE lammps gmock) add_executable(test_dump_xyz_compressed test_dump_xyz_compressed.cpp compressed_dump_test_main.cpp) - target_link_libraries(test_dump_xyz_compressed PRIVATE lammps GTest::GMock GTest::GTest) + target_link_libraries(test_dump_xyz_compressed PRIVATE lammps gmock) add_test(NAME DumpAtomGZ COMMAND test_dump_atom_compressed gz WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}) set_tests_properties(DumpAtomGZ PROPERTIES ENVIRONMENT "LAMMPS_POTENTIALS=${LAMMPS_POTENTIALS_DIR};COMPRESS_BINARY=${GZIP_BINARY}") @@ -98,17 +98,17 @@ if(PKG_COMPRESS) endif() add_executable(test_dump_custom test_dump_custom.cpp) -target_link_libraries(test_dump_custom PRIVATE lammps GTest::GMock GTest::GTest) +target_link_libraries(test_dump_custom PRIVATE lammps gmock) add_test(NAME DumpCustom COMMAND test_dump_custom WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}) set_tests_properties(DumpCustom PROPERTIES ENVIRONMENT "LAMMPS_POTENTIALS=${LAMMPS_POTENTIALS_DIR}") add_executable(test_dump_cfg test_dump_cfg.cpp) -target_link_libraries(test_dump_cfg PRIVATE lammps GTest::GMock GTest::GTest) +target_link_libraries(test_dump_cfg PRIVATE lammps gmock) add_test(NAME DumpCfg COMMAND test_dump_cfg WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}) set_tests_properties(DumpCfg PROPERTIES ENVIRONMENT "LAMMPS_POTENTIALS=${LAMMPS_POTENTIALS_DIR}") add_executable(test_dump_local test_dump_local.cpp) -target_link_libraries(test_dump_local PRIVATE lammps GTest::GMock GTest::GTest) +target_link_libraries(test_dump_local PRIVATE lammps gmock) add_test(NAME DumpLocal COMMAND test_dump_local WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}) set_tests_properties(DumpLocal PROPERTIES ENVIRONMENT "LAMMPS_POTENTIALS=${LAMMPS_POTENTIALS_DIR}") diff --git a/unittest/fortran/CMakeLists.txt b/unittest/fortran/CMakeLists.txt index fc116c3c40..586dcf537f 100644 --- a/unittest/fortran/CMakeLists.txt +++ b/unittest/fortran/CMakeLists.txt @@ -25,11 +25,11 @@ if(CMAKE_Fortran_COMPILER) add_library(flammps STATIC ${LAMMPS_FORTRAN_MODULE}) add_executable(test_fortran_create wrap_create.cpp test_fortran_create.f90) - target_link_libraries(test_fortran_create PRIVATE flammps lammps MPI::MPI_Fortran GTest::GTest GTest::GTestMain) + target_link_libraries(test_fortran_create PRIVATE flammps lammps MPI::MPI_Fortran gtest_main) add_test(FortranOpen test_fortran_create) add_executable(test_fortran_commands wrap_commands.cpp test_fortran_commands.f90) - target_link_libraries(test_fortran_commands PRIVATE flammps lammps MPI::MPI_Fortran GTest::GTest GTest::GTestMain) + target_link_libraries(test_fortran_commands PRIVATE flammps lammps MPI::MPI_Fortran gtest_main) add_test(FortranCommands test_fortran_commands) else() message(STATUS "Skipping Tests for the LAMMPS Fortran Module: no Fortran compiler") diff --git a/unittest/python/CMakeLists.txt b/unittest/python/CMakeLists.txt index 5d0aad2f54..e57a894c61 100644 --- a/unittest/python/CMakeLists.txt +++ b/unittest/python/CMakeLists.txt @@ -21,7 +21,7 @@ else() endif() add_executable(test_python_package test_python_package.cpp) -target_link_libraries(test_python_package PRIVATE lammps GTest::GMock GTest::GTest) +target_link_libraries(test_python_package PRIVATE lammps gmock) target_compile_definitions(test_python_package PRIVATE -DTEST_INPUT_FOLDER=${TEST_INPUT_FOLDER}) # this requires CMake 3.12. don't care to add backward compatibility for this. if(Python3_Development_FOUND) diff --git a/unittest/utils/CMakeLists.txt b/unittest/utils/CMakeLists.txt index c1ce7c136f..431b0b2ee1 100644 --- a/unittest/utils/CMakeLists.txt +++ b/unittest/utils/CMakeLists.txt @@ -1,22 +1,22 @@ add_executable(test_tokenizer test_tokenizer.cpp) -target_link_libraries(test_tokenizer PRIVATE lammps GTest::GMockMain GTest::GMock GTest::GTest) +target_link_libraries(test_tokenizer PRIVATE lammps gmock_main) add_test(Tokenizer test_tokenizer) add_executable(test_mempool test_mempool.cpp) -target_link_libraries(test_mempool PRIVATE lammps GTest::GMockMain GTest::GMock GTest::GTest) +target_link_libraries(test_mempool PRIVATE lammps gmock_main) add_test(MemPool test_mempool) add_executable(test_argutils test_argutils.cpp) -target_link_libraries(test_argutils PRIVATE lammps GTest::GMockMain GTest::GMock GTest::GTest) +target_link_libraries(test_argutils PRIVATE lammps gmock_main) add_test(ArgUtils test_argutils) add_executable(test_utils test_utils.cpp) -target_link_libraries(test_utils PRIVATE lammps GTest::GMockMain GTest::GMock GTest::GTest) +target_link_libraries(test_utils PRIVATE lammps gmock_main) add_test(Utils test_utils) set_tests_properties(Utils PROPERTIES ENVIRONMENT "LAMMPS_POTENTIALS=${LAMMPS_POTENTIALS_DIR}") add_executable(test_fmtlib test_fmtlib.cpp) -target_link_libraries(test_fmtlib PRIVATE lammps GTest::GMockMain GTest::GMock GTest::GTest) +target_link_libraries(test_fmtlib PRIVATE lammps gmock_main) add_test(FmtLib test_fmtlib) add_executable(test_math_eigen_impl test_math_eigen_impl.cpp) From 68ddab03418463dd0d9e8163f1e05a400e2bed3a Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sat, 11 Sep 2021 05:36:43 -0400 Subject: [PATCH 014/372] Report multi-config and adjust paths for python unit tests --- cmake/CMakeLists.txt | 8 +++++++- unittest/python/CMakeLists.txt | 10 ++++++++-- 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt index e0fca5bd9b..af38a0db72 100644 --- a/cmake/CMakeLists.txt +++ b/cmake/CMakeLists.txt @@ -786,11 +786,17 @@ if(ClangFormat_FOUND) endif() get_target_property(DEFINES lammps COMPILE_DEFINITIONS) +get_property(BUILD_IS_MULTI_CONFIG GLOBAL PROPERTY GENERATOR_IS_MULTI_CONFIG) +if(BUILD_IS_MULTI_CONFIG) + set(LAMMPS_BUILD_TYPE "Multi-Config") +else() + set(LAMMPS_BUILD_TYPE ${CMAKE_BUILD_TYPE}) +endif() include(FeatureSummary) feature_summary(DESCRIPTION "The following tools and libraries have been found and configured:" WHAT PACKAGES_FOUND) message(STATUS "<<< Build configuration >>> Operating System: ${CMAKE_SYSTEM_NAME} ${CMAKE_LINUX_DISTRO} ${CMAKE_DISTRO_VERSION} - Build type: ${CMAKE_BUILD_TYPE} + Build type: ${LAMMPS_BUILD_TYPE} Install path: ${CMAKE_INSTALL_PREFIX} Generator: ${CMAKE_GENERATOR} using ${CMAKE_MAKE_PROGRAM}") ############################################################################### diff --git a/unittest/python/CMakeLists.txt b/unittest/python/CMakeLists.txt index e57a894c61..9343167228 100644 --- a/unittest/python/CMakeLists.txt +++ b/unittest/python/CMakeLists.txt @@ -34,12 +34,18 @@ set_tests_properties(PythonPackage PROPERTIES ENVIRONMENT "LAMMPS_POTENTIALS=${L if(Python_EXECUTABLE) # prepare to augment the environment so that the LAMMPS python module and the shared library is found. set(PYTHON_TEST_ENVIRONMENT PYTHONPATH=${LAMMPS_PYTHON_DIR}:$ENV{PYTHONPATH}) + get_property(BUILD_IS_MULTI_CONFIG GLOBAL PROPERTY GENERATOR_IS_MULTI_CONFIG) + if(BUILD_IS_MULTI_CONFIG) + set(LAMMPS_LIB_PATH ${CMAKE_BINARY_DIR}/$) + else() + set(LAMMPS_LIB_PATH ${CMAKE_BINARY_DIR}) + endif() list(APPEND PYTHON_TEST_ENVIRONMENT "LAMMPS_POTENTIALS=${LAMMPS_POTENTIALS_DIR}") list(APPEND PYTHON_TEST_ENVIRONMENT "TEST_INPUT_DIR=${CMAKE_CURRENT_SOURCE_DIR}") if(APPLE) - list(APPEND PYTHON_TEST_ENVIRONMENT "DYLD_LIBRARY_PATH=${CMAKE_BINARY_DIR}:$ENV{DYLD_LIBRARY_PATH};LAMMPS_CMAKE_CACHE=${CMAKE_BINARY_DIR}/CMakeCache.txt") + list(APPEND PYTHON_TEST_ENVIRONMENT "DYLD_LIBRARY_PATH=${LAMMPS_LIB_PATH}:$ENV{DYLD_LIBRARY_PATH};LAMMPS_CMAKE_CACHE=${CMAKE_BINARY_DIR}/CMakeCache.txt") else() - list(APPEND PYTHON_TEST_ENVIRONMENT "LD_LIBRARY_PATH=${CMAKE_BINARY_DIR}:$ENV{LD_LIBRARY_PATH};LAMMPS_CMAKE_CACHE=${CMAKE_BINARY_DIR}/CMakeCache.txt") + list(APPEND PYTHON_TEST_ENVIRONMENT "LD_LIBRARY_PATH=${LAMMPS_LIB_PATH}:$ENV{LD_LIBRARY_PATH};LAMMPS_CMAKE_CACHE=${CMAKE_BINARY_DIR}/CMakeCache.txt") endif() if(LAMMPS_MACHINE) # convert from '_machine' to 'machine' From bf360ad50f5bab111610709196ac1a02026c9007 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sat, 11 Sep 2021 05:59:50 -0400 Subject: [PATCH 015/372] explicitly specify build folder for out-of-source subdirectory --- unittest/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/unittest/CMakeLists.txt b/unittest/CMakeLists.txt index ac57f11e8e..14da15c6e5 100644 --- a/unittest/CMakeLists.txt +++ b/unittest/CMakeLists.txt @@ -23,7 +23,7 @@ if(CMAKE_VERSION VERSION_LESS 3.14) if(_num GREATER 1) message(FATAL_ERROR "Inconsistent googletest sources. Please delete ${CMAKE_BINARY_DIR}/_deps and re-run cmake") endif() - add_subdirectory(${GTEST_SOURCE}) + add_subdirectory(${GTEST_SOURCE} ${CMAKE_BINARY_DIR}/googletest) else() include(FetchContent) FetchContent_Declare(googletest URL ${GTEST_URL} URL_HASH MD5=${GTEST_MD5}) From 932b3cabda1023d877fd9298280e2b344e3d4446 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sat, 11 Sep 2021 06:05:29 -0400 Subject: [PATCH 016/372] add missing include (since we not longer include GTest.cmake) --- unittest/commands/CMakeLists.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/unittest/commands/CMakeLists.txt b/unittest/commands/CMakeLists.txt index 28c2cc084f..8891647911 100644 --- a/unittest/commands/CMakeLists.txt +++ b/unittest/commands/CMakeLists.txt @@ -1,6 +1,7 @@ # build LAMMPS plugins, but not on Windows if((NOT (CMAKE_SYSTEM_NAME STREQUAL "Windows")) AND PKG_PLUGIN) + include(ExternalProject) ExternalProject_Add(plugins SOURCE_DIR "${LAMMPS_DIR}/examples/plugins" BINARY_DIR ${CMAKE_BINARY_DIR}/build-plugins From 30558c0cd6ffbcc351b13dc1abb7f879d19d7cbe Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sat, 11 Sep 2021 07:01:48 -0400 Subject: [PATCH 017/372] convert plugin compilation to also use add_subdirectory() instead of external project --- examples/plugins/CMakeLists.txt | 35 +++++++++++++++++++----------- unittest/commands/CMakeLists.txt | 37 +++++++++++++++----------------- 2 files changed, 39 insertions(+), 33 deletions(-) diff --git a/examples/plugins/CMakeLists.txt b/examples/plugins/CMakeLists.txt index 59c2802b45..22bd09775f 100644 --- a/examples/plugins/CMakeLists.txt +++ b/examples/plugins/CMakeLists.txt @@ -14,17 +14,21 @@ endif() project(plugins VERSION 1.0 LANGUAGES CXX) -# NOTE: the next line should be commented out when used outside of the LAMMPS package -get_filename_component(LAMMPS_SOURCE_DIR ${PROJECT_SOURCE_DIR}/../../src ABSOLUTE) -set(LAMMPS_HEADER_DIR ${LAMMPS_SOURCE_DIR} CACHE PATH "Location of LAMMPS headers") -if(NOT LAMMPS_HEADER_DIR) - message(FATAL_ERROR "Must set LAMMPS_HEADER_DIR") -endif() - -# by default, install into $HOME/.local (not /usr/local), -# so that no root access (and sudo) is needed -if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT) - set(CMAKE_INSTALL_PREFIX "$ENV{HOME}/.local" CACHE PATH "Default install path" FORCE) +# when this file is included as subdirectory in the LAMMPS build, many settings are directly imported +if(LAMMPS_DIR) + set(LAMMPS_HEADER_DIR ${LAMMPS_SOURCE_DIR}) +else() + # NOTE: the next line should be commented out when used outside of the LAMMPS package + get_filename_component(LAMMPS_SOURCE_DIR ${PROJECT_SOURCE_DIR}/../../src ABSOLUTE) + set(LAMMPS_HEADER_DIR ${LAMMPS_SOURCE_DIR} CACHE PATH "Location of LAMMPS headers") + if(NOT LAMMPS_HEADER_DIR) + message(FATAL_ERROR "Must set LAMMPS_HEADER_DIR") + endif() + # by default, install into $HOME/.local (not /usr/local), + # so that no root access (and sudo) is needed + if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT) + set(CMAKE_INSTALL_PREFIX "$ENV{HOME}/.local" CACHE PATH "Default install path" FORCE) + endif() endif() # C++11 is required @@ -41,9 +45,11 @@ if(CMAKE_SYSTEM_NAME STREQUAL Windows) message(FATAL_ERROR "LAMMPS plugins are currently not supported on Windows") endif() -set(CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}) +set(CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}) include(CheckIncludeFileCXX) -include(LAMMPSInterfaceCXX) +if(NOT LAMMPS_DIR) + include(LAMMPSInterfaceCXX) +endif() ########################## # building the plugins @@ -71,3 +77,6 @@ if(CMAKE_SYSTEM_NAME STREQUAL Darwin) set_target_properties(morse2plugin nve2plugin helloplugin zero2plugin PROPERTIES LINK_FLAGS "-Wl,-undefined,dynamic_lookup") endif() + +add_custom_target(plugins ALL ${CMAKE_COMMAND} -E echo "Building Plugins" + DEPENDS morse2plugin nve2plugin helloplugin zero2plugin morse2plugin) diff --git a/unittest/commands/CMakeLists.txt b/unittest/commands/CMakeLists.txt index 8891647911..b543e7691e 100644 --- a/unittest/commands/CMakeLists.txt +++ b/unittest/commands/CMakeLists.txt @@ -1,34 +1,31 @@ # build LAMMPS plugins, but not on Windows if((NOT (CMAKE_SYSTEM_NAME STREQUAL "Windows")) AND PKG_PLUGIN) - include(ExternalProject) - ExternalProject_Add(plugins - SOURCE_DIR "${LAMMPS_DIR}/examples/plugins" - BINARY_DIR ${CMAKE_BINARY_DIR}/build-plugins - INSTALL_DIR ${CMAKE_BINARY_DIR} - CMAKE_ARGS ${CMAKE_REQUEST_PIC} - -DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER} - -DCMAKE_INSTALL_PREFIX= - -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} - -DCMAKE_MAKE_PROGRAM=${CMAKE_MAKE_PROGRAM} - -DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE} - BUILD_BYPRODUCTS /morse2plugin${CMAKE_SHARED_MODULE_SUFFIX} - /nve2plugin${CMAKE_SHARED_MODULE_SUFFIX} - /helloplugin${CMAKE_SHARED_MODULE_SUFFIX} - INSTALL_COMMAND ${CMAKE_COMMAND} -E copy_if_different - /morse2plugin${CMAKE_SHARED_MODULE_SUFFIX} - /nve2plugin${CMAKE_SHARED_MODULE_SUFFIX} - /helloplugin${CMAKE_SHARED_MODULE_SUFFIX} - ${CMAKE_CURRENT_BINARY_DIR} - TEST_COMMAND "") + add_subdirectory(${LAMMPS_DIR}/examples/plugins ${CMAKE_BINARY_DIR}/build-plugins) endif() add_executable(test_simple_commands test_simple_commands.cpp) + if(PKG_PLUGIN) + add_custom_target(installplugins + ${CMAKE_COMMAND} -E copy_if_different + ${CMAKE_BINARY_DIR}/build-plugins/$/morse2plugin${CMAKE_SHARED_MODULE_SUFFIX} + ${CMAKE_BINARY_DIR}/build-plugins/$/nve2plugin${CMAKE_SHARED_MODULE_SUFFIX} + ${CMAKE_BINARY_DIR}/build-plugins/$/helloplugin${CMAKE_SHARED_MODULE_SUFFIX} + ${CMAKE_BINARY_DIR} + DEPENDS plugins) add_dependencies(test_simple_commands plugins) + target_compile_definitions(test_simple_commands PRIVATE LMP_PLUGIN) endif() target_link_libraries(test_simple_commands PRIVATE lammps gmock) add_test(NAME SimpleCommands COMMAND test_simple_commands WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}) +if(APPLE) + set_tests_properties(SimpleCommands PROPERTIES + ENVIRONMENT "DYLD_LIBRARY_PATH=${CMAKE_BINARY_DIR}/build-plugins/$/:${DYLD_LIBRARY_PATH}") +else() + set_tests_properties(SimpleCommands PROPERTIES + ENVIRONMENT "LD_LIBRARY_PATH=${CMAKE_BINARY_DIR}/build-plugins/$/:${LD_LIBRARY_PATH}") +endif() add_executable(test_lattice_region test_lattice_region.cpp) target_link_libraries(test_lattice_region PRIVATE lammps gmock) From c394df56585ca305e8c64eb54b0ace5d65805975 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sat, 11 Sep 2021 07:30:18 -0400 Subject: [PATCH 018/372] simplify and remove unused command. more multi-config adjustments --- unittest/commands/CMakeLists.txt | 28 ++++++++++++---------------- 1 file changed, 12 insertions(+), 16 deletions(-) diff --git a/unittest/commands/CMakeLists.txt b/unittest/commands/CMakeLists.txt index b543e7691e..41cd4f4e51 100644 --- a/unittest/commands/CMakeLists.txt +++ b/unittest/commands/CMakeLists.txt @@ -1,30 +1,26 @@ -# build LAMMPS plugins, but not on Windows -if((NOT (CMAKE_SYSTEM_NAME STREQUAL "Windows")) AND PKG_PLUGIN) - add_subdirectory(${LAMMPS_DIR}/examples/plugins ${CMAKE_BINARY_DIR}/build-plugins) -endif() - add_executable(test_simple_commands test_simple_commands.cpp) -if(PKG_PLUGIN) - add_custom_target(installplugins - ${CMAKE_COMMAND} -E copy_if_different - ${CMAKE_BINARY_DIR}/build-plugins/$/morse2plugin${CMAKE_SHARED_MODULE_SUFFIX} - ${CMAKE_BINARY_DIR}/build-plugins/$/nve2plugin${CMAKE_SHARED_MODULE_SUFFIX} - ${CMAKE_BINARY_DIR}/build-plugins/$/helloplugin${CMAKE_SHARED_MODULE_SUFFIX} - ${CMAKE_BINARY_DIR} - DEPENDS plugins) +# tests for the plugin command require the PLUGIN package and won't work on windows +if((NOT (CMAKE_SYSTEM_NAME STREQUAL "Windows")) AND PKG_PLUGIN) + add_subdirectory(${LAMMPS_DIR}/examples/plugins ${CMAKE_BINARY_DIR}/build-plugins) add_dependencies(test_simple_commands plugins) - target_compile_definitions(test_simple_commands PRIVATE LMP_PLUGIN) + target_compile_definitions(test_simple_commands PRIVATE -DLMP_PLUGIN) endif() + target_link_libraries(test_simple_commands PRIVATE lammps gmock) add_test(NAME SimpleCommands COMMAND test_simple_commands WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}) +if(BUILD_IS_MULTI_CONFIG) + set(LAMMPS_PLUGIN_BIN_DIR ${CMAKE_BINARY_DIR}/build-plugins/$) +else() + set(LAMMPS_PLUGIN_BIN_DIR ${CMAKE_BINARY_DIR}/build-plugins) +endif() if(APPLE) set_tests_properties(SimpleCommands PROPERTIES - ENVIRONMENT "DYLD_LIBRARY_PATH=${CMAKE_BINARY_DIR}/build-plugins/$/:${DYLD_LIBRARY_PATH}") + ENVIRONMENT "DYLD_LIBRARY_PATH=${LAMMPS_PLUGIN_BIN_DIR}/:${DYLD_LIBRARY_PATH}") else() set_tests_properties(SimpleCommands PROPERTIES - ENVIRONMENT "LD_LIBRARY_PATH=${CMAKE_BINARY_DIR}/build-plugins/$/:${LD_LIBRARY_PATH}") + ENVIRONMENT "LD_LIBRARY_PATH=${LAMMPS_PLUGIN_BIN_DIR}/:${LD_LIBRARY_PATH}") endif() add_executable(test_lattice_region test_lattice_region.cpp) From daa39d680c4115e4de5a10d0ec6c60a7d27e332b Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sat, 11 Sep 2021 13:43:25 -0400 Subject: [PATCH 019/372] simplify --- unittest/c-library/CMakeLists.txt | 10 ++++------ unittest/commands/CMakeLists.txt | 10 ++++------ 2 files changed, 8 insertions(+), 12 deletions(-) diff --git a/unittest/c-library/CMakeLists.txt b/unittest/c-library/CMakeLists.txt index fac27eaf63..5168345727 100644 --- a/unittest/c-library/CMakeLists.txt +++ b/unittest/c-library/CMakeLists.txt @@ -67,9 +67,7 @@ target_link_libraries(test_library_config PRIVATE lammps gmock) target_compile_definitions(test_library_config PRIVATE ${TEST_CONFIG_DEFS}) add_test(LibraryConfig test_library_config) -if(BUILD_MPI) - add_executable(test_library_mpi test_library_mpi.cpp) - target_link_libraries(test_library_mpi PRIVATE lammps gmock) - target_compile_definitions(test_library_mpi PRIVATE ${TEST_CONFIG_DEFS}) - add_mpi_test(NAME LibraryMPI NUM_PROCS 4 COMMAND $) -endif() +add_executable(test_library_mpi test_library_mpi.cpp) +target_link_libraries(test_library_mpi PRIVATE lammps gmock) +target_compile_definitions(test_library_mpi PRIVATE ${TEST_CONFIG_DEFS}) +add_mpi_test(NAME LibraryMPI NUM_PROCS 4 COMMAND $) diff --git a/unittest/commands/CMakeLists.txt b/unittest/commands/CMakeLists.txt index 41cd4f4e51..10c113d781 100644 --- a/unittest/commands/CMakeLists.txt +++ b/unittest/commands/CMakeLists.txt @@ -51,9 +51,7 @@ target_compile_definitions(test_reset_ids PRIVATE -DTEST_INPUT_FOLDER=${CMAKE_CU target_link_libraries(test_reset_ids PRIVATE lammps gmock) add_test(NAME ResetIDs COMMAND test_reset_ids WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}) -if(BUILD_MPI) - add_executable(test_mpi_load_balancing test_mpi_load_balancing.cpp) - target_link_libraries(test_mpi_load_balancing PRIVATE lammps gmock) - target_compile_definitions(test_mpi_load_balancing PRIVATE ${TEST_CONFIG_DEFS}) - add_mpi_test(NAME MPILoadBalancing NUM_PROCS 4 COMMAND $) -endif() +add_executable(test_mpi_load_balancing test_mpi_load_balancing.cpp) +target_link_libraries(test_mpi_load_balancing PRIVATE lammps gmock) +target_compile_definitions(test_mpi_load_balancing PRIVATE ${TEST_CONFIG_DEFS}) +add_mpi_test(NAME MPILoadBalancing NUM_PROCS 4 COMMAND $) From 0202b1169a6c22800368553428f2deccc8a0ef28 Mon Sep 17 00:00:00 2001 From: Trung Nguyen Date: Sun, 12 Sep 2021 23:08:36 -0500 Subject: [PATCH 020/372] Minor edits to the error message --- src/GPU/fix_gpu.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/GPU/fix_gpu.cpp b/src/GPU/fix_gpu.cpp index 1c6d2655ba..f4b5dc1d86 100644 --- a/src/GPU/fix_gpu.cpp +++ b/src/GPU/fix_gpu.cpp @@ -219,7 +219,7 @@ FixGPU::FixGPU(LAMMPS *lmp, int narg, char **arg) : // require newton pair off if _particle_split < 1 if (force->newton_pair == 1 && _particle_split < 1) - error->all(FLERR,"Cannot use newton pair on for split less than 1"); + error->all(FLERR,"Cannot use newton pair on for split less than 1 for now"); if (pair_only_flag) { lmp->suffixp = lmp->suffix; From 15c7792c331e91d564ac3aefffce71eca4467d6e Mon Sep 17 00:00:00 2001 From: Stan Gerald Moore Date: Tue, 14 Sep 2021 10:02:29 -0600 Subject: [PATCH 021/372] Fix issues with Kokkos package when ranks have zero atoms --- src/KOKKOS/fix_acks2_reaxff_kokkos.cpp | 100 ++++++++++++++++++------- src/KOKKOS/fix_acks2_reaxff_kokkos.h | 3 +- src/REAXFF/fix_acks2_reaxff.cpp | 35 +++++---- src/REAXFF/fix_acks2_reaxff.h | 2 + 4 files changed, 95 insertions(+), 45 deletions(-) diff --git a/src/KOKKOS/fix_acks2_reaxff_kokkos.cpp b/src/KOKKOS/fix_acks2_reaxff_kokkos.cpp index 22a67ec0c4..86f610a2eb 100644 --- a/src/KOKKOS/fix_acks2_reaxff_kokkos.cpp +++ b/src/KOKKOS/fix_acks2_reaxff_kokkos.cpp @@ -62,10 +62,10 @@ FixACKS2ReaxFFKokkos(LAMMPS *lmp, int narg, char **arg) : grow_arrays(atom->nmax); memoryKK->create_kokkos(k_s_hist_last,s_hist_last,2,nprev,"acks2/reax:s_hist_last"); d_s_hist_last = k_s_hist_last.template view(); + buf = new double[2*nprev]; + prev_last_rows_rank = 0; d_mfill_offset = typename AT::t_int_scalar("acks2/kk:mfill_offset"); - - comm_me_0_flag = (comm->me == 0); } /* ---------------------------------------------------------------------- */ @@ -78,6 +78,7 @@ FixACKS2ReaxFFKokkos::~FixACKS2ReaxFFKokkos() memoryKK->destroy_kokkos(k_s_hist,s_hist); memoryKK->destroy_kokkos(k_s_hist_X,s_hist_X); memoryKK->destroy_kokkos(k_s_hist_last,s_hist_last); + delete [] buf; deallocate_array(); } @@ -236,10 +237,61 @@ void FixACKS2ReaxFFKokkos::pre_force(int vflag) allocate_array(); - // get max number of neighbor - if (!allocated_flag || last_allocate < neighbor->lastcall) { + + // get max number of neighbor + allocate_matrix(); + + // last_rows_rank proc must not own zero atoms (unless no atoms total) + // otherwise some loops are no-ops and last rows contribution won't + // be computed correctly + + int flag = comm->me; + if (nn == 0) flag = MPI_MAX; + MPI_Allreduce(&flag, &last_rows_rank, 1, MPI_INT, MPI_MIN, world); + last_rows_flag = (comm->me == last_rows_rank); + + // pass along "s" array history if necessary + + if (prev_last_rows_rank != last_rows_rank) { + + MPI_Request request; + if (comm->me == last_rows_rank) + MPI_Irecv(buf,2*nprev,MPI_DOUBLE, + prev_last_rows_rank,0,world,&request); + + if (comm->me == prev_last_rows_rank) { + + // pack buffer + k_s_hist_last.template sync(); + auto h_s_hist_last = k_s_hist_last.h_view; + int n = 0; + for (int k = 0; k < nprev; k++) { + buf[n++] = h_s_hist_last(0,k); + buf[n++] = h_s_hist_last(1,k); + } + + MPI_Send(buf,2*nprev,MPI_DOUBLE,last_rows_rank,0,world); + } + + if (comm->me == last_rows_rank) { + MPI_Wait(&request,MPI_STATUS_IGNORE); + + // unpack buffer + k_s_hist_last.template sync(); + auto h_s_hist_last = k_s_hist_last.h_view; + int n = 0; + for (int k = 0; k < nprev; k++) { + h_s_hist_last(0,k) = buf[n++]; + h_s_hist_last(1,k) = buf[n++]; + } + k_s_hist_last.template modify(); + } + } + + prev_last_rows_rank = last_rows_rank; + last_allocate = update->ntimestep; } @@ -1135,9 +1187,9 @@ void FixACKS2ReaxFFKokkos::operator() (TagACKS2InitMatvec, const int } // last two rows - if (comm_me_0_flag && ii == 0) { + if (last_rows_flag && ii == 0) { for (int k = 0; k < 2; k++) { - d_b_s[2*NN+i] = 0.0; + d_b_s[2*NN+k] = 0.0; d_s[2*NN+k] = 4*(d_s_hist_last(k,0)+d_s_hist_last(k,2))-(6*d_s_hist_last(k,1)+d_s_hist_last(k,3)); } } @@ -1350,11 +1402,9 @@ void FixACKS2ReaxFFKokkos::sparse_matvec_acks2(typename AT::t_ffloat else ndup_bb = Kokkos::Experimental::create_scatter_view (d_bb); + Kokkos::deep_copy(d_bb,0.0); // can make more efficient? Kokkos::parallel_for(Kokkos::RangePolicy(0,nn),*this); - if (neighflag != FULL) - Kokkos::parallel_for(Kokkos::RangePolicy(nn,NN),*this); - if (neighflag == FULL) { int teamsize; if (execution_space == Host) teamsize = 1; @@ -1387,12 +1437,6 @@ void FixACKS2ReaxFFKokkos::operator() (TagACKS2SparseMatvec1, const d_bb[i] = params(itype).eta * d_xx[i]; d_bb[NN + i] = d_X_diag[i] * d_xx[NN + i]; } - - // last two rows - if (ii == 0) { - d_bb[2*NN] = 0.0; - d_bb[2*NN + 1] = 0.0; - } } /* ---------------------------------------------------------------------- */ @@ -1511,7 +1555,7 @@ void FixACKS2ReaxFFKokkos::operator() (TagACKS2Norm1, const int &ii, } // last two rows - if (comm_me_0_flag && ii == 0) { + if (last_rows_flag && ii == 0) { d_r[2*NN] = d_b_s[2*NN] - d_d[2*NN]; d_r[2*NN + 1] = d_b_s[2*NN + 1] - d_d[2*NN + 1]; @@ -1533,7 +1577,7 @@ void FixACKS2ReaxFFKokkos::operator() (TagACKS2Norm2, const int &ii, } // last two rows - if (comm_me_0_flag && ii == 0) { + if (last_rows_flag && ii == 0) { lsum += d_r[2*NN] * d_r[2*NN]; lsum += d_r[2*NN + 1] * d_r[2*NN + 1]; } @@ -1552,7 +1596,7 @@ void FixACKS2ReaxFFKokkos::operator() (TagACKS2Dot1, const int &ii, } // last two rows - if (comm_me_0_flag && ii == 0) { + if (last_rows_flag && ii == 0) { lsum += d_r_hat[2*NN] * d_r[2*NN]; lsum += d_r_hat[2*NN + 1] * d_r[2*NN + 1]; } @@ -1577,7 +1621,7 @@ void FixACKS2ReaxFFKokkos::operator() (TagACKS2Precon1A, const int & } // last two rows - if (comm_me_0_flag && ii == 0) { + if (last_rows_flag && ii == 0) { d_q[2*NN] = d_p[2*NN] - omega*d_z[2*NN]; d_q[2*NN + 1] = d_p[2*NN + 1] - omega*d_z[2*NN + 1]; @@ -1605,7 +1649,7 @@ void FixACKS2ReaxFFKokkos::operator() (TagACKS2Precon1B, const int & } // last two rows - if (comm_me_0_flag && ii == 0) { + if (last_rows_flag && ii == 0) { d_p[2*NN] = d_r[2*NN]; d_p[2*NN + 1] = d_r[2*NN + 1]; @@ -1627,7 +1671,7 @@ void FixACKS2ReaxFFKokkos::operator() (TagACKS2Dot2, const int &ii, } // last two rows - if (comm_me_0_flag && ii == 0) { + if (last_rows_flag && ii == 0) { lsum += d_r_hat[2*NN] * d_z[2*NN]; lsum += d_r_hat[2*NN + 1] * d_z[2*NN + 1]; } @@ -1649,7 +1693,7 @@ void FixACKS2ReaxFFKokkos::operator() (TagACKS2Dot3, const int &ii, } // last two rows - if (comm_me_0_flag && ii == 0) { + if (last_rows_flag && ii == 0) { d_q[2*NN] = d_r[2*NN] - alpha*d_z[2*NN]; d_q[2*NN + 1] = d_r[2*NN + 1] - alpha*d_z[2*NN + 1]; @@ -1671,7 +1715,7 @@ void FixACKS2ReaxFFKokkos::operator() (TagACKS2Dot4, const int &ii, } // last two rows - if (comm_me_0_flag && ii == 0) { + if (last_rows_flag && ii == 0) { lsum += d_y[2*NN] * d_q[2*NN]; lsum += d_y[2*NN + 1] * d_q[2*NN + 1]; } @@ -1690,7 +1734,7 @@ void FixACKS2ReaxFFKokkos::operator() (TagACKS2Dot5, const int &ii, } // last two rows - if (comm_me_0_flag && ii == 0) { + if (last_rows_flag && ii == 0) { lsum += d_y[2*NN] * d_y[2*NN]; lsum += d_y[2*NN + 1] * d_y[2*NN + 1]; } @@ -1709,7 +1753,7 @@ void FixACKS2ReaxFFKokkos::operator() (TagACKS2Add, const int &ii) c } // last two rows - if (comm_me_0_flag && ii == 0) { + if (last_rows_flag && ii == 0) { d_s[2*NN] += alpha*d_d[2*NN]; d_s[2*NN + 1] += alpha*d_d[2*NN + 1]; } @@ -1728,7 +1772,7 @@ void FixACKS2ReaxFFKokkos::operator() (TagACKS2Precon2, const int &i } // last two rows - if (comm_me_0_flag && ii == 0) { + if (last_rows_flag && ii == 0) { d_q_hat[2*NN] = d_q[2*NN]; d_q_hat[2*NN + 1] = d_q[2*NN + 1]; } @@ -1756,7 +1800,7 @@ void FixACKS2ReaxFFKokkos::operator() (TagACKS2Norm3, const int &ii, } // last two rows - if (comm_me_0_flag && ii == 0) { + if (last_rows_flag && ii == 0) { d_g[2*NN] = alpha*d_d[2*NN] + omega*d_q_hat[2*NN]; d_g[2*NN + 1] = alpha*d_d[2*NN + 1] + omega*d_q_hat[2*NN + 1]; @@ -1790,7 +1834,7 @@ void FixACKS2ReaxFFKokkos::operator() (TagACKS2CalculateQ1, const in } // last two rows - if (comm_me_0_flag && ii == 0) { + if (last_rows_flag && ii == 0) { for (int i = 0; i < 2; ++i) { for (int k = nprev-1; k > 0; --k) d_s_hist_last(i,k) = d_s_hist_last(i,k-1); diff --git a/src/KOKKOS/fix_acks2_reaxff_kokkos.h b/src/KOKKOS/fix_acks2_reaxff_kokkos.h index 852cab141b..f28e524ebc 100644 --- a/src/KOKKOS/fix_acks2_reaxff_kokkos.h +++ b/src/KOKKOS/fix_acks2_reaxff_kokkos.h @@ -174,7 +174,8 @@ class FixACKS2ReaxFFKokkos : public FixACKS2ReaxFF { private: int inum; int allocated_flag, last_allocate; - int need_dup,comm_me_0_flag; + int need_dup,comm_me_0_flag,prev_last_rows_rank; + double* buf; typename AT::t_int_scalar d_mfill_offset; diff --git a/src/REAXFF/fix_acks2_reaxff.cpp b/src/REAXFF/fix_acks2_reaxff.cpp index 0196b1319b..4a430c8228 100644 --- a/src/REAXFF/fix_acks2_reaxff.cpp +++ b/src/REAXFF/fix_acks2_reaxff.cpp @@ -88,6 +88,9 @@ FixACKS2ReaxFF::FixACKS2ReaxFF(LAMMPS *lmp, int narg, char **arg) : comm_forward = comm_reverse = 2; s_hist_X = s_hist_last = NULL; + + last_rows_rank = 0; + last_rows_flag = (comm->me == last_rows_rank); } /* ---------------------------------------------------------------------- */ @@ -413,7 +416,7 @@ void FixACKS2ReaxFF::init_matvec() } // last two rows - if (comm->me == 0) { + if (last_rows_flag) { for (i = 0; i < 2; i++) { b_s[2*NN+i] = 0.0; s[2*NN+i] = 4*(s_hist_last[i][0]+s_hist_last[i][2])-(6*s_hist_last[i][1]+s_hist_last[i][3]); @@ -558,7 +561,7 @@ int FixACKS2ReaxFF::BiCGStab(double *b, double *x) } } // last two rows - if (comm->me == 0) { + if (last_rows_flag) { d[2*NN] = p[2*NN]; d[2*NN + 1] = p[2*NN + 1]; } @@ -593,7 +596,7 @@ int FixACKS2ReaxFF::BiCGStab(double *b, double *x) } } // last two rows - if (comm->me == 0) { + if (last_rows_flag) { q_hat[2*NN] = q[2*NN]; q_hat[2*NN + 1] = q[2*NN + 1]; } @@ -713,7 +716,7 @@ void FixACKS2ReaxFF::calculate_Q() } } // last two rows - if (comm->me == 0) { + if (last_rows_flag) { for (int i = 0; i < 2; ++i) { for (k = nprev-1; k > 0; --k) s_hist_last[i][k] = s_hist_last[i][k-1]; @@ -851,24 +854,24 @@ void FixACKS2ReaxFF::unpack_reverse_comm(int n, int *list, double *buf) } /* ---------------------------------------------------------------------- - proc 0 broadcasts last two rows of vector to everyone else + one proc broadcasts last two rows of vector to everyone else ------------------------------------------------------------------------- */ void FixACKS2ReaxFF::more_forward_comm(double *vec) { - MPI_Bcast(&vec[2*NN],2,MPI_DOUBLE,0,world); + MPI_Bcast(&vec[2*NN],2,MPI_DOUBLE,last_rows_rank,world); } /* ---------------------------------------------------------------------- - reduce last two rows of vector and give to proc 0 + reduce last two rows of vector and give to one proc ------------------------------------------------------------------------- */ void FixACKS2ReaxFF::more_reverse_comm(double *vec) { - if (comm->me == 0) - MPI_Reduce(MPI_IN_PLACE,&vec[2*NN],2,MPI_DOUBLE,MPI_SUM,0,world); + if (last_rows_flag) + MPI_Reduce(MPI_IN_PLACE,&vec[2*NN],2,MPI_DOUBLE,MPI_SUM,last_rows_rank,world); else - MPI_Reduce(&vec[2*NN],NULL,2,MPI_DOUBLE,MPI_SUM,0,world); + MPI_Reduce(&vec[2*NN],NULL,2,MPI_DOUBLE,MPI_SUM,last_rows_rank,world); } /* ---------------------------------------------------------------------- @@ -955,7 +958,7 @@ double FixACKS2ReaxFF::parallel_norm(double *v, int n) } // last two rows - if (comm->me == 0) { + if (last_rows_flag) { my_sum += SQR(v[2*NN]); my_sum += SQR(v[2*NN + 1]); } @@ -985,7 +988,7 @@ double FixACKS2ReaxFF::parallel_dot(double *v1, double *v2, int n) } // last two rows - if (comm->me == 0) { + if (last_rows_flag) { my_dot += v1[2*NN] * v2[2*NN]; my_dot += v1[2*NN + 1] * v2[2*NN + 1]; } @@ -1015,7 +1018,7 @@ double FixACKS2ReaxFF::parallel_vector_acc(double *v, int n) } // last two rows - if (comm->me == 0) { + if (last_rows_flag) { my_acc += v[2*NN]; my_acc += v[2*NN + 1]; } @@ -1041,7 +1044,7 @@ void FixACKS2ReaxFF::vector_sum(double* dest, double c, double* v, } // last two rows - if (comm->me == 0) { + if (last_rows_flag) { dest[2*NN] = c * v[2*NN] + d * y[2*NN]; dest[2*NN + 1] = c * v[2*NN + 1] + d * y[2*NN + 1]; } @@ -1062,7 +1065,7 @@ void FixACKS2ReaxFF::vector_add(double* dest, double c, double* v, int k) } // last two rows - if (comm->me == 0) { + if (last_rows_flag) { dest[2*NN] += c * v[2*NN]; dest[2*NN + 1] += c * v[2*NN + 1]; } @@ -1084,7 +1087,7 @@ void FixACKS2ReaxFF::vector_copy(double* dest, double* v, int k) } // last two rows - if (comm->me == 0) { + if (last_rows_flag) { dest[2*NN] = v[2*NN]; dest[2*NN + 1] = v[2*NN + 1]; } diff --git a/src/REAXFF/fix_acks2_reaxff.h b/src/REAXFF/fix_acks2_reaxff.h index 71104f13dc..85ac344b4a 100644 --- a/src/REAXFF/fix_acks2_reaxff.h +++ b/src/REAXFF/fix_acks2_reaxff.h @@ -38,6 +38,8 @@ class FixACKS2ReaxFF : public FixQEqReaxFF { double* get_s() {return s;} protected: + int last_rows_rank,last_rows_flag; + double **s_hist_X,**s_hist_last; double *bcut_acks2,bond_softness,**bcut; // acks2 parameters From f9236fbb331e3df480348f08734158fd281596aa Mon Sep 17 00:00:00 2001 From: Stan Gerald Moore Date: Tue, 14 Sep 2021 10:06:51 -0600 Subject: [PATCH 022/372] Remove unused variable --- src/KOKKOS/fix_acks2_reaxff_kokkos.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/KOKKOS/fix_acks2_reaxff_kokkos.h b/src/KOKKOS/fix_acks2_reaxff_kokkos.h index f28e524ebc..9b5d4d9ada 100644 --- a/src/KOKKOS/fix_acks2_reaxff_kokkos.h +++ b/src/KOKKOS/fix_acks2_reaxff_kokkos.h @@ -174,7 +174,7 @@ class FixACKS2ReaxFFKokkos : public FixACKS2ReaxFF { private: int inum; int allocated_flag, last_allocate; - int need_dup,comm_me_0_flag,prev_last_rows_rank; + int need_dup,prev_last_rows_rank; double* buf; typename AT::t_int_scalar d_mfill_offset; From 2b17796d7328e513077f2933cfd24c6c336866bf Mon Sep 17 00:00:00 2001 From: Stan Gerald Moore Date: Tue, 14 Sep 2021 10:23:57 -0600 Subject: [PATCH 023/372] Switch max --- src/KOKKOS/fix_acks2_reaxff_kokkos.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/KOKKOS/fix_acks2_reaxff_kokkos.cpp b/src/KOKKOS/fix_acks2_reaxff_kokkos.cpp index 86f610a2eb..2d48e9dc30 100644 --- a/src/KOKKOS/fix_acks2_reaxff_kokkos.cpp +++ b/src/KOKKOS/fix_acks2_reaxff_kokkos.cpp @@ -248,7 +248,7 @@ void FixACKS2ReaxFFKokkos::pre_force(int vflag) // be computed correctly int flag = comm->me; - if (nn == 0) flag = MPI_MAX; + if (nn == 0) flag = MAXSMALLINT; MPI_Allreduce(&flag, &last_rows_rank, 1, MPI_INT, MPI_MIN, world); last_rows_flag = (comm->me == last_rows_rank); From 65a085c0675aabab4065299f8bdef747c164f14e Mon Sep 17 00:00:00 2001 From: Stan Gerald Moore Date: Tue, 14 Sep 2021 10:45:45 -0600 Subject: [PATCH 024/372] Improve docs --- doc/src/fix_acks2_reaxff.rst | 30 ++++++++++++++++++++++-------- 1 file changed, 22 insertions(+), 8 deletions(-) diff --git a/doc/src/fix_acks2_reaxff.rst b/doc/src/fix_acks2_reaxff.rst index d4b176ad22..77a8db0588 100644 --- a/doc/src/fix_acks2_reaxff.rst +++ b/doc/src/fix_acks2_reaxff.rst @@ -1,8 +1,12 @@ .. index:: fix acks2/reaxff +.. index:: fix acks2/reaxff/kk + fix acks2/reaxff command ==================== +Accelerator Variants: *acks2/reaxff/kk* + Syntax """""" @@ -12,7 +16,7 @@ Syntax * ID, group-ID are documented in :doc:`fix ` command * acks2/reaxff = style name of this fix command -* Nevery = perform QEq every this many steps +* Nevery = perform ACKS2 every this many steps * cutlo,cuthi = lo and hi cutoff for Taper radius * tolerance = precision to which charges will be equilibrated * params = reaxff or a filename @@ -28,24 +32,28 @@ Examples Description """"""""""" -Perform the charge equilibration (QEq) method as described in :ref:`(Verstraelen) `. It is -typically used in conjunction with the ReaxFF force field model as +Perform the atom-condensed Kohn-Sham DFT to second order (ACKS2) charge +equilibration method as described in :ref:`(Verstraelen) `. +ACKS2 impedes unphysical long-range charge transfer sometimes seen with +QEq (e.g. for dissociation of molecules), at increased computational cost. +It is typically used in conjunction with the ReaxFF force field model as implemented in the :doc:`pair_style reaxff ` command, but it can be used with any potential in LAMMPS, so long as it defines and uses charges on each atom. For more technical details about the charge equilibration performed by fix acks2/reaxff, see the -:ref:`(O'Hearn) ` paper. +:ref:`(O'Hearn) ` paper. -The QEq method minimizes the electrostatic energy of the system by +The ACKS2 method minimizes the electrostatic energy of the system by adjusting the partial charge on individual atoms based on interactions -with their neighbors. It requires some parameters for each atom type. +with their neighbors. It requires some parameters +for each atom type. If the *params* setting above is the word "reaxff", then these are extracted from the :doc:`pair_style reaxff ` command and the ReaxFF force field file it reads in. If a file name is specified for *params*\ , then the parameters are taken from the specified file and the file must contain one line for each atom type. The latter form must be used when performing QeQ with a non-ReaxFF potential. -Each line should be formatted as follows: +The lines should be formatted as follows: .. parsed-literal:: @@ -69,6 +77,12 @@ with the *start/stop* keywords of the :doc:`run ` command. This fix is invoked during :doc:`energy minimization `. +---------- + +.. include:: accel_styles.rst + +---------- + Restrictions """""""""""" @@ -82,7 +96,7 @@ be used for periodic cell dimensions less than 10 angstroms. Related commands """""""""""""""" -:doc:`pair_style reaxff ` +:doc:`pair_style reaxff `, :doc:`fix qeq/reaxff ` **Default:** none From 3badb14b5a81e115da8382c14ee42616da7b87bd Mon Sep 17 00:00:00 2001 From: Stan Gerald Moore Date: Tue, 14 Sep 2021 10:49:04 -0600 Subject: [PATCH 025/372] Whitespace --- doc/src/fix_acks2_reaxff.rst | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/doc/src/fix_acks2_reaxff.rst b/doc/src/fix_acks2_reaxff.rst index 77a8db0588..8a84ec4a9a 100644 --- a/doc/src/fix_acks2_reaxff.rst +++ b/doc/src/fix_acks2_reaxff.rst @@ -41,11 +41,11 @@ implemented in the :doc:`pair_style reaxff ` command, but it can be used with any potential in LAMMPS, so long as it defines and uses charges on each atom. For more technical details about the charge equilibration performed by fix acks2/reaxff, see the -:ref:`(O'Hearn) ` paper. +:ref:`(O'Hearn) ` paper. The ACKS2 method minimizes the electrostatic energy of the system by adjusting the partial charge on individual atoms based on interactions -with their neighbors. It requires some parameters +with their neighbors. It requires some parameters for each atom type. If the *params* setting above is the word "reaxff", then these are extracted from the :doc:`pair_style reaxff ` command and From 51cfbaa2ef455f5c7f7357f5f1f24bc3491ee778 Mon Sep 17 00:00:00 2001 From: Stan Gerald Moore Date: Tue, 14 Sep 2021 10:56:03 -0600 Subject: [PATCH 026/372] Remove tabs --- src/KOKKOS/fix_acks2_reaxff_kokkos.cpp | 42 +++++++++++++------------- 1 file changed, 21 insertions(+), 21 deletions(-) diff --git a/src/KOKKOS/fix_acks2_reaxff_kokkos.cpp b/src/KOKKOS/fix_acks2_reaxff_kokkos.cpp index 2d48e9dc30..2413be51ea 100644 --- a/src/KOKKOS/fix_acks2_reaxff_kokkos.cpp +++ b/src/KOKKOS/fix_acks2_reaxff_kokkos.cpp @@ -258,35 +258,35 @@ void FixACKS2ReaxFFKokkos::pre_force(int vflag) MPI_Request request; if (comm->me == last_rows_rank) - MPI_Irecv(buf,2*nprev,MPI_DOUBLE, - prev_last_rows_rank,0,world,&request); + MPI_Irecv(buf,2*nprev,MPI_DOUBLE, + prev_last_rows_rank,0,world,&request); if (comm->me == prev_last_rows_rank) { - // pack buffer - k_s_hist_last.template sync(); - auto h_s_hist_last = k_s_hist_last.h_view; - int n = 0; - for (int k = 0; k < nprev; k++) { - buf[n++] = h_s_hist_last(0,k); - buf[n++] = h_s_hist_last(1,k); - } + // pack buffer + k_s_hist_last.template sync(); + auto h_s_hist_last = k_s_hist_last.h_view; + int n = 0; + for (int k = 0; k < nprev; k++) { + buf[n++] = h_s_hist_last(0,k); + buf[n++] = h_s_hist_last(1,k); + } - MPI_Send(buf,2*nprev,MPI_DOUBLE,last_rows_rank,0,world); + MPI_Send(buf,2*nprev,MPI_DOUBLE,last_rows_rank,0,world); } if (comm->me == last_rows_rank) { - MPI_Wait(&request,MPI_STATUS_IGNORE); + MPI_Wait(&request,MPI_STATUS_IGNORE); - // unpack buffer - k_s_hist_last.template sync(); - auto h_s_hist_last = k_s_hist_last.h_view; - int n = 0; - for (int k = 0; k < nprev; k++) { - h_s_hist_last(0,k) = buf[n++]; - h_s_hist_last(1,k) = buf[n++]; - } - k_s_hist_last.template modify(); + // unpack buffer + k_s_hist_last.template sync(); + auto h_s_hist_last = k_s_hist_last.h_view; + int n = 0; + for (int k = 0; k < nprev; k++) { + h_s_hist_last(0,k) = buf[n++]; + h_s_hist_last(1,k) = buf[n++]; + } + k_s_hist_last.template modify(); } } From dfe0e313d55f38744198eef2d968dade209ca746 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Tue, 14 Sep 2021 15:31:36 -0400 Subject: [PATCH 027/372] fully integrate acks2/reaxff fix into documentation build --- doc/src/Commands_fix.rst | 1 + doc/src/fix.rst | 1 + doc/src/fix_acks2_reaxff.rst | 59 +++++++++++---------- doc/src/pair_reaxff.rst | 8 +-- doc/utils/check-styles.py | 4 +- doc/utils/sphinx-config/false_positives.txt | 6 +++ 6 files changed, 44 insertions(+), 35 deletions(-) diff --git a/doc/src/Commands_fix.rst b/doc/src/Commands_fix.rst index effccd55bf..66b27c8a36 100644 --- a/doc/src/Commands_fix.rst +++ b/doc/src/Commands_fix.rst @@ -23,6 +23,7 @@ OPT. :columns: 5 * :doc:`accelerate/cos ` + * :doc:`acks2/reaxff (k) ` * :doc:`adapt ` * :doc:`adapt/fep ` * :doc:`addforce ` diff --git a/doc/src/fix.rst b/doc/src/fix.rst index c45ae6a801..028f4e3a94 100644 --- a/doc/src/fix.rst +++ b/doc/src/fix.rst @@ -166,6 +166,7 @@ page are followed by one or more of (g,i,k,o,t) to indicate which accelerated styles exist. * :doc:`accelerate/cos ` - apply cosine-shaped acceleration to atoms +* :doc:`acks2/reaxff ` - apply ACKS2 charge equilibration * :doc:`adapt ` - change a simulation parameter over time * :doc:`adapt/fep ` - enhanced version of fix adapt * :doc:`addforce ` - add a force to each atom diff --git a/doc/src/fix_acks2_reaxff.rst b/doc/src/fix_acks2_reaxff.rst index 8a84ec4a9a..4ba8c36ee6 100644 --- a/doc/src/fix_acks2_reaxff.rst +++ b/doc/src/fix_acks2_reaxff.rst @@ -1,9 +1,8 @@ .. index:: fix acks2/reaxff .. index:: fix acks2/reaxff/kk - fix acks2/reaxff command -==================== +======================== Accelerator Variants: *acks2/reaxff/kk* @@ -35,45 +34,46 @@ Description Perform the atom-condensed Kohn-Sham DFT to second order (ACKS2) charge equilibration method as described in :ref:`(Verstraelen) `. ACKS2 impedes unphysical long-range charge transfer sometimes seen with -QEq (e.g. for dissociation of molecules), at increased computational cost. -It is typically used in conjunction with the ReaxFF force field model as -implemented in the :doc:`pair_style reaxff ` command, but -it can be used with any potential in LAMMPS, so long as it defines and -uses charges on each atom. For more technical details about the -charge equilibration performed by fix acks2/reaxff, see the +QEq (e.g. for dissociation of molecules), at increased computational +cost. It is typically used in conjunction with the ReaxFF force field +model as implemented in the :doc:`pair_style reaxff ` +command, but it can be used with any potential in LAMMPS, so long as it +defines and uses charges on each atom. For more technical details about +the charge equilibration performed by fix acks2/reaxff, see the :ref:`(O'Hearn) ` paper. The ACKS2 method minimizes the electrostatic energy of the system by adjusting the partial charge on individual atoms based on interactions -with their neighbors. It requires some parameters -for each atom type. +with their neighbors. It requires some parameters for each atom type. If the *params* setting above is the word "reaxff", then these are extracted from the :doc:`pair_style reaxff ` command and the ReaxFF force field file it reads in. If a file name is specified for *params*\ , then the parameters are taken from the specified file -and the file must contain one line for each atom type. The latter -form must be used when performing QeQ with a non-ReaxFF potential. -The lines should be formatted as follows: +and the file must contain one line for each atom type. The latter form +must be used when performing QeQ with a non-ReaxFF potential. The lines +should be formatted as follows: .. parsed-literal:: bond_softness itype chi eta gamma bcut -where the first line is the global parameter *bond_softness*. The remaining -1 to Ntypes lines include *itype*, the atom type from 1 to Ntypes, *chi*, the -electronegativity in eV, *eta*, the self-Coulomb -potential in eV, *gamma*, the valence orbital -exponent, and *bcut*, the bond cutoff distance. Note that these 4 quantities are also in the ReaxFF -potential file, except that eta is defined here as twice the eta value -in the ReaxFF file. Note that unlike the rest of LAMMPS, the units +where the first line is the global parameter *bond_softness*. The +remaining 1 to Ntypes lines include *itype*, the atom type from 1 to +Ntypes, *chi*, the electronegativity in eV, *eta*, the self-Coulomb +potential in eV, *gamma*, the valence orbital exponent, and *bcut*, the +bond cutoff distance. Note that these 4 quantities are also in the +ReaxFF potential file, except that eta is defined here as twice the eta +value in the ReaxFF file. Note that unlike the rest of LAMMPS, the units of this fix are hard-coded to be A, eV, and electronic charge. **Restart, fix_modify, output, run start/stop, minimize info:** -No information about this fix is written to :doc:`binary restart files `. No global scalar or vector or per-atom -quantities are stored by this fix for access by various :doc:`output commands `. No parameter of this fix can be used -with the *start/stop* keywords of the :doc:`run ` command. +No information about this fix is written to :doc:`binary restart files +`. No global scalar or vector or per-atom quantities are +stored by this fix for access by various :doc:`output commands +`. No parameter of this fix can be used with the +*start/stop* keywords of the :doc:`run ` command. This fix is invoked during :doc:`energy minimization `. @@ -86,12 +86,13 @@ This fix is invoked during :doc:`energy minimization `. Restrictions """""""""""" -This fix is part of the REAXFF package. It is only enabled if -LAMMPS was built with that package. See the :doc:`Build package ` doc page for more info. +This fix is part of the REAXFF package. It is only enabled if LAMMPS +was built with that package. See the :doc:`Build package +` doc page for more info. -This fix does not correctly handle interactions -involving multiple periodic images of the same atom. Hence, it should not -be used for periodic cell dimensions less than 10 angstroms. +This fix does not correctly handle interactions involving multiple +periodic images of the same atom. Hence, it should not be used for +periodic cell dimensions less than 10 angstroms. Related commands """""""""""""""" @@ -104,7 +105,7 @@ Related commands .. _O'Hearn: -**(O'Hearn)** O'Hearn, Alperen, Aktulga, SIAM J. Sci. Comput., 42(1), C1–C22 (2020). +**(O'Hearn)** O'Hearn, Alperen, Aktulga, SIAM J. Sci. Comput., 42(1), C1-C22 (2020). .. _Verstraelen: diff --git a/doc/src/pair_reaxff.rst b/doc/src/pair_reaxff.rst index be49f565c2..a2aa0f356d 100644 --- a/doc/src/pair_reaxff.rst +++ b/doc/src/pair_reaxff.rst @@ -20,7 +20,7 @@ Syntax .. parsed-literal:: keyword = *checkqeq* or *lgvdw* or *safezone* or *mincap* or *minhbonds* - *checkqeq* value = *yes* or *no* = whether or not to require qeq/reaxff or acks2/reax fix + *checkqeq* value = *yes* or *no* = whether or not to require qeq/reaxff or acks2/reaxff fix *enobonds* value = *yes* or *no* = whether or not to tally energy of atoms with no bonds *lgvdw* value = *yes* or *no* = whether or not to use a low gradient vdW correction *safezone* = factor used for array allocation @@ -119,7 +119,7 @@ The ReaxFF parameter files provided were created using a charge equilibration (QEq) model for handling the electrostatic interactions. Therefore, by default, LAMMPS requires that either the :doc:`fix qeq/reaxff ` or the -:doc:`fix qeq/shielded ` or :doc:`fix acks2/reaxff ` +:doc:`fix qeq/shielded ` or :doc:`fix acks2/reaxff ` command be used with *pair_style reaxff* when simulating a ReaxFF model, to equilibrate the charges each timestep. @@ -129,7 +129,7 @@ for the QEq fixes, allowing a simulation to be run without charge equilibration. In this case, the static charges you assign to each atom will be used for computing the electrostatic interactions in the system. See the :doc:`fix qeq/reaxff ` or -:doc:`fix qeq/shielded ` or :doc:`fix acks2/reaxff ` +:doc:`fix qeq/shielded ` or :doc:`fix acks2/reaxff ` command documentation for more details. Using the optional keyword *lgvdw* with the value *yes* turns on the @@ -354,7 +354,7 @@ Related commands """""""""""""""" :doc:`pair_coeff `, :doc:`fix qeq/reaxff `, -:doc:`fix acks2/reax `, :doc:`fix reaxff/bonds `, +:doc:`fix acks2/reaxff `, :doc:`fix reaxff/bonds `, :doc:`fix reaxff/species ` Default diff --git a/doc/utils/check-styles.py b/doc/utils/check-styles.py index 6c1fd6dd35..2ad75aeeda 100755 --- a/doc/utils/check-styles.py +++ b/doc/utils/check-styles.py @@ -254,7 +254,7 @@ for command_type, entries in index.items(): print("Total number of style index entries:", total_index) -skip_fix = ('python', 'NEIGH_HISTORY/omp','qeq/reax','reax/c/bonds','reax/c/species') +skip_fix = ('python', 'NEIGH_HISTORY/omp','acks2/reax','qeq/reax','reax/c/bonds','reax/c/species') skip_pair = ('meam/c','lj/sf','reax/c') counter = 0 @@ -282,7 +282,7 @@ if counter: counter = 0 counter += check_style_index("compute", compute, index["compute"]) -counter += check_style_index("fix", fix, index["fix"], skip=['python','qeq/reax','reax/c/bonds','reax/c/species']) +counter += check_style_index("fix", fix, index["fix"], skip=['python','acks2/reax','qeq/reax','reax/c/bonds','reax/c/species']) counter += check_style_index("angle_style", angle, index["angle_style"]) counter += check_style_index("bond_style", bond, index["bond_style"]) counter += check_style_index("dihedral_style", dihedral, index["dihedral_style"]) diff --git a/doc/utils/sphinx-config/false_positives.txt b/doc/utils/sphinx-config/false_positives.txt index fff23a01b0..fbb5d3ce6b 100644 --- a/doc/utils/sphinx-config/false_positives.txt +++ b/doc/utils/sphinx-config/false_positives.txt @@ -19,6 +19,7 @@ accuracies ach ackland Ackland +acks acolor acos Acta @@ -77,6 +78,7 @@ allocators allosws AlO Alonso +Alperen alphak alphashrink amap @@ -1252,6 +1254,7 @@ hbond hcp hdnnp HDNNP +Hearn heatconduction Hebbeker Hebenstreit @@ -3074,6 +3077,7 @@ Spearot specular spellcheck Spellmeyer +Speybroeck sph SPH Spickermann @@ -3486,6 +3490,7 @@ Verlag verlet Verlet versa +Verstraelen ves vflag vhi @@ -3552,6 +3557,7 @@ vzcm vzi Waals Wadley +Waroquier wallstyle walltime Waltham From 86578554bbb5a420333d8cbe6ab448dbeb579560 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Tue, 14 Sep 2021 15:34:28 -0400 Subject: [PATCH 028/372] apply latest formatting conventions (w/o clang format on the .cpp file) --- src/REAXFF/fix_acks2_reaxff.cpp | 32 +++++++++++++-------------- src/REAXFF/fix_acks2_reaxff.h | 39 ++++++++++++++++----------------- 2 files changed, 35 insertions(+), 36 deletions(-) diff --git a/src/REAXFF/fix_acks2_reaxff.cpp b/src/REAXFF/fix_acks2_reaxff.cpp index 4a430c8228..5385fb26df 100644 --- a/src/REAXFF/fix_acks2_reaxff.cpp +++ b/src/REAXFF/fix_acks2_reaxff.cpp @@ -17,28 +17,28 @@ ------------------------------------------------------------------------- */ #include "fix_acks2_reaxff.h" -#include -#include -#include -#include "pair_reaxff.h" + #include "atom.h" -#include "comm.h" -#include "neighbor.h" -#include "neigh_list.h" -#include "neigh_request.h" -#include "update.h" -#include "force.h" -#include "group.h" -#include "pair.h" -#include "respa.h" -#include "memory.h" #include "citeme.h" +#include "comm.h" #include "error.h" #include "fix_efield.h" -#include "utils.h" +#include "force.h" +#include "group.h" +#include "memory.h" +#include "neigh_list.h" +#include "neigh_request.h" +#include "neighbor.h" +#include "pair.h" +#include "pair_reaxff.h" #include "reaxff_api.h" - +#include "respa.h" #include "text_file_reader.h" +#include "update.h" +#include "utils.h" + +#include +#include using namespace LAMMPS_NS; using namespace FixConst; diff --git a/src/REAXFF/fix_acks2_reaxff.h b/src/REAXFF/fix_acks2_reaxff.h index 85ac344b4a..4256d9743e 100644 --- a/src/REAXFF/fix_acks2_reaxff.h +++ b/src/REAXFF/fix_acks2_reaxff.h @@ -1,4 +1,3 @@ -// clang-format off /* -*- c++ -*- ---------------------------------------------------------- LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator https://www.lammps.org/, Sandia National Laboratories @@ -13,10 +12,10 @@ ------------------------------------------------------------------------- */ #ifdef FIX_CLASS - -FixStyle(acks2/reax,FixACKS2ReaxFF) -FixStyle(acks2/reaxff,FixACKS2ReaxFF) - +// clang-format off +FixStyle(acks2/reax,FixACKS2ReaxFF); +FixStyle(acks2/reaxff,FixACKS2ReaxFF); +// clang-format on #else #ifndef LMP_FIX_ACKS2_REAXFF_H @@ -35,14 +34,14 @@ class FixACKS2ReaxFF : public FixQEqReaxFF { void init_storage(); virtual void pre_force(int); - double* get_s() {return s;} + double *get_s() { return s; } protected: - int last_rows_rank,last_rows_flag; + int last_rows_rank, last_rows_flag; - double **s_hist_X,**s_hist_last; + double **s_hist_X, **s_hist_last; - double *bcut_acks2,bond_softness,**bcut; // acks2 parameters + double *bcut_acks2, bond_softness, **bcut; // acks2 parameters sparse_matrix X; double *Xdia_inv; @@ -51,7 +50,7 @@ class FixACKS2ReaxFF : public FixQEqReaxFF { //BiCGStab storage double *g, *q_hat, *r_hat, *y, *z; - void pertype_parameters(char*); + void pertype_parameters(char *); void init_bondcut(); void allocate_storage(); void deallocate_storage(); @@ -60,11 +59,11 @@ class FixACKS2ReaxFF : public FixQEqReaxFF { void init_matvec(); void compute_X(); - double calculate_X(double,double); + double calculate_X(double, double); void calculate_Q(); - int BiCGStab(double*,double*); - void sparse_matvec_acks2(sparse_matrix*,sparse_matrix*,double*,double*); + int BiCGStab(double *, double *); + void sparse_matvec_acks2(sparse_matrix *, sparse_matrix *, double *, double *); int pack_forward_comm(int, int *, double *, int, int *); void unpack_forward_comm(int, int, double *); @@ -78,16 +77,16 @@ class FixACKS2ReaxFF : public FixQEqReaxFF { virtual int pack_exchange(int, double *); virtual int unpack_exchange(int, double *); - double parallel_norm( double*, int ); - double parallel_dot( double*, double*, int ); - double parallel_vector_acc( double*, int ); + double parallel_norm(double *, int); + double parallel_dot(double *, double *, int); + double parallel_vector_acc(double *, int); - void vector_sum(double*,double,double*,double,double*,int); - void vector_add(double*, double, double*,int); - void vector_copy(double*, double*,int); + void vector_sum(double *, double, double *, double, double *, int); + void vector_add(double *, double, double *, int); + void vector_copy(double *, double *, int); }; -} +} // namespace LAMMPS_NS #endif #endif From 254dcdf6655abfc4d95b61bb5bb6eac252a87b2c Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Tue, 14 Sep 2021 16:23:48 -0400 Subject: [PATCH 029/372] include formatting updates for the KOKKOS files as well --- src/KOKKOS/fix_acks2_reaxff_kokkos.cpp | 21 ++++++++++++--------- src/KOKKOS/fix_acks2_reaxff_kokkos.h | 18 +++++++++--------- 2 files changed, 21 insertions(+), 18 deletions(-) diff --git a/src/KOKKOS/fix_acks2_reaxff_kokkos.cpp b/src/KOKKOS/fix_acks2_reaxff_kokkos.cpp index 2413be51ea..6a1eb26da1 100644 --- a/src/KOKKOS/fix_acks2_reaxff_kokkos.cpp +++ b/src/KOKKOS/fix_acks2_reaxff_kokkos.cpp @@ -1,3 +1,4 @@ +// clang-format off /* ---------------------------------------------------------------------- LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator https://www.lammps.org/, Sandia National Laboratories @@ -16,23 +17,25 @@ ------------------------------------------------------------------------- */ #include "fix_acks2_reaxff_kokkos.h" -#include -#include "kokkos.h" + #include "atom.h" -#include "atom_masks.h" #include "atom_kokkos.h" +#include "atom_masks.h" #include "comm.h" +#include "error.h" #include "force.h" -#include "neighbor.h" +#include "integrate.h" +#include "kokkos.h" +#include "memory_kokkos.h" #include "neigh_list_kokkos.h" #include "neigh_request.h" -#include "update.h" -#include "integrate.h" -#include "memory_kokkos.h" -#include "error.h" +#include "neighbor.h" #include "pair_reaxff_kokkos.h" +#include "update.h" -using namespace LAMMPS_NS; +#include + +sing namespace LAMMPS_NS; using namespace FixConst; #define SMALL 0.0001 diff --git a/src/KOKKOS/fix_acks2_reaxff_kokkos.h b/src/KOKKOS/fix_acks2_reaxff_kokkos.h index 9b5d4d9ada..67c737498f 100644 --- a/src/KOKKOS/fix_acks2_reaxff_kokkos.h +++ b/src/KOKKOS/fix_acks2_reaxff_kokkos.h @@ -12,16 +12,16 @@ ------------------------------------------------------------------------- */ #ifdef FIX_CLASS - -FixStyle(acks2/reaxff/kk,FixACKS2ReaxFFKokkos) -FixStyle(acks2/reaxff/kk/device,FixACKS2ReaxFFKokkos) -FixStyle(acks2/reaxff/kk/host,FixACKS2ReaxFFKokkos) -FixStyle(acks2/reax/kk,FixACKS2ReaxFFKokkos) -FixStyle(acks2/reax/kk/device,FixACKS2ReaxFFKokkos) -FixStyle(acks2/reax/kk/host,FixACKS2ReaxFFKokkos) - +// clang-format off +FixStyle(acks2/reaxff/kk,FixACKS2ReaxFFKokkos); +FixStyle(acks2/reaxff/kk/device,FixACKS2ReaxFFKokkos); +FixStyle(acks2/reaxff/kk/host,FixACKS2ReaxFFKokkos); +FixStyle(acks2/reax/kk,FixACKS2ReaxFFKokkos); +FixStyle(acks2/reax/kk/device,FixACKS2ReaxFFKokkos); +FixStyle(acks2/reax/kk/host,FixACKS2ReaxFFKokkos); +// clang-format on #else - +// clang-format off #ifndef LMP_FIX_ACKS2_REAXFF_KOKKOS_H #define LMP_FIX_ACKS2_REAXFF_KOKKOS_H From 19bc606a2082def5f1ca1dce6f8e8d9b9e9bcd3a Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Tue, 14 Sep 2021 16:26:38 -0400 Subject: [PATCH 030/372] fix typo --- src/KOKKOS/fix_acks2_reaxff_kokkos.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/KOKKOS/fix_acks2_reaxff_kokkos.cpp b/src/KOKKOS/fix_acks2_reaxff_kokkos.cpp index 6a1eb26da1..3414c29f40 100644 --- a/src/KOKKOS/fix_acks2_reaxff_kokkos.cpp +++ b/src/KOKKOS/fix_acks2_reaxff_kokkos.cpp @@ -35,7 +35,7 @@ #include -sing namespace LAMMPS_NS; +using namespace LAMMPS_NS; using namespace FixConst; #define SMALL 0.0001 From b4acacf5cbc90d593a9455da1cd85e627415bde4 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Tue, 14 Sep 2021 16:40:42 -0400 Subject: [PATCH 031/372] add minimal example and a unit test input --- examples/reaxff/in.reaxff.rdx-acks2 | 53 ++++++ .../reaxff/log.31Aug21.reaxff.rdx-acks2.g++.1 | 153 +++++++++++++++ .../reaxff/log.31Aug21.reaxff.rdx-acks2.g++.4 | 153 +++++++++++++++ .../tests/atomic-pair-reaxff-acks2.yaml | 176 ++++++++++++++++++ 4 files changed, 535 insertions(+) create mode 100644 examples/reaxff/in.reaxff.rdx-acks2 create mode 100644 examples/reaxff/log.31Aug21.reaxff.rdx-acks2.g++.1 create mode 100644 examples/reaxff/log.31Aug21.reaxff.rdx-acks2.g++.4 create mode 100644 unittest/force-styles/tests/atomic-pair-reaxff-acks2.yaml diff --git a/examples/reaxff/in.reaxff.rdx-acks2 b/examples/reaxff/in.reaxff.rdx-acks2 new file mode 100644 index 0000000000..541095081e --- /dev/null +++ b/examples/reaxff/in.reaxff.rdx-acks2 @@ -0,0 +1,53 @@ +# ReaxFF potential for RDX system + +units real + +atom_style charge +read_data data.rdx + +pair_style reaxff control.reax_c.rdx +pair_coeff * * ffield.reax C H O N + +compute reax all pair reaxff + +variable eb equal c_reax[1] +variable ea equal c_reax[2] +variable elp equal c_reax[3] +variable emol equal c_reax[4] +variable ev equal c_reax[5] +variable epen equal c_reax[6] +variable ecoa equal c_reax[7] +variable ehb equal c_reax[8] +variable et equal c_reax[9] +variable eco equal c_reax[10] +variable ew equal c_reax[11] +variable ep equal c_reax[12] +variable efi equal c_reax[13] +variable eqeq equal c_reax[14] + +neighbor 2.5 bin +neigh_modify every 10 delay 0 check no + +fix 1 all nve +fix 2 all acks2/reaxff 1 0.0 10.0 1.0e-6 reaxff + +variable nqeq equal f_2 + +thermo 10 +thermo_style custom step temp epair etotal press & + v_eb v_ea v_elp v_emol v_ev v_epen v_ecoa & + v_ehb v_et v_eco v_ew v_ep v_efi v_eqeq v_nqeq + +timestep 1.0 + +#dump 1 all atom 10 dump.reaxff.rdx + +#dump 2 all image 25 image.*.jpg type type & +# axes yes 0.8 0.02 view 60 -30 +#dump_modify 2 pad 3 + +#dump 3 all movie 25 movie.mpg type type & +# axes yes 0.8 0.02 view 60 -30 +#dump_modify 3 pad 3 + +run 100 diff --git a/examples/reaxff/log.31Aug21.reaxff.rdx-acks2.g++.1 b/examples/reaxff/log.31Aug21.reaxff.rdx-acks2.g++.1 new file mode 100644 index 0000000000..42d84167a3 --- /dev/null +++ b/examples/reaxff/log.31Aug21.reaxff.rdx-acks2.g++.1 @@ -0,0 +1,153 @@ +LAMMPS (31 Aug 2021) + using 1 OpenMP thread(s) per MPI task +# ReaxFF potential for RDX system + +units real + +atom_style charge +read_data data.rdx +Reading data file ... + orthogonal box = (35.000000 35.000000 35.000000) to (48.000000 48.000000 48.000000) + 1 by 1 by 1 MPI processor grid + reading atoms ... + 21 atoms + read_data CPU = 0.000 seconds + +pair_style reaxff control.reax_c.rdx +WARNING: Ignoring inactive control parameter: simulation_name (src/REAXFF/reaxff_control.cpp:97) +WARNING: Ignoring inactive control parameter: energy_update_freq (src/REAXFF/reaxff_control.cpp:97) +WARNING: Support for writing native trajectories has been removed after LAMMPS version 8 April 2021 (src/REAXFF/reaxff_control.cpp:113) +WARNING: Ignoring inactive control parameter: traj_title (src/REAXFF/reaxff_control.cpp:97) +WARNING: Ignoring inactive control parameter: atom_info (src/REAXFF/reaxff_control.cpp:97) +WARNING: Ignoring inactive control parameter: atom_forces (src/REAXFF/reaxff_control.cpp:97) +WARNING: Ignoring inactive control parameter: atom_velocities (src/REAXFF/reaxff_control.cpp:97) +WARNING: Ignoring inactive control parameter: bond_info (src/REAXFF/reaxff_control.cpp:97) +WARNING: Ignoring inactive control parameter: angle_info (src/REAXFF/reaxff_control.cpp:97) +pair_coeff * * ffield.reax C H O N +Reading potential file ffield.reax with DATE: 2010-02-19 + +compute reax all pair reaxff + +variable eb equal c_reax[1] +variable ea equal c_reax[2] +variable elp equal c_reax[3] +variable emol equal c_reax[4] +variable ev equal c_reax[5] +variable epen equal c_reax[6] +variable ecoa equal c_reax[7] +variable ehb equal c_reax[8] +variable et equal c_reax[9] +variable eco equal c_reax[10] +variable ew equal c_reax[11] +variable ep equal c_reax[12] +variable efi equal c_reax[13] +variable eqeq equal c_reax[14] + +neighbor 2.5 bin +neigh_modify every 10 delay 0 check no + +fix 1 all nve +fix 2 all acks2/reaxff 1 0.0 10.0 1.0e-6 reaxff + +variable nqeq equal f_2 + +thermo 10 +thermo_style custom step temp epair etotal press v_eb v_ea v_elp v_emol v_ev v_epen v_ecoa v_ehb v_et v_eco v_ew v_ep v_efi v_eqeq v_nqeq + +timestep 1.0 + +#dump 1 all atom 10 dump.reaxff.rdx + +#dump 2 all image 25 image.*.jpg type type # axes yes 0.8 0.02 view 60 -30 +#dump_modify 2 pad 3 + +#dump 3 all movie 25 movie.mpg type type # axes yes 0.8 0.02 view 60 -30 +#dump_modify 3 pad 3 + +run 100 + +CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE + +Your simulation uses code contributions which should be cited: + +- pair reaxff command: + +@Article{Aktulga12, + author = {H. M. Aktulga, J. C. Fogarty, S. A. Pandit, A. Y. Grama}, + title = {Parallel reactive molecular dynamics: Numerical methods and algorithmic techniques}, + journal = {Parallel Computing}, + year = 2012, + volume = 38, + pages = {245--259} +} + +- fix acks2/reaxff command: + +@Article{O'Hearn2020, + author = {K. A. O'Hearn, A. Alperen, and H. M. Aktulga}, + title = {Fast Solvers for Charge Distribution Models on Shared Memory Platforms}, + journal = {SIAM J. Sci. Comput.}, + year = 2020, + volume = 42, + pages = {1--22} +} + +CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE + +Neighbor list info ... + update every 10 steps, delay 0 steps, check no + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 12.5 + ghost atom cutoff = 12.5 + binsize = 6.25, bins = 3 3 3 + 2 neighbor lists, perpetual/occasional/extra = 2 0 0 + (1) pair reaxff, perpetual + attributes: half, newton off, ghost + pair build: half/bin/newtoff/ghost + stencil: full/ghost/bin/3d + bin: standard + (2) fix acks2/reaxff, perpetual, copy from (1) + attributes: half, newton off, ghost + pair build: copy + stencil: none + bin: none +Per MPI rank memory allocation (min/avg/max) = 15.42 | 15.42 | 15.42 Mbytes +Step Temp E_pair TotEng Press v_eb v_ea v_elp v_emol v_ev v_epen v_ecoa v_ehb v_et v_eco v_ew v_ep v_efi v_eqeq v_nqeq + 0 0 -1808.3917 -1808.3917 28736.41 -2958.4712 79.527715 0.31082031 0 98.589783 25.846176 -0.18034154 0 16.709078 -9.1620736 938.43732 -2.8201336e-06 0 0.00098778735 13 + 10 1304.7509 -1914.0924 -1836.3081 -21153.752 -2726.219 -17.446777 0.19121437 0 58.532415 2.5619735 -77.337316 0 14.042901 -5.8126196 837.38787 -6.2534642e-06 0 0.0069050076 8 + 20 427.93813 -1859.4968 -1833.9848 -23712.924 -2777.9198 1.1772924 0.029117162 0 88.192077 0.1543307 -53.152357 0 28.462512 -9.6520395 863.2094 -1.1899783e-06 0 0.0027021013 9.5 + 30 600.85197 -1867.8807 -1832.0602 -15720.955 -2765.2737 1.4937773 0.06185725 0 80.013841 0.090367845 -47.085245 0 16.406666 -11.121903 857.53144 2.0736158e-06 0 0.0022173663 11 + 40 1108.9095 -1898.9259 -1832.817 -38935.482 -2778.2032 2.0997015 0.14353694 0 78.798725 0.26421692 -58.91856 0 14.943876 -10.029332 851.97505 4.5556609e-07 0 1.3535608e-05 13.5 + 50 1155.316 -1890.9414 -1822.0658 7674.2712 -2804.003 8.5334231 0.15421192 0 78.75008 2.2698852 -77.319055 0 31.922369 -8.9637444 877.71732 6.9388694e-05 0 -0.0028728853 10 + 60 1237.1418 -1895.0813 -1821.3276 854.31642 -2722.5859 -14.2286 0.22149986 0 44.37587 9.5571735 -73.477237 0 18.566827 -4.8577223 847.34568 1.6885606e-05 0 0.0011149828 12 + 70 1025.7868 -1882.2967 -1821.1431 25212.869 -2890.8508 54.451033 0.29038763 0 112.30176 2.4666006 -64.1052 0 19.268525 -11.520433 895.4047 5.9278993e-06 0 -0.0032206344 9.5 + 80 619.97124 -1857.6805 -1820.7202 -12086.828 -2740.4855 -5.2006679 0.12319993 0 99.775674 2.7800075 -77.812022 0 25.298145 -7.562536 845.40484 3.766017e-05 0 -0.0017469014 9.5 + 90 1169.6095 -1893.5597 -1823.832 -6196.2424 -2816.571 34.143182 0.24873152 0 91.015691 0.81251232 -69.865835 0 17.93908 -10.502528 859.2142 1.3276274e-05 0 0.006324974 9.5 + 100 1032.79 -1882.6603 -1821.0893 6839.1293 -2811.285 8.1859322 0.22109056 0 69.13601 8.7302413 -74.363952 0 22.220038 -7.7705968 902.27101 6.5173803e-05 0 -0.005154992 7.5 +Loop time of 0.118719 on 1 procs for 100 steps with 21 atoms + +Performance: 72.777 ns/day, 0.330 hours/ns, 842.328 timesteps/s +99.8% CPU use with 1 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0.09767 | 0.09767 | 0.09767 | 0.0 | 82.27 +Neigh | 0.0055032 | 0.0055032 | 0.0055032 | 0.0 | 4.64 +Comm | 0.00021768 | 0.00021768 | 0.00021768 | 0.0 | 0.18 +Output | 0.00023556 | 0.00023556 | 0.00023556 | 0.0 | 0.20 +Modify | 0.014979 | 0.014979 | 0.014979 | 0.0 | 12.62 +Other | | 0.0001125 | | | 0.09 + +Nlocal: 21.0000 ave 21 max 21 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Nghost: 546.000 ave 546 max 546 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Neighs: 1102.00 ave 1102 max 1102 min +Histogram: 1 0 0 0 0 0 0 0 0 0 + +Total # of neighbors = 1102 +Ave neighs/atom = 52.476190 +Neighbor list builds = 10 +Dangerous builds not checked +Total wall time: 0:00:00 diff --git a/examples/reaxff/log.31Aug21.reaxff.rdx-acks2.g++.4 b/examples/reaxff/log.31Aug21.reaxff.rdx-acks2.g++.4 new file mode 100644 index 0000000000..74f4038548 --- /dev/null +++ b/examples/reaxff/log.31Aug21.reaxff.rdx-acks2.g++.4 @@ -0,0 +1,153 @@ +LAMMPS (31 Aug 2021) + using 1 OpenMP thread(s) per MPI task +# ReaxFF potential for RDX system + +units real + +atom_style charge +read_data data.rdx +Reading data file ... + orthogonal box = (35.000000 35.000000 35.000000) to (48.000000 48.000000 48.000000) + 1 by 2 by 2 MPI processor grid + reading atoms ... + 21 atoms + read_data CPU = 0.000 seconds + +pair_style reaxff control.reax_c.rdx +WARNING: Ignoring inactive control parameter: simulation_name (src/REAXFF/reaxff_control.cpp:97) +WARNING: Ignoring inactive control parameter: energy_update_freq (src/REAXFF/reaxff_control.cpp:97) +WARNING: Support for writing native trajectories has been removed after LAMMPS version 8 April 2021 (src/REAXFF/reaxff_control.cpp:113) +WARNING: Ignoring inactive control parameter: traj_title (src/REAXFF/reaxff_control.cpp:97) +WARNING: Ignoring inactive control parameter: atom_info (src/REAXFF/reaxff_control.cpp:97) +WARNING: Ignoring inactive control parameter: atom_forces (src/REAXFF/reaxff_control.cpp:97) +WARNING: Ignoring inactive control parameter: atom_velocities (src/REAXFF/reaxff_control.cpp:97) +WARNING: Ignoring inactive control parameter: bond_info (src/REAXFF/reaxff_control.cpp:97) +WARNING: Ignoring inactive control parameter: angle_info (src/REAXFF/reaxff_control.cpp:97) +pair_coeff * * ffield.reax C H O N +Reading potential file ffield.reax with DATE: 2010-02-19 + +compute reax all pair reaxff + +variable eb equal c_reax[1] +variable ea equal c_reax[2] +variable elp equal c_reax[3] +variable emol equal c_reax[4] +variable ev equal c_reax[5] +variable epen equal c_reax[6] +variable ecoa equal c_reax[7] +variable ehb equal c_reax[8] +variable et equal c_reax[9] +variable eco equal c_reax[10] +variable ew equal c_reax[11] +variable ep equal c_reax[12] +variable efi equal c_reax[13] +variable eqeq equal c_reax[14] + +neighbor 2.5 bin +neigh_modify every 10 delay 0 check no + +fix 1 all nve +fix 2 all acks2/reaxff 1 0.0 10.0 1.0e-6 reaxff + +variable nqeq equal f_2 + +thermo 10 +thermo_style custom step temp epair etotal press v_eb v_ea v_elp v_emol v_ev v_epen v_ecoa v_ehb v_et v_eco v_ew v_ep v_efi v_eqeq v_nqeq + +timestep 1.0 + +#dump 1 all atom 10 dump.reaxff.rdx + +#dump 2 all image 25 image.*.jpg type type # axes yes 0.8 0.02 view 60 -30 +#dump_modify 2 pad 3 + +#dump 3 all movie 25 movie.mpg type type # axes yes 0.8 0.02 view 60 -30 +#dump_modify 3 pad 3 + +run 100 + +CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE + +Your simulation uses code contributions which should be cited: + +- pair reaxff command: + +@Article{Aktulga12, + author = {H. M. Aktulga, J. C. Fogarty, S. A. Pandit, A. Y. Grama}, + title = {Parallel reactive molecular dynamics: Numerical methods and algorithmic techniques}, + journal = {Parallel Computing}, + year = 2012, + volume = 38, + pages = {245--259} +} + +- fix acks2/reaxff command: + +@Article{O'Hearn2020, + author = {K. A. O'Hearn, A. Alperen, and H. M. Aktulga}, + title = {Fast Solvers for Charge Distribution Models on Shared Memory Platforms}, + journal = {SIAM J. Sci. Comput.}, + year = 2020, + volume = 42, + pages = {1--22} +} + +CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE + +Neighbor list info ... + update every 10 steps, delay 0 steps, check no + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 12.5 + ghost atom cutoff = 12.5 + binsize = 6.25, bins = 3 3 3 + 2 neighbor lists, perpetual/occasional/extra = 2 0 0 + (1) pair reaxff, perpetual + attributes: half, newton off, ghost + pair build: half/bin/newtoff/ghost + stencil: full/ghost/bin/3d + bin: standard + (2) fix acks2/reaxff, perpetual, copy from (1) + attributes: half, newton off, ghost + pair build: copy + stencil: none + bin: none +Per MPI rank memory allocation (min/avg/max) = 11.41 | 12.58 | 13.79 Mbytes +Step Temp E_pair TotEng Press v_eb v_ea v_elp v_emol v_ev v_epen v_ecoa v_ehb v_et v_eco v_ew v_ep v_efi v_eqeq v_nqeq + 0 0 -1808.3956 -1808.3956 28736.41 -2958.4712 79.527715 0.31082031 0 98.589783 25.846176 -0.18034154 0 16.709078 -9.1620736 938.43732 -5.6770858e-06 0 -0.0028392419 14 + 10 1304.7509 -1914.1049 -1836.3206 -21153.752 -2726.219 -17.446777 0.19121437 0 58.532415 2.5619735 -77.337316 0 14.042901 -5.8126196 837.38787 5.0978181e-06 0 -0.005556783 10 + 20 427.93812 -1859.4876 -1833.9756 -23712.923 -2777.9198 1.1772926 0.029117161 0 88.192077 0.1543307 -53.152357 0 28.462513 -9.6520395 863.2094 2.1862491e-05 0 0.011844766 6 + 30 600.85195 -1867.8815 -1832.061 -15720.949 -2765.2737 1.4937783 0.061857248 0 80.013842 0.090367838 -47.085244 0 16.406666 -11.121903 857.53144 -1.2004549e-06 0 0.0014350102 11 + 40 1108.9094 -1898.8905 -1832.7815 -38935.484 -2778.2032 2.0996992 0.14353693 0 78.798728 0.26421691 -58.91856 0 14.943875 -10.029332 851.97505 4.1455385e-06 0 0.03548355 8 + 50 1155.3161 -1890.9404 -1822.0649 7674.2794 -2804.0031 8.5334252 0.15421192 0 78.75008 2.2698849 -77.319055 0 31.92237 -8.9637447 877.71732 3.7570219e-05 0 -0.0018876928 7 + 60 1237.1418 -1895.0785 -1821.3248 854.31669 -2722.5859 -14.228606 0.22149986 0 44.375869 9.5571747 -73.477236 0 18.566825 -4.8577216 847.34567 -6.0652199e-06 0 0.0039746806 9 + 70 1025.7867 -1882.2715 -1821.118 25212.883 -2890.8508 54.451049 0.29038764 0 112.30178 2.4666008 -64.105192 0 19.268524 -11.520433 895.40472 7.5942987e-05 0 0.021807003 5.5 + 80 619.97151 -1857.6791 -1820.7188 -12086.851 -2740.4854 -5.2006737 0.12319996 0 99.775675 2.7800093 -77.812024 0 25.29814 -7.5625349 845.40485 -3.2701271e-06 0 -0.00028718671 11 + 90 1169.6099 -1893.5491 -1823.8214 -6196.2462 -2816.571 34.143181 0.24873153 0 91.015695 0.81251269 -69.865839 0 17.939079 -10.502527 859.2142 2.297465e-05 0 0.016894027 6.5 + 100 1032.7901 -1882.6521 -1821.081 6839.0982 -2811.2849 8.1859195 0.22109056 0 69.136035 8.730243 -74.363951 0 22.220028 -7.7705949 902.27102 6.4245187e-06 0 0.0030953783 10 +Loop time of 0.140636 on 4 procs for 100 steps with 21 atoms + +Performance: 61.435 ns/day, 0.391 hours/ns, 711.054 timesteps/s +95.2% CPU use with 4 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0.042596 | 0.057261 | 0.073915 | 4.7 | 40.72 +Neigh | 0.0024769 | 0.003423 | 0.0044286 | 1.2 | 2.43 +Comm | 0.0078962 | 0.025491 | 0.040466 | 7.3 | 18.13 +Output | 0.00030279 | 0.00066626 | 0.0017195 | 0.0 | 0.47 +Modify | 0.05257 | 0.0536 | 0.054564 | 0.3 | 38.11 +Other | | 0.0001949 | | | 0.14 + +Nlocal: 5.25000 ave 14 max 0 min +Histogram: 1 0 2 0 0 0 0 0 0 1 +Nghost: 355.500 ave 433 max 282 min +Histogram: 1 0 0 0 2 0 0 0 0 1 +Neighs: 303.000 ave 784 max 0 min +Histogram: 1 0 1 1 0 0 0 0 0 1 + +Total # of neighbors = 1212 +Ave neighs/atom = 57.714286 +Neighbor list builds = 10 +Dangerous builds not checked +Total wall time: 0:00:00 diff --git a/unittest/force-styles/tests/atomic-pair-reaxff-acks2.yaml b/unittest/force-styles/tests/atomic-pair-reaxff-acks2.yaml new file mode 100644 index 0000000000..9fc6e54858 --- /dev/null +++ b/unittest/force-styles/tests/atomic-pair-reaxff-acks2.yaml @@ -0,0 +1,176 @@ +--- +lammps_version: 31 Aug 2021 +date_generated: Tue Sep 14 16:33:13 2021 +epsilon: 2e-10 +skip_tests: omp +prerequisites: ! | + pair reaxff + fix acks2/reaxff +pre_commands: ! | + echo screen + variable newton_pair delete + variable newton_pair index on + atom_modify map array + units real + atom_style charge + lattice diamond 3.77 + region box block 0 2 0 2 0 2 + create_box 3 box + create_atoms 1 box + displace_atoms all random 0.1 0.1 0.1 623426 + mass 1 1.0 + mass 2 12.0 + mass 3 16.0 + set type 1 type/fraction 2 0.5 998877 + set type 2 type/fraction 3 0.5 887766 + set type 1 charge 0.00 + set type 2 charge 0.01 + set type 3 charge -0.01 + velocity all create 100 4534624 loop geom +post_commands: ! | + fix qeq all acks2/reaxff 1 0.0 8.0 1.0e-20 reaxff +input_file: in.empty +pair_style: reaxff NULL checkqeq yes +pair_coeff: ! | + * * ffield.reax.mattsson H C O +extract: ! "" +natoms: 64 +init_vdwl: -3296.3503506624793 +init_coul: -46582.941410876396 +init_stress: ! |- + -4.0889791539749363e+03 -5.3386746000293797e+03 -4.0808531437530951e+03 8.4337212661084749e+01 1.2848022290076187e+02 2.1468330620396631e+02 +init_forces: ! |2 + 1 -1.1929105250740845e+02 -1.4227215649327911e+02 2.1690003483475269e+02 + 2 -1.3331393160584241e+02 -2.4072728673874801e+02 -2.5617184179287540e+02 + 3 -1.2277758113579102e+02 3.0537119398406725e+02 5.2041769044942647e+01 + 4 4.3936404332100686e+01 -5.5511409696656926e+01 1.1097037460922759e+02 + 5 1.7864066365499838e+02 6.4034214571442291e+01 -1.0759738771465670e+02 + 6 3.5224339213063365e+02 -3.4719844127558417e+02 2.6425030914356228e+02 + 7 -2.0955545981628606e+02 -1.5858086260185297e+02 -5.7110672086393009e+01 + 8 -1.7044115435176795e+02 -5.3258138982765971e+01 1.2346092050629277e+02 + 9 -4.3715452075923416e+01 -3.8277423788683727e+01 6.3239179557158693e+01 + 10 9.3379874863494152e+01 5.9621377499868792e+01 9.2692428302505945e+01 + 11 -2.9198145425949332e+02 3.4467679177423884e+02 4.2632171085782431e+02 + 12 -2.6868067466378778e+02 -6.8644694781243447e+02 3.6910245078857537e+02 + 13 7.2123761164950440e+02 5.3620750239907272e+02 -3.8334401482414739e+02 + 14 8.4304627105934017e+01 -7.2466826898455409e+01 -8.7680132417144804e+01 + 15 -8.6225588839900468e+01 1.2225376793640189e+02 3.1577248706704783e+01 + 16 9.5393618380056623e+01 9.2886438384296099e+01 -7.3037388977053901e+00 + 17 1.3836060168005312e+02 -2.7473812676174262e+01 -9.4295524163369763e+01 + 18 -1.0165081413937811e+02 -1.1015152146781125e+02 5.1410985169799659e+01 + 19 1.5206789621670023e+02 2.5283948687709136e+02 -1.3894819646210772e+02 + 20 -1.1131767660064460e+02 -3.4867570304165632e+01 -2.2712139843531563e+01 + 21 -9.3180727628491212e+01 -7.7585741763401899e+01 -1.0055132802024193e+02 + 22 1.5388786773142479e+02 -1.2742120442767296e+02 5.9418228396501462e+01 + 23 1.4353594998513574e+02 1.9241855678142144e+01 -8.1940929642015490e+01 + 24 -1.2522859809648111e+02 3.4415263825860251e+02 -1.1666304527016791e+02 + 25 -6.1721877485216332e+01 2.1180528773074695e+02 -7.5185905744284099e+01 + 26 2.9047739438739399e+02 -2.0857900661856581e+02 2.4684212082797956e+02 + 27 1.9541979561640971e+01 -1.1873091999325840e+01 2.3080404132665154e+02 + 28 1.4779678412475869e+02 1.5072902909656133e+02 3.0786573270627889e+02 + 29 -5.7906765009047632e+01 5.2017884794099068e+01 6.2397336175147302e+00 + 30 -5.0895158598354335e+01 -2.5651607581450094e+02 -2.3443114587348992e+02 + 31 -1.5901188482871649e+02 1.7515333469043051e+02 -1.3486355088745134e+02 + 32 -1.3360496387491185e+02 -1.6026008719190622e+02 -6.3974117051860412e+02 + 33 -2.5865357552595057e+01 -1.3593003904804139e+01 3.6914416827045400e+01 + 34 -5.5345811893104553e+01 7.9787476336364392e+01 -1.1478329621445167e+02 + 35 6.2660444245581886e+01 -3.0334076804276236e+02 2.3657913727895405e+01 + 36 5.6628731130607559e+02 6.3924255616951359e+02 -6.4337876635896555e+02 + 37 -3.2625798296558662e+02 -3.4996432828486286e+02 4.6462264485478067e+02 + 38 -1.7064714626235613e+02 5.4874767598319613e+02 -5.7882903400837307e+01 + 39 2.2473038304436571e+01 -6.2855043226973365e+01 6.4935240565245138e+00 + 40 -2.0126181967178340e+02 1.9610382824263672e+02 4.3026826548397452e+01 + 41 -1.3922156023283114e+02 6.4923943342784469e+01 -4.9530732454693187e+01 + 42 2.5995311603257232e+02 6.2417650092087072e+01 -9.7757113311038410e+01 + 43 2.9060357406136120e+02 1.4859563620459687e+02 1.2902634448684583e+02 + 44 7.2822452489664343e+01 -9.5648852111255877e+01 -8.7605260909388264e+01 + 45 -7.6599938131930799e+01 2.7335310025430903e+02 1.4131077433184396e+02 + 46 -2.7864489804675839e+02 -3.3973466156303232e+02 -7.8954068435531696e+01 + 47 -5.5399367185908162e+01 -1.7022266452251142e+02 -3.6356135964982343e+01 + 48 4.5552031101078306e+01 -1.9615434812741569e+02 1.3353869041480218e+01 + 49 -2.6504355894047563e+02 3.8696727838168464e+01 1.6916938099889404e+02 + 50 4.3639038114698417e+02 -3.5529826932462339e+02 2.2030242322174141e+02 + 51 2.5201585479728806e+01 -5.5088430398826756e+02 2.9465735389668356e+02 + 52 -9.0610418024348732e+01 7.6451159625662612e+01 -1.0407170461264690e+02 + 53 -7.3230804863728633e+02 4.9918863718008072e+02 -3.7838006824966345e+02 + 54 -4.7813763806167337e+01 1.4821304034781713e+02 1.0972324440296121e+02 + 55 9.5154177757014878e+01 -1.6691953935970690e+02 6.0033792912059681e+01 + 56 1.3771822987048927e+02 -2.7596944143424753e+02 -4.7071002706580586e+01 + 57 7.7412666503504113e+01 -4.7147589918747506e+01 -7.4398816462734942e+01 + 58 -6.6332114011965132e+01 1.0893333226816128e+02 1.4604164580109380e+00 + 59 -1.4727436711601135e+02 1.3495995435479597e+02 1.3790547616349306e+02 + 60 4.4129860556328424e+01 8.8352155376666673e+01 -1.4754960139395871e+02 + 61 1.4664747834652729e+00 -1.6970260796882511e+02 -9.4741886350021787e+01 + 62 4.4268359315177207e+01 4.4244449542813292e+01 1.2469468703392482e+02 + 63 1.7715967912563977e+02 -8.9272317987559674e+01 -1.4306028518778581e+02 + 64 4.5068920113622809e+01 1.1297321948286621e+02 6.4572008812611145e+01 +run_vdwl: -3296.3469885397826 +run_coul: -823492.7373897503 +run_stress: ! |- + -1.8585481565254432e+05 -1.6813801222973305e+05 -1.4502245083109321e+05 -5.8156385069933705e+04 -2.9152676301583182e+04 4.2004485688893306e+04 +run_forces: ! |2 + 1 -3.1538860418527776e+02 -2.1667070105808438e+02 2.4327387701805449e+01 + 2 1.6469401642403250e+03 -2.2638495114953002e+03 8.1885571019561985e+03 + 3 -9.5233405445336075e+02 -1.3724167062887382e+03 5.1002346300387226e+03 + 4 -1.9086024577541921e+04 2.6665514538832704e+04 -1.5472292269485462e+04 + 5 7.8578011077546921e+02 1.1543491971265603e+03 -2.9601286588036862e+02 + 6 -4.1699480975660663e+03 6.3051224921793291e+03 -3.3124016041183961e+04 + 7 -1.7016494722270763e+03 -1.6238373161421100e+03 -3.1498701157264741e+03 + 8 -8.7621187948259321e+03 -5.8937249360767862e+02 1.0215462943849338e+03 + 9 2.6988978990627977e+04 -7.5719531974766342e+03 2.4402547340884375e+04 + 10 -5.5005889662574373e+02 2.8664451881339041e+03 3.6505720022004916e+03 + 11 -6.7136518028847252e+02 1.6951905338011699e+01 1.7613233778368631e+01 + 12 -4.1634897368756356e+02 -8.5427900773396550e+02 1.8957750739417386e+03 + 13 -2.4216201154307335e+04 -1.5001197373926550e+04 -1.3022247607934969e+04 + 14 -1.0405638578539543e+04 2.0054631376981383e+03 -1.7796805319319501e+04 + 15 1.1107583611850200e+03 1.3946144565444863e+04 2.5796292910159968e+03 + 16 7.0815040550639987e+03 -1.4994388002155864e+02 5.3941167060157622e+03 + 17 -1.0906710352768299e+02 -3.7797021439898720e+02 -7.1043712362237557e+02 + 18 3.1335355909249570e+03 -1.2979911718656356e+04 4.0028269316329097e+03 + 19 3.0219327888397208e+02 1.3132901589285169e+02 -2.2586289218389567e+02 + 20 -9.9495344251336473e+02 -1.0100323982979886e+04 7.2449256267058790e+03 + 21 -4.1626605209794234e+03 1.8207407400795291e+04 -1.9931886311902479e+04 + 22 -1.3809401079344286e+02 -1.3699694825434080e+03 4.9000482399450652e+02 + 23 -8.4097849417170528e+03 -6.7421987083314089e+03 2.1165500301472144e+04 + 24 6.6770947596674314e+03 7.0334161079873766e+03 -4.2395467771461354e+03 + 25 -3.0766262766235326e+02 4.5208369485829849e+01 -2.4215550554801229e+02 + 26 4.3282796665842488e+03 3.9725663253263883e+03 -1.5104557062597873e+03 + 27 3.4305125101384992e+03 -2.0757974258609988e+02 2.2419823347029745e+04 + 28 -1.2042796161721953e+03 2.8601773568967531e+02 -3.7347872364058077e+02 + 29 -1.4221968667948236e+03 -1.6884513031798073e+02 1.4718645011377384e+03 + 30 5.6087854923317345e+03 -1.3929352331590022e+04 8.9229119079296124e+03 + 31 1.8012567809349953e+03 1.7963340895216925e+03 -6.0693227081363002e+03 + 32 -2.4212994769744628e+02 -1.4663787679151267e+02 -2.6941110807653297e+02 + 33 -8.0205637538401052e+03 -6.7997183454421474e+03 7.0360939390233079e+03 + 34 -5.6825090133159119e+03 -4.9410619181051680e+02 -2.5378668650973555e+03 + 35 2.8749496957898991e+04 -4.6373022885745434e+02 -6.1483933048064773e+03 + 36 3.4096922298128607e+02 1.6757417075507853e+03 -8.8894223458424244e+02 + 37 -3.7343729694303511e+02 4.0656193398515529e+02 -1.8738927422246070e+02 + 38 1.4904299646376625e+04 -1.2064340896314498e+04 2.6539478453790794e+04 + 39 -7.0532532206553833e+03 -2.3957404157713672e+03 -1.1447343311718747e+04 + 40 6.1842420953100736e+03 -3.6659635754801893e+03 2.1054957749221794e+03 + 41 -8.1984840065986391e+03 -1.0365942326176664e+04 1.3952656987833076e+04 + 42 5.9577914748549119e+02 -1.7775021048376038e+02 -1.2021290039743464e+04 + 43 -1.9747460399160684e+03 1.6750061311272725e+03 2.8167237669329461e+03 + 44 -1.4678732439406349e+02 -2.4848519095612715e+04 4.7216919473597045e+02 + 45 4.5832362832616300e+03 1.2867485447504534e+04 1.1425823083324687e+04 + 46 2.1681087046653184e+02 -4.4934132470777809e+02 2.3087937120670163e+03 + 47 -5.2078060850766360e+02 -1.0208437402520989e+03 -2.2033873154011167e+03 + 48 2.6765788351065014e+04 -4.6344248657866183e+03 -2.9668864467185216e+01 + 49 -3.3609820362098151e+04 7.0960668414334923e+03 2.0836704420875976e+03 + 50 5.2223928486543973e+03 -2.9199713953576970e+03 4.6245497550815480e+03 + 51 5.5712197650885059e+01 -1.4394835567396435e+03 -1.5189574303433574e+01 + 52 6.0412308047232736e+03 -4.5508173248590192e+03 -2.8441095710784916e+03 + 53 2.9534447696061790e+02 -1.3661813387871148e+03 -4.0034798093494584e+02 + 54 -6.1569823475168255e+02 -4.7361494916845299e+02 -2.9928489978624157e+02 + 55 7.4978541085184744e+01 -1.5875365627631319e+02 1.2957750158518593e+02 + 56 -1.0429337846817589e+04 1.1766963241565751e+04 -4.9827771650037830e+03 + 57 1.1099912931100564e+04 -5.5053980025296833e+03 -1.1685512724787503e+04 + 58 -1.9431048462192582e+03 5.6326023332911245e+03 -2.6172065262884835e+03 + 59 -5.3914957888616245e+03 6.1370263012888418e+03 9.9937202300412118e+03 + 60 -1.5282247767913028e+04 5.2869249261205459e+03 -8.0462797163142568e+03 + 61 8.2234507406447065e+03 -6.6972733225279626e+00 -4.5676623487624911e+03 + 62 -1.2440498519086455e+03 1.5259685674863772e+03 -6.4071229464774854e+02 + 63 5.2477591133845465e+02 -1.1707580235553110e+03 -5.2912221162139249e+03 + 64 1.1950180636484571e+04 2.2135788612431359e+04 -8.1931421390373671e+03 +... From c85870315606d79787b839c28019c66786e1a3a5 Mon Sep 17 00:00:00 2001 From: Stan Gerald Moore Date: Tue, 14 Sep 2021 20:20:09 -0600 Subject: [PATCH 032/372] Remove unused variables --- src/REAXFF/fix_acks2_reaxff.cpp | 2 -- src/REAXFF/reaxff_nonbonded.cpp | 2 +- src/fix_efield.cpp | 1 - 3 files changed, 1 insertion(+), 4 deletions(-) diff --git a/src/REAXFF/fix_acks2_reaxff.cpp b/src/REAXFF/fix_acks2_reaxff.cpp index 5385fb26df..38fa01ec16 100644 --- a/src/REAXFF/fix_acks2_reaxff.cpp +++ b/src/REAXFF/fix_acks2_reaxff.cpp @@ -341,8 +341,6 @@ void FixACKS2ReaxFF::init_storage() void FixACKS2ReaxFF::pre_force(int /*vflag*/) { - double t_start, t_end; - if (update->ntimestep % nevery) return; if (comm->me == 0) t_start = MPI_Wtime(); diff --git a/src/REAXFF/reaxff_nonbonded.cpp b/src/REAXFF/reaxff_nonbonded.cpp index c09a259568..72ae928e00 100644 --- a/src/REAXFF/reaxff_nonbonded.cpp +++ b/src/REAXFF/reaxff_nonbonded.cpp @@ -305,7 +305,7 @@ namespace ReaxFF { double e_vdW, e_ele; double CEvd, CEclmb, SMALL = 0.0001; double f_tmp, delij[3]; - double xcut, bond_softness, d_bond_softness, d, effpot_diff; + double bond_softness, d_bond_softness, d, effpot_diff; far_neighbor_data *nbr_pj; reax_list *far_nbrs; diff --git a/src/fix_efield.cpp b/src/fix_efield.cpp index fc260e2622..c100120da5 100644 --- a/src/fix_efield.cpp +++ b/src/fix_efield.cpp @@ -460,7 +460,6 @@ double FixEfield::compute_vector(int n) double* FixEfield::get_energy() { double **x = atom->x; - double *q = atom->q; int *mask = atom->mask; imageint *image = atom->image; From 1adbd5f66790f4261d023455a70228d4555e57ea Mon Sep 17 00:00:00 2001 From: Stan Moore Date: Wed, 15 Sep 2021 14:32:00 -0600 Subject: [PATCH 033/372] Fix remaining issues --- src/KOKKOS/fix_acks2_reaxff_kokkos.cpp | 1 + src/KOKKOS/fix_qeq_reaxff_kokkos.cpp | 3 ++- src/REAXFF/fix_acks2_reaxff.cpp | 1 - src/REAXFF/reaxff_nonbonded.cpp | 6 +++--- 4 files changed, 6 insertions(+), 5 deletions(-) diff --git a/src/KOKKOS/fix_acks2_reaxff_kokkos.cpp b/src/KOKKOS/fix_acks2_reaxff_kokkos.cpp index 3414c29f40..d02cd1f255 100644 --- a/src/KOKKOS/fix_acks2_reaxff_kokkos.cpp +++ b/src/KOKKOS/fix_acks2_reaxff_kokkos.cpp @@ -1961,6 +1961,7 @@ int FixACKS2ReaxFFKokkos::unpack_exchange(int nlocal, double *buf) template void FixACKS2ReaxFFKokkos::get_chi_field() { + atomKK->sync(Host,X_MASK|MASK_MASK|IMAGE_MASK); FixQEqReaxFF::get_chi_field(); k_chi_field.modify_host(); k_chi_field.sync_device(); diff --git a/src/KOKKOS/fix_qeq_reaxff_kokkos.cpp b/src/KOKKOS/fix_qeq_reaxff_kokkos.cpp index 0aab94071f..af67d25af8 100644 --- a/src/KOKKOS/fix_qeq_reaxff_kokkos.cpp +++ b/src/KOKKOS/fix_qeq_reaxff_kokkos.cpp @@ -378,7 +378,7 @@ void FixQEqReaxFFKokkos::allocate_array() d_d = k_d.template view(); h_d = k_d.h_view; - memoryKK->create_kokkos(k_chi_field,chi_field,nmax,"acks2/kk:chi_field"); + memoryKK->create_kokkos(k_chi_field,chi_field,nmax,"qeq/kk:chi_field"); d_chi_field = k_chi_field.template view(); } @@ -1588,6 +1588,7 @@ int FixQEqReaxFFKokkos::unpack_exchange(int nlocal, double *buf) template void FixQEqReaxFFKokkos::get_chi_field() { + atomKK->sync(Host,X_MASK|MASK_MASK|IMAGE_MASK); FixQEqReaxFF::get_chi_field(); k_chi_field.modify_host(); k_chi_field.sync_device(); diff --git a/src/REAXFF/fix_acks2_reaxff.cpp b/src/REAXFF/fix_acks2_reaxff.cpp index 38fa01ec16..e30a970098 100644 --- a/src/REAXFF/fix_acks2_reaxff.cpp +++ b/src/REAXFF/fix_acks2_reaxff.cpp @@ -342,7 +342,6 @@ void FixACKS2ReaxFF::init_storage() void FixACKS2ReaxFF::pre_force(int /*vflag*/) { if (update->ntimestep % nevery) return; - if (comm->me == 0) t_start = MPI_Wtime(); int n = atom->nlocal; diff --git a/src/REAXFF/reaxff_nonbonded.cpp b/src/REAXFF/reaxff_nonbonded.cpp index 72ae928e00..7acab9915a 100644 --- a/src/REAXFF/reaxff_nonbonded.cpp +++ b/src/REAXFF/reaxff_nonbonded.cpp @@ -73,7 +73,7 @@ namespace ReaxFF { double dr3gamij_1, dr3gamij_3; double e_ele, e_vdW, e_core, SMALL = 0.0001; double e_lg, de_lg, r_ij5, r_ij6, re6; - double xcut, bond_softness, d_bond_softness, d, effpot_diff; + double bond_softness, d_bond_softness, d, effpot_diff; two_body_parameters *twbp; far_neighbor_data *nbr_pj; reax_list *far_nbrs; @@ -409,8 +409,8 @@ namespace ReaxFF { flag = 0; /* kinetic energy terms */ - xcut = 0.5 * ( system->reax_param.sbp[ system->my_atoms[i].type ].bcut_acks2 - + system->reax_param.sbp[ system->my_atoms[j].type ].bcut_acks2 ); + double xcut = 0.5 * ( system->reax_param.sbp[ system->my_atoms[i].type ].bcut_acks2 + + system->reax_param.sbp[ system->my_atoms[j].type ].bcut_acks2 ); if(nbr_pj->d <= xcut) { if (j < natoms) flag = 1; From 9feab449fbd130afce61ad7c14e7611d3e81df11 Mon Sep 17 00:00:00 2001 From: Stan Gerald Moore Date: Mon, 20 Sep 2021 12:23:19 -0600 Subject: [PATCH 034/372] Add ACKS2 example --- examples/reaxff/in.reaxff.rdx-acks2 | 53 - .../reaxff/log.31Aug21.reaxff.rdx-acks2.g++.1 | 153 - .../reaxff/log.31Aug21.reaxff.rdx-acks2.g++.4 | 153 - examples/reaxff/water/acks2_ff.water | 83 + examples/reaxff/water/data.water | 6019 +++++++++++++++++ examples/reaxff/water/in.water.acks2 | 25 + examples/reaxff/water/in.water.qeq | 25 + examples/reaxff/water/qeq_ff.water | 83 + 8 files changed, 6235 insertions(+), 359 deletions(-) delete mode 100644 examples/reaxff/in.reaxff.rdx-acks2 delete mode 100644 examples/reaxff/log.31Aug21.reaxff.rdx-acks2.g++.1 delete mode 100644 examples/reaxff/log.31Aug21.reaxff.rdx-acks2.g++.4 create mode 100644 examples/reaxff/water/acks2_ff.water create mode 100644 examples/reaxff/water/data.water create mode 100755 examples/reaxff/water/in.water.acks2 create mode 100755 examples/reaxff/water/in.water.qeq create mode 100644 examples/reaxff/water/qeq_ff.water diff --git a/examples/reaxff/in.reaxff.rdx-acks2 b/examples/reaxff/in.reaxff.rdx-acks2 deleted file mode 100644 index 541095081e..0000000000 --- a/examples/reaxff/in.reaxff.rdx-acks2 +++ /dev/null @@ -1,53 +0,0 @@ -# ReaxFF potential for RDX system - -units real - -atom_style charge -read_data data.rdx - -pair_style reaxff control.reax_c.rdx -pair_coeff * * ffield.reax C H O N - -compute reax all pair reaxff - -variable eb equal c_reax[1] -variable ea equal c_reax[2] -variable elp equal c_reax[3] -variable emol equal c_reax[4] -variable ev equal c_reax[5] -variable epen equal c_reax[6] -variable ecoa equal c_reax[7] -variable ehb equal c_reax[8] -variable et equal c_reax[9] -variable eco equal c_reax[10] -variable ew equal c_reax[11] -variable ep equal c_reax[12] -variable efi equal c_reax[13] -variable eqeq equal c_reax[14] - -neighbor 2.5 bin -neigh_modify every 10 delay 0 check no - -fix 1 all nve -fix 2 all acks2/reaxff 1 0.0 10.0 1.0e-6 reaxff - -variable nqeq equal f_2 - -thermo 10 -thermo_style custom step temp epair etotal press & - v_eb v_ea v_elp v_emol v_ev v_epen v_ecoa & - v_ehb v_et v_eco v_ew v_ep v_efi v_eqeq v_nqeq - -timestep 1.0 - -#dump 1 all atom 10 dump.reaxff.rdx - -#dump 2 all image 25 image.*.jpg type type & -# axes yes 0.8 0.02 view 60 -30 -#dump_modify 2 pad 3 - -#dump 3 all movie 25 movie.mpg type type & -# axes yes 0.8 0.02 view 60 -30 -#dump_modify 3 pad 3 - -run 100 diff --git a/examples/reaxff/log.31Aug21.reaxff.rdx-acks2.g++.1 b/examples/reaxff/log.31Aug21.reaxff.rdx-acks2.g++.1 deleted file mode 100644 index 42d84167a3..0000000000 --- a/examples/reaxff/log.31Aug21.reaxff.rdx-acks2.g++.1 +++ /dev/null @@ -1,153 +0,0 @@ -LAMMPS (31 Aug 2021) - using 1 OpenMP thread(s) per MPI task -# ReaxFF potential for RDX system - -units real - -atom_style charge -read_data data.rdx -Reading data file ... - orthogonal box = (35.000000 35.000000 35.000000) to (48.000000 48.000000 48.000000) - 1 by 1 by 1 MPI processor grid - reading atoms ... - 21 atoms - read_data CPU = 0.000 seconds - -pair_style reaxff control.reax_c.rdx -WARNING: Ignoring inactive control parameter: simulation_name (src/REAXFF/reaxff_control.cpp:97) -WARNING: Ignoring inactive control parameter: energy_update_freq (src/REAXFF/reaxff_control.cpp:97) -WARNING: Support for writing native trajectories has been removed after LAMMPS version 8 April 2021 (src/REAXFF/reaxff_control.cpp:113) -WARNING: Ignoring inactive control parameter: traj_title (src/REAXFF/reaxff_control.cpp:97) -WARNING: Ignoring inactive control parameter: atom_info (src/REAXFF/reaxff_control.cpp:97) -WARNING: Ignoring inactive control parameter: atom_forces (src/REAXFF/reaxff_control.cpp:97) -WARNING: Ignoring inactive control parameter: atom_velocities (src/REAXFF/reaxff_control.cpp:97) -WARNING: Ignoring inactive control parameter: bond_info (src/REAXFF/reaxff_control.cpp:97) -WARNING: Ignoring inactive control parameter: angle_info (src/REAXFF/reaxff_control.cpp:97) -pair_coeff * * ffield.reax C H O N -Reading potential file ffield.reax with DATE: 2010-02-19 - -compute reax all pair reaxff - -variable eb equal c_reax[1] -variable ea equal c_reax[2] -variable elp equal c_reax[3] -variable emol equal c_reax[4] -variable ev equal c_reax[5] -variable epen equal c_reax[6] -variable ecoa equal c_reax[7] -variable ehb equal c_reax[8] -variable et equal c_reax[9] -variable eco equal c_reax[10] -variable ew equal c_reax[11] -variable ep equal c_reax[12] -variable efi equal c_reax[13] -variable eqeq equal c_reax[14] - -neighbor 2.5 bin -neigh_modify every 10 delay 0 check no - -fix 1 all nve -fix 2 all acks2/reaxff 1 0.0 10.0 1.0e-6 reaxff - -variable nqeq equal f_2 - -thermo 10 -thermo_style custom step temp epair etotal press v_eb v_ea v_elp v_emol v_ev v_epen v_ecoa v_ehb v_et v_eco v_ew v_ep v_efi v_eqeq v_nqeq - -timestep 1.0 - -#dump 1 all atom 10 dump.reaxff.rdx - -#dump 2 all image 25 image.*.jpg type type # axes yes 0.8 0.02 view 60 -30 -#dump_modify 2 pad 3 - -#dump 3 all movie 25 movie.mpg type type # axes yes 0.8 0.02 view 60 -30 -#dump_modify 3 pad 3 - -run 100 - -CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE - -Your simulation uses code contributions which should be cited: - -- pair reaxff command: - -@Article{Aktulga12, - author = {H. M. Aktulga, J. C. Fogarty, S. A. Pandit, A. Y. Grama}, - title = {Parallel reactive molecular dynamics: Numerical methods and algorithmic techniques}, - journal = {Parallel Computing}, - year = 2012, - volume = 38, - pages = {245--259} -} - -- fix acks2/reaxff command: - -@Article{O'Hearn2020, - author = {K. A. O'Hearn, A. Alperen, and H. M. Aktulga}, - title = {Fast Solvers for Charge Distribution Models on Shared Memory Platforms}, - journal = {SIAM J. Sci. Comput.}, - year = 2020, - volume = 42, - pages = {1--22} -} - -CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE - -Neighbor list info ... - update every 10 steps, delay 0 steps, check no - max neighbors/atom: 2000, page size: 100000 - master list distance cutoff = 12.5 - ghost atom cutoff = 12.5 - binsize = 6.25, bins = 3 3 3 - 2 neighbor lists, perpetual/occasional/extra = 2 0 0 - (1) pair reaxff, perpetual - attributes: half, newton off, ghost - pair build: half/bin/newtoff/ghost - stencil: full/ghost/bin/3d - bin: standard - (2) fix acks2/reaxff, perpetual, copy from (1) - attributes: half, newton off, ghost - pair build: copy - stencil: none - bin: none -Per MPI rank memory allocation (min/avg/max) = 15.42 | 15.42 | 15.42 Mbytes -Step Temp E_pair TotEng Press v_eb v_ea v_elp v_emol v_ev v_epen v_ecoa v_ehb v_et v_eco v_ew v_ep v_efi v_eqeq v_nqeq - 0 0 -1808.3917 -1808.3917 28736.41 -2958.4712 79.527715 0.31082031 0 98.589783 25.846176 -0.18034154 0 16.709078 -9.1620736 938.43732 -2.8201336e-06 0 0.00098778735 13 - 10 1304.7509 -1914.0924 -1836.3081 -21153.752 -2726.219 -17.446777 0.19121437 0 58.532415 2.5619735 -77.337316 0 14.042901 -5.8126196 837.38787 -6.2534642e-06 0 0.0069050076 8 - 20 427.93813 -1859.4968 -1833.9848 -23712.924 -2777.9198 1.1772924 0.029117162 0 88.192077 0.1543307 -53.152357 0 28.462512 -9.6520395 863.2094 -1.1899783e-06 0 0.0027021013 9.5 - 30 600.85197 -1867.8807 -1832.0602 -15720.955 -2765.2737 1.4937773 0.06185725 0 80.013841 0.090367845 -47.085245 0 16.406666 -11.121903 857.53144 2.0736158e-06 0 0.0022173663 11 - 40 1108.9095 -1898.9259 -1832.817 -38935.482 -2778.2032 2.0997015 0.14353694 0 78.798725 0.26421692 -58.91856 0 14.943876 -10.029332 851.97505 4.5556609e-07 0 1.3535608e-05 13.5 - 50 1155.316 -1890.9414 -1822.0658 7674.2712 -2804.003 8.5334231 0.15421192 0 78.75008 2.2698852 -77.319055 0 31.922369 -8.9637444 877.71732 6.9388694e-05 0 -0.0028728853 10 - 60 1237.1418 -1895.0813 -1821.3276 854.31642 -2722.5859 -14.2286 0.22149986 0 44.37587 9.5571735 -73.477237 0 18.566827 -4.8577223 847.34568 1.6885606e-05 0 0.0011149828 12 - 70 1025.7868 -1882.2967 -1821.1431 25212.869 -2890.8508 54.451033 0.29038763 0 112.30176 2.4666006 -64.1052 0 19.268525 -11.520433 895.4047 5.9278993e-06 0 -0.0032206344 9.5 - 80 619.97124 -1857.6805 -1820.7202 -12086.828 -2740.4855 -5.2006679 0.12319993 0 99.775674 2.7800075 -77.812022 0 25.298145 -7.562536 845.40484 3.766017e-05 0 -0.0017469014 9.5 - 90 1169.6095 -1893.5597 -1823.832 -6196.2424 -2816.571 34.143182 0.24873152 0 91.015691 0.81251232 -69.865835 0 17.93908 -10.502528 859.2142 1.3276274e-05 0 0.006324974 9.5 - 100 1032.79 -1882.6603 -1821.0893 6839.1293 -2811.285 8.1859322 0.22109056 0 69.13601 8.7302413 -74.363952 0 22.220038 -7.7705968 902.27101 6.5173803e-05 0 -0.005154992 7.5 -Loop time of 0.118719 on 1 procs for 100 steps with 21 atoms - -Performance: 72.777 ns/day, 0.330 hours/ns, 842.328 timesteps/s -99.8% CPU use with 1 MPI tasks x 1 OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 0.09767 | 0.09767 | 0.09767 | 0.0 | 82.27 -Neigh | 0.0055032 | 0.0055032 | 0.0055032 | 0.0 | 4.64 -Comm | 0.00021768 | 0.00021768 | 0.00021768 | 0.0 | 0.18 -Output | 0.00023556 | 0.00023556 | 0.00023556 | 0.0 | 0.20 -Modify | 0.014979 | 0.014979 | 0.014979 | 0.0 | 12.62 -Other | | 0.0001125 | | | 0.09 - -Nlocal: 21.0000 ave 21 max 21 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Nghost: 546.000 ave 546 max 546 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Neighs: 1102.00 ave 1102 max 1102 min -Histogram: 1 0 0 0 0 0 0 0 0 0 - -Total # of neighbors = 1102 -Ave neighs/atom = 52.476190 -Neighbor list builds = 10 -Dangerous builds not checked -Total wall time: 0:00:00 diff --git a/examples/reaxff/log.31Aug21.reaxff.rdx-acks2.g++.4 b/examples/reaxff/log.31Aug21.reaxff.rdx-acks2.g++.4 deleted file mode 100644 index 74f4038548..0000000000 --- a/examples/reaxff/log.31Aug21.reaxff.rdx-acks2.g++.4 +++ /dev/null @@ -1,153 +0,0 @@ -LAMMPS (31 Aug 2021) - using 1 OpenMP thread(s) per MPI task -# ReaxFF potential for RDX system - -units real - -atom_style charge -read_data data.rdx -Reading data file ... - orthogonal box = (35.000000 35.000000 35.000000) to (48.000000 48.000000 48.000000) - 1 by 2 by 2 MPI processor grid - reading atoms ... - 21 atoms - read_data CPU = 0.000 seconds - -pair_style reaxff control.reax_c.rdx -WARNING: Ignoring inactive control parameter: simulation_name (src/REAXFF/reaxff_control.cpp:97) -WARNING: Ignoring inactive control parameter: energy_update_freq (src/REAXFF/reaxff_control.cpp:97) -WARNING: Support for writing native trajectories has been removed after LAMMPS version 8 April 2021 (src/REAXFF/reaxff_control.cpp:113) -WARNING: Ignoring inactive control parameter: traj_title (src/REAXFF/reaxff_control.cpp:97) -WARNING: Ignoring inactive control parameter: atom_info (src/REAXFF/reaxff_control.cpp:97) -WARNING: Ignoring inactive control parameter: atom_forces (src/REAXFF/reaxff_control.cpp:97) -WARNING: Ignoring inactive control parameter: atom_velocities (src/REAXFF/reaxff_control.cpp:97) -WARNING: Ignoring inactive control parameter: bond_info (src/REAXFF/reaxff_control.cpp:97) -WARNING: Ignoring inactive control parameter: angle_info (src/REAXFF/reaxff_control.cpp:97) -pair_coeff * * ffield.reax C H O N -Reading potential file ffield.reax with DATE: 2010-02-19 - -compute reax all pair reaxff - -variable eb equal c_reax[1] -variable ea equal c_reax[2] -variable elp equal c_reax[3] -variable emol equal c_reax[4] -variable ev equal c_reax[5] -variable epen equal c_reax[6] -variable ecoa equal c_reax[7] -variable ehb equal c_reax[8] -variable et equal c_reax[9] -variable eco equal c_reax[10] -variable ew equal c_reax[11] -variable ep equal c_reax[12] -variable efi equal c_reax[13] -variable eqeq equal c_reax[14] - -neighbor 2.5 bin -neigh_modify every 10 delay 0 check no - -fix 1 all nve -fix 2 all acks2/reaxff 1 0.0 10.0 1.0e-6 reaxff - -variable nqeq equal f_2 - -thermo 10 -thermo_style custom step temp epair etotal press v_eb v_ea v_elp v_emol v_ev v_epen v_ecoa v_ehb v_et v_eco v_ew v_ep v_efi v_eqeq v_nqeq - -timestep 1.0 - -#dump 1 all atom 10 dump.reaxff.rdx - -#dump 2 all image 25 image.*.jpg type type # axes yes 0.8 0.02 view 60 -30 -#dump_modify 2 pad 3 - -#dump 3 all movie 25 movie.mpg type type # axes yes 0.8 0.02 view 60 -30 -#dump_modify 3 pad 3 - -run 100 - -CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE - -Your simulation uses code contributions which should be cited: - -- pair reaxff command: - -@Article{Aktulga12, - author = {H. M. Aktulga, J. C. Fogarty, S. A. Pandit, A. Y. Grama}, - title = {Parallel reactive molecular dynamics: Numerical methods and algorithmic techniques}, - journal = {Parallel Computing}, - year = 2012, - volume = 38, - pages = {245--259} -} - -- fix acks2/reaxff command: - -@Article{O'Hearn2020, - author = {K. A. O'Hearn, A. Alperen, and H. M. Aktulga}, - title = {Fast Solvers for Charge Distribution Models on Shared Memory Platforms}, - journal = {SIAM J. Sci. Comput.}, - year = 2020, - volume = 42, - pages = {1--22} -} - -CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE - -Neighbor list info ... - update every 10 steps, delay 0 steps, check no - max neighbors/atom: 2000, page size: 100000 - master list distance cutoff = 12.5 - ghost atom cutoff = 12.5 - binsize = 6.25, bins = 3 3 3 - 2 neighbor lists, perpetual/occasional/extra = 2 0 0 - (1) pair reaxff, perpetual - attributes: half, newton off, ghost - pair build: half/bin/newtoff/ghost - stencil: full/ghost/bin/3d - bin: standard - (2) fix acks2/reaxff, perpetual, copy from (1) - attributes: half, newton off, ghost - pair build: copy - stencil: none - bin: none -Per MPI rank memory allocation (min/avg/max) = 11.41 | 12.58 | 13.79 Mbytes -Step Temp E_pair TotEng Press v_eb v_ea v_elp v_emol v_ev v_epen v_ecoa v_ehb v_et v_eco v_ew v_ep v_efi v_eqeq v_nqeq - 0 0 -1808.3956 -1808.3956 28736.41 -2958.4712 79.527715 0.31082031 0 98.589783 25.846176 -0.18034154 0 16.709078 -9.1620736 938.43732 -5.6770858e-06 0 -0.0028392419 14 - 10 1304.7509 -1914.1049 -1836.3206 -21153.752 -2726.219 -17.446777 0.19121437 0 58.532415 2.5619735 -77.337316 0 14.042901 -5.8126196 837.38787 5.0978181e-06 0 -0.005556783 10 - 20 427.93812 -1859.4876 -1833.9756 -23712.923 -2777.9198 1.1772926 0.029117161 0 88.192077 0.1543307 -53.152357 0 28.462513 -9.6520395 863.2094 2.1862491e-05 0 0.011844766 6 - 30 600.85195 -1867.8815 -1832.061 -15720.949 -2765.2737 1.4937783 0.061857248 0 80.013842 0.090367838 -47.085244 0 16.406666 -11.121903 857.53144 -1.2004549e-06 0 0.0014350102 11 - 40 1108.9094 -1898.8905 -1832.7815 -38935.484 -2778.2032 2.0996992 0.14353693 0 78.798728 0.26421691 -58.91856 0 14.943875 -10.029332 851.97505 4.1455385e-06 0 0.03548355 8 - 50 1155.3161 -1890.9404 -1822.0649 7674.2794 -2804.0031 8.5334252 0.15421192 0 78.75008 2.2698849 -77.319055 0 31.92237 -8.9637447 877.71732 3.7570219e-05 0 -0.0018876928 7 - 60 1237.1418 -1895.0785 -1821.3248 854.31669 -2722.5859 -14.228606 0.22149986 0 44.375869 9.5571747 -73.477236 0 18.566825 -4.8577216 847.34567 -6.0652199e-06 0 0.0039746806 9 - 70 1025.7867 -1882.2715 -1821.118 25212.883 -2890.8508 54.451049 0.29038764 0 112.30178 2.4666008 -64.105192 0 19.268524 -11.520433 895.40472 7.5942987e-05 0 0.021807003 5.5 - 80 619.97151 -1857.6791 -1820.7188 -12086.851 -2740.4854 -5.2006737 0.12319996 0 99.775675 2.7800093 -77.812024 0 25.29814 -7.5625349 845.40485 -3.2701271e-06 0 -0.00028718671 11 - 90 1169.6099 -1893.5491 -1823.8214 -6196.2462 -2816.571 34.143181 0.24873153 0 91.015695 0.81251269 -69.865839 0 17.939079 -10.502527 859.2142 2.297465e-05 0 0.016894027 6.5 - 100 1032.7901 -1882.6521 -1821.081 6839.0982 -2811.2849 8.1859195 0.22109056 0 69.136035 8.730243 -74.363951 0 22.220028 -7.7705949 902.27102 6.4245187e-06 0 0.0030953783 10 -Loop time of 0.140636 on 4 procs for 100 steps with 21 atoms - -Performance: 61.435 ns/day, 0.391 hours/ns, 711.054 timesteps/s -95.2% CPU use with 4 MPI tasks x 1 OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 0.042596 | 0.057261 | 0.073915 | 4.7 | 40.72 -Neigh | 0.0024769 | 0.003423 | 0.0044286 | 1.2 | 2.43 -Comm | 0.0078962 | 0.025491 | 0.040466 | 7.3 | 18.13 -Output | 0.00030279 | 0.00066626 | 0.0017195 | 0.0 | 0.47 -Modify | 0.05257 | 0.0536 | 0.054564 | 0.3 | 38.11 -Other | | 0.0001949 | | | 0.14 - -Nlocal: 5.25000 ave 14 max 0 min -Histogram: 1 0 2 0 0 0 0 0 0 1 -Nghost: 355.500 ave 433 max 282 min -Histogram: 1 0 0 0 2 0 0 0 0 1 -Neighs: 303.000 ave 784 max 0 min -Histogram: 1 0 1 1 0 0 0 0 0 1 - -Total # of neighbors = 1212 -Ave neighs/atom = 57.714286 -Neighbor list builds = 10 -Dangerous builds not checked -Total wall time: 0:00:00 diff --git a/examples/reaxff/water/acks2_ff.water b/examples/reaxff/water/acks2_ff.water new file mode 100644 index 0000000000..631c78ef79 --- /dev/null +++ b/examples/reaxff/water/acks2_ff.water @@ -0,0 +1,83 @@ +Reactive MD-force field: ACKS2 Water [CITE: Achtyl et al., Nat. Comm., 6 6539 (2015)] + 39 ! Number of general parameters + 50.0000 !Overcoordination parameter + 9.5469 !Overcoordination parameter + 26.5405 !Valency angle conjugation parameter + 1.7224 !Triple bond stabilisation parameter + 6.8702 !Triple bond stabilisation parameter + 60.4850 !C2-correction + 1.0588 !Undercoordination parameter + 4.6000 !Triple bond stabilisation parameter + 12.1176 !Undercoordination parameter + 13.3056 !Undercoordination parameter + -70.5044 !Triple bond stabilization energy + 0.0000 !Lower Taper-radius + 10.0000 !Upper Taper-radius + 2.8793 !Not used + 33.8667 !Valency undercoordination + 6.0891 !Valency angle/lone pair parameter + 1.0563 !Valency angle + 2.0384 !Valency angle parameter + 6.1431 !Not used + 6.9290 !Double bond/angle parameter + 0.3989 !Double bond/angle parameter: overcoord + 3.9954 !Double bond/angle parameter: overcoord + -2.4837 !Not used + 5.7796 !Torsion/BO parameter + 10.0000 !Torsion overcoordination + 1.9487 !Torsion overcoordination + -1.2327 !Conjugation 0 (not used) + 2.1645 !Conjugation + 1.5591 !vdWaals shielding + 0.1000 !Cutoff for bond order (*100) + 2.1365 !Valency angle conjugation parameter + 0.6991 !Overcoordination parameter + 50.0000 !Overcoordination parameter + 1.8512 !Valency/lone pair parameter + 548.6451 !Softness + 20.0000 !Not used + 5.0000 !Molecular energy (not used) + 0.0000 !Molecular energy (not used) + 2.6962 !Valency angle conjugation parameter + 3 ! Nr of atoms; cov.r; valency;a.m;Rvdw;Evdw;gammaEEM;cov.r2;# + alfa;gammavdW;valency;Eunder;Eover;chiEEM;etaEEM;n.u. + cov r3;Elp;Heat inc.;n.u.;n.u.;n.u.;n.u. + ov/un;val1;n.u.;val3,vval4 + H 0.8930 1.0000 1.0080 1.3550 0.0930 0.8203 -0.1000 1.0000 + 8.2230 33.2894 1.0000 0.0000 121.1250 3.7248 9.6093 1.0000 + -0.1000 0.0000 61.6606 3.0408 2.4197 0.0003 3.4114 0.0000 + -19.4571 4.2733 1.0338 1.0000 2.8793 0.0000 0.0000 0.0000 + O 1.2450 2.0000 15.9990 2.3890 0.1000 1.0898 1.0548 6.0000 + 9.7300 13.8449 4.0000 37.5000 116.0768 8.5000 8.3122 2.0000 + 0.9049 0.4056 59.0626 3.5027 0.7640 0.0021 0.9745 0.0000 + -3.5500 2.9000 1.0493 4.0000 2.9225 0.0000 0.0000 0.0000 + X -0.1000 2.0000 1.0080 2.0000 0.0000 1.0000 -0.1000 6.0000 + 10.0000 2.5000 4.0000 0.0000 0.0000 8.5000 1.5000 0.0000 + -0.1000 0.0000 -2.3700 8.7410 13.3640 0.6690 0.9745 0.0000 + -11.0000 2.7466 1.0338 2.0000 2.8793 0.0000 0.0000 0.0000 + 3 ! Nr of bonds; Edis1;LPpen;n.u.;pbe1;pbo5;13corr;pbo6 + pbe2;pbo3;pbo4;n.u.;pbo1;pbo2;ovcorr + 1 1 153.3934 0.0000 0.0000 -0.4600 0.0000 1.0000 6.0000 0.7300 + 6.2500 1.0000 0.0000 1.0000 -0.0790 6.0552 0.0000 0.0000 + 2 2 142.2858 145.0000 50.8293 0.2506 -0.1000 1.0000 29.7503 0.6051 + 0.3451 -0.1055 9.0000 1.0000 -0.1225 5.5000 1.0000 0.0000 + 1 2 160.0000 0.0000 0.0000 -0.5725 0.0000 1.0000 6.0000 0.5626 + 1.1150 1.0000 0.0000 0.0000 -0.0920 4.2790 0.0000 0.0000 + 1 ! Nr of off-diagonal terms; Ediss;Ro;gamma;rsigma;rpi;rpi2 + 1 2 0.0283 1.2885 10.9190 0.9215 -1.0000 -1.0000 + 6 ! Nr of angles;at1;at2;at3;Thetao,o;ka;kb;pv1;pv2 + 1 1 1 0.0000 27.9213 5.8635 0.0000 0.0000 0.0000 1.0400 + 2 2 2 80.7324 30.4554 0.9953 0.0000 1.6310 50.0000 1.0783 + 1 2 2 75.6935 50.0000 2.0000 0.0000 1.0000 0.0000 1.1680 + 1 2 1 85.8000 9.8453 2.2720 0.0000 2.8635 0.0000 1.5800 + 2 1 2 0.0000 15.0000 2.8900 0.0000 0.0000 0.0000 2.8774 + 1 1 2 0.0000 8.5744 3.0000 0.0000 0.0000 0.0000 1.0421 + 6 ! Nr of torsions;at1;at2;at3;at4;;V1;V2;V3;V2(BO);vconj;n.u;n + 1 2 2 1 2.5000 -4.0000 0.9000 -2.5000 -1.0000 0.0000 0.0000 + 1 2 2 2 0.8302 -4.0000 -0.7763 -2.5000 -1.0000 0.0000 0.0000 + 2 2 2 2 -2.5000 -4.0000 1.0000 -2.5000 -1.0000 0.0000 0.0000 + 0 1 1 0 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 + 0 1 2 0 0.0000 0.1000 0.0200 -2.5415 0.0000 0.0000 0.0000 + 0 2 2 0 0.5511 25.4150 1.1330 -5.1903 -1.0000 0.0000 0.0000 + 1 ! Nr of hydrogen bonds;at1;at2;at3;Rhb;Dehb;vhb1 + 2 1 2 2.1200 -3.5800 1.4500 19.5000 diff --git a/examples/reaxff/water/data.water b/examples/reaxff/water/data.water new file mode 100644 index 0000000000..e1ba3eac41 --- /dev/null +++ b/examples/reaxff/water/data.water @@ -0,0 +1,6019 @@ +LAMMPS data file via write_data, version 19 Mar 2020, timestep = 100000 + +3000 atoms +2 atom types + +0.0000000000000000e+00 3.1043045599999999e+01 xlo xhi +0.0000000000000000e+00 3.1043045599999999e+01 ylo yhi +0.0000000000000000e+00 3.1043045599999999e+01 zlo zhi + +Masses + +1 15.9994 +2 1.008 + +Atoms # full + +1497 499 2 3.8692754524846124e-01 4.4005135488793817e-01 6.8027067297961290e+00 5.5831272410063155e+00 1 1 0 +2401 801 1 -7.3547395604658661e-01 2.8088432936816430e+00 5.9999842940434611e+00 7.5341673350383074e+00 0 0 1 +498 166 2 3.0554141478230923e-01 3.1386470457186180e+00 2.2943733261485031e+00 5.1875440798585783e+00 0 0 0 +496 166 1 -7.5716565194584284e-01 3.8873560175490196e+00 2.3951000308343597e+00 4.5394769377363851e+00 0 0 0 +497 166 2 3.7474917326292168e-01 3.7024128468444144e+00 3.2217803242562795e+00 4.1929178141452947e+00 0 0 0 +141 47 2 3.2819006595815370e-01 2.5785003546035381e+00 5.9522998290113884e+00 5.8385480391059792e+00 0 0 0 +139 47 1 -7.7172999478983184e-01 2.0053458831978461e+00 5.9351684255357595e+00 4.9823207910634197e+00 0 0 0 +140 47 2 3.4612974959574128e-01 1.9901552204785218e+00 4.9986259421397863e+00 4.6918048080889641e+00 0 0 0 +1528 510 1 -7.5149674240312681e-01 1.2212058305113851e+00 3.1560995554557962e+00 5.1718212890067647e+00 0 0 1 +1530 510 2 3.7575023559399656e-01 1.0614876365158610e+00 2.8589915602608413e+00 4.2601977545295187e+00 0 0 1 +239 80 2 3.1918884951446297e-01 3.4548424578221191e+00 6.8686033008322411e+00 4.0968412335733095e+00 0 0 0 +1631 544 2 3.6861828487030079e-01 3.9941113970107973e+00 8.2656574262085822e+00 3.7036119701634340e+00 0 0 1 +238 80 1 -7.2526545622797589e-01 4.2937849132106294e+00 7.3521044049343605e+00 3.8476838702946998e+00 0 0 0 +1529 510 2 3.8946339762840293e-01 4.7692250699647681e-01 2.8107643958401316e+00 5.8055619177966395e+00 0 0 1 +803 268 2 3.6060640616141898e-01 5.1999339494958026e+00 7.1414015202400929e+00 5.2920488833458919e+00 0 0 0 +25 9 1 -6.8827487728119863e-01 3.0985740485415683e+01 2.1645132256403783e+00 7.1925310016229442e+00 -1 0 0 +27 9 2 3.9080868164496113e-01 3.1038026593265343e+01 1.2354407250465411e+00 6.7561483851304862e+00 -1 0 0 +2163 721 2 3.6472103780410930e-01 4.6878345557312040e-01 4.4573173444597218e+00 8.2821613647545185e+00 1 1 0 +1496 499 2 3.6063498463225496e-01 5.7206768577255742e+00 2.4384675008031360e+00 7.1873570706862715e+00 1 1 0 +115 39 1 -7.4965480601589229e-01 3.9517920662385966e+00 4.5447061663723476e+00 2.6662584102276901e+00 0 0 0 +1085 362 2 3.3764339144646993e-01 3.9978584926219818e+00 5.4230104078563821e+00 3.1053878503627486e+00 0 1 0 +314 105 2 3.5708750153667096e-01 1.0310030023560768e+00 6.7316041319369146e+00 3.3734266629564154e+00 0 0 0 +819 273 2 3.6128343578796446e-01 4.0463343017695772e+00 7.1003506727668608e-01 3.6622194337536271e+00 0 1 0 +2403 801 2 3.5806910955956361e-01 3.1226344268198925e+00 5.0377455961668165e+00 7.5171760439731976e+00 0 0 1 +1574 525 2 3.5863203818711292e-01 4.9947645983585964e+00 1.2493041620163177e+00 5.6377122255901835e+00 0 0 1 +116 39 2 3.4196008866457084e-01 4.7958254257633097e+00 4.5134813120446164e+00 2.1983078109383745e+00 0 0 0 +1636 546 1 -7.3478551595100094e-01 5.6121875121579743e+00 9.8694416382053440e-01 6.3597906501324371e+00 0 0 1 +2065 689 1 -6.8215047066870260e-01 1.6875908310066173e+01 1.1238310027866776e+01 5.4081336330899350e-02 0 0 1 +802 268 1 -7.2240461296520764e-01 6.0892988070798753e+00 7.3641709926087646e+00 5.7407764588525003e+00 0 0 0 +59 20 2 3.5081337980355071e-01 1.3604526173929814e+00 2.3513564015736548e+00 2.0377862637213977e+00 0 0 0 +33 11 2 3.6353567283317345e-01 3.0775061814683362e+01 6.5696256871609071e+00 2.6276539222916169e+00 -1 0 0 +2127 709 2 3.8311301768239048e-01 3.6974335831421676e+00 2.7027373781194757e+00 1.4961865571696141e+01 1 0 0 +550 184 1 -7.4281091881652961e-01 2.3465162274577466e+01 9.3744257059057343e+00 1.5241859744894187e+01 0 0 0 +309 103 2 3.7176965299895415e-01 1.4990887604490121e+01 2.5382454665563348e-01 2.1346503640246048e+00 0 0 0 +2232 744 2 3.4815014742283323e-01 8.5202267262527187e-01 5.3847185145336800e+00 4.3093648474523089e-01 1 0 1 +226 76 1 -7.4722095769484009e-01 6.0692884597532881e+00 2.3731132049765241e-01 1.3056780543916178e+00 0 0 0 +1637 546 2 3.6806353395792374e-01 6.5164572239659728e+00 8.5646744910183303e-01 5.9444090391217541e+00 0 0 1 +260 87 2 3.5228697506239837e-01 5.8972736974633246e+00 7.8289186664455324e+00 6.5863339763837985e+00 0 0 0 +1086 362 2 3.2722459596763726e-01 7.0330455928520674e+00 5.8850176611591190e+00 6.8095906828009625e+00 0 1 0 +1840 614 1 -6.9152209464673109e-01 7.3245865814791085e+00 7.9057953792723765e+00 1.2980778971057452e+00 0 0 1 +2612 871 2 4.1176928679744829e-01 7.0756137615931474e+00 8.4166252144604954e+00 2.1531585977535128e+00 0 1 1 +1842 614 2 3.6725157545857429e-01 8.3748740565416746e+00 7.8690080028348319e+00 1.3560226011424448e+00 0 0 1 +963 321 2 4.1022870020113211e-01 9.9106967870758638e+00 8.0146702338176699e+00 7.2466157795297530e+00 0 0 0 +1084 362 1 -7.4044322693270392e-01 7.6057467080876133e+00 5.0781976218288616e+00 6.7743760963270709e+00 0 1 0 +1663 555 1 -7.1834560936369407e-01 9.9879391215874271e+00 8.0388811719689492e+00 1.2917807541733919e+00 0 0 1 +821 274 2 3.5209674216131409e-01 6.9247313199235387e+00 4.3047612584180914e+00 6.9943975000286365e+00 0 1 0 +1791 597 2 4.0841331548659748e-01 7.7878722270508298e+00 5.3818187244858136e+00 5.1636842205127689e+00 0 0 1 +2023 675 1 -7.3605189371990465e-01 1.1063137080072600e+01 6.0098264472003251e+00 4.7345199683786516e+00 0 0 1 +1664 555 2 3.6238506868933806e-01 1.0108354841357976e+01 8.8072390044573137e+00 1.9305013188119438e+00 0 0 1 +1767 589 2 3.6100076072975557e-01 1.1741733648682450e+01 5.8658042545439084e+00 5.4513143091575005e+00 0 0 1 +2311 771 1 -7.3005291084991386e-01 8.3020764393069832e+00 5.1948566338776221e+00 4.3179489922325596e+00 0 1 1 +2312 771 2 3.9274744365696557e-01 9.1759366291491578e+00 5.5291322309174307e+00 4.3792866152146628e+00 0 1 1 +303 101 2 3.8608151180006473e-01 1.2482611497403401e+01 1.6658621953141555e+00 7.1576373240832911e+00 0 0 0 +1853 618 2 3.8557910794412215e-01 6.6913261295433673e+00 8.6875135976398994e+00 4.3705239171971151e+00 0 0 1 +1852 618 1 -7.6091540778352407e-01 6.8668361281846897e+00 9.2238953384065479e+00 3.5736208524521458e+00 0 0 1 +829 277 1 -7.3432390170804673e-01 1.2651767705075731e+01 2.5248313732060534e+00 7.4965512157935255e+00 0 1 0 +2875 959 1 -6.8813502015404293e-01 9.1874051384777449e+00 7.6860288086314632e-01 7.6608447591038757e+00 1 1 0 +2759 920 2 3.7682339456265845e-01 8.5249450804126656e+00 3.3731054837881027e+00 4.0641841504019780e+00 0 1 1 +249 83 2 3.6791165233171941e-01 7.2214553136648609e+00 4.7206182695467334e+00 2.3723286638248067e+00 0 0 0 +993 331 2 3.9800531948136814e-01 7.9893180393450729e+00 1.2276942134777038e+00 4.9666634620494534e+00 0 1 0 +401 134 2 3.6396631747563196e-01 7.2262707803170203e+00 5.8369412728614911e+00 1.3803763554044857e+00 0 0 0 +247 83 1 -7.0764043316735903e-01 7.0942828324841241e+00 4.9106461584568386e+00 1.4288882775766745e+00 0 0 0 +1103 368 2 3.7230345163383838e-01 1.1235962979488763e+01 5.4404357695885279e+00 3.9635214837262134e+00 0 1 1 +2876 959 2 3.9583804731902583e-01 9.0582611669642077e+00 1.2231093581437821e-01 8.4012470775560555e+00 1 1 0 +1011 337 2 3.1959728574581830e-01 1.2437946514638131e+01 1.8732979306873965e+00 3.6181266905009841e+00 0 1 0 +1893 631 2 3.7036844773404975e-01 1.1900156966658409e+01 7.4502596457796590e+00 3.8797921320454436e+00 0 0 0 +2877 959 2 3.7223487628956575e-01 1.0152687605106527e+01 7.0850125780251816e-01 7.3676117410643789e+00 1 1 0 +1841 614 2 3.9790957842087205e-01 9.8835907129974281e+00 8.4957358744048488e+00 4.8066780575509332e-01 0 0 1 +203 68 2 3.6407021234816317e-01 9.4391284270869331e+00 2.2161312855505408e+00 3.4466407008994877e+00 0 0 0 +2466 822 2 3.9557744289353053e-01 1.0478382294700539e+01 1.9034549670425855e+00 1.1912053570753032e+00 0 1 0 +1700 567 2 3.4174585658026774e-01 7.6681567751202886e+00 4.9737131302251258e+00 8.6429890150973634e+00 0 0 0 +218 73 2 3.9489709747944879e-01 1.0903840596118812e+01 5.9682168503065460e+00 7.8542237295695791e+00 0 0 0 +202 68 1 -6.9246227426584595e-01 8.5034914220925781e+00 2.4316557415608751e+00 3.8001377954723088e+00 0 0 0 +1104 368 2 4.1528548950455579e-01 8.3645436315872566e+00 3.1379844007295282e-01 6.1604329151249164e+00 0 1 1 +991 331 1 -7.6182583273993854e-01 8.0263667515679185e+00 3.4744605461058575e-01 5.2922470899230607e+00 0 1 0 +102 34 2 3.6492516758405213e-01 8.0013989365832714e+00 1.4028078508187747e+00 1.5379165763135083e+01 0 0 0 +2029 677 1 -7.8283617067763300e-01 1.2424136860279537e+01 5.4791209410548314e+00 7.1612535440534977e+00 0 0 1 +2025 675 2 3.5494230815894440e-01 1.2591724131934392e+01 4.5209311627752200e+00 7.2145026163518384e+00 0 0 1 +2031 677 2 3.9304550594436322e-01 1.3267174250891356e+01 5.8828315339307844e+00 7.3758229847280052e+00 0 0 1 +1111 371 1 -7.5194924903800975e-01 1.1789258909767749e+01 4.2473893606497439e+00 2.7973156311830794e+00 0 1 0 +1112 371 2 3.8149161266254628e-01 1.1325719951844707e+01 3.5140850737691274e+00 2.4518247585030761e+00 0 1 0 +1009 337 1 -6.7933790730634036e-01 1.2973399971679061e+01 1.2394482882933624e+00 4.1644406722513532e+00 0 1 0 +1113 371 2 3.2793652825314779e-01 1.2508853849264057e+01 3.8651741180754389e+00 3.4664525276051128e+00 0 1 0 +983 328 2 3.8034871224020939e-01 1.6372200409886108e+01 3.2828243758410647e+00 5.8612475722303015e-01 0 1 0 +982 328 1 -7.3826897087316046e-01 1.6538672856583677e+01 2.3344314174687226e+00 3.5593412007078301e-01 0 1 0 +196 66 1 -7.4549107934801362e-01 1.2855296474912164e+01 5.4732616414580368e+00 3.3990948313494568e-01 0 0 0 +379 127 1 -7.5307613958567499e-01 1.7194559173341730e+01 6.4295472504929743e+00 3.1166682064054481e+00 0 0 0 +954 318 2 3.2002351836232878e-01 1.5888333805783443e+01 5.3623905112413706e+00 1.6366381459492292e+00 0 0 0 +197 66 2 3.9353316471972760e-01 1.2366235949554447e+01 5.2689950079443948e+00 1.0819343253779545e+00 0 0 0 +308 103 2 3.8053566932308219e-01 1.5827400649134340e+01 1.5102383139749007e+00 1.6944312751168922e+00 0 0 0 +2674 892 1 -7.5251563708889002e-01 1.6616504346881126e+01 3.8056411956327221e+00 3.9613426800009357e+00 0 1 0 +2675 892 2 3.6376048259316174e-01 1.5794339487607786e+01 4.0211703398579264e+00 4.4872213323852286e+00 0 1 0 +381 127 2 3.7093646473040048e-01 1.6989489495356811e+01 5.5370106263854231e+00 3.4535566149823853e+00 0 0 0 +2676 892 2 3.5623982090771111e-01 1.6485199958957558e+01 2.9341789231643403e+00 3.5795848239229255e+00 0 1 0 +221 74 2 3.1224109180106219e-01 1.3507875971913872e+01 5.1731003897988455e+00 4.2683251224427101e+00 0 0 0 +220 74 1 -7.3383156196182264e-01 1.3725487235521911e+01 4.3585589872930308e+00 4.6808284626942935e+00 0 0 0 +222 74 2 3.2778663941490466e-01 1.3273816959634512e+01 4.4026137329898694e+00 5.5445678182165032e+00 0 0 0 +958 320 1 -7.4610017930944261e-01 1.5663290274330219e+01 4.9796893426559716e+00 7.5150390905448938e-01 0 0 0 +960 320 2 3.7551283813146968e-01 1.4736666783744411e+01 5.3254716418768213e+00 7.1438023451097432e-01 0 0 0 +320 107 2 3.4147571367646573e-01 1.4548277543914198e+01 7.7726612206472465e+00 8.6200265130584590e+00 0 0 0 +380 127 2 3.8288888396260523e-01 1.8086680823606102e+01 6.6958699296408941e+00 3.4346868318853470e+00 0 0 0 +319 107 1 -7.5289236146249161e-01 1.4504190487958663e+01 6.8302827431032336e+00 8.3585598210513634e+00 0 0 0 +2078 693 2 3.6896467802253480e-01 1.9837126505526836e+01 9.4872638994601708e+00 1.4545504814288625e+01 0 0 0 +2042 681 2 3.8133266548460326e-01 1.8632936926135795e+01 1.8847209418642434e+00 1.0661866182918509e+00 0 0 1 +525 175 2 3.5767804986002788e-01 1.6044729651565728e+01 7.7152962602539885e+00 4.9279045177504499e-01 0 0 0 +526 176 1 -7.1675182179051944e-01 1.7338617473894164e+01 3.9073780698890020e-01 4.3862477545242067e+00 0 0 0 +527 176 2 3.7606096783862469e-01 1.6471133582835396e+01 6.4871802983856663e-01 3.9292007431044085e+00 0 0 0 +534 178 2 3.5687435904323250e-01 1.8050783975465485e+01 3.7181143555290390e+00 5.1537709798264908e+00 0 0 0 +119 40 2 3.7458680445139569e-01 2.0487263421233615e+00 5.4481575893417078e-01 1.3498519365226000e+01 0 0 0 +307 103 1 -7.5313456861153183e-01 1.5516325859493993e+01 1.0041223608999403e+00 2.5148439529207085e+00 0 0 0 +434 145 2 3.6060382443901440e-01 2.8318372247716162e+01 6.0000350790735746e-01 1.3039033487948334e+01 0 0 0 +2538 846 2 3.7038237727101675e-01 1.5873081510603580e+01 7.3431633253088568e+00 4.2151889384124237e+00 0 1 0 +362 121 2 3.5138788653950254e-01 1.3822311947328766e+01 1.2399332735227380e+00 3.7058472510950380e+00 0 1 0 +1773 591 2 3.7574693015917909e-01 2.4710555149281316e+01 1.1915637515904558e+01 8.9573752514615723e+00 0 0 0 +1441 481 1 -7.3263272810282853e-01 2.6976878393661949e+01 3.0627092401548633e-01 6.9616920124764707e+00 0 0 0 +2049 683 2 3.5088136504355405e-01 2.7431266984046175e+01 1.4851721772360399e+01 4.7815946067125177e+00 0 0 1 +1311 437 2 3.5918535518609329e-01 1.1906016994206430e+01 1.4181562861585023e-01 5.7126228122925715e+00 0 1 0 +1194 398 2 3.4995179923095754e-01 1.7833416122412100e+01 1.5436461184933348e-01 9.0760596623794463e+00 0 1 0 +1144 382 1 -7.2894009311541352e-01 2.1625386814021507e+01 5.4650300718290135e+00 6.7230254595329866e+00 0 0 0 +2043 681 2 3.8805213934516697e-01 1.9877585541745020e+01 1.0369100917515413e+00 9.1741760286022211e-01 0 0 1 +532 178 1 -7.0517978497245426e-01 1.8491368955069976e+01 3.5217019209699156e+00 6.0490036778759615e+00 0 0 0 +533 178 2 3.9142658940071773e-01 1.8144895666077264e+01 4.3371633326148933e+00 6.6153233851801607e+00 0 0 0 +2041 681 1 -7.1168345284775480e-01 1.9352240103205951e+01 1.5571033521169870e+00 1.5405407560902771e+00 0 0 1 +1905 635 2 3.6418908688370261e-01 2.1605773287702167e+01 4.2765165277270425e+00 5.1106621918495518e+00 0 0 1 +1903 635 1 -6.9792797977161336e-01 2.1748551405429989e+01 4.0998926315357895e+00 4.1658099232003689e+00 0 0 1 +1217 406 2 3.7913386240549446e-01 2.2836463194848776e+01 5.2406299294258698e+00 2.9961168585826239e+00 0 1 0 +1904 635 2 3.6724890029640833e-01 2.1010627209303685e+01 3.3761847111544125e+00 4.0045156441401977e+00 0 0 1 +1216 406 1 -7.2604871901178580e-01 2.3447202645475159e+01 5.5920326273056826e+00 2.2944876098746829e+00 0 1 0 +248 83 2 3.3978223300435040e-01 2.3198037218540914e+01 7.6326540121433748e+00 2.6633349332777576e+00 0 0 0 +1146 382 2 3.4792706746670926e-01 2.1431062769332790e+01 6.3968311439957963e+00 6.5873809264560750e+00 0 0 0 +515 172 2 3.7066235504587541e-01 2.3336985121668135e+01 4.9569713602477519e+00 1.5211960503752682e+00 0 0 0 +1116 372 2 3.5646923248294565e-01 2.0298081690348930e+01 5.4854204901743469e+00 3.5506637971694550e+00 0 1 0 +1114 372 1 -7.0395571779608335e-01 1.9907703230303699e+01 6.1513486169178977e+00 3.0110646253217355e+00 0 1 0 +1115 372 2 3.8069079044468124e-01 1.9945826625468705e+01 5.9246211790915924e+00 2.0351856889836997e+00 0 1 0 +579 193 2 3.9547297628369682e-01 2.3996070039116375e+01 1.0529411602750995e+00 1.1165198143647250e+00 0 0 0 +585 195 2 3.7096507480798313e-01 2.3767754484183236e+01 2.6411712385066539e+00 1.1225288846698618e+00 0 0 0 +1196 399 2 3.5072559348999632e-01 1.9373676533195667e+01 2.4530216578494639e+00 4.7668697348213600e+00 0 1 0 +1714 572 1 -7.0802398477202177e-01 1.9900350884093399e+01 5.2222678995018956e+00 3.7497577490663969e-01 0 0 0 +2814 938 2 3.9150922204105332e-01 1.6699795914991270e+01 9.4769974678379248e-02 5.7930995252327664e+00 0 1 1 +2819 940 2 3.3914466909902691e-01 2.3808226622202906e+01 1.4027657188514016e+01 1.5194174847249243e+01 0 0 0 +583 195 1 -7.3812607951190867e-01 2.4143811703288495e+01 1.9114222006859189e+00 1.6122127404924802e+00 0 0 0 +624 208 2 3.5387842445422352e-01 2.4421069009592568e+01 6.6814349771311372e+00 7.2476246528316957e-01 0 0 0 +1195 399 1 -7.0634180393460455e-01 1.9969889729479270e+01 1.9322909693732215e+00 4.0979444083531487e+00 0 1 0 +1197 399 2 4.0772620806047699e-01 1.9396653865507815e+01 1.5237357262145894e+00 3.3353295837171375e+00 0 1 0 +418 140 1 -7.0399715143996378e-01 2.4418330292019323e+01 1.7532752213027898e+00 4.5070628850662953e+00 0 0 0 +420 140 2 3.8368844685430692e-01 2.4262150970924750e+01 7.7767358985760937e-01 4.5882878553516822e+00 0 0 0 +419 140 2 4.1155198449350688e-01 2.4460738669155493e+01 2.0224169088874415e+00 3.6037300525953690e+00 0 0 0 +1145 382 2 3.3232971594426863e-01 2.4543873230681669e+01 6.5476103457458166e+00 6.4993358688362211e+00 0 0 0 +1171 391 1 -6.8843097609044668e-01 1.3127471808587817e+01 1.5430342606026111e+01 5.2162038862750935e+00 0 0 0 +503 168 2 3.5852519131886351e-01 2.3431171518107213e+01 5.6038697706205145e+00 5.8644913703225265e+00 0 0 0 +1280 427 2 3.5376168279638437e-01 2.1067713619991196e+01 1.5516513195141689e+01 3.1292364926754366e+00 0 0 0 +502 168 1 -7.3571741856961170e-01 2.4383876101821894e+01 5.6246216646123770e+00 6.2255871204360247e+00 0 0 0 +884 295 2 3.3705342906758395e-01 2.0831958439525298e+01 8.4319099928220318e+00 1.4983513705461160e+01 -1 1 0 +2161 721 1 -7.2741868531417841e-01 3.1002324428745287e-01 5.3902843230030770e+00 8.4582030730450217e+00 1 1 0 +32 11 2 3.7224714013611548e-01 2.8969088068039767e+01 5.8853613725276244e-01 1.3415063196894363e+00 -1 0 0 +31 11 1 -7.0701682996664361e-01 2.8861481885382837e+01 1.6305346253392183e+00 1.2125555964014341e+00 -1 0 0 +1397 466 2 3.7287783474065178e-01 2.9021060975786416e+01 5.8230468622467777e+00 1.1493524979364806e+00 0 1 0 +615 205 2 3.8565372047805646e-01 2.4926495528292843e+01 2.4681537292063078e+00 6.2171953534894255e+00 0 0 0 +302 101 2 3.6922138072184107e-01 3.0448744544102141e+01 6.4864682511493870e+00 6.6729371988181709e+00 -1 0 0 +2901 967 2 4.2376035006718926e-01 3.0021935022741616e+01 2.3328327033627505e+00 7.4094868457492877e+00 0 1 1 +301 101 1 -7.8432242912457006e-01 3.0600037180261197e+01 6.9519317345137130e+00 5.8723762844978475e+00 -1 0 0 +58 20 1 -6.9908992171353024e-01 6.3748292073836732e-01 2.0463572721280681e+00 2.6294907465286599e+00 0 0 0 +240 80 2 3.3485166879456130e-01 3.0843398181986625e+01 2.1919511746150593e+00 2.1074553862407970e+00 -1 0 0 +2007 669 2 3.6413535825084464e-01 2.7884518960634296e+01 6.6614101874550382e+00 2.9471974124708211e+00 0 0 1 +622 208 1 -7.5750477464126409e-01 2.5145684392649883e+01 7.1849543661857584e+00 3.5392257365769353e-01 0 0 0 +1298 433 2 3.3441853145114819e-01 2.7818478639726820e+01 3.3144672824362722e+00 4.0335774579265600e+00 0 1 0 +448 150 1 -7.0318713721338333e-01 2.8097674324043851e+01 2.4598468287538888e+00 4.1297936159472464e+00 0 0 0 +2004 668 2 3.7851807512870878e-01 2.8277280394440744e+01 2.1676827663847433e+00 3.2511065976651894e+00 0 0 0 +1415 472 2 3.5501881145054931e-01 2.7398178513195557e+01 4.8176197476632554e+00 8.1955155867095399e+00 0 0 0 +935 312 2 3.7926192283897481e-01 2.7867354921700084e+01 2.3163446476640237e+00 7.1464374500543952e+00 -1 1 0 +934 312 1 -7.0550798053293162e-01 2.8514066684769428e+01 3.0309372866169420e+00 6.9865725072981961e+00 -1 1 0 +936 312 2 3.5802385594781078e-01 2.8350968993500395e+01 3.1826801669888085e+00 6.0233873348596116e+00 -1 1 0 +1654 552 1 -7.2778148499228823e-01 2.6000151339640546e+01 6.2984732742535758e+00 3.9240473831981197e+00 -1 0 1 +1656 552 2 3.8027277584560176e-01 2.5187286537297961e+01 6.1459731664565673e+00 3.3539954771306548e+00 -1 0 1 +1416 472 2 3.7533076508460606e-01 2.7486061051601464e+01 6.1751659468413065e+00 7.6778011869943370e+00 0 0 0 +1284 428 2 3.7296810722231194e-01 2.5695725667684769e+01 6.1010097723828309e+00 4.7757707803728042e+00 -1 1 0 +1282 428 1 -7.2633138156117139e-01 2.6533195522991019e+01 3.0430789772738978e+00 9.4074079366307362e-01 -1 1 0 +395 132 2 3.7194150494052364e-01 2.0721686406351484e+01 1.4825699905520535e+01 6.7864002498783798e+00 0 -1 0 +315 105 2 3.9182710238531726e-01 2.7194063305354611e+01 2.3585563875597009e+00 7.3548938961926469e-01 -1 0 0 +2005 669 1 -7.3670581211206421e-01 2.8797406268766185e+01 6.8426764115822305e+00 2.7028840681739510e+00 0 0 1 +1283 428 2 3.8989794328252242e-01 2.5720251978925841e+01 2.5003236123211270e+00 1.1432158812361251e+00 -1 1 0 +2454 818 2 3.5521705336813136e-01 5.1507876412977160e-01 1.3637905550535947e+01 1.3746168208106381e+01 0 0 0 +143 48 2 3.6506930274778204e-01 2.8548886820557613e+01 7.1302593790984945e+00 5.5261781302066835e+00 -1 0 0 +322 108 1 -7.1522081979271412e-01 2.7851815251966961e+01 1.1251230139737199e+01 1.0598254784622664e+01 0 0 0 +2006 669 2 3.8260586691915549e-01 2.8793657450713877e+01 7.7546719844509173e+00 2.2997713633332033e+00 0 0 1 +144 48 2 3.6242795555462648e-01 2.7062070631452631e+01 7.2243739405285794e+00 5.1544861901002568e+00 -1 0 0 +142 48 1 -7.4158746208401738e-01 2.7655742999010020e+01 7.0029279966475046e+00 5.9266458450432316e+00 -1 0 0 +128 43 2 3.6493793175219513e-01 2.9251866054560224e+01 1.8128122219449998e+00 2.9835519613040862e-01 -1 0 0 +893 298 2 3.7946920482746471e-01 2.0789415683959433e+01 5.0171134231841330e-01 4.9622184914003116e+00 -1 1 0 +613 205 1 -7.2930970719515864e-01 2.5354487785368573e+01 2.9206965939664045e+00 7.0171052428807306e+00 0 0 0 +1854 618 2 3.6046538469487516e-01 6.0186383954012292e+00 9.6181536881972463e+00 3.3021872686892668e+00 0 0 1 +313 105 1 -7.2860828500242214e-01 6.6309818808902365e-01 6.8670236808095488e+00 2.5073334000482266e+00 0 0 0 +489 163 2 3.8242671450949917e-01 3.2789655077764341e+00 1.0335182590066815e+01 3.1661711981267127e+00 1 0 0 +1582 528 1 -6.9633133541634928e-01 3.9175816189525694e+00 8.8798388320891473e+00 6.6440531322343496e-02 0 0 1 +1583 528 2 3.8330519894733267e-01 3.7157303505667616e+00 9.3075520118682071e+00 9.5043849871585739e-01 0 0 1 +1545 515 2 3.3547912585773454e-01 1.7513554097617570e+00 1.4264802299774038e+01 1.3255855811745821e+01 0 0 0 +487 163 1 -7.5962823214403985e-01 4.0623364446220558e+00 1.0069168258611036e+01 2.6871955226819590e+00 1 0 0 +488 163 2 3.3513510512049199e-01 4.4047292342860924e+00 1.0884175221904872e+01 2.3609347733608774e+00 1 0 0 +236 79 2 3.3992074273664707e-01 5.8140865525284569e-01 1.0447318523122952e+01 4.6983525142782989e+00 0 0 0 +1087 363 1 -7.7121238428502759e-01 2.2878236686215194e+00 1.0794053515937286e+01 4.6705075461661476e+00 0 0 0 +876 292 2 3.7577555404776669e-01 2.6906293270298849e+00 1.0167016969107877e+01 5.3443139055192077e+00 0 0 0 +1089 363 2 3.5301346996899213e-01 2.4523046410709441e+00 1.1721309434211925e+01 5.0512172834935525e+00 0 0 0 +988 330 1 -7.3980602252790906e-01 3.0605477789577495e+00 8.6425406263411908e+00 6.3050430950897791e+00 0 0 0 +989 330 2 3.5221983851749666e-01 2.7372684251186699e+00 7.7380758558943352e+00 6.3162320630704851e+00 0 0 0 +351 117 2 3.5476259391158621e-01 4.9008643683721811e+00 1.3370829450075949e+01 1.4978719937142511e+00 0 0 0 +349 117 1 -7.2438225240095444e-01 3.9668742629788083e+00 1.3106368663758122e+01 1.3619716573037230e+00 0 0 0 +2204 735 2 3.3502436980086803e-01 1.3133732729193814e+00 1.1046095576944669e+01 7.3879940582274928e-01 1 0 1 +2090 697 2 3.1416504629569597e-01 3.5713442770377184e+00 1.3601010630849697e+01 2.1393200249164996e+00 1 0 0 +2165 722 2 3.6187320847216919e-01 3.0809439330817803e+01 1.3842330112549433e+01 4.6223282175213347e+00 0 -1 1 +2822 941 2 3.8410087331911397e-01 7.0484164184591402e-01 8.6201759024897981e+00 2.2996257689948187e+00 1 0 1 +2821 941 1 -6.9317519523929871e-01 1.0510035515236795e+00 9.5837781336614452e+00 2.2453884041254644e+00 1 0 1 +2838 946 2 3.4514550685245993e-01 9.6234805605568241e-01 9.9084729669537506e+00 3.1471571998744992e+00 1 0 1 +2164 722 1 -7.5352117053148004e-01 3.0047419170952306e+01 1.3303786185264741e+01 4.3623085402350235e+00 0 -1 1 +975 325 2 3.7682730648664148e-01 4.1159794867671584e+00 1.3015015958314439e+01 5.9005683034394236e+00 0 0 0 +2066 689 2 3.8742997998029072e-01 1.6019479085528225e+01 1.1685737415708365e+01 2.1333527031933200e-01 0 0 1 +2935 979 1 -7.3059112897193779e-01 1.3639244652625697e+00 1.1859835077454461e+01 1.5196214658237747e-01 1 0 1 +2244 748 2 3.5548258327564458e-01 2.1573034557559936e+00 1.2211891396818533e+01 4.2478770601766352e-01 1 0 1 +990 330 2 3.5068291930645673e-01 4.0201368215177693e+00 8.5826932481606466e+00 6.5452969738789379e+00 0 0 0 +2149 717 1 -7.4148447957628705e-01 1.2019739267070590e+00 1.4672260592254840e+01 5.5630992204181284e+00 1 0 1 +973 325 1 -7.8775790214207508e-01 3.2808598996908067e+00 1.2848526359195688e+01 6.2732967928043202e+00 0 0 0 +762 254 2 3.6025664654146405e-01 1.9056954910051354e+00 1.4057376445312965e+01 5.5313206816203708e+00 0 0 0 +2795 932 2 3.9224283641486529e-01 2.6521176460952926e+01 4.6186126865153296e+00 2.5126444848059759e-01 0 1 1 +122 41 2 3.6819491116834224e-01 2.3324552592077765e+01 3.5796379652413099e-02 7.4527908359156143e+00 -1 0 0 +358 120 1 -7.4765682452255755e-01 5.4380659569255423e+00 1.3878425473942585e+01 4.4473440250118168e+00 0 0 0 +417 139 2 3.7382189272773941e-01 1.7560447634827046e+01 1.5143597939000566e+01 8.1699992837828930e+00 0 0 0 +961 321 1 -7.6642246769839772e-01 1.0042308679106254e+01 8.9584766183836724e+00 7.1840235780789001e+00 0 0 0 +962 321 2 3.6857664079591451e-01 9.1568370079591368e+00 9.4753221975802866e+00 7.3013392451650754e+00 0 0 0 +2030 677 2 3.8077556991114592e-01 1.1274953341341806e+01 9.1756604772778196e+00 8.2615689499298348e+00 0 0 1 +296 99 2 3.8390767271087611e-01 8.3870652149458866e+00 1.0498040232468407e+01 4.1447572130468879e+00 0 0 0 +1684 562 1 -7.2814409094719501e-01 7.3903507455065967e+00 1.1071556853951039e+01 1.2250354825262861e+00 0 0 1 +295 99 1 -7.5867788325900443e-01 8.3606792224635225e+00 1.1198565313529352e+01 4.7578819239418824e+00 0 0 0 +297 99 2 3.8050488962837858e-01 8.1992673935332281e+00 1.0810184886840672e+01 5.5982050466612767e+00 0 0 0 +752 251 2 3.7058099998233940e-01 6.9641895936893086e+00 1.2308111468798824e+01 6.9658155757407219e+00 0 0 0 +751 251 1 -7.4278412639228442e-01 6.8317676886338417e+00 1.3225459031894374e+01 6.7438315667638911e+00 0 0 0 +333 111 2 3.2594448957973510e-01 1.0940086812021329e+01 1.0907622350149609e+01 2.3696570893195164e+00 0 0 0 +1721 574 2 3.6555965852011851e-01 1.0108207122612409e+01 1.2939405571008342e+01 1.8138351188170265e+00 0 0 1 +1720 574 1 -6.7979005435637685e-01 1.0139115176726332e+01 1.2619264235791288e+01 9.1494055886703352e-01 0 0 1 +1722 574 2 3.1408722434581637e-01 9.3407660548652700e+00 1.3012442918969811e+01 4.6724181254637065e-01 0 0 1 +513 171 2 3.5331149898951131e-01 6.1258136386977373e+00 1.3650690886881765e+01 5.1785295600723549e+00 0 0 0 +359 120 2 3.3369997701578780e-01 5.9767384049249790e+00 1.3598746260467328e+01 3.6815405445583935e+00 0 0 0 +1686 562 2 3.5240375771748844e-01 6.9460097646681369e+00 1.1918500061515987e+01 1.4366910383412708e+00 0 0 1 +2280 760 2 3.7119825856449817e-01 7.2401035636003090e+00 1.4224140737357329e+01 1.1984115186101394e+00 0 0 1 +332 111 2 3.4834558761665085e-01 1.0853174350853518e+01 1.0627732179932620e+01 6.3333012192419424e+00 0 0 0 +994 332 1 -7.1059773710688490e-01 1.1083273692355830e+01 1.1613748775864417e+01 6.4686656234184738e+00 0 0 0 +341 114 2 3.3735279609069491e-01 7.0764838609572767e+00 9.4518567379441283e+00 7.8554150256115385e+00 0 0 0 +340 114 1 -7.5518289903745917e-01 7.6864902765107814e+00 1.0199138450529055e+01 7.5550827779115322e+00 0 0 0 +2278 760 1 -7.8009249592433916e-01 6.8004361878348911e+00 1.3720896671082105e+01 1.9284680084598940e+00 0 0 1 +331 111 1 -7.3418890315657181e-01 1.0267332256594415e+01 1.0457999131588730e+01 2.9030361238710336e+00 0 0 0 +1272 424 2 3.1651297923855615e-01 1.0320620493004430e+01 1.1044707571318979e+01 3.6633258241542537e+00 0 0 0 +2279 760 2 3.0287135476369220e-01 7.5119692850690356e+00 1.3642877563459185e+01 2.5709230452345122e+00 0 0 1 +552 184 2 3.1157287016550422e-01 2.2611381264759519e+01 9.5628153947696610e+00 1.4801127234723051e+01 0 0 0 +1071 357 2 3.6370197009760108e-01 9.2109793110600613e+00 1.2678296857439486e+01 4.1086137374479605e+00 0 0 0 +753 251 2 3.8398429683529961e-01 7.6805428689642357e+00 1.3657573344140784e+01 6.9011137950325541e+00 0 0 0 +996 332 2 3.7894194562482475e-01 1.2011414776837247e+01 1.1748453532754196e+01 6.1451088221579040e+00 0 0 0 +649 217 1 -7.3435592382189663e-01 1.3706413328780920e+00 1.3953920709658846e+01 1.4118039306937186e+01 1 0 0 +1069 357 1 -7.7126130153104555e-01 9.6710350248297203e+00 1.3461439256148447e+01 3.6996363509544015e+00 0 0 0 +698 233 2 3.8485248110641607e-01 1.0125965419176254e+01 1.2973195546590683e+01 7.2780509680289356e+00 1 0 0 +2720 907 2 3.5902734372621675e-01 2.5263573307082972e+01 1.4868669781495987e+01 9.8064356926907124e+00 0 1 0 +806 269 2 3.6058437088561074e-01 1.0569862483970079e+01 1.3309830973784278e+01 3.9004031613580823e+00 0 0 0 +524 175 2 3.7925251782370911e-01 1.7318664733722265e+01 7.6410073785404355e+00 1.4165581848616602e+00 0 0 0 +523 175 1 -7.2080194552706012e-01 1.6846011175578873e+01 8.1855784635332398e+00 8.6426136208733129e-01 0 0 0 +1892 631 2 3.3559177520446359e-01 1.2031997034331688e+01 8.9284412640576942e+00 3.4755052150328223e+00 0 0 0 +977 326 2 3.5661278293438609e-01 1.2923340356870726e+01 1.3924500954723241e+01 2.8572605709043160e+00 0 0 0 +1270 424 1 -7.6167366620956856e-01 1.3625015813317914e+01 1.1635889254372275e+01 5.3936156072980204e+00 0 0 0 +1271 424 2 3.2283997763176686e-01 1.3363419589478919e+01 1.2055222357868308e+01 4.5025536195181903e+00 0 0 0 +1891 631 1 -7.1511451722943142e-01 1.2546260930801695e+01 8.1678258594311988e+00 3.7054756391045220e+00 0 0 0 +374 125 2 3.7100735648407795e-01 1.4671305077239150e+01 8.4693641702357034e+00 6.5010617381468663e+00 0 0 0 +999 333 2 3.7673389148422226e-01 1.6858188839617025e+01 1.3260840101787142e+01 3.6536277097279157e+00 0 0 0 +976 326 1 -7.6500251118257601e-01 1.2495194270294981e+01 1.3064141836183607e+01 2.9073867924432082e+00 0 0 0 +2537 846 2 3.4154322829704103e-01 1.4449902508342412e+01 8.1164653714006967e+00 4.4858453812232160e+00 0 1 0 +945 315 2 3.5756763237003220e-01 1.2874768239465711e+01 1.2619148926920694e+01 2.2110146519842866e+00 0 0 0 +1925 642 2 3.4095981919838175e-01 1.5692511942686176e+01 9.6147015634048660e+00 3.3486570916909053e+00 0 0 0 +1924 642 1 -7.2404266196428380e-01 1.5221695559658110e+01 1.0459664212803514e+01 3.1680209738104517e+00 0 0 0 +1926 642 2 3.1717212270082579e-01 1.4608794019453144e+01 1.0494730065994817e+01 3.9453561254685292e+00 0 0 0 +1128 376 2 3.7402235582157090e-01 1.5045005346193431e+01 1.3260823429527811e+01 1.1281503733802314e+00 0 0 0 +1126 376 1 -7.7268408356808438e-01 1.4601781128230201e+01 1.2432780275579875e+01 1.0212338110373231e+00 0 0 0 +1127 376 2 3.4268230352755635e-01 1.4871898918240923e+01 1.1922153454176515e+01 1.8370952174557196e+00 0 0 0 +997 333 1 -7.5019155484829303e-01 1.6185721333585239e+01 1.2897821630729570e+01 4.2814784430507942e+00 0 0 0 +1962 654 2 3.3676684637680410e-01 1.5928223210051311e+01 1.2042646060180729e+01 3.8470288527138665e+00 0 0 1 +373 125 1 -7.3021666868400825e-01 1.4189227303820456e+01 9.1725985459417014e+00 7.0508923828249097e+00 0 0 0 +558 186 2 3.4524258190978491e-01 1.7275618272182506e+01 1.1647239440605443e+01 5.1520170782588597e+00 0 0 0 +2536 846 1 -7.3118747489834701e-01 1.5339710978302147e+01 7.8541542818862613e+00 4.8443859035052554e+00 0 1 0 +1758 586 2 3.6338525820394019e-01 1.4247358999328338e+01 1.2307757516201359e+01 5.7088167338458087e+00 0 0 0 +2450 817 2 3.8953285002764459e-01 1.5772388334175179e+01 1.3474992876695412e+01 6.0753715007786573e+00 0 0 0 +1060 354 1 -7.7834296710778439e-01 1.5161746436035390e+01 1.3765190928991137e+01 6.7030838997542705e+00 0 0 0 +1052 351 2 3.7091095558428605e-01 1.8874535562468576e+01 1.0112325706223350e+01 4.9605214777657274e+00 0 0 0 +952 318 1 -7.4211657418473165e-01 1.5899211349038151e+01 1.4813070298548183e+01 3.5141057336039394e-01 0 0 0 +1160 387 2 3.5794340822123361e-01 1.2922128370188350e+01 1.5070432297648827e+01 4.3865123063701645e+00 0 0 0 +1061 354 2 3.9340394586448718e-01 1.4686691678917770e+01 1.4503427917135310e+01 6.3605934765078400e+00 0 0 0 +2157 719 2 3.4733707346504189e-01 1.2826235656375388e+01 1.5424466508002052e+01 1.4236822660756496e+00 0 0 1 +271 91 1 -7.3284933903259986e-01 1.9797012417861556e+01 1.0198648564118789e+01 2.1808724178878028e-01 0 0 0 +2843 948 2 3.6286479239287156e-01 2.5028410449812743e+01 1.3224309494639456e+01 1.5379719493730903e+00 0 0 1 +2865 955 2 3.8321205054164886e-01 2.4981110364415954e+01 1.1787790131490294e+01 1.0665015240334432e+00 0 0 1 +2336 779 2 3.4760543734255200e-01 2.6794298776418618e+01 4.7204019993334845e-02 1.1493774722804988e+01 -1 1 1 +560 187 2 4.1327771374331596e-01 2.4698030269425669e+01 1.4859157153438852e+01 6.4557658311544310e+00 0 0 0 +1002 334 2 3.6831536018504235e-01 9.0709264057027355e+00 1.5175519125043248e+01 4.0706270566276270e+00 0 0 0 +556 186 1 -7.1120261122680717e-01 1.8023493016279513e+01 1.1324096084893167e+01 5.7339965207913473e+00 0 0 0 +557 186 2 3.7278171676663396e-01 1.8744556612773923e+01 1.1998961480393996e+01 5.7709015871253806e+00 0 0 0 +1051 351 1 -7.5106068386773239e-01 1.9463097868557114e+01 9.4375597435248260e+00 4.4429166969099612e+00 0 0 0 +1141 381 1 -7.0865497417696000e-01 2.3622330297184394e+01 8.0976140201513047e+00 3.4823814250952703e+00 0 0 0 +1143 381 2 3.5276029334045467e-01 2.3877297116691985e+01 8.4869227450750060e+00 5.9959241109173318e+00 0 0 0 +1142 381 2 3.8480780230000083e-01 2.4009491806606366e+01 8.8987499849634037e+00 3.1807848067586919e+00 0 0 0 +1344 448 2 3.4431754370412976e-01 2.2031646719938472e+01 8.3703161142980598e+00 4.7295540868584167e+00 0 0 0 +1342 448 1 -6.8308981538894631e-01 2.4624194584247398e+01 8.6718279784660304e+00 6.4315465104822378e+00 0 0 0 +1279 427 1 -7.2047636044830288e-01 2.1194438088659144e+01 1.4655113145176898e+01 3.5599068905706899e+00 0 0 0 +1323 441 2 3.2231289034768323e-01 2.4319336433573465e+01 1.2486041030298008e+01 3.4344236859922881e+00 0 0 0 +749 250 2 3.4257377797706601e-01 1.8165041987963619e+01 1.4215742191736197e+01 2.0663913242721450e+00 0 0 0 +750 250 2 3.4918107205585291e-01 1.9293946610269717e+01 1.3944062873668372e+01 3.0360673982438584e+00 0 0 0 +1053 351 2 3.7355122674223473e-01 1.9981613596945731e+01 1.0142044406269951e+01 3.6721064556180352e+00 0 0 0 +1364 455 2 3.6485201855729510e-01 1.9318564114233528e+01 1.1646004194054118e+01 2.7559119559059511e+00 0 0 0 +1343 448 2 3.7323439077733678e-01 2.5272702753623754e+01 8.8444474476632546e+00 5.6789401336957352e+00 0 0 0 +1363 455 1 -7.2813137446444254e-01 2.0174853811185752e+01 1.1180685316542265e+01 2.6899483744839250e+00 0 0 0 +1365 455 2 3.9713794882029002e-01 2.0227614540723657e+01 1.0639849292957415e+01 1.8135908162679584e+00 0 0 0 +1294 432 1 -7.5872247108158186e-01 2.1586974012361846e+01 8.5220006770698973e+00 5.6332414905894312e+00 0 1 0 +1229 410 2 3.6559621130358355e-01 2.5796342575252574e+01 1.0434659060781394e+01 3.9758072329309679e+00 0 0 0 +1296 432 2 3.6607457751404843e-01 2.0366112239366135e+01 9.1572924816627204e+00 5.1228506915628627e+00 0 1 0 +2934 978 2 4.0311508896507325e-01 2.3942267593843457e+01 1.4796025914797434e+01 1.3442222386508997e+00 0 0 1 +2850 950 2 3.8315464193520832e-01 2.4620142727404136e+01 1.4909320955578064e+01 2.7131452306888910e+00 0 0 1 +2932 978 1 -7.8039979922039138e-01 2.4013594742696309e+01 1.4359470428390750e+01 2.2266960707494654e+00 0 0 1 +748 250 1 -7.3018650304512345e-01 1.8427046215860823e+01 1.3583293653000359e+01 2.7271658023086571e+00 0 0 0 +1321 441 1 -6.5864153984116669e-01 2.4268201200445308e+01 1.1986392490174696e+01 4.2974713873037711e+00 0 0 0 +1281 427 2 3.5433692469751338e-01 2.2077395306594351e+01 1.4348392712373405e+01 3.1790452010726651e+00 0 0 0 +2780 927 2 3.6847894214086452e-01 2.0657071677182085e+01 1.3437978308603224e+01 5.0024740459382340e+00 0 0 1 +1295 432 2 3.8008842647280749e-01 2.2075169149491696e+01 9.3884094689527533e+00 6.0161724973545869e+00 0 1 0 +1177 393 1 -7.2133807426964403e-01 2.0445471297606030e+01 1.3020624667663823e+01 5.9033396771857563e+00 0 0 0 +1178 393 2 3.8760922709331613e-01 2.1123036439837861e+01 1.2364993781325525e+01 6.1885183465221001e+00 0 0 0 +2228 743 2 3.4804715633184741e-01 2.4810796102968023e+01 9.2674126213427019e+00 1.1286540554542459e+00 0 0 1 +1322 441 2 3.3033554877197840e-01 2.4605511059419875e+01 1.2673089397605336e+01 4.8771040732884554e+00 0 0 0 +224 75 2 3.5080382579655595e-01 1.9820240129964642e+01 7.6595505302338704e+00 6.4471005405667841e+00 0 0 0 +2227 743 1 -7.2929343957952986e-01 2.4726632068728112e+01 9.9745764484836581e+00 1.7381256100416549e+00 0 0 1 +2229 743 2 3.2258576344761747e-01 2.5640140643847204e+01 9.9550075705358392e+00 2.1361854473283866e+00 0 0 1 +507 169 2 3.4073756485913104e-01 2.2660158628013029e+01 1.4128931869446916e+01 1.4168782827577042e+01 0 0 0 +2080 694 1 -7.1497924938304980e-01 2.1835153667262524e+01 1.0736491192306897e+01 6.9156177707814352e+00 0 0 0 +2082 694 2 3.6731570280412973e-01 2.2588381513180167e+01 1.0893927333057611e+01 7.5772875029759232e+00 0 0 0 +431 144 2 3.6489346980624221e-01 3.0534173399577149e+01 8.3380848420287279e+00 6.5163502149762520e+00 0 0 0 +1632 544 2 3.8167188596816054e-01 3.0422394593164292e+01 1.1494413603359128e+01 4.6230591406290511e+00 -1 0 1 +1630 544 1 -7.2546998377165361e-01 3.0594866062596974e+01 1.0538283577190228e+01 4.6956648343540257e+00 -1 0 1 +2166 722 2 3.6335358282092878e-01 2.9345361139250041e+01 1.3735034155610570e+01 4.8968147581269275e+00 0 -1 1 +1917 639 2 3.2831460205591412e-01 1.9266198291343610e+01 1.5112588328716638e+01 2.2304837569120856e-01 0 0 1 +2203 735 1 -7.5258231877874160e-01 2.9176683859194647e+01 1.3163150997103514e+01 8.3128994673950860e+00 0 0 1 +1180 394 1 -7.0673420754785987e-01 2.6303583275596061e+01 9.8250799245261149e+00 4.5254814934012977e+00 0 0 0 +127 43 1 -7.1578102381674791e-01 2.7732456825143593e+01 9.2933380246859176e+00 7.6714896220953657e+00 -1 0 0 +12 4 2 3.6193354459566540e-01 2.7540038293111024e+01 8.4959479214118510e+00 7.0545459217828670e+00 -1 0 0 +2095 699 1 -7.0831593411319604e-01 3.0349609271392325e+01 9.2925902847310340e+00 7.0978653600088935e+00 0 0 1 +2096 699 2 3.5281360484553997e-01 3.0398418861229050e+01 1.0051212924202549e+01 6.2213252553154827e+00 0 0 1 +623 208 2 3.5880766260311747e-01 2.9201482049435800e+01 9.2244346653423044e+00 7.4358684922306608e+00 0 0 0 +2159 720 2 3.3823564268491546e-01 3.0803202576366676e+01 1.1920531603542944e+01 1.3415442326919869e+00 0 0 1 +2158 720 1 -7.6119678411316760e-01 2.9918961599720525e+01 1.2338436941275864e+01 1.5832925508022093e+00 0 0 1 +2130 710 2 3.2749563037318280e-01 2.7349919815107906e+01 8.4101723016108476e+00 5.8452461182870985e-01 0 0 1 +1182 394 2 3.6320659557072082e-01 2.6759606122075066e+01 1.0434746236492805e+01 5.1603883516707372e+00 0 0 0 +2128 710 1 -7.4887991140858612e-01 2.8193494970906894e+01 8.7573589475964475e+00 9.2231447524737176e-01 0 0 1 +2129 710 2 3.4655998913080804e-01 2.7963380512288413e+01 9.6628989688977480e+00 1.3165453879185831e+00 0 0 1 +2870 957 2 3.8236049531283289e-01 2.8378756069119923e+01 1.1602593554863265e+01 2.0292751474858477e+00 0 0 1 +1328 443 2 3.8257873680038068e-01 2.8970511947163111e+01 1.4437357976968004e+01 7.0268108477778783e+00 0 0 0 +2869 957 1 -7.2788703577564851e-01 2.7464457162804660e+01 1.1234554557070336e+01 2.0922560348112369e+00 0 0 1 +610 204 1 -7.5670187498919206e-01 2.7428196957311773e+01 1.1811720209771533e+01 6.5291027444831045e+00 0 0 0 +611 204 2 3.8633155299559213e-01 2.7984044401595391e+01 1.2201081873390617e+01 7.1949645419678045e+00 0 0 0 +2160 720 2 3.5874055738087113e-01 3.0072740007557556e+01 1.2736754349937966e+01 2.4906916468330875e+00 0 0 1 +612 204 2 3.4738415209155832e-01 2.6702794741356012e+01 1.2389274641474589e+01 6.3231656173156452e+00 0 0 0 +759 253 2 3.9616694464984792e-01 2.7539456960359395e+01 1.0156517527325532e+01 7.2848106393189465e+00 -1 0 0 +559 187 1 -7.6802716399825677e-01 2.5314039050599870e+01 1.4074321651001933e+01 6.4730245007519622e+00 0 0 0 +561 187 2 3.7947197609714545e-01 2.5773924435289068e+01 1.4104908221359842e+01 7.3426255188206442e+00 0 0 0 +2048 683 2 3.3591653857891007e-01 2.6130737768723165e+01 1.3963141533124302e+01 4.6591233878349740e+00 0 0 1 +1623 541 2 3.3553535013638147e-01 2.3138636559317027e+00 8.9397229842037773e-01 1.2855145624292841e-01 0 0 1 +2047 683 1 -7.0776349214812362e-01 2.6594343953738139e+01 1.4706967508049495e+01 4.1879832928810821e+00 0 0 1 +2871 957 2 3.5675816071708077e-01 2.6911060654405620e+01 1.1711113956614183e+01 1.4175830917304237e+00 0 0 1 +1379 460 2 3.7241022699859389e-01 2.9281223062034392e+00 3.6528369544011947e+00 1.5515745498743394e+00 1 1 0 +2863 955 1 -7.2210570654265871e-01 2.5501068128887301e+01 1.2537161650963242e+01 8.9119591835198164e-01 0 0 1 +1327 443 1 -7.9225778065681240e-01 2.8811271119403859e+01 1.4901043031405694e+01 6.2030426088140684e+00 0 0 0 +228 76 2 4.0263595287173426e-01 5.9708137404961015e+00 1.0298900434273990e+00 7.7292692797755957e-01 0 0 0 +1495 499 1 -7.4698069194326755e-01 5.7133136422425741e+00 3.3509113292494890e+00 7.7236616434180014e+00 1 1 0 +1706 569 2 3.5283818767689318e-01 2.3690454189175880e+00 3.2404197638510954e+00 6.8417722693677980e+00 0 0 0 +1707 569 2 3.4478117026980820e-01 3.6857667798295326e+00 3.0473906768742740e+00 7.4777849585167786e+00 0 0 0 +1100 367 2 3.7628027277296727e-01 6.1575532700915261e+00 3.1089099103660129e+00 8.5453585887206884e+00 0 1 0 +117 39 2 3.9455890049263220e-01 1.8833110884786941e+00 5.9475010730976550e+00 7.8668284206495871e+00 0 0 0 +6 2 2 3.4014153576746908e-01 6.6653646394599662e+00 1.7006186811850021e+00 1.0874927030134137e+01 0 0 0 +4 2 1 -7.2571111880246442e-01 6.7333840652394521e+00 2.3787727470738345e+00 1.0219750954424841e+01 0 0 0 +1527 509 2 4.0100653288494820e-01 5.4528014673772898e+00 1.3956758948560801e+00 1.5307386648498444e+01 0 0 0 +151 51 1 -7.2910801690274551e-01 2.7262298784151353e+00 4.2955663940398221e+00 1.0510748319366119e+01 0 0 0 +153 51 2 3.7237597048485871e-01 2.6371530330396142e+00 4.0278556956960045e+00 9.5908798943605404e+00 0 0 0 +1119 373 2 3.8835260883331613e-01 4.4268410355053716e+00 4.7329718288267433e+00 1.0728787081880176e+01 0 1 0 +147 49 2 3.7708792650528411e-01 7.5267048627925659e-01 2.3059348787375873e+00 1.3112627078656976e+01 0 0 0 +1117 373 1 -7.5142747813406152e-01 5.1387664257184182e+00 4.9803723392331127e+00 1.1342304349160040e+01 0 1 0 +1118 373 2 3.6271966363746028e-01 5.4984890411492540e+00 5.8908091924721653e+00 1.1127059252087154e+01 0 1 0 +1123 375 1 -7.4006805555028954e-01 6.3042443441123792e+00 7.2148468774146242e+00 1.0319917218624509e+01 0 1 0 +5 2 2 3.0950048252677159e-01 6.1984768332792770e+00 3.0689625281473445e+00 1.0689680908331225e+01 0 0 0 +2433 811 2 3.6790902828033573e-01 4.1653063962835608e+00 6.3273345186813721e+00 1.3999319382857966e+01 0 1 0 +2431 811 1 -7.3438271689388468e-01 4.7187226779524876e+00 5.4769634480967486e+00 1.3945376600475882e+01 0 1 0 +2432 811 2 3.9084393881077384e-01 4.7398138108415253e+00 5.1990830606188325e+00 1.2995460855747162e+01 0 1 0 +152 51 2 3.3992824104581582e-01 2.4155991985277527e+00 3.5382690774085708e+00 1.0987691593868808e+01 0 0 0 +857 286 2 3.8124271137402527e-01 2.4747479270569568e+00 6.6203061567186445e+00 1.0887159393930956e+01 0 0 0 +923 308 2 3.2869068578915284e-01 6.3697320057901470e+00 6.6784125010570463e+00 1.3501034206207150e+01 0 1 0 +1525 509 1 -7.5992241024094487e-01 4.5103057463138860e+00 1.1475765232913371e+00 1.5133305617863787e+01 0 0 0 +856 286 1 -7.2800469554517955e-01 2.2942863580243062e+00 7.5346055017169800e+00 1.0829874489228526e+01 0 0 0 +858 286 2 3.4450384066690903e-01 2.7729168460391116e+00 7.8972231176541925e+00 1.1679026265479433e+01 0 0 0 +120 40 2 3.5154660324048509e-01 2.3446515644617008e+00 1.6742848679669022e+00 1.4471381758370747e+01 0 0 0 +118 40 1 -7.1973118402817282e-01 1.6337449119010632e+00 1.1435179646868354e+00 1.4125673846681433e+01 0 0 0 +1705 569 1 -7.4619529430445708e-01 2.8020966808238748e+00 3.3596387585687006e+00 7.6862162452808773e+00 0 0 0 +792 264 2 3.8162134395491909e-01 4.7476299851296516e-01 7.5080694733013980e+00 1.1117422277791169e+01 0 1 0 +145 49 1 -7.2456733119125016e-01 9.7035303704488512e-02 2.8037480815284308e+00 1.2502648753185213e+01 0 0 0 +146 49 2 3.6960101144384100e-01 3.3213958954874911e-01 3.7881333174906344e+00 1.2651781996324514e+01 0 0 0 +885 295 2 3.6343115339204518e-01 3.9216228535512293e-01 5.7211140002981447e+00 1.2421215920920250e+01 0 1 0 +733 245 1 -7.2939243403239429e-01 1.0591558935808338e+00 5.2316792952360576e+00 1.3040137299130430e+01 1 0 0 +734 245 2 3.7885173336262007e-01 7.7356250970958040e-01 5.2155320245704964e+00 1.3943828663846643e+01 1 0 0 +2326 776 1 -7.5959298392515695e-01 3.4747639361285931e+00 7.7758768787384263e+00 1.3523957449850817e+01 0 1 0 +2118 706 2 3.7032656930185393e-01 7.7843948181891809e-01 6.7423516357047797e+00 1.4849541735561921e+01 1 0 0 +1871 624 2 3.7742868774015342e-01 1.2907370063895211e+01 4.4263912919383808e+00 1.5492392870088166e+01 0 0 0 +2205 735 2 3.5816460566448205e-01 2.8946845771120604e+01 1.2627751108813840e+01 9.1250146354086610e+00 0 0 1 +1641 547 2 3.4073380398166719e-01 7.1111993645099947e+00 1.1366622304192653e+01 1.5359188902057735e+01 0 0 0 +1208 403 2 3.6388529937889968e-01 2.5056081596788722e+01 1.4584530002965888e+00 1.1020268642399330e+01 0 1 0 +1125 375 2 3.5950591727482978e-01 6.8748449510385647e+00 6.4533818108221057e+00 9.8958183731961320e+00 0 1 0 +1124 375 2 3.6079497036949704e-01 6.8670303828595243e+00 7.5817382274248049e+00 1.1016727356105484e+01 0 1 0 +75 25 2 3.8204465030924051e-01 7.1142711055162033e+00 7.4286205407604458e+00 1.4657265748022505e+01 0 0 0 +1699 567 1 -7.2931258945533617e-01 8.0658743106840500e+00 5.4073124961907117e+00 9.4539036839712871e+00 0 0 0 +1701 567 2 3.7159147156970163e-01 8.2335210912987247e+00 4.7266377202255532e+00 1.0177642672103413e+01 0 0 0 +830 277 2 3.5956669984241846e-01 1.3400883293480890e+01 2.3588279160837056e+00 8.0615325900692927e+00 0 1 0 +73 25 1 -7.5694911019102484e-01 7.2938075580930937e+00 6.8554873823714217e+00 1.3873973895860502e+01 0 0 0 +848 283 2 3.5315011637445082e-01 7.6614448452830199e+00 8.0302126081544554e+00 1.2642514058156374e+01 0 0 0 +101 34 2 3.6642454244934813e-01 7.2517605405166901e+00 1.2005813022855081e+00 1.3975943969519834e+01 0 0 0 +217 73 1 -7.0702430479286171e-01 1.0085707824014888e+01 6.5561230328896141e+00 8.0915255535996220e+00 0 0 0 +219 73 2 3.7622741341933796e-01 9.2985003663325791e+00 6.0191502568826607e+00 7.8377760739129236e+00 0 0 0 +820 274 1 -7.2553446153842394e-01 1.1880570912905165e+01 3.4432634914317197e+00 1.0382975998786526e+01 0 1 0 +822 274 2 3.4320117180500115e-01 1.2011507734689886e+01 3.1042560325459547e+00 9.4523576660266677e+00 0 1 0 +2937 979 2 3.2429534466538423e-01 2.9647128738089414e+01 1.5235459388641615e+01 5.9945384093753304e+00 0 0 1 +2293 765 1 -7.2726234223499353e-01 8.0404399513760083e+00 4.3439217238147378e+00 1.3755030513215200e+01 0 1 0 +2585 862 2 3.7659831892793261e-01 9.7960146545419313e+00 4.6050109223523279e+00 1.3951856085888535e+01 0 1 0 +2586 862 2 3.5592816744559364e-01 1.1356255901199329e+01 4.4804001893060894e+00 1.4228130964569861e+01 0 1 0 +2295 765 2 3.5623744243767957e-01 7.6461122285125604e+00 3.7650915357505688e+00 1.4455339332419513e+01 0 1 0 +567 189 2 4.0714735396839730e-01 2.1459914129644218e+01 9.0359099877329443e-02 1.1951506949480251e+01 0 0 0 +100 34 1 -7.1917012813285031e-01 7.1710414426954534e+00 1.5952229176299946e+00 1.4910248227520436e+01 0 0 0 +2300 767 2 3.7659586689290209e-01 1.0875148664424408e+01 3.5493398962347711e+00 1.0616015335094025e+01 0 1 0 +1559 520 2 3.5039867302626498e-01 1.0884136499129305e+01 7.0708785770579992e+00 1.3919477973256607e+01 0 0 0 +1522 508 1 -7.5891955514033194e-01 1.0306342379913511e+01 8.2620202951080319e+00 1.0775546187730539e+01 0 0 0 +1524 508 2 3.7292101546655892e-01 1.1131579343509493e+01 8.4596096396323102e+00 1.0284470239703452e+01 0 0 0 +53 18 2 3.6921541695409194e-01 8.8009057386326699e+00 3.9237712801575633e+00 1.1939014204161996e+01 0 0 0 +54 18 2 3.9677587277412490e-01 8.2006061888405046e+00 2.9551428942942040e+00 1.0984331249647768e+01 0 0 0 +52 18 1 -7.5399507143701594e-01 8.9736740142172291e+00 3.4644949499441897e+00 1.1129417096795120e+01 0 0 0 +1558 520 1 -7.0982689216245853e-01 1.0736636700935271e+01 8.0392435980254859e+00 1.3677296770396085e+01 0 0 0 +1523 508 2 3.5617246436127509e-01 9.8246901650007672e+00 7.7074572213170116e+00 1.0195397330490612e+01 0 0 0 +1560 520 2 3.7060906657481996e-01 1.0622419309330631e+01 7.9885487528953618e+00 1.2739077872884986e+01 0 0 0 +1035 345 2 3.5430395266288411e-01 1.1755990067763298e+01 1.5531919009169568e+00 1.4699794161400284e+01 0 1 0 +1033 345 1 -7.4239732885452370e-01 1.1462755227583308e+01 6.4250326314457440e-01 1.4811198729257669e+01 0 1 0 +849 283 2 3.2588457826761136e-01 8.4494469543540944e+00 8.7386137534629054e+00 1.1506531414782774e+01 0 0 0 +2584 862 1 -7.5666937390064370e-01 1.0587786945850189e+01 5.0905357888490519e+00 1.4303284175726585e+01 0 1 0 +193 65 1 -7.1287083432825538e-01 7.8382265342042690e+00 2.3779209227304340e-01 1.2514005498705270e+01 0 0 0 +1692 564 2 3.6522500943951181e-01 1.3534655771838898e+01 7.4176192148884805e+00 1.6295776923088712e-01 0 0 1 +1547 516 2 3.9166368478328889e-01 7.8127611458585022e+00 5.2785968207496676e+00 1.4085507762735677e+01 0 0 0 +1443 481 2 3.8374231033145811e-01 2.5998019544678456e+01 2.8394336364644585e-01 7.0548265690801184e+00 0 0 0 +832 278 1 -6.9673257579541992e-01 1.2840610249101658e+01 1.3841791945474853e+00 1.2181402975252579e+01 0 1 0 +833 278 2 3.5884040781426424e-01 1.2376086065692428e+01 1.8667618491299727e+00 1.1456946786471265e+01 0 1 0 +2642 881 2 3.6981504723344494e-01 2.7071245340385886e+01 1.2004734280878186e+01 1.3941196865662315e+01 0 0 0 +603 201 2 3.5243032749698672e-01 2.1323013615519361e+01 3.1366377295372072e-01 6.9373111750742895e+00 0 0 0 +1949 650 2 3.5927253244587376e-01 1.7627695566807684e+01 6.7390027859976085e+00 1.5169383768081236e+01 0 0 1 +56 19 2 3.5460786295729047e-01 1.5430802090070969e+01 6.6069356227314815e+00 8.0459831895907676e+00 0 0 0 +1998 666 2 3.8092999858822763e-01 1.3629256348678762e+01 6.2081487222913481e+00 9.7558929481132246e+00 0 0 0 +1996 666 1 -7.2640888473934240e-01 1.3165107561590442e+01 6.0337852110526731e+00 1.0569893871710724e+01 0 0 0 +2394 798 2 3.7955176869700491e-01 1.6528327719850296e+01 1.1576886767317813e+00 1.1896604473667898e+01 0 1 0 +2392 798 1 -7.6881336977051029e-01 1.5632143431262186e+01 9.0429830282334211e-01 1.2183148993929432e+01 0 1 0 +1997 666 2 3.6663644849215593e-01 1.2759100558626701e+01 5.0750909933917931e+00 1.0464243508742552e+01 0 0 0 +2393 798 2 3.8419389942242832e-01 1.5542558701553912e+01 1.1696011527051366e+00 1.3102245564015671e+01 0 1 0 +831 277 2 3.2987354907166927e-01 1.3756734760099002e+01 1.4251576584910015e+00 1.1767007872056187e+01 0 1 0 +343 115 1 -6.7059247534451183e-01 1.5178509152001014e+01 2.0862989205225126e+00 9.1205032185698958e+00 0 0 0 +345 115 2 3.3546865276217364e-01 1.5593169009727291e+01 1.8614151463305353e+00 9.9543209648358513e+00 0 0 0 +492 164 2 3.2163642474231885e-01 1.5072739477871830e+01 2.9379796849983619e+00 1.4599114764632004e+01 0 0 0 +490 164 1 -6.8923155762771027e-01 1.5870664080705264e+01 2.2946748312771486e+00 1.4622540169784720e+01 0 0 0 +344 115 2 3.2709224677898363e-01 1.5260077170758947e+01 1.1881908703163702e+00 8.7864480986886573e+00 0 0 0 +520 174 1 -7.1909122473513598e-01 1.7196179393454212e+01 5.3160814081286532e+00 7.4190619249913814e+00 0 0 0 +521 174 2 3.9324981174881513e-01 1.7515121661074613e+01 5.2364937919488321e+00 8.3752986681744126e+00 0 0 0 +522 174 2 3.7366943836384536e-01 1.7659531806788582e+01 6.1391560605467985e+00 7.1304365771098972e+00 0 0 0 +1756 586 1 -7.5920068941129171e-01 1.4658426527003499e+01 5.4131185264803490e+00 1.3029751411629096e+01 0 0 0 +1747 583 1 -7.6977085098305553e-01 1.2951722182284975e+01 3.4261101982938764e+00 1.3951502709799188e+01 0 0 0 +1749 583 2 3.8069646076011232e-01 1.3031148144009412e+01 2.5934113104381828e+00 1.3420560270630570e+01 0 0 0 +267 89 2 3.6472195954212816e-01 1.3423192309218713e+01 4.1516343738345025e+00 1.3468895058772269e+01 0 0 0 +356 119 2 3.4386349506320291e-01 1.6552260029851563e+01 4.3293187167755542e+00 1.2745163994997455e+01 0 0 0 +2478 826 2 3.3570330258088549e-01 1.5751225260829186e+01 1.5326252644421219e+01 1.3452394066409243e+01 0 0 0 +292 98 1 -7.6930786348559488e-01 1.7498856879713266e+01 4.4234803340157081e+00 1.2821595326717844e+01 0 0 0 +293 98 2 3.7740954655498354e-01 1.7626170157134943e+01 5.0554943057059312e+00 1.3559100941008857e+01 0 0 0 +1107 369 2 3.7509855283061289e-01 1.8344004032485415e+01 9.7556653751391431e-01 1.5364596329616360e+01 0 1 0 +1105 369 1 -6.7518709531011267e-01 1.8723242139432877e+01 4.3558395874367029e-01 1.4634747326163616e+01 0 1 0 +2125 709 1 -7.2564151296795454e-01 3.2825009797657576e+00 3.5620178750378977e+00 1.5105453773350597e+01 1 0 0 +43 15 1 -7.6895660931875232e-01 1.4525041166807853e+01 7.6337968708818593e+00 1.5062981791735449e+01 0 0 0 +1757 586 2 3.3649682619480270e-01 1.4240228224212217e+01 5.6841728368902089e+00 1.2158828663489908e+01 0 0 0 +509 170 2 3.5271511808719580e-01 1.4800378720215621e+01 6.2276266425671079e+00 1.3420897004972213e+01 0 0 0 +1380 460 2 3.5419580005962442e-01 1.8629586546026868e+00 3.5734243636620358e+00 4.3615791560615447e-01 1 1 0 +578 193 2 3.9713960387532932e-01 1.9423597927993939e+01 2.9087318733399328e+00 7.5262129406817797e+00 0 0 0 +367 123 1 -7.2710051161364753e-01 1.2416579314956541e+01 1.3715613318069197e+01 1.4282946030400939e+01 0 0 0 +511 171 1 -7.4512171403837524e-01 2.4803930176844077e+01 1.5302413347388612e+01 1.1822671179344709e+01 0 0 0 +2011 671 1 -7.4709735292318813e-01 1.8293031422855183e+01 5.9346095513880632e+00 1.5000140911255304e+01 0 0 1 +1475 492 2 3.7317206201114816e-01 1.8722213765556745e+01 1.6548596530678135e+00 1.1537800875257661e+01 0 1 0 +601 201 1 -7.3361955356670383e-01 2.1503320401422290e+01 5.9271631056304008e-01 7.9231840338727277e+00 0 0 0 +2187 729 2 3.9199351910503838e-01 2.0383710913812656e+01 1.8097855837437467e+00 8.0543115564475762e+00 0 0 1 +577 193 1 -7.1127677377745213e-01 1.9771472487393350e+01 2.5487891083800212e+00 8.3316328506980515e+00 0 0 0 +614 205 2 3.7407505471021024e-01 2.5086527208419309e+01 3.8100320200869837e+00 6.9347479762894189e+00 0 0 0 +2866 956 1 -7.1838721784639314e-01 2.2238867143818478e+01 6.6206143565943476e-01 1.4928980901267295e+01 0 1 0 +1474 492 1 -7.3385455535695043e-01 1.7918285931244117e+01 1.8130464925742915e+00 1.0997306604195431e+01 0 1 0 +1476 492 2 3.4120536749794717e-01 1.7757211567132394e+01 2.7166985286889385e+00 1.1133431815624004e+01 0 1 0 +1218 406 2 3.8295664823557690e-01 2.1369664604147701e+01 5.2399459239212680e+00 7.6448964751219899e+00 0 1 0 +688 230 1 -7.2755518245297979e-01 2.4293169407784752e+01 3.9273309354706862e+00 1.0643415684716048e+01 0 0 0 +1499 500 2 3.8499485474923101e-01 1.9764920848695187e+01 2.0728330953581264e+00 1.3749685454709892e+01 0 1 0 +1498 500 1 -7.2744822404421194e-01 1.9745330612381039e+01 2.5562014222464264e+00 1.2927390608295685e+01 0 1 0 +1258 420 1 -7.5280235702916753e-01 2.1617875467307812e+01 4.7266631525898264e+00 1.2180684242899421e+01 0 1 0 +1259 420 2 3.6065897597166990e-01 2.2531985320522988e+01 4.5834971460310134e+00 1.1847305831217536e+01 0 1 0 +1260 420 2 3.7948299592490964e-01 2.1251128340378809e+01 3.9240324328407725e+00 1.2406167656940005e+01 0 1 0 +516 172 2 3.6355959192629644e-01 1.8963523036386565e+01 4.9644183039953784e+00 9.8160073701109241e+00 0 0 0 +450 150 2 3.6319861548005317e-01 1.7848789498040787e+01 4.7885244433410792e+00 1.0916461708628269e+01 0 0 0 +514 172 1 -7.5075433757592747e-01 1.7987631123439659e+01 5.1223746744036243e+00 1.0033030945088347e+01 0 0 0 +543 181 2 3.4132266198773081e-01 2.3867112800622952e+01 1.6422617546848621e+00 1.5138059691781502e+01 0 0 0 +477 159 2 3.6838885712128094e-01 2.1428327513080283e+01 6.0937984323510017e+00 1.3625290474690019e+01 0 0 0 +1500 500 2 3.5740794308851537e-01 1.8960890627387890e+01 3.1658381752513125e+00 1.3002813973944345e+01 0 1 0 +540 180 2 3.8842943715533584e-01 1.9969925118498818e+01 6.1533798695849091e+00 1.4036472502277128e+01 0 0 0 +475 159 1 -7.2524608520236422e-01 2.0721609429132087e+01 6.7240774213857311e+00 1.3843706035189133e+01 0 0 0 +519 173 2 3.6530567454443974e-01 2.0367391722149197e+01 3.7827098785259343e+00 9.4710867505824847e+00 0 0 0 +518 173 2 3.8659561321700209e-01 2.0835639071694882e+01 4.8767936584255667e+00 1.0505604454054886e+01 0 0 0 +517 173 1 -7.2066827505495823e-01 2.0646024547525908e+01 4.7807012491235161e+00 9.5878601215390802e+00 0 0 0 +1463 488 2 3.7001165460315288e-01 2.5059579336733343e+01 4.2763792425139195e+00 1.2290755791753025e+01 0 0 0 +690 230 2 3.6693302663680660e-01 2.4310976815310109e+01 4.7688926171791550e+00 1.0023589800306729e+01 0 0 0 +305 102 2 3.7494168538359440e-01 1.8241266517473772e+01 7.0521986669749470e+00 1.0514820728488631e+01 0 0 0 +1427 476 2 3.6857040212391262e-01 2.3981080670517841e+01 7.8018909703968005e+00 1.4881169962592374e+01 0 0 0 +705 235 2 3.8425099015734254e-01 2.2158210635817589e+01 1.0129117115909334e+00 1.2994618483866436e+01 0 0 0 +541 181 1 -7.2403593484458073e-01 2.4818789731263312e+01 1.9865041075917433e+00 1.5121754790064486e+01 0 0 0 +1899 633 2 3.5006908968893219e-01 2.4629951035817367e+01 5.8571271246248955e+00 8.3141505342192570e+00 0 0 0 +1426 476 1 -7.3252070929554536e-01 2.4364470171787243e+01 7.0626678839497599e+00 1.4261751884869325e+01 0 0 0 +1428 476 2 3.8811277937038174e-01 2.5314987960777852e+01 7.3058943500301545e+00 1.4178682086942812e+01 0 0 0 +1414 472 1 -7.3360064589594565e-01 2.7550993312303770e+01 5.6656193425421897e+00 8.5318781731843671e+00 0 0 0 +1927 643 1 -7.1226092232480398e-01 1.9729614667682423e+01 1.5424098996174450e+01 1.4474084736050346e+01 0 -1 0 +689 230 2 3.5766754950756602e-01 2.5048967802606384e+01 3.5056094159587645e+00 1.0381098217008788e+01 0 0 0 +435 145 2 3.7931327983461433e-01 2.9446989394442696e+01 1.6218432754743712e+00 1.3276518359438416e+01 0 0 0 +2162 721 2 3.4970524972792255e-01 3.0881876535836799e+01 5.3481350682064557e+00 9.3333566602071443e+00 0 1 0 +542 181 2 3.5429491755211329e-01 2.4853376276356393e+01 2.6291827450099525e+00 1.4360183767796540e+01 0 0 0 +1462 488 1 -7.5273842885691056e-01 2.4961405255763978e+01 4.3820559262979417e+00 1.3252482556716789e+01 0 0 0 +1464 488 2 3.6588036398348228e-01 2.4675418213377018e+01 5.2665533818946253e+00 1.3521796518492849e+01 0 0 0 +433 145 1 -7.4496846761722701e-01 2.8815112296954197e+01 1.1197361386327909e+00 1.3787799256087547e+01 0 0 0 +790 264 1 -7.5639345045353734e-01 3.0908502199854400e+01 7.2335211641266817e+00 1.1809308959148076e+01 -1 1 0 +791 264 2 3.6378133514370009e-01 3.0163753828671656e+01 6.7203935794026775e+00 1.1419903438246410e+01 -1 1 0 +1898 633 2 3.5604854841982447e-01 2.5893725848115270e+01 5.6819508484033321e+00 9.2472145514554978e+00 0 0 0 +932 311 2 3.8928443975686011e-01 2.8884150973543537e+01 5.1476857725271996e+00 1.1737063860324186e+01 -1 1 0 +1897 633 1 -7.4283557466891181e-01 2.4963791994829780e+01 6.0131427661728312e+00 9.2015076259513453e+00 0 0 0 +65 22 2 3.6082840563451934e-01 2.6885396675267820e+01 4.6028681473046484e+00 1.3481959750039932e+01 -1 0 0 +931 311 1 -8.1088513364181436e-01 2.9255858784630693e+01 5.3273925909343962e+00 1.0897493567716483e+01 -1 1 0 +619 207 1 -7.1897738960383728e-01 2.6129680901438498e+01 1.9080919771772891e+00 9.4393291344901300e+00 0 0 0 +621 207 2 3.4805877891152026e-01 2.6709713348679507e+01 1.1306369025534946e+00 9.4562024416560426e+00 0 0 0 +149 50 2 3.9863672181096071e-01 2.9710227484758057e+01 3.7273264779773094e+00 1.0386017198568913e+01 -1 0 0 +620 207 2 4.0245852268132121e-01 2.5757537478202931e+01 2.0588464877755692e+00 8.5413076989905914e+00 0 0 0 +64 22 1 -7.1031165311971567e-01 2.7835584228745912e+01 4.5979208713487276e+00 1.3304429629555900e+01 -1 0 0 +933 311 2 3.7767524248048312e-01 2.8529341729640390e+01 5.6097797335513393e+00 1.0327938664820277e+01 -1 1 0 +66 22 2 3.8410634538348182e-01 2.8208691812263652e+01 4.3345433020500499e+00 1.4146818622807317e+01 -1 0 0 +150 50 2 4.0268078220208936e-01 3.0587651121091721e+01 2.4562019655713105e+00 1.0913608954452620e+01 -1 0 0 +148 50 1 -6.3523680236714652e-01 3.0014261231985849e+01 2.8296976555733773e+00 1.0158711234295309e+01 -1 0 0 +1410 470 2 3.6647851066022674e-01 2.7488614868809975e+01 7.1557091370555070e-01 1.5224526324660104e+01 0 1 0 +565 189 1 -7.0889569352593951e-01 2.2228996263999704e+01 6.0238629867093429e-01 1.2108798677536178e+01 0 0 0 +632 211 2 3.6323187105566485e-01 2.5144041786703801e+00 9.4766086883921563e+00 8.2812127516801031e+00 1 0 0 +2361 787 2 3.4036869030220601e-01 2.9674900959485498e+01 1.4554021886093295e+01 1.2414896945940716e-01 -1 0 1 +175 59 1 -7.1256654098368699e-01 5.0510690378808478e+00 1.4054240563036581e+01 1.5192545137924117e+01 0 0 0 +2328 776 2 3.7945131769037721e-01 3.9755357360033243e+00 8.3278810059172610e+00 1.4157480598329165e+01 0 1 0 +176 59 2 3.9534833332635477e-01 5.3966204843848313e+00 1.3142753310221739e+01 1.5262334948571340e+01 0 0 0 +330 110 2 3.8113145336997034e-01 5.8265739962506391e+00 1.4525990156178503e+01 1.4974835903439269e+01 0 0 0 +2327 776 2 3.3778404717192428e-01 2.6210714833892559e+00 7.6150242495597000e+00 1.4009654743941478e+01 0 1 0 +62 21 2 3.9022171798512079e-01 2.4270912233213426e+00 1.4619355445812479e+01 1.0945158420731445e+01 0 0 0 +1041 347 2 3.9381067712012852e-01 4.1247444702289715e-01 1.5282437437760446e+01 1.0247937301268676e+01 0 0 0 +1351 451 1 -7.1844759922879664e-01 3.2647902595068965e+00 1.5019216694508511e+01 1.1275636723095214e+01 1 0 0 +2198 733 2 3.8695732532320609e-01 9.3302114669402680e-01 1.1426457102712940e+01 8.4224985261841550e+00 1 0 1 +974 325 2 3.6570859822813900e-01 3.4743395439333682e+00 1.2715522170313381e+01 7.1995715196440289e+00 0 0 0 +631 211 1 -7.3454660884554557e-01 2.3473583134333067e+00 9.9816407567125189e+00 9.0883602162905728e+00 1 0 0 +1088 363 2 3.4986801754381086e-01 2.3658031539947602e+00 9.2965667631731783e+00 9.7881976239072763e+00 0 0 0 +2199 733 2 3.3300954549302841e-01 1.4942537249128416e+00 1.2277814561966592e+01 7.3708249797022791e+00 1 0 1 +235 79 1 -6.9185039046371155e-01 2.7858714028179783e+00 1.1373552859314389e+01 1.1473971760379191e+01 0 0 0 +898 300 1 -7.1546013722357327e-01 4.5728877373402117e+00 9.7356503938037537e+00 1.5228266034106058e+01 0 0 0 +900 300 2 3.8551458325678650e-01 4.0662714882203721e+00 1.0534941764101706e+01 1.4941000064104637e+01 0 0 0 +600 200 2 3.7616842927993599e-01 3.8592090106160084e+00 1.1258886749178458e+01 8.8955421940629442e+00 1 0 0 +69 23 2 3.5437298951555540e-01 3.0175793727847826e+00 1.1344702898904723e+01 1.3249419028151904e+01 0 0 0 +1353 451 2 3.6261572656089902e-01 3.8907736665690482e+00 1.4969924434423264e+01 1.0517398272303460e+01 1 0 0 +67 23 1 -7.5721933547325304e-01 2.7977829457583492e+00 1.1595097936647573e+01 1.4202652389008371e+01 0 0 0 +598 200 1 -7.4548411408638593e-01 4.6085102326547531e+00 1.1671350202005954e+01 8.5945596401325108e+00 1 0 0 +2097 699 2 3.2616634809562145e-01 5.1932452087937717e+00 1.1628802911703145e+01 9.4141628986432853e+00 1 0 1 +2402 801 2 3.3232902575633561e-01 2.9203238072282449e+00 1.0537214466214817e+01 1.0955919204746792e+01 0 0 1 +237 79 2 3.6117813687213041e-01 3.7306249546188499e+00 1.1674842950233487e+01 1.1600395594646823e+01 0 0 0 +68 23 2 3.7369642806847442e-01 2.3291316493498266e+00 1.2501622035907316e+01 1.4144076842591076e+01 0 0 0 +2116 706 1 -7.7467702004768768e-01 8.2509460147234337e-01 7.7332871707655277e+00 1.4708910945969693e+01 1 0 0 +1040 347 2 3.6824975972104207e-01 6.7726099912866222e-01 1.3934154697437014e+01 9.4292664487016502e+00 0 0 0 +1039 347 1 -7.1915875524611683e-01 7.7061219812285620e-01 1.4407170423297879e+01 1.0281047320349066e+01 0 0 0 +2117 706 2 3.4165987529066466e-01 6.8809203875384128e-01 7.7099421116350584e+00 1.3707451004693933e+01 1 0 0 +2825 942 2 3.3634351290587594e-01 4.5731908619027911e-01 1.0013474287264552e+01 1.3886569726088378e+01 1 0 0 +706 236 1 -7.7577799668990832e-01 5.3402842681625984e+00 8.8242451468595107e+00 8.0314052894323549e+00 1 0 0 +707 236 2 3.6197410070447383e-01 5.4133691767784029e+00 8.1890158701469744e+00 8.7881009544477156e+00 1 0 0 +416 139 2 4.0897508337024036e-01 1.8938881161337186e+01 1.5423961340711873e+01 7.4916310555025651e+00 0 0 0 +1515 505 2 3.4854657550425927e-01 5.2407497151329068e+00 9.7038874935259685e+00 8.3966252068746865e+00 0 0 0 +2197 733 1 -7.3270182105120618e-01 8.3638097207326800e-01 1.2301219737199974e+01 8.1123058565547019e+00 1 0 1 +342 114 2 3.6869306631487608e-01 7.9752491031405643e+00 1.0593815814522161e+01 8.4267344213652517e+00 0 0 0 +1820 607 2 3.4835300792302981e-01 7.9080190360120870e+00 1.3742529101460926e+01 1.4836547168486410e+01 0 0 0 +1396 466 1 -6.8160967262519656e-01 2.9199425610566159e+01 5.1557316302804956e+00 4.6058973490166810e-01 0 1 0 +1971 657 2 3.4378221006170773e-01 4.2691464692347942e+00 4.2911180777030433e-01 1.3541214377972180e+01 1 1 0 +864 288 2 3.6221396727336957e-01 5.4011107038344548e+00 1.3622666988440319e+01 8.6630142516521040e+00 0 0 0 +862 288 1 -7.2312990450742654e-01 5.3164288643742870e+00 1.4508037162843033e+01 9.1832503475579799e+00 0 0 0 +179 60 2 3.6983465043738645e-01 8.3681498642717074e+00 1.5287477348211810e+01 1.0932559507091939e+01 0 0 0 +368 123 2 3.7384765574432249e-01 1.2113975015615358e+01 1.4373441936166605e+01 1.3613044619767901e+01 0 0 0 +847 283 1 -7.4625410459184238e-01 7.6114411201264192e+00 8.8345758186914498e+00 1.2031997872207691e+01 0 0 0 +1556 519 2 3.4607933991430101e-01 8.4894321682405600e+00 1.3260036097534050e+01 1.3453906753586784e+01 0 0 0 +1849 617 1 -7.5826327946819061e-01 8.2219713509954904e+00 1.0534883720263394e+01 1.4261587656728096e+01 0 0 0 +875 292 2 3.4628831556292750e-01 6.2036199822241187e+00 1.0816092574783342e+01 1.1756085309391285e+01 0 0 0 +874 292 1 -7.6721271103192745e-01 5.5006746482693147e+00 1.1429298196254583e+01 1.1461487068386344e+01 0 0 0 +1850 617 2 3.4368576799360379e-01 8.5532727468126719e+00 1.1371405936897432e+01 1.3878305151510423e+01 0 0 0 +1352 451 2 3.6099020013418986e-01 5.8634257921349411e+00 1.2273479037391111e+01 1.1527736381924981e+01 1 0 0 +697 233 1 -6.7372755743035562e-01 9.5368907373516105e+00 1.3728358780387213e+01 7.5879373029887853e+00 1 0 0 +1819 607 1 -7.2384686721009794e-01 7.7749767883787735e+00 1.3744469529055349e+01 1.3854457093015277e+01 0 0 0 +863 288 2 3.7101867574652236e-01 6.0616787569562973e+00 1.4440997872349303e+01 9.8370058480532414e+00 0 0 0 +1889 630 2 3.7154349698977801e-01 1.0569027162466815e+01 1.2225452339569722e+01 1.2187159933206958e+01 0 0 0 +259 87 1 -7.3907422426271996e-01 9.2212299334563479e+00 1.1011001983258442e+01 9.5277153321190706e+00 0 0 0 +261 87 2 3.3123664523105278e-01 1.0019057265055931e+01 1.0799423178478612e+01 8.9854322204571613e+00 0 0 0 +995 332 2 3.1441156819427241e-01 9.2962010878406485e+00 1.0252617092324030e+01 1.0084691998616259e+01 0 0 0 +1034 345 2 3.8202031942421089e-01 1.2236019915196165e+01 2.0685842576854424e-01 1.5127120751213184e+01 0 1 0 +699 233 2 3.9128160412870866e-01 1.0226361816213313e+01 1.4417677632816389e+01 7.8262147116734138e+00 1 0 0 +2623 875 1 -7.8518436937249569e-01 7.3251743975931358e+00 1.3703751981950591e+01 1.1060579822248586e+01 0 1 0 +1888 630 1 -7.5230914550575378e-01 9.5714256225588858e+00 1.2192901377913387e+01 1.2098450530410913e+01 0 0 0 +1890 630 2 3.7826304768593366e-01 9.4246157725069910e+00 1.1844281426848662e+01 1.1243283609994752e+01 0 0 0 +2624 875 2 3.6799455844006079e-01 7.2220783572003864e+00 1.3822915732590209e+01 1.1987387143676774e+01 0 1 0 +2625 875 2 3.7047237374636399e-01 8.2147933065206811e+00 1.3487682189002763e+01 1.1022853040391489e+01 0 1 0 +1851 617 2 3.7557884113773271e-01 8.0098905038594843e+00 9.9884053512695825e+00 1.3496647955433131e+01 0 0 0 +2299 767 1 -7.4935019161293304e-01 1.2108997577930463e+01 9.3578992994288690e+00 8.8624506400222973e+00 0 1 0 +1703 568 2 3.5213714684172709e-01 1.2600364127449541e+01 1.2378754731062484e+01 1.3174034048480326e+01 0 0 0 +1702 568 1 -7.3445128669028947e-01 1.2352568694707379e+01 1.1536266125690561e+01 1.2635485852958809e+01 0 0 0 +1797 599 2 3.9086193618279358e-01 1.2929499620837738e+01 1.0904275148930514e+01 1.3028315991352713e+01 0 0 0 +335 112 2 3.8436601110728097e-01 1.2790915079262431e+01 1.0950884681179991e+01 9.3226942830891133e+00 0 0 0 +336 112 2 3.7749356398398981e-01 1.2994880735222880e+01 1.1519746584911347e+01 1.0834419198523271e+01 0 0 0 +334 112 1 -6.9194193699388473e-01 1.3070709353243952e+01 1.1736784095631251e+01 9.8966579973736319e+00 0 0 0 +1685 562 2 3.6794997010952657e-01 7.7724225295432223e+00 1.0794020274007613e+01 1.9980259744134663e+00 0 0 1 +537 179 2 3.7617949555891889e-01 3.0352608007898755e+01 1.5292762429650033e+01 1.3611914768050639e+01 0 0 0 +375 125 2 3.5985771637074726e-01 1.4050934342318588e+01 9.8507658621470711e+00 6.3699004785784918e+00 0 0 0 +436 146 1 -6.9628992781636767e-01 1.7861427948118685e+01 1.4005275285175220e+01 1.0087469238618057e+01 0 0 0 +2465 822 2 4.1049144451903985e-01 1.1053064864600064e+01 7.9770982711656047e-01 2.2060582074997805e+00 0 1 0 +2477 826 2 3.5334407817839336e-01 1.6983953987250555e+01 1.4789005891330811e+01 1.4000184816240790e+01 0 0 0 +1207 403 1 -7.2685808496485005e-01 2.5068993021377405e+01 7.1517949332431752e-01 1.1646346191865806e+01 0 1 0 +2301 767 2 3.5587697542778574e-01 1.2899300625474321e+01 9.0347428312602815e+00 8.2532099987662626e+00 0 1 0 +2464 822 1 -7.6547446209804382e-01 1.0803626904458927e+01 1.7415316898854185e+00 2.1278171410067301e+00 0 1 0 +1049 350 2 3.7618877708325776e-01 5.6525939448965365e+00 1.5470483925689594e+01 4.3424559501640170e+00 0 0 0 +2508 836 2 3.6626666131299679e-01 1.2419309659202666e+01 8.9877037724421296e+00 1.3186787138226194e+01 0 1 0 +347 116 2 3.8832070273161101e-01 1.7536610563872866e+01 8.6584416778594342e+00 1.4864686067386366e+01 0 0 0 +1378 460 1 -7.2407938002267280e-01 2.5198976932286881e+00 3.0459831679154385e+00 8.4447489177580748e-01 1 1 0 +2507 836 2 3.4796346709787190e-01 1.3415241860187432e+01 8.9266991728841596e+00 1.2056842476039316e+01 0 1 0 +491 164 2 3.6802830129143027e-01 1.6546261003130770e+01 2.8622352328216270e+00 1.4957035963695160e+01 0 0 0 +44 15 2 3.5170765723501285e-01 1.4233628718958199e+01 8.2605359337797601e+00 1.4352839044873956e+01 0 0 0 +2506 836 1 -7.6317509688909824e-01 1.3307926903842354e+01 9.2412988590119980e+00 1.2980159702996358e+01 0 1 0 +2445 815 2 3.8910472272986035e-01 1.4150829933315288e+01 1.4082554114346150e+01 8.3164131937419423e+00 0 0 0 +2444 815 2 3.7597674789307645e-01 1.3410647645922783e+01 1.3800511309957566e+01 9.5912670583587065e+00 0 0 0 +2443 815 1 -7.0695820898623263e-01 1.3591216817836305e+01 1.4508245843689529e+01 8.9772679054738855e+00 0 0 0 +1679 560 2 3.9415597946906744e-01 1.7002627673007073e+01 1.2643479626950681e+01 9.1738436528182632e+00 0 0 0 +294 98 2 3.7677434630057410e-01 1.7499630436375082e+01 1.0050748771611607e+01 1.2911418550692350e+01 0 0 0 +2322 774 2 3.2454267056843245e-01 1.4418146245027749e+01 7.7528064629374400e+00 1.0603328670803052e+01 0 1 0 +1236 412 2 4.1591465031405017e-01 1.7038090739215136e+01 1.0212083559286407e+01 8.8210327502874826e+00 0 0 0 +1234 412 1 -7.0181594927675783e-01 1.6910844522357635e+01 9.3334833730111821e+00 9.0614270710616918e+00 0 0 0 +2320 774 1 -7.7995955009736828e-01 1.4564659966903978e+01 8.7119669984032271e+00 1.0394426096987834e+01 0 1 0 +2321 774 2 3.2706515324009028e-01 1.3914541178163393e+01 8.9283197438642361e+00 9.7040632582504482e+00 0 1 0 +1235 412 2 3.6000161630653205e-01 1.5922382217166840e+01 9.2636062839886115e+00 9.4017718976185218e+00 0 0 0 +192 64 2 3.7863753918516846e-01 1.5795994234107379e+01 1.0013697455798233e+01 1.1414632202568395e+01 0 0 0 +225 75 2 3.5900476150387772e-01 1.8424084703550506e+01 8.1329111016575091e+00 6.1039447215342895e+00 0 0 0 +190 64 1 -7.6440824714737277e-01 1.6212701087864936e+01 1.0753573118072811e+01 1.1800204804492413e+01 0 0 0 +191 64 2 3.6426841542444666e-01 1.6096934002153485e+01 1.1390818153436520e+01 1.1117083763735293e+01 0 0 0 +464 155 2 3.3345857964535902e-01 1.6533493286225973e+01 1.2100672942793659e+01 1.3391494518708470e+01 0 0 0 +1678 560 1 -7.4542523415333728e-01 1.6340555987389582e+01 1.1993857169746310e+01 8.9562111676013973e+00 0 0 0 +1680 560 2 3.7797532836806036e-01 1.5890575282685097e+01 1.2281921236486545e+01 8.2100808005516992e+00 0 0 0 +265 89 1 -7.2792815830226498e-01 1.8053227773245663e+01 9.3399328369175585e+00 1.3341691701114369e+01 0 0 0 +1629 543 2 4.0207408133331468e-01 3.7525524134059589e+00 4.1945307319817848e+00 1.4528339249235058e+01 0 0 0 +463 155 1 -7.1928622889755167e-01 1.7248864875875505e+01 1.2664574242922360e+01 1.3819109714817531e+01 0 0 0 +1821 607 2 3.5318199884344503e-01 1.7987912599434498e+01 8.5728177173768749e+00 1.2695167140692295e+01 0 0 0 +465 155 2 3.9282018413119174e-01 1.8038071129362386e+01 1.2682127503630825e+01 1.3205666115817445e+01 0 0 0 +438 146 2 3.6262695588460714e-01 1.8639554917877131e+01 1.3557804478367318e+01 1.0588356249900754e+01 0 0 0 +437 146 2 3.8069747748786925e-01 1.7632612931389684e+01 1.4850547478971897e+01 1.0657604169213638e+01 0 0 0 +348 116 2 3.5849033921804402e-01 1.6076875177668288e+01 8.1604527645670508e+00 1.5325095379922852e+01 0 0 0 +2684 895 2 3.8165231504517405e-01 2.0370591487101755e+01 1.3046331621233044e+01 1.2442167957333156e+01 0 0 0 +2685 895 2 3.6716241882986833e-01 1.9444306985277990e+01 1.4237067004688502e+01 1.2986582256910832e+01 0 0 0 +2683 895 1 -7.2729365554285530e-01 1.9407295761853856e+01 1.3405376665675909e+01 1.2416062788389333e+01 0 0 0 +1299 433 2 3.5662067612573489e-01 2.1511128828889710e+01 8.3664829944472050e+00 1.2878807838265264e+01 0 1 0 +1297 433 1 -7.8038793636572479e-01 2.2133032912490517e+01 9.0628496499327920e+00 1.2664604505005762e+01 0 1 0 +369 123 2 3.7700999843324917e-01 1.1680050854260362e+01 1.3674395632821453e+01 1.4869813829585434e+01 0 0 0 +223 75 1 -7.0432946310929068e-01 1.8854239159834265e+01 7.4548083806965701e+00 6.5982823053108541e+00 0 0 0 +306 102 2 3.9116104018299891e-01 1.8137828835965667e+01 8.5378840045810875e+00 1.0171322109686470e+01 0 0 0 +216 72 2 3.7407262888710491e-01 2.1851238764469500e+01 1.3498802481852247e+01 1.0073563374735084e+01 0 0 -1 +2903 968 2 3.6697304517318297e-01 2.4754134515445305e+01 7.5329058594875944e+00 1.0809023206215731e+01 0 1 1 +2818 940 1 -7.5464418300264435e-01 2.3178456689671755e+01 1.4653008311281141e+01 1.4783164273894650e+01 0 0 0 +304 102 1 -7.4900016640674760e-01 1.8546635977164048e+01 7.9079602000544309e+00 1.0824929005761328e+01 0 0 0 +215 72 2 3.6461639849292388e-01 2.2384672803760374e+01 1.2353447380936000e+01 9.3456918184227487e+00 0 0 -1 +1771 591 1 -6.9945300201792360e-01 2.4046967718602335e+01 1.2121887617509843e+01 8.2376687707388125e+00 0 0 0 +2091 697 2 3.5092494554714743e-01 3.8290290067108770e+00 1.4667353589554441e+01 4.7654658315901333e-01 1 0 0 +357 119 2 4.0003205593279401e-01 2.4928996728156832e+01 9.8558011994321664e+00 1.0980002832701787e+01 0 0 0 +2060 687 2 3.8162999792195684e-01 2.2000437013527819e+01 1.1863156510915559e+01 1.5190051362214954e+01 0 0 0 +476 159 2 3.6931796488627072e-01 2.2944145117267688e+01 8.8501336859294213e+00 1.3082555903369343e+01 0 0 0 +539 180 2 3.9721062311427563e-01 2.0116610008006489e+01 8.2230001853087984e+00 1.0482880295579346e+01 0 0 0 +2081 694 2 3.7162549465230527e-01 2.1033819751188460e+01 1.0438444646746214e+01 7.5940513801972971e+00 0 0 0 +566 189 2 3.2754303058235495e-01 2.1625340373215931e+01 8.4916514376649364e+00 1.0841286836116350e+01 0 0 0 +2661 887 2 3.6520916481788801e-01 2.1794398977913627e+01 1.1205390879030327e+01 1.2742696462033910e+01 0 0 0 +2659 887 1 -7.3199643929306590e-01 2.1766278273622181e+01 1.2062785442966065e+01 1.3228902446727293e+01 0 0 0 +538 180 1 -6.8738599585666416e-01 2.1051957186109437e+01 8.2330807363867518e+00 1.0062721727541366e+01 0 0 0 +2679 893 2 3.4337609102700573e-01 2.2697596936349349e+01 1.2351395432047699e+01 1.3024946648562894e+01 0 0 0 +743 248 2 3.6321216341445989e-01 2.0637042975477872e+01 1.1283999243175000e+01 9.2446869920364598e+00 0 0 0 +744 248 2 3.6492990438233003e-01 2.0790529728540090e+01 9.6768202240555077e+00 9.4545415539637307e+00 0 0 0 +742 248 1 -6.9910926044188471e-01 2.0249225932928244e+01 1.0460038352663576e+01 8.9427573607720099e+00 0 0 0 +214 72 1 -7.3819453976054428e-01 2.1833412337973130e+01 1.2574418146008139e+01 1.0066659124827012e+01 0 0 -1 +2904 968 2 3.3747869463845837e-01 2.3456844808901081e+01 8.4346530516689331e+00 1.1340364575618912e+01 0 1 1 +2902 968 1 -6.9652996043492099e-01 2.4444775969407988e+01 8.2713960771545221e+00 1.1410153869487301e+01 0 1 1 +2150 717 2 3.6355431465394411e-01 1.5401705396129437e+00 1.5483672391355634e+01 6.0537436598866821e+00 1 0 1 +599 200 2 3.8656076985198329e-01 2.9626195230369184e+01 9.6166167997728706e+00 1.2407232060777559e+01 0 0 0 +508 170 1 -7.2566005372054387e-01 2.7060530829894191e+01 1.2321907068767443e+01 1.2980927125187613e+01 0 0 0 +633 211 2 3.7572529492007356e-01 3.0110266392792226e+01 1.2993961531209360e+01 8.1571098017301349e+00 0 0 0 +2545 849 1 -7.6549095752588614e-01 2.4501785395416483e+01 1.2539484283209120e+01 1.2322059640204825e+01 0 0 0 +2547 849 2 3.8334195697522183e-01 2.4458562167604533e+01 1.3459791514414610e+01 1.2019234351476994e+01 0 0 0 +360 120 2 3.6567013913170665e-01 2.6034319251757939e+01 1.0866260586438253e+01 1.0615698441911004e+01 0 0 0 +2546 849 2 3.8204766713781108e-01 2.4448820912791941e+01 1.1928747533378550e+01 1.1509976079495136e+01 0 0 0 +1371 457 2 3.7922816854004460e-01 2.8892033986313628e+01 1.3296748843700371e+01 1.3139676194859646e+01 0 0 0 +324 108 2 3.7804058289877623e-01 2.8045388837938837e+01 1.0362956781269546e+01 1.0966335639341752e+01 0 0 0 +1513 505 1 -7.2430023342488414e-01 2.8881320118970088e+01 9.1041277390575210e+00 1.1994439370381899e+01 -1 0 0 +1209 403 2 3.6441290231988888e-01 2.4074791303539190e+01 8.2571344459664209e-01 1.1862709696153372e+01 0 1 0 +2867 956 2 3.3367087750989155e-01 2.1933261226144282e+01 1.4430897465590604e+00 1.5337873311969894e+01 0 1 0 +726 242 2 3.6686138816262709e-01 2.6720980896046598e+01 1.4626232759462358e+01 9.2802711162368201e+00 0 0 0 +2842 948 1 -7.8624468131457681e-01 2.7232480962626724e+01 1.0845559515884709e+01 1.5373328913467384e+01 0 0 0 +696 232 2 3.6054808539297123e-01 2.7793969361930291e+01 7.6259855775402254e+00 1.4944171960632884e+01 0 0 0 +1369 457 1 -7.4256077125336828e-01 2.9803870731787580e+01 1.3305936847377534e+01 1.3411588260019409e+01 0 0 0 +694 232 1 -7.1706463366983519e-01 2.7156586492888376e+01 7.9883996773441774e+00 1.4295256096137743e+01 0 0 0 +323 108 2 3.7195855152570956e-01 2.7748777322164095e+01 1.1830503224226787e+01 1.1382950676740167e+01 0 0 0 +695 232 2 3.7124602497091064e-01 2.7719706022336297e+01 8.4919202452640921e+00 1.3681935636205370e+01 0 0 0 +1514 505 2 3.3933637568221964e-01 2.9244700970521720e+01 8.5963009096932481e+00 1.1263828767558987e+01 -1 0 0 +510 170 2 3.8828823839584120e-01 2.6075368031705707e+01 1.2310988791367421e+01 1.2640872847247850e+01 0 0 0 +724 242 1 -7.4511947281101720e-01 2.5808929774370789e+01 1.4484311885958050e+01 9.0710492431024345e+00 0 0 0 +2826 942 2 3.4887634552912389e-01 5.9193304107028055e-01 1.1066701119073434e+01 1.2820465662405345e+01 1 0 0 +2824 942 1 -7.5927476105466352e-01 3.1028903563827427e+01 1.0527702429881463e+01 1.3263943547969522e+01 0 0 0 +2820 940 2 3.7680495638587247e-01 2.7198103327062668e+01 1.0007304625255401e+01 1.5022055025560837e+01 0 0 0 +355 119 1 -7.4087532910863818e-01 2.5065694721935749e+01 1.0732818529069602e+01 1.0531887179220396e+01 0 0 0 +1370 457 2 3.4983799635826440e-01 3.0024031504195523e+01 1.2365774545705298e+01 1.3552683999184932e+01 0 0 0 +1772 591 2 3.6575589708809214e-01 2.4452498441039850e+01 1.2881998712136237e+01 7.7199011432608176e+00 0 0 0 +770 257 2 3.0514881990206211e-01 2.7043323742653396e+00 1.5385836115352269e+01 3.7684308975494005e+00 0 0 0 +1928 643 2 3.6744256412349430e-01 1.9015268991040973e+01 1.5328149726063067e+01 1.5092092926297921e+01 0 -1 0 +618 206 2 3.8371631137463069e-01 1.7283132603655634e+01 1.1639274473160445e+01 1.5411448380872919e+01 0 0 -1 +1398 466 2 3.6170274436740163e-01 2.8344713847646990e+01 4.6570878052941138e+00 4.1436624389794313e-01 0 1 0 +2077 693 1 -6.9112585706452034e-01 2.0332731357558455e+01 9.1701180155735926e+00 1.5371016053672376e+01 0 0 0 +2760 920 2 3.5269778250415618e-01 1.3919531869932301e+01 3.9832781067599221e-01 3.3263240469941745e-02 0 1 1 +2360 787 2 3.4047980808683631e-01 3.0925661301778430e+01 1.3754547587631775e+01 2.4433814371848030e-02 -1 0 1 +1716 572 2 3.4898581950663687e-01 2.0414648143923635e+01 6.0070979551118855e+00 2.2458159776908376e-02 0 0 0 +2495 832 2 3.8380415923813643e-01 1.2140772796270996e+01 1.5044179570579624e+01 1.9111398600325018e+01 0 0 0 +1510 504 1 -7.5087682457039318e-01 3.0366012304851388e+01 6.1425731923167015e-01 2.2613501028601558e+01 -1 0 0 +1399 467 1 -7.3768371946575073e-01 1.6036239048419159e+00 4.0672114579694050e+00 1.7352383834671262e+01 1 1 0 +1400 467 2 3.9908454065479759e-01 2.2469667070937702e+00 3.8278551127389129e+00 1.6637850643092481e+01 1 1 0 +1512 504 2 3.7789271319007245e-01 1.1188339514775696e+00 3.1944434011273817e+00 1.7370035174685299e+01 0 0 0 +721 241 1 -7.5018429578768908e-01 1.8031644249929522e+00 1.6133111032942060e-01 2.0247364996942810e+01 1 0 0 +667 223 1 -7.3286889311415315e-01 5.3080738250166161e-02 5.2318713355838966e+00 1.5585876800557909e+01 1 0 0 +1489 497 1 -7.3908919336096490e-01 1.9485635399818588e-01 4.3228418464458418e+00 2.0155165992122306e+01 1 1 0 +1491 497 2 3.4964605628851708e-01 4.6497595408908804e-01 4.0032993099037570e+00 1.9282687909750742e+01 1 1 0 +2182 728 1 -7.5543509374757967e-01 2.3278267931767402e+00 5.2002967180338544e+00 2.2910361225889229e+01 1 0 0 +1490 497 2 3.1827242776042053e-01 7.3452297627354446e-01 5.1186662985752998e+00 2.0350056541337807e+01 1 1 0 +1731 577 2 3.5388933782086229e-01 5.5843392737237787e+00 6.0418140928456792e+00 1.8155919825881185e+01 0 0 0 +1076 359 2 3.5925501011934230e-01 3.1067739134570624e+00 4.4736987664420358e+00 1.9385540613216282e+01 0 1 0 +1628 543 2 3.5683532717327937e-01 3.5001120784175699e+00 2.7890180412728469e+00 2.1700652288420351e+01 0 0 0 +1627 543 1 -7.2273125880781386e-01 3.9835327298466581e+00 2.3352342284873102e+00 2.0971434826072894e+01 0 0 0 +2302 768 1 -7.0671176857821183e-01 4.5156038197760315e+00 7.2556119695501851e+00 1.7102214893634791e+01 0 0 0 +2304 768 2 3.5902776632376993e-01 5.2375754720243934e+00 7.8796653845499849e+00 1.7042413429928562e+01 0 0 0 +1730 577 2 3.9122348771072701e-01 1.6159253099446187e+00 8.9409708084989450e-02 2.1191345524475746e+01 0 0 0 +2123 708 2 3.3328495684696835e-01 4.5959361664854512e+00 1.7706380801194286e+00 2.1455895706505316e+01 1 0 0 +18 6 2 3.8131770931075393e-01 5.1566534214106134e+00 5.9981878488765989e+00 2.2151131964849540e+01 0 0 -1 +1576 526 1 -6.6410084264859059e-01 4.9727258709300983e+00 1.8421900885191604e+00 1.8310105025334661e+01 0 1 0 +834 278 2 3.7529924274621479e-01 3.1009809600866177e+01 1.0638446673244799e+00 1.7570565363985121e+01 -1 1 0 +1077 359 2 3.4357885518072762e-01 2.7970410402511705e+00 4.9459460775930140e+00 2.0859845990047440e+01 0 1 0 +2768 923 2 3.6062790576513026e-01 2.2580455379630944e+01 1.5438392406888545e+01 2.3954633004980806e+01 0 0 0 +1075 359 1 -6.5499093433895306e-01 3.3425664832525501e+00 5.1337538522957633e+00 2.0064116071962964e+01 0 1 0 +1737 579 2 3.2572362065507643e-01 1.3956370612838672e+01 1.1413512973612010e+01 1.5719743085265273e+01 0 0 0 +74 25 2 4.0732383282033274e-01 2.4941039528789433e+00 7.1950484067293354e+00 1.7528595974246507e+01 0 0 0 +723 241 2 3.4337683920961237e-01 2.5369430889723623e+00 8.0466266280131649e-01 2.0218306108728594e+01 1 0 0 +1557 519 2 3.8836367816662498e-01 5.9625076694271373e+00 5.5946436522259386e+00 2.0021845571050747e+01 0 0 0 +2012 671 2 3.9584671272080552e-01 1.8504646269966113e+01 5.5234091503868079e+00 1.5831704470793509e+01 0 0 1 +1548 516 2 4.0123598128015719e-01 3.0197131138107711e+01 3.4014120288545215e+00 2.1337687711589620e+01 -1 0 0 +1526 509 2 3.9376431680434920e-01 6.2004220365499518e-01 5.0247897242583619e+00 1.6469455493334944e+01 0 0 0 +1736 579 2 3.7869480886154222e-01 1.4153874689421853e+01 1.0455895969520149e+01 1.6859976886356076e+01 0 0 0 +199 67 1 -6.7259345207262222e-01 2.9625432202375613e+01 3.1774571783918465e-01 2.5277794518370417e+01 -1 0 -1 +2183 728 2 3.6123631159819070e-01 1.6309647867153443e+00 5.4154992990929900e+00 2.3558477513813042e+01 1 0 0 +2184 728 2 3.8107882408386001e-01 3.0588474354809465e+00 5.8777943718182781e+00 2.2862340992754000e+01 1 0 0 +2119 707 1 -7.4899778242209114e-01 4.7974041303109329e+00 6.4643051584335076e+00 2.2932352779587710e+01 1 0 0 +1029 343 2 3.6357343930949232e-01 1.0078126475917001e+01 8.7976628401234347e+00 1.5612421301471080e+01 0 1 0 +1578 526 2 3.8019150424600251e-01 4.5729134334226602e+00 1.9775568967392523e+00 1.9183033038538440e+01 0 1 0 +922 308 1 -7.6797331029097093e-01 1.0613199336801812e-01 1.8392220094765086e+00 1.6955856193145575e+01 0 1 0 +350 117 2 3.9969535736414824e-01 4.2232535021455782e+00 9.6529713555406857e+00 3.0589992691307742e+01 0 0 -1 +1642 548 1 -7.7104691105573120e-01 7.1216189276687381e+00 8.5579228135051810e+00 1.6037020459541761e+01 0 0 0 +1729 577 1 -6.6244722620080421e-01 6.1710446796733072e+00 5.2596730581611482e+00 1.8140015691845608e+01 0 0 0 +2126 709 2 3.5311034071653336e-01 7.0485537923870947e+00 5.6017835615675446e+00 1.7967951239720950e+01 1 0 0 +1577 526 2 3.9541432552641215e-01 5.9262676715720231e+00 1.5610599273080601e+00 1.8455505913264496e+01 0 1 0 +1555 519 1 -7.3418059770973620e-01 6.4224173297836087e+00 6.0320937360710563e+00 2.0795048533013787e+01 0 0 0 +2314 772 1 -7.9322023620712423e-01 1.0212451950467653e+01 5.8943355257454169e+00 1.6846163435672906e+01 0 1 0 +2316 772 2 3.8255374431915579e-01 1.0435619686776985e+01 6.7699402674077769e+00 1.6634658656641051e+01 0 1 0 +2339 780 2 3.1113846851151389e-01 2.6091183348311787e+01 4.9385471341871062e-01 2.9379533922411643e+01 -1 1 0 +1717 573 1 -7.1024551195204777e-01 9.2922541148218230e+00 3.8731526996218681e+00 1.8644298699628731e+01 0 0 0 +1718 573 2 3.5988581904060296e-01 9.7409871077917689e+00 4.6725087736830675e+00 1.8356994294703249e+01 0 0 0 +2535 845 2 3.5412795516933754e-01 1.2501075646043335e+01 1.2303266899416381e+00 2.1214372309792267e+01 0 1 0 +2533 845 1 -7.4481726688147765e-01 1.2729300494112945e+01 8.7889801182680549e-01 2.0342171106077370e+01 0 1 0 +1719 573 2 4.1339726876671729e-01 9.1805256363796293e+00 3.3409469153405462e+00 1.7842810847455642e+01 0 0 0 +461 154 2 3.7726726364868329e-01 8.3678538140723067e+00 7.2070804720138582e-01 1.9084968957537004e+01 0 1 0 +880 294 1 -7.0455425675989003e-01 9.0706567727846608e+00 7.5666569765700542e-01 2.1495416000911337e+01 0 1 0 +837 279 2 3.7100411902490354e-01 7.3307541717727309e+00 5.7493044868988967e+00 2.0771777886484315e+01 0 1 0 +1858 620 1 -7.1356101893345791e-01 1.8882085367805807e+01 1.9447505818290339e-01 2.9729080610363102e+01 0 0 0 +1846 616 1 -7.6289544618688920e-01 9.1645125578645530e+00 5.0563505558921547e+00 2.0942052309907574e+01 0 0 0 +1847 616 2 3.5549954169923575e-01 9.7280416466814685e+00 5.8085850743355287e+00 2.0675028731634548e+01 0 0 0 +1848 616 2 4.0206265312287748e-01 9.3577279611524169e+00 4.3049481912625627e+00 2.0324157244908037e+01 0 0 0 +2291 764 2 3.3105650807375864e-01 7.5104327653658300e+00 4.7204814139978444e+00 2.2338331590732952e+01 0 1 0 +257 86 2 3.9862677946627079e-01 9.6857126567886525e+00 2.2661911053678696e+00 2.2317133889285383e+01 0 0 -1 +1600 534 1 -7.7841198332143224e-01 1.0978388164408370e+01 7.2062613921027374e+00 2.0334591348240288e+01 0 0 0 +1408 470 1 -7.8153555295219479e-01 2.7185838954793191e+01 4.7608085410496626e-01 1.6110115042871087e+01 0 1 0 +2667 889 2 3.4731250093441185e-01 1.1969979438032301e+01 3.2406400264920188e+00 2.2709076063911297e+01 0 1 0 +1643 548 2 3.4577566703734625e-01 7.6991171113266104e+00 8.5537351952302174e+00 1.6767266852350037e+01 0 0 0 +112 38 1 -7.3610922477869090e-01 8.4272358017205349e+00 7.1874247759227625e+00 1.8618264431273410e+01 0 0 0 +113 38 2 3.4931817850272084e-01 8.7785893529198038e+00 6.9264238927739203e+00 1.7788660050224067e+01 0 0 0 +114 38 2 3.5828579006050776e-01 9.2406203148625465e+00 7.3636187921657461e+00 1.9081630997881891e+01 0 0 0 +460 154 1 -7.3306959425209728e-01 7.6627785111790834e+00 9.2440600318877042e-01 1.8509786915145462e+01 0 1 0 +258 86 2 3.6302959621720760e-01 9.3931026087409464e+00 3.6926457562881869e+00 2.2942698180548238e+01 0 0 -1 +256 86 1 -7.5529004157831792e-01 9.9800909169102798e+00 2.8944128097040145e+00 2.2977757183128457e+01 0 0 -1 +1602 534 2 3.5748374023611279e-01 1.1280991547179148e+01 7.1947121243517644e+00 2.1216792306881498e+01 0 0 0 +2274 758 2 4.0329908767829520e-01 1.0109249958114512e+01 1.3266344584526082e+00 1.6492584063196652e+01 0 1 0 +2273 758 2 3.6199572830753601e-01 8.6868378772880988e+00 1.3846988131221662e+00 1.7122059713194172e+01 0 1 0 +2534 845 2 3.7698533762185865e-01 1.3096741541861098e+01 1.5668244608297690e+00 1.9858419662881357e+01 0 1 0 +2723 908 2 3.2966014241342950e-01 1.2865507327929111e+01 5.7657970636332880e+00 2.0284696859934535e+01 0 0 0 +2429 810 2 3.9890142939534395e-01 1.3235520029327782e+01 3.2610660365757540e+00 1.7720558094505961e+01 0 1 0 +2722 908 1 -7.5583929838210839e-01 1.3495328152854746e+01 5.0761740639646380e+00 2.0358024376679783e+01 0 0 0 +2428 810 1 -7.6321343601412650e-01 1.3533255260984459e+01 3.0064324184348932e+00 1.8594329457124999e+01 0 1 0 +2430 810 2 3.8238974683830995e-01 1.3348108069065720e+01 3.7717196700134994e+00 1.9169076795662715e+01 0 1 0 +2724 908 2 3.7014591264750768e-01 1.4334658657550106e+01 5.5309074417988855e+00 2.0165644432206360e+01 0 0 0 +212 71 2 3.7507533078296590e-01 1.0233641220443133e+01 3.1196638769055820e+00 3.0299391052978574e+01 0 0 -1 +2666 889 2 3.3253925871032169e-01 1.2922329552277349e+01 3.3585087518611449e+00 2.1577677162873119e+01 0 1 0 +311 104 2 3.9680860625847059e-01 1.5196069416190609e+01 2.4210270875749567e+00 1.8369710823338629e+01 0 0 0 +310 104 1 -7.4297434057977974e-01 1.6061178007015329e+01 1.9236080127837125e+00 1.8463774077714241e+01 0 0 0 +312 104 2 3.6296563152846356e-01 1.6698036888593922e+01 2.0918846528450246e+00 1.7695322844206643e+01 0 0 0 +2512 838 1 -7.1447877135425020e-01 1.5524816726500596e+01 5.5154840880220801e+00 1.6820872483234677e+01 0 1 0 +1726 576 1 -7.2647410965505543e-01 1.7930496079099601e+01 1.1801658182298256e+00 2.2675462098797091e+01 0 0 0 +2807 936 2 3.9615037625287181e-01 1.5827065749399567e+01 5.9932610940907418e+00 1.8317301659279494e+01 0 1 0 +2806 936 1 -7.8077159178042066e-01 1.5937665797146234e+01 6.4601060475095720e+00 1.9216312302800269e+01 0 1 0 +2808 936 2 3.8432282399363588e-01 1.6407095299361821e+01 7.3023239614847881e+00 1.9138853514357827e+01 0 1 0 +1450 484 1 -7.4552673337158848e-01 1.8015211860067204e+01 2.5793663608097672e+00 1.6536654630651896e+01 0 1 0 +2522 841 2 3.7573333389898150e-01 1.7008007562356166e+01 8.3125790408370193e-01 2.2682063203603214e+01 0 1 0 +1728 576 2 3.5557836099406387e-01 1.7873561001581070e+01 1.8783684370156675e+00 2.1924094861675691e+01 0 0 0 +2514 838 2 3.5704297687646563e-01 1.4538382969196579e+01 5.6581887698343438e+00 1.6731770621130298e+01 0 1 0 +597 199 2 3.6838808546295970e-01 1.6892303638410976e+01 2.4377488271971202e+00 1.9823131554774847e+01 0 0 0 +596 199 2 4.0008098263286890e-01 1.7742449623088444e+01 3.7497354081613237e+00 2.0074349183211687e+01 0 0 0 +2531 844 2 3.4504061612994036e-01 1.4704173681135734e+01 1.5898811908156958e+00 2.2475550075454489e+01 0 1 0 +2665 889 1 -7.6326543782505774e-01 1.2865065253930233e+01 2.8924017149285000e+00 2.2427091762386485e+01 0 1 0 +1452 484 2 3.7139220650702942e-01 1.8355035776373093e+01 2.0120135709890774e+00 1.7232858667620217e+01 0 1 0 +595 199 1 -7.5682276478538346e-01 1.7713875025393552e+01 2.8242178713402324e+00 2.0273752811152491e+01 0 0 0 +1906 636 1 -7.6790724115151865e-01 1.8341767584286075e+01 5.3612836502727008e+00 2.0360793250683866e+01 0 0 0 +1907 636 2 3.3404104676695939e-01 1.8861098063299817e+01 5.7846346208771955e+00 1.9777399107098045e+01 0 0 0 +1908 636 2 3.4389498527733947e-01 1.7405974075624133e+01 5.7316539539647691e+00 2.0086768232486353e+01 0 0 0 +2568 856 2 3.4334428892311453e-01 1.4215814597672862e+01 3.6419862833665153e+00 2.3353777878700900e+01 0 0 0 +2696 899 2 3.5191086878952516e-01 1.8628729439088247e+01 1.6129994331342259e+00 1.9167948805470086e+01 0 1 0 +1870 624 1 -7.4807001377895854e-01 1.2794565283042013e+01 4.5672901877578393e+00 1.6439936121378878e+01 0 0 0 +1451 484 2 3.7505732443904505e-01 1.8483153648502871e+01 3.4552827083940656e+00 1.6699691043118662e+01 0 1 0 +1807 603 1 -7.1708389979514675e-01 1.1987311595652530e+01 7.8876023479661930e+00 2.2974062537851768e+01 0 0 0 +1809 603 2 3.7001576738569475e-01 1.2779299470376676e+01 8.3474837865414813e+00 2.2651068126240350e+01 0 0 0 +1872 624 2 3.6143177469791959e-01 1.1913393176631594e+01 4.9047426120171140e+00 1.6548088241326184e+01 0 0 0 +2513 838 2 3.3544440426149241e-01 1.5874352219267594e+01 6.1609623454137710e+00 1.6158974870228228e+01 0 1 0 +2750 917 2 3.4844332937132061e-01 1.8939834789518464e+01 5.3548506879791899e+00 2.2370157376858458e+01 0 0 0 +2751 917 2 3.9710958952960085e-01 1.8684430037259045e+01 4.6166519135821122e+00 2.3720840532831094e+01 0 0 0 +2548 850 1 -7.2500975173994919e-01 2.4398141217717630e+01 1.5066201235548282e+00 2.0648397575609916e+01 0 0 0 +2549 850 2 3.5942198542886616e-01 2.4686865774467350e+01 5.4185048008071712e-01 2.0416649887435781e+01 0 0 0 +704 235 2 3.4397990125970002e-01 2.3961476301029190e+01 4.6775175986420106e+00 1.6620366843348158e+01 0 0 0 +703 235 1 -7.3657177238484384e-01 2.3387012202217360e+01 5.5971433300209910e+00 1.6307873022207598e+01 0 0 0 +2104 702 1 -7.2165781836774701e-01 2.1070590376772099e+01 4.1265734082450702e+00 2.0151961866413032e+01 0 0 0 +2106 702 2 3.8891137084512883e-01 2.1047646402560087e+01 3.3271412204592914e+00 2.0651031825938972e+01 0 0 0 +1933 645 1 -7.5489489567222001e-01 2.1875744765757279e+01 2.1549335059777008e+00 2.1804583009605864e+01 0 0 0 +1935 645 2 3.6546947997464563e-01 2.2641662767210502e+01 1.9008251074049098e+00 2.1285876124251484e+01 0 0 0 +1934 645 2 3.5167752337170388e-01 2.1399382466953121e+01 1.3372657622763970e+00 2.1935226252481069e+01 0 0 0 +2105 702 2 3.4956828454256972e-01 2.0169494826853967e+01 4.5086360521536966e+00 2.0164080891958633e+01 0 0 0 +2703 901 2 3.6169134714827844e-01 2.0208159180265085e+01 4.6500351603551247e+00 1.6949289521344458e+01 0 1 0 +1977 659 2 3.6227389483556977e-01 2.2183570585073195e+01 6.1160173341246171e+00 2.2732505571545655e+01 0 0 0 +2897 966 2 3.9101094604738995e-01 2.2569417337313467e+01 5.1153011905446846e+00 2.0674231920968779e+01 0 1 0 +1214 405 2 3.5605487665142194e-01 2.2972347386857596e+01 1.9764508001142294e+00 1.9183797150727944e+01 0 1 0 +2701 901 1 -7.5285041152992094e-01 1.9355181725869073e+01 5.0502109475701635e+00 1.7318465661457108e+01 0 1 0 +2898 966 2 3.5698439783817099e-01 2.4078240794210586e+01 5.4371706745556576e+00 2.0403872106911571e+01 0 1 0 +1215 405 2 3.6300774567522309e-01 2.2846492228884660e+01 1.1444733804903375e+00 1.7838640945562048e+01 0 1 0 +1213 405 1 -7.4232847802753166e-01 2.2801287712195730e+01 2.0652893763025508e+00 1.8239584983223260e+01 0 1 0 +1539 513 2 3.8153948636053286e-01 2.4246725550188323e+01 2.9062001202492209e+00 1.7819079045324681e+01 -1 0 0 +2212 738 1 -6.8484229727562052e-01 2.6950220419873258e+01 1.5337925523512927e+01 3.0036170495158427e+01 0 -1 0 +2695 899 1 -7.3148367832924932e-01 1.9017859654628392e+01 9.3497112919308378e-01 1.8553987369009768e+01 0 1 0 +1806 602 2 3.4073944927022032e-01 2.1967495412854674e+01 4.2722321976073747e+00 1.5870916188327204e+01 0 0 0 +1805 602 2 3.7311057201484432e-01 2.1692745419053487e+01 3.3331048050995826e+00 1.6978789820814846e+01 0 0 0 +2697 899 2 3.8948678557809024e-01 1.9737028295240538e+01 5.2044300784260122e-01 1.9013732817730865e+01 0 1 0 +2896 966 1 -7.4113625020590856e-01 2.3264285650263719e+01 5.7579241525589371e+00 2.0744568373963073e+01 0 1 0 +1804 602 1 -7.3710896232291279e-01 2.1341741017368161e+01 3.5531996306732743e+00 1.6157283372022793e+01 0 0 0 +2749 917 1 -7.3934220363961434e-01 1.9180677327347432e+01 5.3621157473836289e+00 2.3337307400779466e+01 0 0 0 +2702 901 2 3.6865003712290911e-01 1.9644798397915739e+01 5.8729888340691696e+00 1.7698178978855907e+01 0 1 0 +1976 659 2 3.5068974077975706e-01 2.1047799730702469e+01 5.8336483315295267e+00 2.3633413249403770e+01 0 0 0 +1752 584 2 3.8216632993801475e-01 2.3509631005766302e+01 6.6028333833886999e+00 1.7646409570393065e+01 0 0 0 +1750 584 1 -7.6521898331383797e-01 2.3204144681456928e+01 7.2658169328883657e+00 1.8338490258449397e+01 0 0 0 +2110 704 1 -7.2712249954507657e-01 2.0446505703884430e+01 7.6793514021836842e+00 1.7914955076678705e+01 0 0 0 +2844 948 2 3.7070022365367028e-01 2.1392755482132475e+01 7.6314899521161124e+00 1.7776830958570969e+01 0 0 0 +1751 584 2 3.6520478085553282e-01 2.3363740043900894e+01 6.8549653838828606e+00 1.9198634912467842e+01 0 0 0 +1511 504 2 3.9674404770742960e-01 2.9848200302601587e+01 3.1208543954542306e-01 2.3360153157430634e+01 -1 0 0 +883 295 1 -7.7564575432904614e-01 2.4804116676098811e+01 3.6079442952052045e+00 1.7333517725433307e+01 -1 1 0 +2231 744 2 3.9317639957322165e-01 3.1022236881941787e+01 5.1339060816356730e+00 3.0358312375049980e+01 0 0 0 +2294 765 2 4.0147134126849410e-01 2.9655604965329509e+01 2.1048628903381141e+00 2.2044797311289138e+01 -1 1 0 +2550 850 2 3.9377724350660276e-01 2.5251613938761700e+01 1.9507494572765729e+00 2.0507750845162786e+01 0 0 0 +1404 468 2 3.6701323517805917e-01 2.6548106773200796e+01 3.2730252276319405e+00 2.2331832672943985e+01 0 1 0 +840 280 2 3.8477945967648181e-01 2.8179795711856599e+01 3.8997593520209257e+00 1.6598188317460181e+01 -1 1 0 +2532 844 2 3.4193596019526312e-01 1.4647043611781461e+01 1.7112687857158618e-01 2.2996742722587530e+01 0 1 0 +1546 516 1 -7.3697581911800814e-01 2.9407543317472097e+01 3.0108394092492485e+00 2.1648362692686568e+01 -1 0 0 +1921 641 1 -7.0795569268367298e-01 2.8564919201177538e+01 2.5314864439847811e+00 1.7537579598910398e+01 0 0 0 +555 185 2 3.3248409601433471e-01 2.6744569832249603e+01 5.4427023589553167e+00 1.8716092392999588e+01 0 0 0 +2913 971 2 3.7305112269939156e-01 2.8117182390276444e+01 1.1023792109791506e+01 1.5678664589960315e+01 0 1 0 +919 307 1 -7.5312632732781148e-01 2.7435504978866611e+01 6.9693469538572668e+00 1.7082550528432016e+01 -1 1 0 +2317 773 1 -7.7753729142573613e-01 2.6755851186055377e+01 3.1192083142036604e+00 2.0751177018989626e+01 -1 1 0 +650 217 2 3.8278606702436219e-01 2.6594103028328075e+01 1.5235512573629876e+01 1.6332700020294890e+01 0 0 0 +2103 701 2 3.7175421364097755e-01 2.7442110799564006e+01 7.4066067766033852e+00 2.0304558513852822e+01 0 0 0 +735 245 2 3.4788674624738092e-01 2.9801781278393399e+01 6.6569554526966952e+00 2.0872480829592039e+01 0 0 0 +553 185 1 -7.4782725985236120e-01 2.5956786594272085e+01 5.2975849808341522e+00 1.9293645257456657e+01 0 0 0 +2319 773 2 3.9489058500456531e-01 2.6554217595761138e+01 3.9746118866937090e+00 2.0361220289471241e+01 -1 1 0 +2318 773 2 4.2090532594699959e-01 2.7663195235437865e+01 3.0520259558939564e+00 2.0950808479327208e+01 -1 1 0 +2069 690 2 3.8520960585906278e-01 2.9492776324890073e+01 2.3249704609938795e+00 1.7309738064352466e+01 0 0 0 +2419 807 1 -7.3422594626442594e-01 2.9166648949061670e+01 6.3295584508809082e+00 2.0326894663149726e+01 -1 1 0 +2234 745 2 3.6200217424902098e-01 2.9620827851563043e+01 5.6241594721068067e+00 1.9889138605458310e+01 0 0 0 +1910 637 2 3.7325564203044420e-01 2.8029843119160535e+01 1.8398773393439074e+00 1.7109689773618754e+01 0 0 0 +554 185 2 3.6177414155192317e-01 2.5403050813272564e+01 4.8638310169205461e+00 1.8661833567443907e+01 0 0 0 +2101 701 1 -7.4354647583889499e-01 2.7049435147623811e+01 8.2649551915291948e+00 2.0456272993052767e+01 0 0 0 +3000 1000 2 3.4785770740465199e-01 2.6210375496757404e+01 6.7848535079359031e+00 2.1685381552879406e+01 0 1 0 +2998 1000 1 -7.3773180866674382e-01 2.6145236639145288e+01 6.3639748409843007e+00 2.2595101808948755e+01 0 1 0 +2799 933 2 3.7811775266067665e-01 2.4541392918600117e+01 8.5129640455712625e+00 1.8461787021149501e+01 0 1 0 +1920 640 2 3.5570745040804447e-01 2.5378429261221580e+01 1.5300887016718237e+01 1.9431652897793192e+01 0 0 0 +2338 780 1 -7.1501232389933123e-01 2.6256861330951718e+01 3.2990508597986612e-01 3.0302262984548694e+01 -1 1 0 +2196 732 2 3.8258434810517011e-01 2.6064007265534816e+01 8.4756018837624509e+00 1.9017440862832462e+01 0 0 0 +2562 854 2 4.0191351957169247e-01 1.6809195589802684e+01 1.4839059328887014e+01 3.1029300751958736e+01 0 0 0 +2086 696 1 -7.0559567942719459e-01 2.7198142309122478e+01 8.9600562750331358e-01 2.3297509165240378e+01 0 0 0 +920 307 2 3.7154519453671969e-01 2.6561931439292728e+01 7.2884432772868220e+00 1.7452219151581595e+01 -1 1 0 +2102 701 2 3.7410167064637262e-01 2.7839258537780733e+01 8.8715341427024317e+00 2.0475072649422199e+01 0 0 0 +2088 696 2 3.7972293168842208e-01 2.6840489778526059e+01 1.7359779465611900e+00 2.3492552448470118e+01 0 0 0 +2375 792 2 3.5605642667339016e-01 4.7553421563886396e+00 1.4945748775937680e+01 1.7959394986209002e+01 0 0 0 +30 10 2 3.7313644596893036e-01 4.2771687146128468e+00 1.4050519690115335e+01 2.1557218113291022e+01 0 0 0 +131 44 2 3.7244563299825334e-01 3.8402269884191518e+00 1.4014381408215009e+01 1.6545257947265270e+01 0 0 0 +722 241 2 3.8550484114095246e-01 1.0438902264090224e+00 7.2769105915557564e+00 1.9538693570107075e+01 1 0 0 +2071 691 1 -7.4691105578504957e-01 9.9468678528572518e-01 7.7473030574023767e+00 2.0386510264149848e+01 1 0 0 +1566 522 2 3.7786243872903308e-01 3.0685101118112281e+00 1.0480663574424261e+01 1.8908756792250706e+01 0 0 0 +164 55 2 3.7792787876025169e-01 3.5406694169400783e+00 1.0520195357463011e+01 2.1264898369459136e+01 0 0 0 +165 55 2 3.7301593364406482e-01 2.1602686002361025e+00 1.0949361589932771e+01 2.1607132517587605e+01 0 0 0 +163 55 1 -7.4278167096018366e-01 2.6183894521599580e+00 1.0226351915179732e+01 2.1119894608589568e+01 0 0 0 +2073 691 2 3.9523756184886205e-01 1.5856240291663786e+00 8.4210206141675084e+00 2.0534899210785877e+01 1 0 0 +1564 522 1 -6.8777965339655978e-01 3.7286159460637016e+00 1.0573973436499173e+01 1.8271110370858004e+01 0 0 0 +1565 522 2 3.6122715307603448e-01 3.6653418311743171e+00 1.1534373972218873e+01 1.8050695846568338e+01 0 0 0 +28 10 1 -6.5552817048155709e-01 4.8640724442328418e+00 1.3599606162402642e+01 2.0901920218534155e+01 0 0 0 +843 281 2 3.7183929016315392e-01 2.0932244124097892e+00 1.0722102311402404e+01 1.5613065539209638e+01 0 1 0 +841 281 1 -7.4100986848281925e-01 1.4860346424824933e+00 1.0124927516662728e+01 1.6161875387129459e+01 0 1 0 +136 46 1 -7.1055350980855814e-01 1.6305260131994366e+00 7.5049545131389452e+00 1.7704559019254795e+01 0 0 0 +29 10 2 3.8035511303910141e-01 4.9500953483716792e+00 1.2710906172512630e+01 2.1331309043466288e+01 0 0 0 +138 46 2 3.7747680868513417e-01 1.5667395929956487e+00 8.3358720892168101e+00 1.7221829972434470e+01 0 0 0 +161 54 2 3.7199682962507802e-01 6.8264417361419110e+00 9.5788332517440296e+00 1.9064913935596906e+01 0 0 0 +1543 515 1 -7.6039189059221568e-01 6.6284958159658460e+00 1.0356187588597551e+01 1.8422421673149088e+01 0 0 0 +1544 515 2 3.7261321575622547e-01 5.7041060006714996e+00 1.0202409702968264e+01 1.8185324009578295e+01 0 0 0 +2989 997 1 -7.3744979863482263e-01 5.2002482597871955e+00 1.1050179517214810e+01 2.1900544583151135e+01 1 1 0 +132 44 2 3.3749949997674528e-01 2.4392963953691109e+00 1.3600652152954888e+01 1.7022357287869010e+01 0 0 0 +130 44 1 -7.0935056090895865e-01 3.3857884751847749e+00 1.3631600125067159e+01 1.7332633598652475e+01 0 0 0 +2460 820 2 3.5030606816395526e-01 5.2120122006547154e-01 1.2096326668225956e+01 2.2373234552819920e+01 0 0 0 +2458 820 1 -6.9003921263218182e-01 1.2088702059821916e+00 1.2377476885679373e+01 2.1676674104669765e+01 0 0 0 +2261 754 2 3.4529986508138705e-01 1.8628227882398931e+00 1.2725199218329593e+01 2.2315669124116550e+01 0 0 0 +2990 997 2 3.7725943655815275e-01 5.9585430320242487e+00 1.0425576974017529e+01 2.1758287172653681e+01 1 1 0 +2836 946 1 -7.2338594604304973e-01 3.0881772568642623e+00 1.4036975629414393e+01 2.3162135742500073e+01 1 0 0 +2991 997 2 3.0982451582420384e-01 5.2280013586330387e+00 1.1203024874281757e+01 2.2920463007595512e+01 1 1 0 +1785 595 2 3.8281471486206287e-01 6.6167742260554228e+00 1.3612536459776695e+01 1.9313609737248520e+01 0 0 0 +2121 707 2 3.8585698851848321e-01 4.4807308426661656e+00 7.3066901447446870e+00 2.2606766608759379e+01 1 0 0 +2837 946 2 3.7013465404632945e-01 3.5954162742032376e+00 1.3873516136223056e+01 2.3965882799467401e+01 1 0 0 +937 313 1 -7.3314223531008127e-01 2.9009549042530489e+00 8.4066590110596824e+00 2.3065122293270981e+01 0 1 0 +938 313 2 3.7193465068244991e-01 2.5191766273619289e+00 8.9434038738914126e+00 2.2299129294937106e+01 0 1 0 +2900 967 2 3.7818319167858133e-01 2.7415196699207897e+01 8.5499633253260967e+00 2.7845323239798631e+01 0 1 0 +405 135 2 4.0057701173858695e-01 1.2084678057047451e+01 8.9585126757363334e+00 1.6877323855921205e+01 0 0 0 +2794 932 1 -7.1956077419890807e-01 2.6712684139134382e+01 5.2906405574568689e+00 3.0610308369025347e+01 0 1 0 +2407 803 1 -7.2798611750345976e-01 7.3061596056138445e+00 9.1177404986389856e+00 2.0833418652341557e+01 0 1 0 +2408 803 2 3.6041671248831952e-01 7.3585132166454654e+00 8.2126653276617905e+00 2.0557345700254629e+01 0 1 0 +2409 803 2 3.6349064748110360e-01 8.2029129887498033e+00 9.3373021614919374e+00 2.1047308869552040e+01 0 1 0 +1640 547 2 3.5413656085315520e-01 6.7125397866169587e+00 1.1556501214790561e+01 1.6890357199937188e+01 0 0 0 +207 69 2 3.5322247205880647e-01 1.0524607756799654e+01 9.3693843752394290e+00 2.0792799719310164e+01 0 0 -1 +551 184 2 3.1596334670470599e-01 2.3139540645992245e+01 9.1643025932865942e+00 1.6085846237278776e+01 0 0 0 +1028 343 2 3.6283021390048514e-01 9.9820280890318642e+00 9.4050140382677920e+00 1.6941434255403038e+01 0 1 0 +1573 525 1 -7.2522851749844286e-01 9.3058726890929240e+00 1.1238508275232054e+01 1.7770799164061348e+01 0 0 0 +129 43 2 3.5259057163977803e-01 8.3037113370707765e+00 1.1287229704106414e+01 1.7808208870495932e+01 0 0 -1 +1575 525 2 3.6052169880570617e-01 9.4943013114788730e+00 1.1281399552467397e+01 1.8757265704033799e+01 0 0 0 +2423 808 2 4.1237379394554557e-01 1.0186267108735564e+01 1.2482543054700727e+01 1.6924064738290593e+01 0 1 0 +2422 808 1 -7.5528864189308997e-01 1.0617722992488041e+01 1.3201662366329364e+01 1.6503243095375066e+01 0 1 0 +1233 411 2 3.8200896233481607e-01 2.9020145946440103e+01 9.4345824693544422e+00 3.0586678472936867e+01 0 0 -1 +1533 511 2 3.9295894415255977e-01 1.0589356890099278e+01 1.1009283924992937e+01 2.0983954036008033e+01 0 0 0 +1531 511 1 -7.0374484297774720e-01 1.0106263090408950e+01 1.0226083225003583e+01 2.0595863319388489e+01 0 0 0 +2357 786 2 3.8210603736161919e-01 9.3430479690853403e+00 1.4443269291071177e+01 1.6225834414127757e+01 0 0 0 +2567 856 2 3.8669808384358728e-01 1.1333563966860329e+01 1.3333851376525297e+01 1.7201856579169146e+01 0 0 0 +1784 595 2 3.6121546867068344e-01 6.6624094012602990e+00 1.2176837629813919e+01 1.8723857648926369e+01 0 0 0 +2923 975 1 -7.3571394649167221e-01 1.1882439002847120e+01 1.2312812451221372e+01 2.1406602358155876e+01 1 0 0 +2561 854 2 3.9705462740753311e-01 9.4233693390889908e+00 1.4297828641073684e+01 2.1471400197495001e+01 0 0 0 +2560 854 1 -7.1032641792680462e-01 8.6943397986103594e+00 1.3755425443541210e+01 2.1178575676550675e+01 0 0 0 +1869 623 2 4.0682694563708804e-01 8.3710478606434258e+00 1.4164576937614921e+01 2.0375780486508098e+01 0 0 0 +206 69 2 3.3829609616742795e-01 8.7602454773378078e+00 5.9344065142883000e+00 2.2942854230873522e+01 0 0 -1 +2181 727 2 3.6130387415390852e-01 8.0414942997850325e+00 1.3458170888224247e+01 2.2923758503112353e+01 1 0 0 +2924 975 2 3.3776533563465239e-01 1.1654790831468008e+01 1.3105746318028583e+01 2.1920772281945446e+01 1 0 0 +2053 685 1 -7.3766684215097889e-01 2.5145602703224867e+01 8.6541961282170412e+00 2.3799760133041396e+01 0 0 0 +1644 548 2 3.5429954575230982e-01 7.3141820210076478e+00 9.3631445469736505e+00 1.5554808430099202e+01 0 0 0 +1027 343 1 -7.7401990553758282e-01 1.0388384085254383e+01 8.6584800868084262e+00 1.6539136615228763e+01 0 1 0 +278 93 2 4.0489742409491369e-01 6.9938898484793306e+00 1.5173297331096748e+01 2.4008993477712167e+01 0 0 0 +1783 595 1 -6.7335777806983732e-01 7.0430888152495594e+00 1.3106370436589541e+01 1.8618614099721668e+01 0 0 0 +2230 744 1 -7.5263543177058245e-01 8.5774186803729857e-01 5.1195093617962808e+00 3.0600357686081662e+01 1 0 0 +2018 673 2 3.6679909686347079e-01 1.6956245911637073e+01 8.9418921168532250e+00 1.7658439969659675e+01 0 0 0 +403 135 1 -7.4516078083489978e-01 1.2992692192882428e+01 9.0005766882634362e+00 1.7173322065859242e+01 0 0 0 +1401 467 2 3.8626833829586898e-01 4.4637530188548071e+00 2.7502724249676175e-01 1.5697870538564095e+01 1 1 0 +1754 585 2 3.8391964633410047e-01 1.1764550375668628e+01 1.3032705248164630e+01 1.9772788204968641e+01 0 0 0 +1665 555 2 3.4798518694100483e-01 1.1773395057063254e+01 7.0581714244376617e+00 1.9806056777995511e+01 0 0 0 +2925 975 2 3.7387206093991754e-01 1.2787584030668560e+01 1.2116691670547677e+01 2.1790460177572896e+01 1 0 0 +1753 585 1 -7.5022387562627957e-01 1.2039905378946813e+01 1.3351891586988085e+01 1.8873350966911072e+01 0 0 0 +2017 673 1 -7.3492391394875911e-01 1.6665501964712966e+01 8.9550052987174027e+00 1.8602274889064965e+01 0 0 0 +404 135 2 3.8301311901100599e-01 1.3055490172705039e+01 8.6872601889770351e+00 1.8165908713344329e+01 0 0 0 +1755 585 2 3.8871816627699718e-01 1.3049313906018305e+01 1.3321481532767583e+01 1.8928877974205388e+01 0 0 0 +2019 673 2 4.1561876716004592e-01 1.7365685743876266e+01 9.3759140561039285e+00 1.9039778589444754e+01 0 0 0 +1739 580 2 3.8801784154160446e-01 1.3642089513094440e+01 8.3609359204199958e+00 2.0178747887490413e+01 0 0 0 +1738 580 1 -7.8914970851668176e-01 1.3572069606153219e+01 7.7633324407689921e+00 1.9475132354984773e+01 0 0 0 +2730 910 2 4.0251827972944865e-01 1.7263138369980986e+01 1.3637637118825557e+01 2.0534207733959761e+01 0 0 0 +1740 580 2 3.8191172211745650e-01 1.4495710456273171e+01 7.4828978210185149e+00 1.9191910649208896e+01 0 0 0 +1210 404 1 -7.3635400562140607e-01 1.4286356936194165e+01 9.2377315162547564e+00 2.1969271672374305e+01 0 1 0 +2519 840 2 3.9450616331243338e-01 1.5532727974393639e+01 1.2716095898468238e+01 1.9005980741709461e+01 0 1 0 +2518 840 1 -7.0020767951093255e-01 1.4748998304438500e+01 1.2980336604099989e+01 1.8479994559915177e+01 0 1 0 +2520 840 2 3.8806503026240069e-01 1.4704854582895956e+01 1.2369733460036672e+01 1.7698543367203715e+01 0 1 0 +2728 910 1 -6.9651091995638481e-01 1.7074355541895120e+01 1.2813235371684920e+01 2.0142623733808158e+01 0 0 0 +2672 891 2 3.7300178188927147e-01 1.7804755750171203e+01 1.2681357261096485e+01 1.9532548952210597e+01 0 0 0 +616 206 1 -6.9174492598625059e-01 1.7435581503971978e+01 1.1433822824662480e+01 1.6367465338872680e+01 0 0 -1 +1212 404 2 3.8335884669842629e-01 1.4147485685425524e+01 1.0050674626063481e+01 2.2532174256149407e+01 0 1 0 +1211 404 2 4.0778944741854067e-01 1.4969405215963242e+01 8.7025602838862657e+00 2.2381354008202933e+01 0 1 0 +1037 346 2 3.9083726566379051e-01 1.3766844118198629e+01 1.4210140240142200e+01 2.2786501057899198e+01 0 1 -1 +1836 612 2 3.9187442257055055e-01 1.8979423247115456e+01 1.2009427785390942e+01 1.7407244710259985e+01 0 0 0 +2940 980 2 3.4632860432638313e-01 1.8451600439801506e+01 1.4839552720185747e+01 1.7368561537060227e+01 0 0 0 +842 281 2 3.4119337800122618e-01 1.3170436151882294e+00 9.4108747050476378e+00 1.5543224130927058e+01 0 1 0 +1516 506 1 -6.7068126500296144e-01 1.1425229800113051e+01 2.6455517175375637e-01 1.7762034538861357e+01 0 0 0 +1639 547 1 -7.2373086427851052e-01 6.3764181916873843e+00 1.1759659047129542e+01 1.5981229637569374e+01 0 0 0 +1038 346 2 3.7926588337572753e-01 1.5156959038847516e+01 1.3698403096322609e+01 2.2897074520829197e+01 0 1 -1 +388 130 1 -7.5510394342290132e-01 1.4111550559310265e+01 1.1560434211278997e+01 2.3443295473973926e+01 0 0 -1 +390 130 2 4.0655347049402102e-01 1.5039516853489459e+01 1.1720980918698904e+01 2.3307150086746127e+01 0 0 -1 +2595 865 2 4.1713439738631469e-01 1.7555658074944745e+01 1.2046788493534205e+01 2.3228099335612924e+01 0 0 0 +1036 346 1 -6.7551293206049901e-01 1.4561103067342792e+01 1.4032165389974502e+01 2.2296849078877067e+01 0 1 -1 +617 206 2 3.7623215020866863e-01 1.6543106285011845e+01 1.1407863625327440e+01 1.6695487415549007e+01 0 0 -1 +1735 579 1 -7.5113409137827258e-01 1.4590044443041155e+01 1.1218354811374031e+01 1.6427683357216281e+01 0 0 0 +1991 664 2 3.8459332332863760e-01 1.9497277727423661e+01 1.0578887237316250e-02 2.2458156727385099e+01 0 0 0 +899 300 2 3.8127010516342885e-01 5.3391559075200679e+00 9.9804570387332223e+00 1.5720359735406319e+01 0 0 0 +398 133 2 3.2004491336324487e-01 2.1495986442264993e+01 7.6050513166391003e+00 2.2363098294672028e+01 0 0 -1 +2680 894 1 -7.3202861077267689e-01 2.2066768893607218e+01 1.5375730708080813e+01 1.9415608440359819e+01 0 0 0 +2170 724 1 -7.6349686183636911e-01 1.8865824155187205e+01 9.4916039563870118e+00 1.9805581370270467e+01 0 0 0 +716 239 2 3.5632299047840366e-01 1.9357449724098466e+01 9.0020272700128974e+00 1.9135097158884438e+01 0 0 0 +2678 893 2 3.4951967851345100e-01 1.9495817439363719e+01 1.0952223438296004e+01 2.2143519070705047e+01 0 0 0 +354 118 2 3.5916029308246983e-01 2.0956698347810864e+01 1.1783208277501810e+01 1.9587783079463009e+01 0 0 0 +352 118 1 -6.8878961535675709e-01 2.0550706516505961e+01 1.1663387875887267e+01 2.0534690899852240e+01 0 0 0 +353 118 2 3.5776060615036392e-01 1.9734667085056032e+01 1.1066395062612594e+01 2.0358463217175814e+01 0 0 0 +2172 724 2 3.2563405921591260e-01 1.8971789304714186e+01 8.9767862096464004e+00 2.0605374764272497e+01 0 0 0 +506 169 2 3.7336604353172415e-01 2.1243934859328998e+01 1.3067633517947597e+01 2.1722114689046712e+01 0 0 0 +397 133 1 -7.0203789006736461e-01 2.1272215741460059e+01 8.4190413649576481e+00 2.1923024798635119e+01 0 0 -1 +2112 704 2 3.5749643675307025e-01 2.3277342972110947e+01 1.0273506654345852e+01 1.9746190274072337e+01 0 0 0 +399 133 2 3.8529248043220982e-01 2.2095981443530921e+01 8.9608436992017477e+00 2.1882225118690091e+01 0 0 -1 +669 223 2 3.5241719615984168e-01 2.3835092940756191e+01 1.1028890441661733e+01 2.1590790738013276e+01 0 0 0 +1939 647 1 -7.2135771505377078e-01 2.2966671549940813e+01 1.0008086922405964e+01 1.8897908893064958e+01 0 0 0 +715 239 1 -7.2997705047380057e-01 2.3653015785898301e+01 1.0098747871485116e+01 2.1824770265916694e+01 0 0 0 +1940 647 2 3.5160598280934757e-01 2.2669112888586351e+01 9.0908235054689985e+00 1.9073113742305335e+01 0 0 0 +717 239 2 3.8320793146871557e-01 2.4311519990824511e+01 9.7755906645591999e+00 2.2462924941857636e+01 0 0 0 +459 153 2 3.8416886073134027e-01 2.3070896264022778e+01 1.2452390151392521e+01 1.9315406632261965e+01 0 0 0 +1834 612 1 -7.2161997489727125e-01 1.9381599658981891e+01 1.2659658978319085e+01 1.8015457035261701e+01 0 0 0 +505 169 1 -6.9860310377840651e-01 2.1642858799412103e+01 1.3937964923486071e+01 2.1816452323103469e+01 0 0 0 +1835 612 2 3.7207914288685157e-01 2.0278979344207215e+01 1.2638224531969829e+01 1.7854801478038407e+01 0 0 0 +458 153 2 3.8212115507743072e-01 2.2372624989832556e+01 1.2229091079374045e+01 1.7903894019546094e+01 0 0 0 +457 153 1 -7.6499416451080382e-01 2.2343098067345160e+01 1.2805355870533806e+01 1.8699219400743679e+01 0 0 0 +1956 652 2 3.4339814167844712e-01 2.4186106360868280e+01 1.2969190144837924e+01 2.2301851785400849e+01 0 0 0 +2729 910 2 3.7703957361105783e-01 2.2081585098562567e+01 1.4464589638277989e+01 1.8968631374295192e+01 0 0 0 +1941 647 2 3.8549314621537878e-01 2.1944326659494948e+01 1.4125339370548296e+01 2.0896046712774201e+01 0 0 0 +2111 704 2 3.5065550630186537e-01 2.0214586295971163e+01 8.2482085452366718e+00 1.7099343233387046e+01 0 0 0 +2303 768 2 3.3566251428324961e-01 4.7982086445837524e+00 6.5562331072971682e+00 1.6506782621679776e+01 0 0 0 +882 294 2 3.5386422755678792e-01 9.7165959201112670e+00 1.5169399558564750e-01 2.1823152404527185e+01 0 1 0 +185 62 2 3.4046379682562783e-01 4.3305035655275319e-02 1.2912647970572984e+01 1.7031286717738347e+01 0 0 0 +2384 795 2 3.7660846054579272e-01 2.9465405847905281e+01 9.2655430068648865e+00 2.2725072426645035e+01 -1 1 0 +1068 356 2 3.8476208951181273e-01 1.3329215191795530e+01 1.1354157060663415e+01 3.1042205074704174e+01 0 0 -1 +2987 996 2 3.6560553509206023e-01 2.7464957672870540e+01 1.1248565497139367e+01 2.3809506566471352e+01 0 1 0 +346 116 1 -7.3391986676753573e-01 1.7056858454851412e+01 8.2180755585903089e+00 1.5626796727305591e+01 0 0 0 +184 62 1 -7.2609578154427024e-01 4.9464161798220929e-01 1.3770931023181264e+01 1.6871790013461275e+01 0 0 0 +2469 823 2 3.9352264166164758e-01 1.4823853627918639e+00 1.5415517317916478e+01 1.7290114940775041e+01 0 0 0 +921 307 2 3.9567342613304785e-01 2.7976820586123839e+01 7.6241864611821573e+00 1.6669910450292988e+01 -1 1 0 +730 244 1 -7.5440831141625975e-01 2.9940507767907427e+01 1.1024414260594568e+01 1.6465650387139668e+01 0 0 0 +732 244 2 3.6608217473124127e-01 3.0900323309008844e+01 1.0756077083335166e+01 1.6365877614743567e+01 0 0 0 +2132 711 2 4.0049444066124251e-01 2.4976244607438534e+01 1.3260747334438147e+01 2.0221675044683380e+01 0 0 0 +2131 711 1 -7.7945494920877012e-01 2.4472214704824960e+01 1.2409196296592279e+01 2.0203897211372077e+01 0 0 0 +2133 711 2 3.8570991198323573e-01 2.4943570048139250e+01 1.1853053597824776e+01 1.9524475894365100e+01 0 0 0 +640 214 1 -7.4773484071651031e-01 2.5532342776021249e+01 8.6043278685170712e+00 1.8213454212182754e+01 0 0 0 +2225 742 2 3.7750922652840646e-01 2.6069108746220927e+01 1.0262117383019357e+01 1.8267611041747067e+01 0 0 0 +2226 742 2 3.4778060237024450e-01 2.6239382865318579e+01 1.1685965248509371e+01 1.7749768533991165e+01 0 0 0 +2246 749 2 3.7627811404600109e-01 3.0297260992956371e+01 8.6714161509651131e+00 2.0389554356097957e+01 0 0 0 +160 54 1 -7.3033074976895529e-01 2.9624109555854151e+01 9.2807951844092678e+00 2.0695257535476276e+01 -1 0 0 +162 54 2 3.6796053651740235e-01 2.9490886980093705e+01 1.0053299858495222e+01 1.9995802359191931e+01 -1 0 0 +731 244 2 3.6711482998338107e-01 2.9715292499906422e+01 1.1173930209302149e+01 1.7425157563527797e+01 0 0 0 +2136 712 2 3.7353312060824306e-01 3.0456462227425714e+01 1.3397929850443866e+01 2.0727463330593576e+01 0 0 0 +2135 712 2 3.7707725039739515e-01 2.9083332776355398e+01 1.3250228537723050e+01 2.1409642910163022e+01 0 0 0 +2134 712 1 -7.2738501400538580e-01 2.9500436262165433e+01 1.3543525387246625e+01 2.0629409301244063e+01 0 0 0 +2072 691 2 3.8891740371251265e-01 2.8010580003273464e+01 1.1290754689919872e+01 1.8919865387757891e+01 0 0 0 +2122 708 1 -7.6644048790081043e-01 2.8976243521620926e+01 1.1401425816808537e+01 1.9049523031513747e+01 0 0 0 +2224 742 1 -7.6287182875028514e-01 2.6302186259578878e+01 1.1200627055575357e+01 1.8558007066340860e+01 0 0 0 +2124 708 2 3.8177232409347289e-01 2.9162220178382157e+01 1.2281700072770796e+01 1.9590310578059650e+01 0 0 0 +2247 749 2 3.7278880601710385e-01 2.6732418424088859e+01 1.3375916691502859e+01 2.2948704244468736e+01 0 0 0 +2912 971 2 3.5654891863482036e-01 2.8478781872414316e+01 1.4628254342701968e+01 1.8070471132846095e+01 0 1 0 +2911 971 1 -7.3296770724997251e-01 2.7562138940867662e+01 1.4686028519329875e+01 1.7771090994399270e+01 0 1 0 +2245 749 1 -7.3198965470550681e-01 2.7613387979096714e+01 1.3034627827881975e+01 2.3073332631836262e+01 0 0 0 +2732 911 2 3.6399052841284724e-01 2.8474495064115239e+01 1.0035090529339035e+01 2.4089533533768773e+01 0 0 0 +1405 469 1 -7.1712130024312082e-01 2.4909497949203029e+01 1.2417893636624896e+01 1.6247143313584463e+01 0 1 0 +1919 640 2 3.8535487605174684e-01 2.7056171148481642e+01 1.4437251107957492e+01 1.8535957281679362e+01 0 0 0 +137 46 2 3.6010823860519475e-01 2.8070308191720184e+01 1.3668673401282824e+01 2.3632800567763915e+01 -1 0 0 +2797 933 1 -7.4053306465865087e-01 2.7531406994413494e+01 1.0337524702304648e+01 2.4187314942978201e+01 0 1 0 +1407 469 2 3.3584572053128925e-01 2.4134739719232172e+01 1.1828768930389478e+01 1.6211473199796917e+01 0 1 0 +2887 963 1 -6.6686361361738655e-01 1.7366594829490911e+00 3.8184872265588798e-01 3.0534326547643687e+01 1 1 0 +2356 786 1 -7.3218856391362297e-01 8.7508872956418760e+00 1.5223406319860592e+01 1.5987431167238142e+01 0 0 0 +1135 379 1 -7.1096791971419460e-01 2.6483728833226294e+01 1.5402925392905622e+01 2.7411168513907231e+01 0 0 -1 +45 15 2 3.6392287941140833e-01 1.4006717062920890e+01 7.9881129827318178e+00 1.5817203648188739e+01 0 0 0 +652 218 1 -7.1326045703175078e-01 1.7940745850141756e+01 1.5517649835166518e+01 2.0664114896539090e+01 0 0 0 +1605 535 2 3.5111781404263770e-01 2.6299486851682459e+00 1.9084394243801095e+00 2.6702910352040490e+01 0 0 0 +156 52 2 3.7815022812234889e-01 2.8944617535136126e+00 3.7000780234493660e+00 2.3375635489162701e+01 0 0 0 +2576 859 2 3.6944053787329784e-01 4.5306460799063819e+00 6.8045844706988023e-01 2.3882858342485843e+01 0 1 0 +1603 535 1 -7.2352326684273671e-01 2.0925608534674192e+00 1.4994002789243699e+00 2.6053898871459438e+01 0 0 0 +1604 535 2 3.5784239543508978e-01 2.6558924493573683e+00 1.6491644984747833e+00 2.5285569030322147e+01 0 0 0 +768 256 2 3.5889503483555663e-01 2.6155775692569061e+00 6.2952737954860494e+00 3.0069361965627756e+01 0 0 -1 +959 320 2 3.4847682532600549e-01 3.3896562876093910e+00 5.3534311883952777e+00 2.8301965994702510e+01 0 0 -1 +154 52 1 -7.1845298746042896e-01 3.0060271800735214e+00 2.6906180589790232e+00 2.3485835681460074e+01 0 0 0 +155 52 2 3.6310940125395524e-01 3.9564133801821355e+00 2.4997700481529299e+00 2.3608032808913929e+01 0 0 0 +746 249 2 3.3452565110090060e-01 4.6091031750912199e+00 2.0564926734150242e+00 2.8598566794230077e+01 1 0 -1 +745 249 1 -7.4957206719184666e-01 4.6446472830542271e+00 2.0601499171929896e+00 2.7656284147156228e+01 1 0 -1 +747 249 2 3.3876187850410905e-01 5.5986980737654228e+00 2.2173410774498237e+00 2.7463488941283973e+01 1 0 -1 +2140 714 1 -7.5910771445322278e-01 4.6072371158375891e-01 5.6894736955241223e+00 2.7002676169462639e+01 1 0 0 +760 254 1 -7.2383900700149562e-01 3.0124918542978749e+00 4.9031052564718873e+00 2.7509888261364623e+01 0 0 -1 +761 254 2 3.3007493639865093e-01 3.3127594365808206e+00 4.0046170422366432e+00 2.7669968488879821e+01 0 0 -1 +766 256 1 -7.8191702293143428e-01 3.4450228601390331e+00 6.6501573073070226e+00 2.9746624243370210e+01 0 0 -1 +2142 714 2 3.8289699939760330e-01 1.3174004643759945e+00 5.1965945452085469e+00 2.7210580526167202e+01 1 0 0 +104 35 2 3.5380180318457871e-01 5.5198701162709645e+00 6.8752345186909745e+00 2.6249799741025491e+01 0 0 -1 +55 19 1 -6.9427182695468448e-01 5.9577817224673000e+00 6.4368574169994650e+00 2.5509779416469595e+01 0 0 -1 +2243 748 2 3.7410388442771397e-01 1.2034232408547305e+00 7.1972306827937826e+00 2.7274449960386374e+01 1 0 0 +57 19 2 3.7136024885638275e-01 5.2676968644264459e+00 6.2372575723454098e+00 2.4839309811753004e+01 0 0 -1 +1610 537 2 3.7631132379252363e-01 4.0437390210148987e+00 3.2407764692770552e-01 2.8154713224445732e+01 0 0 0 +231 77 2 3.7991147877901293e-01 6.1647893646658352e+00 5.0583850605738689e+00 3.0835566349958654e+01 0 0 -1 +2575 859 1 -7.3924682246274653e-01 5.6104836585269391e+00 2.2948051186240721e+00 2.4068361492403909e+01 0 1 0 +229 77 1 -7.3142249570417361e-01 5.6897214367236337e+00 5.0771683978045949e+00 2.9988809681094182e+01 0 0 -1 +2242 748 1 -7.5275488968526127e-01 1.6121977001859173e+00 8.0621852338332864e+00 2.6927327677845390e+01 1 0 0 +1709 570 2 3.7759477195007612e-01 2.3009551945892234e-01 2.9054335778181983e-01 2.2910480586009719e+01 0 0 0 +230 77 2 3.7105478337597031e-01 4.9008827539773936e+00 5.7163105546997963e+00 3.0041707584755315e+01 0 0 -1 +1437 479 2 3.4991221351340213e-01 2.9437131111781120e+01 9.2616161897067162e+00 1.6312167778586037e+01 0 0 0 +2257 753 1 -7.3155476328684443e-01 2.7783557954778793e+01 1.5400060019718380e+01 2.4781951177859217e+01 -1 0 0 +2141 714 2 3.4741712872681252e-01 3.8863220752417565e-01 5.7522035734289352e+00 2.6005208355033556e+01 1 0 0 +1506 502 2 3.7428710536178583e-01 3.4616250200203041e-01 2.2811146231229431e+00 2.5588369112161367e+01 0 0 0 +2341 781 1 -7.6276413519313246e-01 8.7773055780748210e-01 7.1913810433029584e+00 2.4444154580846838e+01 0 1 0 +604 202 1 -7.3234327216229211e-01 9.7533281522530437e+00 8.0503141526497166e-02 2.8715255588762510e+01 0 0 -1 +1668 556 2 3.8204713336037099e-01 7.0998155724257650e+00 7.6432442203046289e+00 3.0448364884145068e+01 0 0 0 +2470 824 1 -7.1006127391757046e-01 5.8392836050614196e+00 1.9472392741888216e+00 3.0045369550134733e+01 0 1 0 +1698 566 2 3.7835501800116833e-01 1.0620223823987079e+01 2.0039196363086931e+00 2.4380001590043584e+01 0 0 0 +2505 835 2 3.9505263210629882e-01 7.7472986644074577e+00 1.6450692330334811e+00 2.7092945216945559e+01 0 1 0 +1790 597 2 3.9959303180025546e-01 8.6149533170788413e+00 1.3639145340245475e+00 2.8480885121536478e+01 0 0 0 +1667 556 2 3.4316804129203538e-01 6.7094284903958750e+00 6.4608432582388646e+00 2.9436238510216565e+01 0 0 0 +2471 824 2 3.8693552030295769e-01 6.6157992859761992e+00 1.8301818197673485e+00 2.9397771245472452e+01 0 1 0 +828 276 2 3.6959373561806791e-01 7.9730749989243206e+00 5.3762975343585486e+00 2.6510240742923454e+01 0 1 -1 +827 276 2 3.8533812346834262e-01 9.1098967293564321e+00 5.7867348203768900e+00 2.5415050302772961e+01 0 1 -1 +2290 764 1 -7.2311861325806781e-01 7.1990819250561247e+00 4.4161739407096965e+00 2.3214107095139333e+01 0 1 0 +2292 764 2 3.5282785373504333e-01 6.6043512343042048e+00 5.1504590610166359e+00 2.3369187485954960e+01 0 1 0 +826 276 1 -7.7327279910532365e-01 8.8852591236397522e+00 5.3907166658805066e+00 2.6321780757862346e+01 0 1 -1 +2462 821 2 3.8127918981240727e-01 1.1106926559939263e+01 3.2142510335419128e+00 2.6313151503225818e+01 0 0 0 +2577 859 2 3.9111127420726477e-01 6.1737599263758964e+00 3.0920245359822180e+00 2.3754152255765142e+01 0 1 0 +1676 559 2 3.4671941264342054e-01 9.3309146799038558e+00 6.0605507641258232e+00 2.7918826665849195e+01 0 0 0 +2463 821 2 3.5797165668398834e-01 1.0529963878015691e+01 4.6798321049604681e+00 2.6604494471453545e+01 0 0 0 +2461 821 1 -7.6672260309278528e-01 1.1330983766945398e+01 4.1107424917779500e+00 2.6588347801866334e+01 0 0 0 +1675 559 1 -7.5495380454948657e-01 9.6517566920452396e+00 6.6463425202929249e+00 2.8643151899383643e+01 0 0 0 +1677 559 2 3.7929200748761688e-01 8.7702547003611944e+00 6.8687629380470234e+00 2.9126412959566544e+01 0 0 0 +1612 538 1 -7.3815051531118636e-01 1.1246395560967327e+01 4.4466625634810439e+00 2.9348903503134387e+01 0 0 0 +1695 565 2 3.5770006483896866e-01 8.2820740425731127e+00 1.5367669740626146e+00 2.5115092014407637e+01 0 0 0 +1613 538 2 3.6211581024232170e-01 1.0586182661907189e+01 5.1683886359094950e+00 2.9192950691679115e+01 0 0 0 +1614 538 2 3.6663082131535712e-01 1.1360675801485524e+01 4.1186753637637681e+00 2.8426967799714145e+01 0 0 0 +2504 835 2 3.9006410078894199e-01 6.1686030868556090e+00 1.8484193377472726e+00 2.4856211741934199e+01 0 1 0 +1666 556 1 -7.4804678719134265e-01 7.2295609345927812e+00 7.3725389976496345e+00 2.9498489434899135e+01 0 0 0 +1789 597 1 -7.0789100849723052e-01 7.8347032250510464e+00 1.8745090856575120e+00 2.8150593435894123e+01 0 0 0 +1102 368 1 -7.2484897577735463e-01 7.4954160196154804e+00 1.3475667352039538e+00 2.5622737359185873e+01 0 1 0 +1950 650 2 3.8211414353034612e-01 2.6318576396838196e+01 6.2005906232047820e+00 3.0926365845374470e+01 0 0 0 +201 67 2 3.8505026476286963e-01 2.8875311946310578e+01 1.0486113117526268e-01 2.5903813880384430e+01 -1 0 -1 +213 71 2 3.5331547354572462e-01 1.0094350323601551e+01 1.6355217338086478e+00 2.9902040913462724e+01 0 0 -1 +1697 566 2 3.5665869442543852e-01 1.1812417085794502e+01 1.4179132341840108e+00 2.5349575673031623e+01 0 0 0 +1696 566 1 -6.9906214495727226e-01 1.0816648011309034e+01 1.5732587734711427e+00 2.5266034404801520e+01 0 0 0 +2784 928 2 3.8284675805091112e-01 1.1800505099415970e+01 5.3980783829212857e+00 2.5506553022148633e+01 0 1 0 +200 67 2 3.5498199675316910e-01 2.9860072104936709e+01 1.2613231033752976e+00 2.5515978975457060e+01 -1 0 -1 +2087 696 2 3.8132925818039848e-01 2.7079357627333255e+01 3.9538809364147370e-01 2.4125426836104438e+01 0 0 0 +2055 685 2 3.9062362437675457e-01 2.6027125624982066e+01 9.0056621598958237e+00 2.3815178340636532e+01 0 0 0 +2715 905 2 3.8679293265460046e-01 1.7672954384457459e+01 2.4689610820071568e+00 2.3791118220408435e+01 0 1 0 +2530 844 1 -7.4476748089193567e-01 1.5164226625356950e+01 9.7577773171138671e-01 2.3001443303076130e+01 0 1 0 +2713 905 1 -7.7496637692445991e-01 1.7483805518372101e+01 3.3746191935728023e+00 2.4103637805231486e+01 0 1 0 +1879 627 1 -7.2581626411596223e-01 1.6079187392870164e+01 7.7491964483766420e+00 2.3322678776045596e+01 0 0 0 +198 66 2 4.0416597710417085e-01 1.2339982134060692e+01 5.2958185199224834e+00 3.0553713530058854e+01 0 0 -1 +383 128 2 3.6816002057937336e-01 1.3718608800421432e+01 2.2539414034241911e+00 2.4632719231922977e+01 0 0 -1 +2189 730 2 3.7184577153859505e-01 1.3697004879830212e+01 7.4745839213884258e-01 2.5202791018715246e+01 0 0 0 +1808 603 2 3.5707964716517671e-01 1.2164030559487436e+01 7.3814702824088050e+00 2.3810382629409432e+01 0 0 0 +412 138 1 -7.2247844298604080e-01 1.4280465766839763e+01 2.0154595068977179e+00 2.9596266300365343e+01 0 0 -1 +2188 730 1 -7.4594174866031282e-01 1.3533969980129937e+01 1.6527397343918953e+00 2.5395849873291269e+01 0 0 0 +1794 598 2 3.8659034471889031e-01 1.4463252385309664e+01 5.6746620476312488e+00 2.8245119598851449e+01 0 0 0 +1691 564 2 3.9863451050656573e-01 1.4288471439622102e+01 7.7356083129237740e+00 2.9938865219573312e+01 0 0 0 +2782 928 1 -7.4311594708760220e-01 1.2401050650869941e+01 5.7841873787684888e+00 2.4847262494224694e+01 0 1 0 +2714 905 2 3.8020034689892418e-01 1.6508369862393078e+01 3.4988704682037368e+00 2.4208899519999502e+01 0 1 0 +1867 623 1 -7.2703398778301620e-01 1.4320172044433900e+01 6.6061317379975737e+00 2.8590330500386656e+01 0 0 0 +1860 620 2 3.6259354613133710e-01 1.3682191928063379e+01 7.0944660188658855e+00 2.7989646814815874e+01 0 0 0 +1801 601 1 -7.4395001518338510e-01 1.4524362524969639e+01 3.9127560792567242e+00 2.7574044750927154e+01 0 0 0 +24 8 2 3.1572007617749354e-01 1.5629619413419856e+01 5.6405255910187329e+00 2.5727182980490600e+01 0 0 -1 +23 8 2 3.3802191421555616e-01 1.5125566437350948e+01 6.7160073750058054e+00 2.6620021779098007e+01 0 0 -1 +22 8 1 -7.3055579090838396e-01 1.5891352345289096e+01 6.5418138309028828e+00 2.6029168877611063e+01 0 0 -1 +2424 808 2 3.5056989389545112e-01 1.4175089634680990e+01 4.8223776090127233e+00 2.4370479728181770e+01 0 1 0 +1802 601 2 3.4706211476779852e-01 1.5261195821634548e+01 3.4496911264633634e+00 2.7077869109044276e+01 0 0 0 +1822 608 1 -7.3869738211977010e-01 1.6945727137725200e+01 2.3665741269187799e+00 2.6754995542136687e+01 0 0 0 +2566 856 1 -7.2238086286676650e-01 1.4732018505396947e+01 4.0616910904253132e+00 2.4184656701567210e+01 0 0 0 +1824 608 2 4.0099874000931812e-01 1.6361263160538176e+01 1.5433515087414060e+00 2.6681694995932268e+01 0 0 0 +1823 608 2 3.5259860836217050e-01 1.7004232190130114e+01 2.7659484071560354e+00 2.5864238730984031e+01 0 0 0 +413 138 2 3.8194871278859543e-01 1.4493083830094669e+01 2.6915599088621218e+00 2.8964653139671135e+01 0 0 -1 +1132 378 1 -7.8684514788307447e-01 1.8113618383064782e+01 6.6564105624918390e+00 2.7825846085913078e+01 0 0 -1 +1023 341 2 3.9654087966533347e-01 1.7443075465581735e+01 5.7488500582853614e+00 2.9150612393490185e+01 0 1 -1 +1803 601 2 3.5226628335139892e-01 1.3736252433620466e+01 3.4577806895413277e+00 2.7297176176563575e+01 0 0 0 +1881 627 2 3.7309282547796940e-01 1.5960450825911897e+01 7.1685773230358913e+00 2.4089572576216767e+01 0 0 0 +2783 928 2 3.4352357034503550e-01 1.2988656095323929e+01 6.3854497952466618e+00 2.5318059663795211e+01 0 1 0 +1021 341 1 -7.5456799263442131e-01 1.7525918910477358e+01 4.9951615398262001e+00 2.9759290956075663e+01 0 1 -1 +1134 378 2 3.6239482331144030e-01 1.7462744899850858e+01 6.5074837269233123e+00 2.7077778836775249e+01 0 0 -1 +1793 598 2 4.1572512658299882e-01 1.8073425223065041e+01 3.3575067534915588e+00 2.9207373212601954e+01 0 0 0 +2796 932 2 4.2213039093411159e-01 1.8179336613522949e+01 2.4919400463894288e+00 2.7864552441067762e+01 0 1 0 +1792 598 1 -7.3738376359606139e-01 1.8620994317729217e+01 2.7171006406247078e+00 2.8759393908495117e+01 0 0 0 +1880 627 2 3.6330696047818717e-01 1.6995808128896741e+01 8.1279433991093537e+00 2.3311703301759788e+01 0 0 0 +2061 687 2 3.2537907809503785e-01 2.2440273268792474e+01 1.0964887291422052e+01 1.6297516466307698e+01 0 0 0 +839 280 2 3.8027724849319211e-01 2.7759267097755888e+01 5.4301314090060684e+00 1.6279486475935325e+01 -1 1 0 +1308 436 2 3.4652344809115321e-01 2.7376399502770262e+01 1.2686836450099335e+01 3.0847557279745700e+01 0 1 -1 +414 138 2 3.5026080502107043e-01 1.3610820703506388e+01 1.3989815362903599e+00 2.9152424176363148e+01 0 0 -1 +838 280 1 -7.4661124037097937e-01 2.8336958586340820e+01 4.6545977211036629e+00 1.5985798359172170e+01 -1 1 0 +2040 680 2 3.4841893979641375e-01 2.3116508880722311e+01 2.2742405108769868e+00 2.3248279285215204e+01 0 0 0 +408 136 2 3.3615325000522034e-01 2.1886245219915821e+01 1.4620116047737040e+00 3.0305882116767531e+01 0 0 -1 +1319 440 2 3.6377511606203944e-01 2.2679173557773613e+01 3.8312650465522329e+00 3.0337714197555496e+01 0 0 -1 +1725 575 2 3.5999155580158826e-01 1.9396800376357625e+01 2.8517078784890120e+00 2.4770633049667293e+01 0 0 0 +1723 575 1 -7.0291368591368775e-01 2.0031609566505022e+01 2.3100487504592011e+00 2.5236743027128966e+01 0 0 0 +2039 680 2 3.8601830871155030e-01 2.4689986385242818e+01 2.7333703199245574e+00 2.3533497119533202e+01 0 0 0 +1975 659 1 -7.7479016530442568e-01 2.2035449930098789e+01 5.9817972726034707e+00 2.3596815989300730e+01 0 0 0 +1133 378 2 4.0552689273242359e-01 1.8982058003137158e+01 6.2605938973427699e+00 2.7616583004620413e+01 0 0 -1 +251 84 2 3.7998342573887978e-01 2.0934339493891319e+01 1.3052873225415755e+00 2.6503990225166806e+01 0 0 -1 +2013 671 2 3.9423272690181710e-01 1.8631629587743380e+01 1.1303446468208378e+00 2.9505706772310898e+01 0 0 0 +2221 741 1 -7.5996622342131370e-01 2.4433660816953392e+01 3.1920332351693292e-01 2.7233526334968218e+01 0 0 0 +2038 680 1 -7.2477816625334268e-01 2.3890510211906154e+01 2.1946548833974879e+00 2.3908604479720488e+01 0 0 0 +1918 640 1 -7.4155527600601256e-01 2.5926359835059351e+01 1.4698996019020885e+01 2.0016330192932870e+01 0 0 0 +2015 672 2 3.6363809299288735e-01 2.2778312640167730e+01 3.1461983364573145e+00 2.5033216009192092e+01 0 0 0 +2016 672 2 3.7478891531000047e-01 2.2657166473054961e+01 4.6844022674643870e+00 2.4869835982086411e+01 0 0 0 +2014 672 1 -7.1214110885986637e-01 2.2571366834895294e+01 3.9748534047102417e+00 2.5540547659930525e+01 0 0 0 +1724 575 2 3.4134589759837836e-01 2.0842203093187724e+01 2.8239487034057364e+00 2.5299412584682365e+01 0 0 0 +2615 872 2 3.8528317315514266e-01 2.1777207634367581e+01 2.5957189027018090e+00 2.8075641756680287e+01 0 1 0 +2616 872 2 3.5940547383941868e-01 2.0785643999831347e+01 3.1781194810922901e+00 2.9152301692711102e+01 0 1 0 +2614 872 1 -7.6820777209436375e-01 2.1692978096403248e+01 3.1748162583595714e+00 2.8848176403157424e+01 0 1 0 +250 84 1 -7.3931312868170040e-01 2.1673960370643645e+01 9.5121953101989898e-01 2.7056977704243231e+01 0 0 -1 +2223 741 2 3.7247416059367261e-01 2.3541408786793877e+01 6.6017054320870006e-01 2.7434862837779910e+01 0 0 0 +1938 646 2 3.6279674091145114e-01 2.1096445250826850e+01 4.8628377591166805e+00 2.8083029348299146e+01 0 0 0 +2975 992 2 3.8381030301725305e-01 2.3805159178106493e+01 5.0293373259224659e+00 2.6723716857786389e+01 0 1 0 +2974 992 1 -7.2344779356769162e-01 2.4633119241402110e+01 5.4403491464787317e+00 2.6950581463737869e+01 0 1 0 +1936 646 1 -7.0856542248055776e-01 2.0701215126028124e+01 5.7697851570504719e+00 2.7901223821110477e+01 0 0 0 +2208 736 2 3.9722107295347597e-01 2.1984122819343177e+01 6.9208006527616437e+00 2.5149997722782850e+01 0 0 0 +1944 648 2 3.7009164707375797e-01 2.1452746854380685e+01 6.4137866829722237e+00 2.7642214835097100e+01 0 0 0 +2222 741 2 3.7668046195695482e-01 2.5040740162029486e+01 1.0461749322270053e+00 2.6946065048380657e+01 0 0 0 +2767 923 1 -7.4337786974117792e-01 2.1742307820327344e+01 1.5134418643722100e+01 2.4366126454495504e+01 0 0 0 +371 124 2 3.6116972247229417e-01 2.0271230995454754e+01 7.1271787017209522e+00 2.9462320916362494e+01 0 0 -1 +2268 756 2 3.8457219349314065e-01 2.5980819952702472e+01 1.3714583291187926e+01 2.7282890283323162e+01 -1 0 0 +1232 411 2 3.4413758709031472e-01 2.9137567040215881e+01 1.0949202512858209e+01 3.0188781454335743e+01 0 0 -1 +1505 502 2 3.3551538791325869e-01 3.0317430235107839e+01 2.9847883207742885e+00 2.6452510489649907e+01 -1 0 0 +2272 758 1 -7.1071342598118648e-01 9.3835958734398410e+00 1.9561492285590161e+00 1.6622592390969427e+01 0 1 0 +1402 468 1 -6.9090595601270877e-01 2.6153445107788702e+01 3.6986035008505143e+00 2.3233331582584253e+01 0 1 0 +642 214 2 3.9542601294035035e-01 2.5957914270746148e+01 4.6662342532055536e+00 2.3026093473662279e+01 0 0 0 +406 136 1 -7.2490031864237825e-01 2.1528688902268865e+01 7.9429199794798822e-01 3.0885245286492957e+01 0 0 -1 +2258 753 2 3.9486945463227829e-01 2.7359054985104358e+01 1.5436089924173725e+01 2.5637251930300373e+01 -1 0 0 +1431 477 2 3.9006331304254127e-01 8.2659253456867976e+00 1.1522236767241642e+01 3.0860983968750393e+01 1 0 -1 +2976 992 2 3.9887145224155784e-01 2.4517444990185002e+01 6.3712412588653491e+00 2.6740258769931579e+01 0 1 0 +2100 700 2 3.6322920647257073e-01 2.9629275158220981e+01 4.5700023648180492e+00 2.2808902444718804e+01 0 0 0 +2999 1000 2 3.5082069769033863e-01 2.7040992222736573e+01 6.3552519615497500e+00 2.2920612554283686e+01 0 1 0 +1220 407 2 3.4087260111907031e-01 2.9682593014266931e+01 6.7623466501355862e+00 2.7401651354898359e+01 0 1 -1 +881 294 2 3.7611075813075673e-01 8.2941119941425061e+00 2.4507050696816179e-01 2.1775686689633140e+01 0 1 0 +2120 707 2 3.5975526793042684e-01 2.9234149746931653e+01 8.3374100951964962e+00 2.3985806198816153e+01 0 0 0 +2098 700 1 -7.1624302267277173e-01 2.9462080781502500e+01 4.7667433676649136e+00 2.3739855004374014e+01 0 0 0 +1943 648 2 3.2804604961872091e-01 2.6167227951336340e+01 2.7451899980758090e+00 2.7322560420098402e+01 0 0 0 +2910 970 2 3.7101859261354220e-01 2.8735247220914726e+01 6.3319590384294813e+00 2.4458525183914798e+01 0 1 0 +2908 970 1 -7.2716197609036148e-01 2.8378839276950643e+01 7.2498675408571609e+00 2.4719567635135576e+01 0 1 0 +1942 648 1 -6.8838152630748339e-01 2.6379132025647991e+01 2.0205581695014101e+00 2.6642795589277483e+01 0 0 0 +2420 807 2 3.3319989750073198e-01 2.7128680562758586e+01 1.5534418813685780e+00 2.7085445017186270e+01 -1 1 0 +1504 502 1 -7.3813947165875382e-01 3.0614709508732197e+01 2.8938895549518966e+00 2.5526870002667810e+01 -1 0 0 +2168 723 2 3.7507212316829724e-01 2.9040012568709660e+01 4.0195686600996305e+00 2.8053508071473072e+01 0 0 0 +1306 436 1 -7.3274483043115135e-01 2.8188220391426622e+01 1.2863624903147597e+01 3.0372057121312960e+01 0 1 -1 +2868 956 2 3.3936535350076769e-01 2.2235497459102703e+01 1.2320692327513624e-01 1.5742347904127183e+01 0 1 0 +2798 933 2 3.3851635523595636e-01 3.0527506010436827e+01 4.0585061296507003e+00 2.8051268696236018e+01 0 1 0 +2167 723 1 -7.4174741026786273e-01 2.9775876264620848e+01 3.5160377555752933e+00 2.8311356739956437e+01 0 0 0 +2909 970 2 3.7305397904399157e-01 2.8652845000281829e+01 7.5003064417264893e+00 2.5670730788252705e+01 0 1 0 +2889 963 2 3.9806029509204588e-01 2.9654465761888165e+01 3.9558254468869434e+00 2.4258640376803672e+01 0 1 0 +2733 911 2 3.7517338274961209e-01 2.7028842914118083e+01 4.6824780691510828e+00 2.8824592225694200e+01 0 0 0 +2731 911 1 -7.1900772137801938e-01 2.7122895792893566e+01 4.7338574122783506e+00 2.7849286889968994e+01 0 0 0 +671 224 2 3.8169834079412152e-01 2.9864196120943340e+01 1.7126153484504640e+00 2.9226896633769105e+01 0 0 -1 +1403 468 2 4.0132675187727163e-01 2.6224451088274588e+01 5.1348426597395056e+00 2.7597014274458878e+01 0 1 0 +670 224 1 -7.4002040050912421e-01 2.9874692231980340e+01 1.0162881596271729e+00 2.9897001642592940e+01 0 0 -1 +1221 407 2 3.7142453933153258e-01 2.8279180522399930e+01 6.3082051403849597e+00 2.7253072575456311e+01 0 1 -1 +1219 407 1 -7.4636223009135871e-01 2.8758138158755816e+01 7.1096213158585195e+00 2.7330644076947245e+01 0 1 -1 +672 224 2 3.6210127057263714e-01 3.0760197576931898e+01 1.0466490121463978e+00 3.0247980756380638e+01 0 0 -1 +1435 479 1 -7.2190580097339840e-01 2.9452542875187081e+01 8.3672546868835571e+00 1.5906688128526630e+01 0 0 0 +2059 687 1 -7.3637836147899527e-01 2.1998281203684527e+01 1.1770994523966618e+01 1.6128556252963122e+01 0 0 0 +1542 514 2 3.5572588517955095e-01 4.9678608395711095e+00 1.4496217192802565e+01 2.7229720314445228e+01 0 0 0 +1540 514 1 -6.9617458328670623e-01 5.6494376971442675e+00 1.4712315230056680e+01 2.7937831813085410e+01 0 0 0 +39 13 2 3.5861234707695044e-01 4.2242415429574915e+00 7.1689718685924051e+00 2.7971694427089329e+01 0 0 -1 +37 13 1 -6.8293218877967798e-01 4.2243836444752185e+00 7.8731720250773298e+00 2.7244136020901131e+01 0 0 -1 +38 13 2 4.0408897137400679e-01 3.2693517614548901e+00 8.0355786580291166e+00 2.6892708490084008e+01 0 0 -1 +2169 723 2 3.7283530489617012e-01 1.4461182609017900e+00 7.9806912796887701e+00 2.5962933797040051e+01 1 0 0 +2267 756 2 2.9668086831985852e-01 2.5218640424788600e+01 1.5265070169491409e+01 1.5671407808032143e+01 -1 0 0 +72 24 2 3.7026895866173609e-01 1.3867832616450693e+01 1.4159720159449840e+01 3.0646427607190635e+01 0 0 -1 +2864 955 2 3.2700706478367164e-01 2.2260451793554332e+00 1.4487314715567837e+01 2.3536880541097752e+01 1 0 0 +2359 787 1 -6.8370245709145028e-01 3.0582305117577373e+01 1.4674977867580935e+01 3.0856409602959928e+01 -1 0 0 +462 154 2 3.4300757633537127e-01 7.4140687869223365e+00 2.7094644349793407e-02 1.8276899988028021e+01 0 1 0 +2362 788 1 -7.2627827420049385e-01 5.1300680550884314e-01 1.4918816875037386e+01 2.5135838730051187e+01 0 0 0 +1592 531 2 3.7139105979830456e-01 2.9400588249469295e+00 1.4517999193433587e+01 2.9001036244968251e+01 0 0 0 +2941 981 1 -7.4462083103699006e-01 9.3610162932407676e-02 1.0181900578098317e+01 2.7565106823884161e+01 1 0 0 +1591 531 1 -7.2882083130276931e-01 2.5307453373854911e+00 1.4151414661377173e+01 2.8248997847423023e+01 0 0 0 +2396 799 2 3.6784498076161737e-01 3.0646037543374511e+01 1.0246317877433162e+01 2.8449760965429725e+01 -1 0 0 +2298 766 2 3.6457852508912042e-01 2.9919726624970487e+01 1.0961711742085427e+01 2.3895181447391430e+01 -1 0 0 +2284 762 1 -7.4986487750855080e-01 4.2221351932768503e+00 1.4512571687982078e+01 2.5577301509529715e+01 0 0 0 +906 302 2 3.5494463352187366e-01 5.0623581615972464e+00 1.4834750370470212e+01 2.5110075858927122e+01 0 0 0 +1593 531 2 3.6294671123359029e-01 2.6911123838420017e+00 1.4729274599255127e+01 2.7500072314648300e+01 0 0 0 +2286 762 2 3.4001321138576840e-01 3.6077027164224593e+00 1.5354396474631793e+01 2.5659230906477365e+01 0 0 0 +1588 530 1 -7.0224825924218082e-01 3.9396362933366968e+00 1.1180257810114183e+01 2.9672092199664018e+01 0 0 0 +1541 514 2 3.6634528701174501e-01 6.4232917626113029e+00 1.4045427369791419e+01 2.7798968297227240e+01 0 0 0 +1590 530 2 3.9299471288102078e-01 3.8439067244240359e+00 1.1182704270701278e+01 2.8725760042884541e+01 0 0 0 +939 313 2 3.7889554677963672e-01 3.1308990689371603e+00 9.0706579105645471e+00 2.3825276035668782e+01 0 1 0 +590 197 2 3.4099858381779224e-01 3.9079268612007989e+00 1.1023233719783413e+01 2.4416295019901721e+01 1 0 -1 +589 197 1 -7.3055710272660168e-01 3.1588868788990050e+00 1.0521774667455457e+01 2.4794251812079033e+01 1 0 -1 +591 197 2 3.9640569180812241e-01 3.0069035000148943e+00 1.0819166199861776e+01 2.5720713444941524e+01 1 0 -1 +2209 737 1 -7.4058726174786715e-01 2.4651844894301518e+00 1.1450756359328805e+01 2.7442975570571651e+01 1 0 0 +2210 737 2 3.9054443342471989e-01 2.4574421765046113e+00 1.2399789697648865e+01 2.7692287455894533e+01 1 0 0 +2342 781 2 3.8362119674916201e-01 1.5551610000962601e+00 7.4983921792818649e+00 2.3810325756597745e+01 0 1 0 +2211 737 2 3.9427357191716933e-01 1.5470960743010029e+00 1.1073827292825166e+01 2.7570238020110391e+01 1 0 0 +2943 981 2 3.9514820652904376e-01 5.5471627542911661e-01 9.3388406833634612e+00 2.7614604490374539e+01 1 0 0 +2296 766 1 -7.1236628613563036e-01 3.0288038992894748e+01 1.1891617541030371e+01 2.3785810801441983e+01 -1 0 0 +2285 762 2 3.8843422502513547e-01 3.0504430738562395e+01 1.2277686589018002e+01 2.4639067344550650e+01 -1 0 0 +2936 979 2 3.7592630022093781e-01 3.0495347353597253e+01 1.1796023505393366e+01 2.6730913591147498e+01 0 0 0 +1589 530 2 3.5585578732322409e-01 3.0769313060266446e+00 1.1401326177486144e+01 3.0019014162730830e+01 0 0 0 +1715 572 2 3.6592154707217900e-01 1.9119631631711794e+01 5.0957894691655037e+00 3.0856115566946080e+01 0 0 -1 +2179 727 1 -7.3576805836275816e-01 7.6428581120790291e+00 1.3649075742178995e+01 2.3868015950000178e+01 1 0 0 +1430 477 2 3.6962577028369970e-01 9.5114639211613827e+00 1.1146345127838069e+01 2.9896118744479889e+01 1 0 -1 +2099 700 2 3.5590240159484249e-01 2.5165549541140205e+01 3.2366734523813196e+00 1.6492967667691268e+01 0 0 0 +2400 800 2 3.6240394614890403e-01 7.8397507555831805e+00 1.0390370612433033e+01 2.8804495886785038e+01 0 0 0 +51 17 2 3.6426344024945895e-01 6.9484764865737683e+00 1.1903531431972809e+01 2.7865028600320933e+01 0 0 -1 +49 17 1 -7.3441038539718639e-01 7.4046816950252339e+00 1.2688289530083246e+01 2.7514386835899902e+01 0 0 -1 +50 17 2 3.7680649087463575e-01 8.0628416188075249e+00 1.2839291690922069e+01 2.8189651996597505e+01 0 0 -1 +1223 408 2 3.7553084906304313e-01 1.0410741065457357e+01 9.2462147121461822e+00 2.9222646529105592e+01 0 0 -1 +1222 408 1 -7.5752147116263280e-01 1.0437140477975637e+01 9.5239762304402991e+00 3.0109463093526308e+01 0 0 -1 +2613 871 2 3.9209503293121073e-01 1.1379096832794138e+01 1.4210732760283307e+01 2.3982189963442210e+01 0 1 0 +2399 800 2 3.9151086462139789e-01 7.2864631937944306e+00 9.0003713345648766e+00 2.8539637167125836e+01 0 0 0 +2421 807 2 3.4816273159019728e-01 5.4747690850977886e+00 1.2595299279229106e+01 2.5700338326658262e+01 0 1 0 +2398 800 1 -7.2570165141514331e-01 7.1952936871103788e+00 9.8829171701046032e+00 2.8215888078479619e+01 0 0 0 +1568 523 2 3.6834063502975911e-01 6.1560165127909396e+00 8.6181010067783088e+00 2.5506608774633765e+01 0 0 0 +1601 534 2 3.2358122622373536e-01 1.0116384061065309e+01 6.4982652262942358e+00 2.3451422880453226e+01 0 0 0 +2233 745 1 -7.6861675710023625e-01 5.6161524871326440e+00 1.1981694313675961e+01 2.4969285341615876e+01 1 0 0 +2235 745 2 3.9836520947625603e-01 5.9696953497278322e+00 1.1198915402289865e+01 2.5328621473404599e+01 1 0 0 +205 69 1 -7.3186253672978274e-01 9.1783924588759973e+00 6.4329403599104618e+00 2.3715969238286270e+01 0 0 -1 +807 269 2 3.5677813942826919e-01 9.9407577011290922e+00 1.4762319948506670e+01 2.7529406079765664e+01 0 0 -1 +1567 523 1 -7.4318531449877401e-01 6.5885014905525283e+00 9.4150600556692012e+00 2.5476266167280151e+01 0 0 0 +1569 523 2 3.6287698509635291e-01 6.7669684753976611e+00 9.4857954369291981e+00 2.6478231281362799e+01 0 0 0 +2589 863 2 3.5864712440984275e-01 1.0246386261049768e+01 7.8905920035178907e+00 2.7693668999369891e+01 0 0 0 +1963 655 1 -7.2978146437310099e-01 9.6480234711128237e+00 1.4230304675408638e+01 2.9304354275696895e+01 0 0 0 +2588 863 2 3.6545566104495525e-01 1.0189190853122922e+01 8.8750228438218208e+00 2.6352546802691119e+01 0 0 0 +2587 863 1 -7.5162454275216706e-01 1.0621484814575963e+01 8.8277177881974023e+00 2.7310532994428019e+01 0 0 0 +1616 539 2 3.6508060642397017e-01 9.3888884268851331e+00 8.1908006786719412e+00 2.4337339212077602e+01 0 0 0 +2180 727 2 3.7049505703944913e-01 6.8335782900938487e+00 1.3124442268860719e+01 2.3943252330511189e+01 1 0 0 +1615 539 1 -7.0195211258738544e-01 9.3235833086111803e+00 9.0148562976188611e+00 2.4907497399279741e+01 0 0 0 +1617 539 2 3.7299194053441515e-01 8.3115161854827040e+00 9.0772445471886716e+00 2.5030182288118073e+01 0 0 0 +243 81 2 3.6943960457661101e-01 9.4431053783938257e+00 1.3073690124272256e+01 2.4435309877965214e+01 0 0 -1 +241 81 1 -7.3550207460185191e-01 1.0290879811508914e+01 1.3246509965238314e+01 2.4894754291299218e+01 0 0 -1 +242 81 2 3.6986133431240209e-01 1.0029662483541564e+01 1.3570438681856572e+01 2.5776338519097621e+01 0 0 -1 +845 282 2 3.6759904222954809e-01 1.1049604233757004e+01 1.0679185969056464e+01 2.7182404461721596e+01 0 1 -1 +846 282 2 3.5444703164848623e-01 1.0943196758053141e+01 1.1821319200125513e+01 2.6187538408398886e+01 0 1 -1 +844 282 1 -7.4646953513523773e-01 1.1514640541826521e+01 1.1481770936844777e+01 2.6901606791767986e+01 0 1 -1 +2775 925 2 3.7189529593826987e-01 9.6988915608867696e+00 1.3351926321439610e+01 2.9685155487054431e+01 0 0 0 +1965 655 2 3.6027082664024102e-01 1.0314724453905713e+01 1.4828627074189509e+01 2.9724633244913335e+01 0 0 0 +1251 417 2 3.6390514371470745e-01 1.2230601788389780e+01 8.3549891292779392e+00 2.6763176312018071e+01 0 0 -1 +1429 477 1 -7.3755387147500051e-01 8.6603756157886309e+00 1.1672256841694081e+01 2.9893916338742375e+01 1 0 -1 +1320 440 2 3.3984712578852078e-01 2.3740494180871607e+01 4.9289179891238080e+00 3.0337682886309828e+01 0 0 -1 +2611 871 1 -7.5168904395737246e-01 1.2046618954313910e+01 1.4815922679415843e+01 2.3515391494775386e+01 0 1 0 +1031 344 2 3.5255696149622395e-01 1.7590652400127311e+01 8.6111658574123950e+00 3.0280038245601290e+01 0 1 -1 +1030 344 1 -7.2090796210714692e-01 1.7485945167936734e+01 9.0101215506177201e+00 2.9374939950931687e+01 0 1 -1 +1032 344 2 3.6059340406568469e-01 1.7487395933041739e+01 8.2511054003332962e+00 2.8731636288112234e+01 0 1 -1 +70 24 1 -7.1908880074910375e-01 1.3003035662536277e+01 1.4573046134768324e+01 3.0478907896603410e+01 0 0 -1 +1224 408 2 3.7002032248760303e-01 1.1387284486344816e+01 9.7508752883121659e+00 3.0176246699077293e+01 0 0 -1 +1584 528 2 3.7338278298850380e-01 1.3122218925873353e+01 1.2560458414712578e+01 2.7609016300242700e+01 0 0 0 +1690 564 1 -7.3261588728269289e-01 1.4154750551460582e+01 8.0613976631500730e+00 3.0842115453033625e+01 0 0 0 +254 85 2 3.5400767882879891e-01 1.2975355583524246e+01 1.4358504881096881e+01 2.9535505531545841e+01 0 0 -1 +1318 440 1 -7.3829241788275757e-01 2.3440934652973024e+01 4.2173310504361314e+00 3.0884664709329645e+01 0 0 -1 +2067 689 2 3.7086266746562369e-01 1.6722170400844732e+01 1.0332129788727764e+01 3.0773577145031442e+01 0 0 0 +1249 417 1 -7.7176614437156921e-01 1.3149845842827069e+01 7.9479961653192213e+00 2.6533201295297772e+01 0 0 -1 +924 308 2 3.5926130269895179e-01 2.9777519518003594e-02 1.4642647413850332e+00 1.6076274244652478e+01 0 1 0 +1067 356 2 3.7555348424999740e-01 1.3474248871970975e+01 9.7777321119930694e+00 3.0871291345861994e+01 0 0 -1 +943 315 1 -7.3885981148809010e-01 1.3863022926984286e+01 1.2933914663542650e+01 2.8029602427302923e+01 0 0 -1 +944 315 2 3.2645766721847108e-01 1.4443815595593499e+01 1.2100364985372689e+01 2.8041591777057892e+01 0 0 -1 +1066 356 1 -6.9308342418200730e-01 1.3135376072575207e+01 1.0617038722820512e+01 3.0444555921833498e+01 0 0 -1 +2927 976 2 3.7231504642579638e-01 1.5948584908909615e+01 1.4366848905157598e+01 2.6497351790989303e+01 0 0 0 +2594 865 2 4.0942350427212904e-01 1.6866727123626671e+01 1.2447822063546607e+01 2.4504944623641542e+01 0 0 0 +2254 752 1 -7.5741993894989923e-01 1.7095129243139990e+01 1.3053068219190285e+01 2.6276042650491018e+01 0 0 0 +2256 752 2 3.5747611263439277e-01 1.6693942847611886e+01 1.2495350543941456e+01 2.6964518466576436e+01 0 0 0 +1250 417 2 3.9928654224103322e-01 1.3695812340575733e+01 8.7092802031819048e+00 2.6316681143940126e+01 0 0 -1 +2712 904 2 3.6740706677397278e-01 1.7836994135747865e+01 8.2973909185965731e+00 2.6855371731050841e+01 0 1 0 +389 130 2 3.8863285554926197e-01 1.4013644500234198e+01 1.1318805993758266e+01 2.4364338635282653e+01 0 0 -1 +2926 976 1 -6.5518108624343618e-01 1.5139904684103225e+01 1.4944574250370017e+01 2.6750834006912438e+01 0 0 0 +321 107 2 3.8839805196292321e-01 1.6721185856088599e+01 1.0384302981084428e+01 2.6905157017976478e+01 0 0 -1 +2593 865 1 -7.5584351346392065e-01 1.6711446642201821e+01 1.2177172868582511e+01 2.3635182926111757e+01 0 0 0 +2540 847 2 3.4933343827043423e-01 1.4559659276007043e+01 1.0699755814390009e+01 2.6618881822839249e+01 0 0 0 +2539 847 1 -7.6176399300844888e-01 1.3904482413237840e+01 1.0382490274097279e+01 2.5944402258811312e+01 0 0 0 +2541 847 2 3.6100473826910701e-01 1.3035262101429341e+01 1.0780955213044482e+01 2.6195143018200525e+01 0 0 0 +1765 589 1 -7.6838144694002819e-01 1.6196733211797753e+01 1.0792165979655469e+01 2.7606348291129120e+01 0 0 0 +1868 623 2 3.8260134982473554e-01 1.6638121121890155e+01 1.0537277543388669e+01 2.8449834790504301e+01 0 0 0 +2710 904 1 -7.4938284365397201e-01 1.7957536039248932e+01 9.0813264746525473e+00 2.6314605390941097e+01 0 1 0 +2711 904 2 3.7844864974130921e-01 1.7833608760430423e+01 8.8493325068138926e+00 2.5338943437270476e+01 0 1 0 +2255 752 2 3.6204341783161703e-01 1.7953977765971938e+01 1.3350999568023578e+01 2.6603482321664856e+01 0 0 0 +1831 611 1 -7.2163466401533338e-01 1.9864072191461105e+01 1.3829159726081066e+01 2.7797560797020392e+01 0 0 0 +2928 976 2 3.7733032487063167e-01 1.4608448925878156e+01 1.4235562836990999e+01 2.7195367897781161e+01 0 0 0 +1252 418 1 -6.9337922552946130e-01 2.3505755663332447e+01 1.5479486650063775e+01 3.0861932010713211e+01 0 0 -1 +273 91 2 3.6615962090347254e-01 2.0184349969732065e+01 1.0907384134317995e+01 3.0720161079963741e+01 0 0 -1 +2677 893 1 -6.9606850966630252e-01 1.9150644739527728e+01 1.1067304574358163e+01 2.3043684317980041e+01 0 0 0 +1954 652 1 -7.4644189057264454e-01 2.4607064663740783e+01 1.3434072305963191e+01 2.3021391544329379e+01 0 0 0 +1955 652 2 3.2345829415543931e-01 2.3977466272082573e+01 1.4196279372107945e+01 2.3030159411875562e+01 0 0 0 +767 256 2 4.1803269378989694e-01 3.4008874571419883e+00 7.5149829030921094e+00 3.0161455750068082e+01 0 0 -1 +1326 442 2 3.8458355610183048e-01 2.2657037909937561e+01 7.6952793130615769e+00 2.9808736186645596e+01 0 0 -1 +2769 923 2 3.6816651155703489e-01 2.1552111681654665e+01 1.4328644005991656e+01 2.3808756107552878e+01 0 0 0 +2050 684 1 -7.3036464236562093e-01 1.8830612616867469e+01 8.2123081028284890e+00 2.3776564335254232e+01 0 0 0 +26 9 2 3.7663516946512482e-01 2.4817458855973054e+01 7.3213029642390079e+00 3.0418530560350298e+01 -1 0 -1 +2052 684 2 3.6415991144659277e-01 1.9219186731828366e+01 8.7662510600245618e+00 2.3129451374004418e+01 0 0 0 +372 124 2 3.8267756729165803e-01 2.0361196230764332e+01 8.3608907289740912e+00 3.0460856817817696e+01 0 0 -1 +2777 926 2 3.2745849681104400e-01 1.8908100590978659e+01 1.3938658983239886e+01 3.0327175040705690e+01 0 0 0 +2051 684 2 3.5322405173020199e-01 1.9063977438781244e+01 7.3429362850749094e+00 2.3399643835257663e+01 0 0 0 +1203 401 2 3.7315442065106896e-01 2.1086677563589795e+01 9.0475313492608436e+00 2.6567582880722401e+01 0 1 -1 +2717 906 2 3.4179291281142737e-01 2.4586366501334876e+01 1.2450697874123701e+01 2.5943500249323172e+01 0 1 0 +2716 906 1 -6.9790408596402775e-01 2.3764414856222807e+01 1.2402371316352536e+01 2.5274239075029751e+01 0 1 0 +1202 401 2 3.8767203412495160e-01 1.9570007757344687e+01 9.6544295887039659e+00 2.6438772204238230e+01 0 1 -1 +2554 852 1 -6.8587633698067185e-01 2.0779628128122603e+01 1.1863751647131176e+01 2.5075524504922058e+01 0 0 0 +2555 852 2 3.5006620922183168e-01 2.1670502603019280e+01 1.2225748680662123e+01 2.5372392535752759e+01 0 0 0 +1459 487 1 -7.6091546577333902e-01 2.4531265931752326e+01 8.1992126418417346e+00 2.6382772014022091e+01 0 1 -1 +2207 736 2 3.5787456165345188e-01 2.2789831114430680e+01 7.7197335845105206e+00 2.6196582206987429e+01 0 0 0 +1461 487 2 3.7987848336558844e-01 2.4270378568134412e+01 8.9804879511398408e+00 2.6871767299035508e+01 0 1 -1 +1460 487 2 4.1084175724619054e-01 2.4805603355334107e+01 8.4977119717592196e+00 2.5504322743398028e+01 0 1 -1 +1355 452 2 3.4231126247334248e-01 2.3242726330565116e+01 1.3762550164577764e+01 2.6881000678053365e+01 0 0 -1 +1354 452 1 -7.4744912752367210e-01 2.2612918195537944e+01 1.4476063968319004e+01 2.6985247795495919e+01 0 0 -1 +1201 401 1 -7.3438678231092258e-01 2.0526505684678551e+01 9.7863294327368511e+00 2.6871752271518481e+01 0 1 -1 +1833 611 2 3.5221933723432480e-01 1.9520488894503714e+01 1.4695159899882913e+01 2.8146904442089273e+01 0 0 0 +1832 611 2 3.5840937381944460e-01 2.0727904841758630e+01 1.4146571997584156e+01 2.7369774764842777e+01 0 0 0 +2556 852 2 3.7015980766861267e-01 2.0683038594399971e+01 1.1134619056060622e+01 2.5773062888891904e+01 0 0 0 +2718 906 2 3.7227306718111819e-01 2.4028020235307523e+01 1.2991715491341429e+01 2.4525292676997790e+01 0 1 0 +1937 646 2 3.9163086699743588e-01 1.9867652757001487e+01 1.1566317364903790e+01 2.3543602668840418e+01 0 0 0 +2206 736 1 -7.4319344325428016e-01 2.1930675435890773e+01 7.3225352759222107e+00 2.6024055205952003e+01 0 0 0 +2743 915 1 -7.1454330024061097e-01 2.3732929529155555e+01 1.0421216441480366e+01 2.8057495220151395e+01 0 0 0 +2744 915 2 3.5522423066547987e-01 2.3002132804534881e+01 1.0738322689970936e+01 2.8655016353926133e+01 0 0 0 +2032 678 1 -7.1670809265970581e-01 2.1126484323243023e+01 1.1618053907314316e+01 2.9094188912910383e+01 0 0 0 +2033 678 2 3.7232309926473756e-01 2.0649257627967469e+01 1.2323094889572433e+01 2.8618072444528572e+01 0 0 0 +2034 678 2 3.6058725589811036e-01 2.0936902186625044e+01 1.0893590056556416e+01 2.8474466449709357e+01 0 0 0 +370 124 1 -7.7486139711504487e-01 2.0772648527146977e+01 7.5909672370584884e+00 3.0118583147604571e+01 0 0 -1 +1324 442 1 -7.4575661471423416e-01 2.3502376638532120e+01 7.5262522508895060e+00 2.9415435351328117e+01 0 0 -1 +1325 442 2 3.5496586285518006e-01 2.3679337842730096e+01 8.2512296835829471e+00 2.8748497387054208e+01 0 0 -1 +668 223 2 3.9019269915085431e-01 3.0178195645804333e+01 4.8795282230790766e+00 1.5729127343218364e+01 0 0 0 +1356 452 2 3.4291885561066721e-01 2.2454776700784222e+01 1.4767791491579834e+01 2.6043658073713843e+01 0 0 -1 +1518 506 2 3.7297762471075507e-01 1.1827838269216288e+01 3.9958652087929397e-01 1.8592675856644892e+01 0 0 0 +805 269 1 -7.0222538880556751e-01 1.0121294060846285e+01 1.5336738420335568e+01 2.6735778368045619e+01 0 0 -1 +2054 685 2 3.7990930902103182e-01 2.5187909137143663e+01 7.7732309370045662e+00 2.3255653954477527e+01 0 0 0 +2397 799 2 3.6284896121242138e-01 2.9287473241487039e+01 1.2656625252638880e+01 2.6335525234599711e+01 -1 0 0 +2383 795 1 -7.7168804571121441e-01 2.9782473536317386e+01 9.1866963866927751e+00 2.3601641485033145e+01 -1 1 0 +2214 738 2 3.8436421972059215e-01 2.7476598450427190e+01 1.4493391223539671e+01 2.9896758921674625e+01 0 -1 0 +439 147 1 -7.3582490133829759e-01 2.7786009948387601e+01 1.1274913579352024e+01 2.6687825761059038e+01 0 0 -1 +2343 781 2 3.4907141645629958e-01 1.0064014998135919e-01 7.7754273915464154e+00 2.4326714624655818e+01 0 1 0 +440 147 2 3.7856671999853420e-01 2.7496780585523805e+01 1.0388428574885440e+01 2.7144276799038430e+01 0 0 -1 +211 71 1 -6.9206319141369588e-01 9.8551753558672086e+00 2.2881315888689069e+00 3.0620859466811371e+01 0 0 -1 +2745 915 2 3.7111900686371230e-01 2.4140008737882518e+01 1.1195112566037064e+01 2.7685767597761451e+01 0 0 0 +1517 506 2 3.5027749431956678e-01 1.2241154057467007e+01 5.4251939566346601e-02 1.7194415153076616e+01 0 0 0 +2266 756 1 -7.4837978412387107e-01 2.5666959854110619e+01 1.2764591897885040e+01 2.7289567559533129e+01 -1 0 0 +1231 411 1 -7.3512264787799930e-01 2.9224034939070627e+01 1.0032025404300111e+01 2.9819780031551147e+01 0 0 -1 +2364 788 2 3.7600045855482433e-01 3.8210510880160570e-01 1.4090075630453816e+01 2.5655632621486543e+01 0 0 0 +17 6 2 3.8404127316507997e-01 2.7814631527943114e+01 9.6136735024217916e+00 2.8908411182917405e+01 -1 0 -1 +441 147 2 3.6714781700274551e-01 2.7577606415934124e+01 1.1202264812631968e+01 2.5761554179009281e+01 0 0 -1 +1022 341 2 3.8051071504683176e-01 1.6979920708603281e+01 5.1095945580787729e+00 3.0567559173830919e+01 0 1 -1 +2899 967 1 -6.9839264007380397e-01 2.7047479511696213e+01 9.2972429530987988e+00 2.8330056852929889e+01 0 1 0 +1859 620 2 3.7662362325805243e-01 1.9790140790461642e+01 2.1025761371817378e-01 3.0018716010965100e+01 0 0 0 +2262 754 2 4.0773363764782983e-01 2.6457864585390475e+01 1.2222576178807852e+01 2.7284847068774752e+01 -1 0 0 +2395 799 1 -7.3262416296173027e-01 3.0281010264566000e+01 1.2678454819065420e+01 2.6308455438532384e+01 -1 0 0 +186 62 2 3.7105946236647086e-01 8.2641482539367761e-01 1.3813689264504916e+01 1.5989204090997502e+01 0 0 0 +2472 824 2 3.4740305439733304e-01 5.4596877340897256e+00 2.8511874469288285e+00 2.9914633676876164e+01 0 1 0 +801 267 2 3.9356148663602925e-01 2.4096965187295133e+01 4.3747877468416174e-01 2.4191366888096685e+01 -1 1 -1 +1406 469 2 3.5889338972649137e-01 2.5705908434356864e+01 1.1899739971576274e+01 1.5967572235992353e+01 0 1 0 +2776 926 1 -7.7032252786047339e-01 1.8546809640933855e+01 1.4709725997251729e+01 3.0780839661899606e+01 0 0 0 +984 328 2 3.7589816383438779e-01 1.5843834465814167e+01 2.1083921347527315e+00 3.0737484844494858e+01 0 1 -1 +549 183 2 3.8617949742343616e-01 2.6246523659256205e+01 1.5286360803191695e+01 2.0816859470888282e+01 0 0 0 +1409 470 2 3.5954437351334118e-01 2.6316954826345647e+01 8.3596162239170158e-01 1.6164716406264585e+01 0 1 0 +407 136 2 3.5737383026556502e-01 2.2283251894607368e+01 1.8988241314283669e-01 3.1037036210495021e+01 0 0 -1 +1436 479 2 3.8124932259699423e-01 3.0459601482399361e+01 8.1629619523180050e+00 1.5701157569868110e+01 0 0 0 +2315 772 2 3.7657760419023989e-01 1.0110963694832099e+01 5.5087374717922248e+00 1.5986441777362851e+01 0 1 0 +272 91 2 3.5697070015610638e-01 1.8870024361143980e+01 1.0270113656671143e+01 3.0934021587873112e+01 0 0 -1 +998 333 2 3.4041375882109109e-01 2.2529203339448873e+01 1.5424313822779025e+01 3.0948004844537024e+01 0 0 -1 +641 214 2 3.5967083873655054e-01 2.3950018178880701e+01 6.0083897031014279e+00 1.5646673375867737e+01 0 0 0 +2213 738 2 3.9905979850899792e-01 2.6919442322391607e+01 1.5391041971116845e+01 3.0992982197532420e+01 0 -1 0 +1307 436 2 3.4503419400871360e-01 2.8850456277268556e+01 1.2832572500657587e+01 3.1036208171232158e+01 0 1 -1 +1377 459 2 3.6145268451783769e-01 4.9813657775303808e+00 2.2320550475034722e+01 2.7099934555927128e+00 1 0 0 +853 285 1 -7.3520649994988041e-01 4.9170073315906828e+00 2.3257867726170538e+01 2.7834196547407686e+00 0 0 0 +855 285 2 3.3751920999950380e-01 4.0376106836924377e+00 2.3508728971170537e+01 2.3618171480494294e+00 0 0 0 +674 225 2 3.5579603600565934e-01 1.2556860214013086e+00 2.0526106150741324e+01 5.9429658258120099e+00 1 -1 0 +776 259 2 3.3687009472154289e-01 1.4706783248068886e+00 2.0558905786742393e+01 2.3812653251518192e+00 0 0 0 +673 225 1 -7.2362900272915021e-01 3.4837511994522152e-01 2.0906272801285638e+01 5.7322170314623753e+00 1 -1 0 +1372 458 1 -7.2271758732812852e-01 1.7912847373590091e+00 2.0853123244453275e+01 3.3024899636151592e+00 1 0 0 +1981 661 1 -6.9609525303561315e-01 4.6362217272477855e+00 2.1543939142993690e+01 5.9298228434220279e+00 1 -1 1 +1982 661 2 3.5423417005857399e-01 4.8233248494559646e+00 2.2400901876437732e+01 6.2940656316416410e+00 1 -1 1 +1983 661 2 3.3994529251158107e-01 4.4298911910204977e+00 2.1016966423129574e+01 6.7424697863375327e+00 1 -1 1 +675 225 2 3.7874381902779058e-01 2.8292422259293143e-01 2.1436800623913488e+01 6.5272433762437796e+00 1 -1 0 +1374 458 2 3.8437132747653374e-01 1.0324336606725366e+00 2.0806516582044765e+01 3.8319049933011691e+00 1 0 0 +757 253 1 -7.3616671509959819e-01 4.6874750191101455e+00 2.0354715515942466e+01 3.3835616648380520e+00 0 0 0 +646 216 1 -7.4144123425876218e-01 8.7025453204935133e-01 1.7154901642415687e+01 1.9943764351177937e+00 1 0 0 +159 53 2 3.8649674830675296e-01 4.9248439939546982e+00 1.8725331864425588e+01 2.6950179545756363e+00 0 0 0 +1829 610 2 3.5994180931204850e-01 6.9432792887059236e-01 1.8884142152934398e+01 1.1079080774231416e+00 0 0 1 +1638 546 2 3.8062230348106058e-01 4.9961027121403463e+00 2.0694425157453175e+01 4.2690737239142189e+00 0 0 1 +758 253 2 3.8396828309964637e-01 3.7331105958266262e+00 2.0398687796017889e+01 3.5267657453713932e+00 0 0 0 +2323 775 1 -7.6274852305224550e-01 2.3498026326552583e+00 2.3267361163564136e+01 1.5376879143867994e+00 0 0 1 +2325 775 2 3.4752431823370106e-01 2.3577192366623696e+00 2.2408261338078788e+01 1.8810826769061988e+00 0 0 1 +1828 610 1 -7.4848034676727737e-01 7.2509186761944100e-01 1.9820720269909170e+01 6.9635609507510898e-01 0 0 1 +647 216 2 3.7567515438289367e-01 7.7217212041441396e-01 1.6855307225520843e+01 1.0277670687743758e+00 1 0 0 +1063 355 1 -7.4972997294180699e-01 2.6155541595857885e+00 1.9652834438342506e+01 7.2351141013598470e+00 0 0 0 +648 216 2 3.9287251098806886e-01 1.5004423598965582e+00 1.6524111876337756e+01 2.4057361341437544e+00 1 0 0 +284 95 2 3.5571294393081432e-01 6.4723685388158412e+00 2.4046843767698931e+01 7.2967991662829155e+00 0 0 0 +1469 490 2 3.9157260047427511e-01 1.8261870932432822e+00 1.8105497356444744e+01 6.9670943039550810e+00 1 0 0 +1161 387 2 3.7109842714260582e-01 3.0372744217846197e+01 1.7310936015586805e+01 2.9052826757659362e+00 0 0 0 +61 21 1 -7.1915143019389238e-01 1.3363841992223695e+00 1.7256173542343735e+01 6.9219532237645982e+00 0 0 0 +629 210 2 3.6430377284430215e-01 2.7666966959922707e+01 1.6191976253238945e+01 1.1247802121718347e+01 0 0 0 +769 257 1 -7.2123717759963757e-01 3.0109812974123065e+00 1.5711230291228754e+01 2.9040336704797705e+00 0 0 0 +63 21 2 3.7142418395045473e-01 4.4983797778331253e-01 1.7472544962885404e+01 6.6776918650778168e+00 0 0 0 +1050 350 2 3.6714562210961105e-01 7.1388233943708697e+00 1.6112352566344853e+01 4.2313041986695437e+00 0 0 0 +771 257 2 3.7258146496478006e-01 3.7316712625305466e+00 1.6361190068378601e+01 3.0630773900297892e+00 0 0 0 +1563 521 2 4.1764023920004645e-01 5.6080931932543310e+00 1.7679970861929892e+01 9.2803632980923589e-01 0 0 1 +1376 459 2 3.6977779659685683e-01 5.7197066795083931e+00 2.3780967597645137e+01 1.2296966461755161e+00 1 0 0 +756 252 2 3.8410200377464593e-01 4.4558187871718351e+00 3.0902352253980968e+01 7.8893910456925500e+00 0 0 0 +1966 656 1 -7.0598282933888645e-01 5.3096400138651019e+00 1.6830081332719470e+01 7.3101300579635629e+00 0 0 1 +157 53 1 -7.1852766204986152e-01 4.9965924192637718e+00 1.7733210415195334e+01 2.5305017691771026e+00 0 0 0 +968 323 2 3.6864860655895504e-01 7.2260313769063620e+00 1.7160115849981331e+01 7.8612679593019088e+00 0 0 0 +978 326 2 3.4986502112660256e-01 7.9275384818267343e+00 1.7719364540471958e+01 4.9012074046812275e+00 0 0 0 +1395 465 2 3.8751010940669467e-01 8.2803290542441648e+00 2.2765814222040678e+01 6.8693729585362027e+00 1 1 0 +1393 465 1 -7.1667431449545782e-01 8.8268657696462469e+00 2.1900326918391897e+01 7.0214400681588991e+00 1 1 0 +710 237 2 3.8204186445849492e-01 1.0699059845911856e+01 1.7320806794375553e+01 1.1490876880746872e+00 1 0 0 +709 237 1 -7.5321336572864950e-01 1.0444807988191570e+01 1.7684165446842222e+01 1.9980504265104064e+00 1 0 0 +711 237 2 3.9573447825273195e-01 9.7634280482867908e+00 1.7198902060796360e+01 2.4525433116984074e+00 1 0 0 +914 305 2 3.6570555465416504e-01 9.4192667289396574e+00 2.1390780987711626e+01 4.3185523755436481e+00 0 0 0 +913 305 1 -7.1670755031685385e-01 8.7160834201292410e+00 2.0870860704238282e+01 3.9473108248769453e+00 0 0 0 +915 305 2 3.3325441535579370e-01 8.4587211579727430e+00 2.1483250627735611e+01 3.2518553923524829e+00 0 0 0 +1633 545 1 -7.2967170646070356e-01 8.0249309258073449e+00 1.7710066368264414e+01 8.0415827931283541e+00 0 0 1 +1634 545 2 3.6922227284171938e-01 8.3880104158869067e+00 1.7952667106814701e+01 7.2003370000277949e+00 0 0 1 +158 53 2 3.6212477811519911e-01 5.5624038279547827e+00 1.7342266159888847e+01 3.3244638776128386e+00 0 0 0 +255 85 2 3.9945035103287385e-01 8.3726833799828295e+00 1.9159780066566611e+01 4.6380088784972724e+00 0 0 0 +253 85 1 -7.3064485694220160e-01 8.4636628127450440e+00 1.8432518368979274e+01 5.2534317602531377e+00 0 0 0 +300 100 2 3.9278983387251859e-01 1.2211583075443677e+01 1.8308153178609142e+01 2.8481793951727798e+00 0 -1 0 +299 100 2 3.7112922158200323e-01 1.2390232669788634e+01 1.9683585280398020e+01 3.4887153261137840e+00 0 -1 0 +466 156 1 -7.1422478660756383e-01 1.1616077541404199e+01 2.1282199185173962e+01 4.4329056239141291e+00 0 0 0 +298 100 1 -7.2626548321767859e-01 1.2832446032106636e+01 1.9025129120453343e+01 2.9586214158007391e+00 0 -1 0 +467 156 2 3.6203011900252402e-01 1.1865914035605504e+01 2.0712154076544468e+01 5.1898747520501836e+00 0 0 0 +376 126 1 -7.1708573736543113e-01 8.6796789707301993e+00 2.3041581569487683e+01 1.5959958738004092e+00 0 -1 0 +468 156 2 3.7447843004189912e-01 1.1441213216390041e+01 2.2134915574767909e+01 4.7981128824413162e+00 0 0 0 +825 275 2 3.4630967272985691e-01 2.1197232843194344e-01 2.8713454432196624e+01 1.5483466792302057e+01 0 0 0 +377 126 2 3.7212022234201986e-01 9.0373040176840576e+00 2.3708963367673398e+01 2.2690007717434857e+00 0 -1 0 +1000 334 1 -7.3075902181300656e-01 8.8241006118171370e+00 1.5980038269830017e+01 3.5121983696177663e+00 0 0 0 +232 78 1 -7.1935170015693795e-01 1.1367553560120852e+01 1.7516519173910190e+01 5.6761280474775750e+00 0 0 0 +233 78 2 3.4226764711242119e-01 1.1898861494789887e+01 1.8274103967755945e+01 5.8575518320184585e+00 0 0 0 +1827 609 2 3.6739977489158565e-01 9.2695819534435913e+00 1.8947109939364175e+01 1.2313570492272501e+00 0 0 1 +378 126 2 3.5953680091615808e-01 7.7504438216404017e+00 2.3309109273166122e+01 1.4701159156616048e+00 0 -1 0 +2156 719 2 3.5288614482338343e-01 1.4195606824246877e+01 1.5748332130239204e+01 1.9522680503923120e+00 0 0 1 +2155 719 1 -7.2784982031232393e-01 1.3309945026149416e+01 1.5663186859160566e+01 2.2458465690781058e+00 0 0 1 +1070 357 2 4.0242104758192254e-01 1.0006055434826775e+01 2.2517434463010623e+01 3.1681549946571791e-01 0 0 0 +326 109 2 3.5832493697816448e-01 1.1127549304803788e+01 1.6543194716164390e+01 7.6372198514959058e+00 0 0 0 +1375 459 1 -7.4927306637055235e-01 6.3028905287973434e+00 2.3818550343574532e+01 4.8334017342298796e-01 1 0 0 +234 78 2 3.7825226719218280e-01 1.0479958888869660e+01 1.7831446085302030e+01 5.5878089957823871e+00 0 0 0 +2036 679 2 3.5369298257878984e-01 1.8681615045565923e+01 2.5975415925228504e+01 1.4251153185668935e+01 0 0 1 +1018 340 1 -7.2439776916941612e-01 1.5892501420849426e+01 1.7492846658111773e+01 1.7508411496471137e+00 0 1 0 +1001 334 2 3.3909750762120677e-01 8.5641147014040602e+00 1.5626323085028652e+01 2.5934128640939740e+00 0 0 0 +1734 578 2 3.9457443469475756e-01 7.5708272703449246e+00 1.6166234064061459e+01 2.1036261985416574e-01 0 0 1 +2654 885 2 4.0551930439273709e-01 2.1430068337843018e+01 1.5666862495041043e+01 9.1464694810108362e+00 0 0 1 +2108 703 2 3.9155488189778465e-01 1.2193729622687782e+01 2.1354313648387450e+01 1.3470153925190623e-01 0 0 1 +264 88 2 3.6564111674887212e-01 1.7673966571112715e+01 1.7627586751788339e+01 2.2440087393477479e+00 0 0 0 +2602 868 1 -6.8614742265344086e-01 1.4432720337189108e+01 1.7444494884489686e+01 7.1784998360576218e+00 0 0 1 +2603 868 2 3.5698512136306798e-01 1.4709102782461828e+01 1.7568248262367678e+01 6.2459637273994781e+00 0 0 1 +1779 593 2 3.3985153746115848e-01 1.5687134238333501e+01 1.9215619068629838e+01 4.7656307265499152e+00 0 0 1 +1777 593 1 -7.4066667392284058e-01 1.5378966614260536e+01 1.8295687903210123e+01 4.5755077699244522e+00 0 0 1 +1778 593 2 3.4014268234240580e-01 1.4675150959373795e+01 1.8459946822448480e+01 3.9176536532953761e+00 0 0 1 +287 96 2 3.5039465808115899e-01 1.8113691747200303e+01 2.0060417150142214e+01 4.0336772632706479e+00 0 0 0 +2699 900 2 3.5658869902554957e-01 1.7045221706542904e+01 2.1243239634684162e+01 5.6504909865542352e+00 0 0 1 +263 88 2 3.6438294586849768e-01 1.8758382578204067e+01 1.6931341260971163e+01 3.1798251567598235e+00 0 0 0 +286 96 1 -7.6165748766751817e-01 1.7222009916791567e+01 2.0396474110331589e+01 4.0313883751197555e+00 0 0 0 +262 88 1 -7.2823142892947978e-01 1.8663339692989990e+01 1.7318436972944184e+01 2.2481973037115304e+00 0 0 0 +472 158 1 -7.2246774265653502e-01 1.4859840152567269e+01 2.1703317100897223e+01 2.2646897112240119e+00 0 -1 0 +288 96 2 3.6969993895661685e-01 1.7096807551701581e+01 2.0612969563678334e+01 3.1348586740129982e+00 0 0 0 +473 158 2 3.5534630248855253e-01 1.4119522026342489e+01 2.1624548652242922e+01 1.5907673026202556e+00 0 -1 0 +1054 352 1 -7.1438246754363388e-01 1.8000415380923481e+01 1.6590534036017306e+01 4.7929580919444321e+00 0 0 0 +1047 349 2 3.6859773747118585e-01 1.9450792925014401e+01 1.8689814418698880e+01 2.9105364289327329e+00 0 0 0 +1056 352 2 3.7972920279152972e-01 1.8068273313537087e+01 1.6118909737492015e+01 5.6538388426608721e+00 0 0 0 +1055 352 2 3.5434411621069151e-01 1.7149159665531318e+01 1.7071601037677752e+01 4.8690919800673997e+00 0 0 0 +1045 349 1 -7.0293424130799842e-01 2.0021137538127160e+01 1.9417567576000515e+01 3.2798849706518540e+00 0 0 0 +2107 703 1 -7.6803008473882806e-01 1.2894033700069791e+01 2.0780694317680165e+01 4.4461162369517926e-01 0 0 1 +2109 703 2 3.6841735157903299e-01 1.2660882750074881e+01 2.0419982003297214e+01 1.2868677436593952e+00 0 0 1 +2008 670 1 -7.1318891054517020e-01 1.9292810974277945e+01 1.9680409529617517e+01 7.3021180621858344e+00 0 0 1 +2010 670 2 3.5334322178545902e-01 1.9187070899602020e+01 2.0589178624453609e+01 7.4972637017281363e+00 0 0 1 +2009 670 2 3.5536776640230716e-01 1.9823854152400973e+01 1.9739432156923204e+01 6.5219768413870769e+00 0 0 1 +1020 340 2 3.3127327304395382e-01 1.5574217964576853e+01 1.8026514498970883e+01 2.5181160795807540e+00 0 1 0 +316 106 1 -7.4815326075891353e-01 1.9875574708927214e+01 2.2652294952884365e+01 6.9949471767612046e+00 0 -1 0 +2762 921 2 3.6473029481672714e-01 1.8011403601994317e+01 2.2227818382757981e+01 6.4517076410616871e+00 0 0 1 +2761 921 1 -7.2161175182531923e-01 1.7108541332627954e+01 2.1814193989420232e+01 6.4863221826620752e+00 0 0 1 +2604 868 2 3.6235838320129088e-01 1.5199163409273311e+01 1.7793512563824805e+01 7.6803759701187477e+00 0 0 1 +1173 391 2 3.8368206485428941e-01 1.2943958626291606e+01 1.6369286720717454e+01 5.0782558942964409e+00 0 0 0 +1082 361 2 3.5725621479485065e-01 9.7386332081614473e+00 2.5847739683697721e+01 3.0199412287553579e-01 0 0 0 +2426 809 2 3.9014084542948613e-01 2.5495827285938022e+00 1.9879954791275928e+01 9.1683484210780722e-02 0 0 1 +415 139 1 -7.4273174337580183e-01 1.7984642542152642e+01 1.5662715761200037e+01 7.4796355027689359e+00 0 0 0 +817 273 1 -7.1145364412181644e-01 4.2354448228157642e+00 3.0848445715791712e+01 3.3839673941147135e+00 0 0 0 +2916 972 2 3.6399216254522349e-01 2.8527549939068741e+01 2.2982156707672967e+01 1.5125922027046085e+01 0 0 0 +474 158 2 3.5946108003884264e-01 1.5585386092548063e+01 2.1297359866573657e+01 1.7853527206108262e+00 0 -1 0 +1442 481 2 3.6679915682077535e-01 2.7221890162594967e+01 3.0853919684972876e+01 6.1243939656359307e+00 0 -1 0 +1254 418 2 3.7116456490628669e-01 1.9903998895337349e+01 1.6863986572931733e+01 6.9883015347164001e-01 0 0 0 +2698 900 1 -7.7545314652810560e-01 2.0751473797956866e+01 1.6577546390906658e+01 3.8264404035562399e-01 0 0 1 +1046 349 2 3.3090073244898099e-01 2.0682372662886369e+01 1.8912763850781221e+01 3.8454542391287196e+00 0 0 0 +1264 422 1 -7.2501064617946076e-01 2.1225916960923009e+01 1.7535298367536335e+01 5.5677304474970235e+00 0 0 0 +1265 422 2 3.8861293293972260e-01 2.1581212645253736e+01 1.7378937365868804e+01 4.7279840652965044e+00 0 0 0 +1337 446 2 3.9398402977175517e-01 2.1618854942506662e+01 1.6992289865591182e+01 1.9134674148175284e+00 0 0 0 +1336 446 1 -7.4809738809572190e-01 2.2030322781316251e+01 1.7124505222988510e+01 2.7901659756519441e+00 0 0 0 +1338 446 2 3.5523440927157107e-01 2.2918824229141876e+01 1.6810185363119171e+01 2.8803359625463010e+00 0 0 0 +2973 991 2 3.5662738462216725e-01 1.9750967425155022e+01 2.2071027511600928e+01 1.3468505637329373e+00 0 0 1 +1181 394 2 3.8669363153730546e-01 2.0497904262864228e+01 2.0855345671695488e+01 2.0295683681128875e+00 0 0 0 +1444 482 1 -6.7983985437307159e-01 2.0660403082660956e+01 2.1694479298420354e+01 1.4981017531780987e+00 0 0 0 +1266 422 2 3.3490672568000618e-01 2.1205180224436369e+01 1.8487007364140478e+01 5.7101158472741185e+00 0 0 0 +1152 384 2 3.3518450908748509e-01 2.4607771167812295e+01 1.9098215836157074e+01 4.1644282019576258e+00 0 0 0 +2792 931 2 3.5645632223712637e-01 2.3811596018003996e+01 2.1772904285268641e+01 3.5193565043609900e+00 0 0 1 +1150 384 1 -7.3448599933983960e-01 2.4174942243319673e+01 1.8472201560677753e+01 4.8064359269327177e+00 0 0 0 +1151 384 2 3.6173027062307733e-01 2.4631029813175591e+01 1.8777135583269391e+01 5.6171733288673451e+00 0 0 0 +2239 747 1 -7.2632553814212819e-01 2.3535212426259740e+01 1.9391810674588768e+01 5.6148807017238223e-01 0 0 1 +2815 939 1 -7.5921315886160734e-01 1.7322369678780067e+01 2.1176214739859290e+01 9.9251420043365424e-01 0 0 1 +2793 931 2 3.6814816264716388e-01 2.2827068686348145e+01 2.2270420408963805e+01 4.6038852890958992e+00 0 0 1 +2791 931 1 -7.3411323787394145e-01 2.3661302057971419e+01 2.1797114259170954e+01 4.4620874578380727e+00 0 0 1 +2958 986 2 3.9869887384734931e-01 2.2037354955409469e+01 2.3029625186168452e+01 1.6343787412115072e+00 0 0 1 +1776 592 2 3.6598667331034290e-01 2.3796208094450865e+01 1.6731675507024480e+01 5.7878693083929980e+00 0 0 1 +1329 443 2 3.3682459528125397e-01 2.5163739092720778e+01 2.0039229827629349e+01 1.9971688019433658e+00 0 0 0 +2643 881 2 3.7039716155372293e-01 2.4005426832710164e+01 1.6883467101414865e+01 7.2585554753636066e+00 0 0 0 +2641 881 1 -6.9686577930997284e-01 2.3682191509139411e+01 1.6204045066788964e+01 6.5846470466215825e+00 0 0 0 +396 132 2 4.1276130184906729e-01 2.0710935025950135e+01 1.6315062407657329e+01 6.8768805697910933e+00 0 -1 0 +394 132 1 -7.4723122441974044e-01 2.0553974271751926e+01 1.5531023924465099e+01 7.4352891013540221e+00 0 -1 0 +1549 517 1 -7.4392899159898218e-01 2.1672389607847645e+01 2.0809118504881202e+01 6.3541899075774024e+00 -1 0 0 +1550 517 2 3.5945013029116596e-01 2.2542571367412574e+01 2.1013787675957762e+01 5.9220420381194936e+00 -1 0 0 +1551 517 2 4.1060863188637420e-01 2.1330489734613465e+01 2.1626659968350339e+01 6.6775362251154462e+00 -1 0 0 +187 63 1 -7.7813433155291212e-01 3.0629567383459374e+01 2.2349531182527997e+01 1.3106795010648782e+00 -1 0 1 +2956 986 1 -7.1975927288017838e-01 2.2969793790523482e+01 2.3274776937938221e+01 1.7329227562475202e+00 0 0 1 +2816 939 2 3.4857152547439851e-01 1.7938857836385989e+01 2.1887289565757339e+01 7.8913321311638884e-01 0 0 1 +1826 609 2 3.5131187006748366e-01 8.4871140865779715e+00 1.9845720950741924e+01 2.0876645559329297e+00 0 0 1 +1099 367 1 -6.9245925144271170e-01 9.3002347019241700e+00 2.9470099295486769e+01 9.4771488928205834e+00 0 0 0 +1968 656 2 3.5002912170804579e-01 5.4424501973759787e+00 1.6419735534746611e+01 6.4468743340494390e+00 0 0 1 +1101 367 2 3.8034542462663312e-01 8.6966209881750913e+00 2.8780268425854455e+01 9.8509552114970287e+00 0 0 0 +796 266 1 -7.6356758328059560e-01 3.0215616057761050e+01 1.8391562042156171e+01 5.5932390542907511e+00 -1 0 0 +785 262 2 3.7719159679540409e-01 3.0050279273838523e+01 1.7871046061179989e+01 4.7605021226753914e+00 -1 0 0 +798 266 2 3.8060827618580106e-01 3.0576128526967441e+01 1.9235076886677490e+01 5.3247599533504140e+00 -1 0 0 +1585 529 1 -7.5609350866441949e-01 2.5145848426927081e+01 1.6619583364866354e+01 3.2512741471091666e+00 -1 0 1 +1335 445 2 3.6406464562030649e-01 2.6924950711764712e+01 2.2237393389778372e+01 1.0603876694350756e-01 0 0 0 +1348 450 1 -7.0635988222156298e-01 2.5159386132018302e+01 2.0392735171655779e+01 6.6450934451745853e+00 0 0 0 +444 148 2 3.3828325895694944e-01 2.7152581004088272e+01 1.8070604250208053e+01 6.1986010373904472e+00 0 0 0 +1587 529 2 3.8717230332882896e-01 2.4667244445900156e+01 1.7358649022974628e+01 3.5902595082440349e+00 -1 0 1 +1958 653 2 3.4750670392093480e-01 2.5975965102195794e+01 2.1277684110578061e+01 2.4206277869909694e+00 0 0 1 +873 291 2 3.1868802911634969e-01 2.8633462779342647e+01 2.0517570475789476e+01 3.3335919208908167e+00 -1 0 0 +1159 387 1 -7.7572408792043468e-01 2.9455854341629912e+01 1.7414096877590630e+01 3.2748314182030911e+00 0 0 0 +1957 653 1 -7.4849215787623302e-01 2.5755082132922745e+01 2.0397617040553790e+01 2.6539947284113619e+00 0 0 1 +871 291 1 -7.2491846090039058e-01 2.9303288630042982e+01 2.0273558593566285e+01 2.6924407197774194e+00 -1 0 0 +872 291 2 3.5136777056847912e-01 2.8909917813692108e+01 2.0494952099178477e+01 1.8973854517534583e+00 -1 0 0 +725 242 2 3.3914469235875599e-01 2.9159598682642795e+01 1.8214232649007428e+01 2.8065079374735773e+00 0 0 0 +2574 858 2 3.4201563348160202e-01 1.4032700329541004e+01 2.8549289790869707e+01 2.1474732824375395e-01 0 0 1 +2647 883 1 -7.2024053252758780e-01 2.8538682072227818e+01 2.1743916327673524e+01 5.8701307170169423e+00 0 0 0 +2649 883 2 3.4358497053525161e-01 2.8045385974852564e+01 2.0981637591051292e+01 5.4298704226482748e+00 0 0 0 +665 222 2 3.5305853508755336e-01 2.6979306174346227e+01 1.9352140153524548e+01 3.9292242612989323e+00 0 -1 0 +664 222 1 -7.8841843197891370e-01 2.7339837485437041e+01 1.9393692225357313e+01 4.8217610350826288e+00 0 -1 0 +666 222 2 3.1811072911639759e-01 2.8041975216625044e+01 1.8715353160840547e+01 4.7705137308304275e+00 0 -1 0 +2648 883 2 3.6605147746802935e-01 2.9020127084912680e+01 2.1270468194655194e+01 6.5272024221862948e+00 0 0 0 +2237 746 2 3.7220065703801902e-01 2.7812236339658551e+01 2.3147771180011524e+01 2.5697292726629897e+00 0 0 1 +443 148 2 3.4321107080293883e-01 2.7504681470452226e+01 1.6587348560493052e+01 6.4303691298121546e+00 0 0 0 +2236 746 1 -7.4880377933505970e-01 2.7061391083183960e+01 2.2953538180791025e+01 1.9584560473446697e+00 0 0 1 +2238 746 2 3.7461551146678662e-01 2.6276593836533486e+01 2.3473135113858529e+01 2.2487234772842988e+00 0 0 1 +804 268 2 3.3695247389241156e-01 2.9142729113998104e+01 1.8888349146889784e+01 7.4401440261450098e+00 -1 0 0 +1350 450 2 3.2500553590188297e-01 2.6005415593871284e+01 2.0251910327118924e+01 6.1428755909562414e+00 0 0 0 +763 255 1 -7.2747918331602002e-01 2.7642890874322660e+01 1.6132854156133028e+01 1.5556380831984231e+00 -1 0 0 +446 149 2 3.5165162287066154e-01 2.4438707841526330e+01 2.4093521045468258e+01 3.2996980383076164e+00 0 0 0 +2972 991 2 3.5247552467731330e-01 2.8352596590607352e+01 1.7838706440295422e+01 6.0488676938640140e-01 0 0 1 +442 148 1 -7.5114971124189256e-01 2.6778107822442283e+01 1.7219671343742117e+01 6.4628477112242662e+00 0 0 0 +1349 450 2 3.6114445952234586e-01 2.4698492598411597e+01 2.0984318466605792e+01 6.0422378284532252e+00 0 0 0 +765 255 2 3.6208454850760396e-01 2.8398811893585471e+01 1.6402717004884696e+01 2.1133989973714336e+00 -1 0 0 +2971 991 1 -7.3196870955371129e-01 2.8231612660602035e+01 1.8735577785299540e+01 1.9526986467594393e-01 0 0 1 +1421 474 2 3.9576670460776053e-01 2.9843760768094970e+01 2.2642998135001282e+01 2.7809764274651592e+00 0 0 0 +2813 938 2 3.9045064072069613e-01 1.6818862999193140e+01 3.0636748373919648e+01 7.4078079950149327e+00 0 0 1 +2756 919 2 3.8522715794908158e-01 2.6726131045149369e+01 1.7606633943005193e+01 8.0233800141051237e+00 0 0 1 +2493 831 2 3.9213588031692331e-01 1.0169793168637511e+01 2.9342042721051328e+01 9.8527422093009402e+00 0 0 0 +879 293 2 3.2785034107277450e-01 2.3348181239792245e+00 2.3904096531269140e+01 2.3367199282102691e+00 0 0 0 +2840 947 2 3.4798658194914389e-01 4.9818343995013414e+00 2.3980847604744433e+01 8.8539376179718499e+00 1 0 0 +2839 947 1 -7.2406655632900985e-01 4.7987895158893972e+00 2.4245798731400420e+01 7.9210270429145648e+00 1 0 0 +2270 757 2 3.5180632221951880e-01 1.2487564152629931e+01 1.6776588591782190e+01 1.4364622660177345e+01 0 0 0 +588 196 2 3.6382858618720820e-01 1.2481492240218066e-01 2.5567804657932296e+01 5.8748362921325308e+00 1 -1 0 +586 196 1 -6.8760572962081024e-01 4.6575643504128111e-01 2.4676195316062618e+01 5.7331297077847241e+00 1 -1 0 +587 196 2 3.2122886990444466e-01 3.0791763299208480e+01 2.4128552393353107e+01 5.3121763358150123e+00 0 -1 0 +2601 867 2 3.5315584237641190e-01 4.1827610340272390e+00 2.7260559638215234e+01 1.8526553638829770e+00 0 0 1 +692 231 2 3.7362055851118586e-01 4.4139458218055143e+00 2.5083851016904752e+01 8.1330493377444135e+00 1 -1 0 +1508 503 2 3.9599296208801193e-01 9.8041773896469875e-01 3.0734807974689989e+01 6.1378302216299980e+00 0 -1 0 +644 215 2 3.6427481137337370e-01 3.9749017453391904e+00 2.7561951457261120e+01 5.5955676542483062e+00 1 0 0 +643 215 1 -7.3790222776002778e-01 3.0097151535489699e+00 2.7451438691890679e+01 5.6724899440070162e+00 1 0 0 +645 215 2 3.6022422275627614e-01 2.7461488108542951e+00 2.7356497435064306e+01 6.6245942559451088e+00 1 0 0 +2790 930 2 3.6811668594800584e-01 1.6692992236350936e+00 2.4930875235632854e+01 4.5043410701156485e+00 1 0 1 +755 252 2 3.8339690242043317e-01 3.2639043585156537e+00 2.9996356350344904e+01 7.4858828427149966e+00 0 0 0 +754 252 1 -6.4682773214593459e-01 3.8305525219460512e+00 3.0293721502029669e+01 8.2417777190370050e+00 0 0 0 +2416 806 1 -7.5357092565344552e-01 2.5812219145837716e+00 3.0205564775295734e+01 5.8572418349209361e+00 0 0 1 +2417 806 2 3.8341513321457343e-01 2.7699560100156813e+00 2.9233052460452900e+01 5.7902141164142336e+00 0 0 1 +2418 806 2 3.4445164203891443e-01 2.8562295425717061e+00 3.0679757101358874e+01 5.0015581499621131e+00 0 0 1 +2788 930 1 -7.0321027099045230e-01 2.3442477061084475e+00 2.5317247752129028e+01 3.8363861884046484e+00 1 0 1 +2789 930 2 3.7914725817921408e-01 2.7763855350319124e+00 2.6075294597664179e+01 4.3788785634425063e+00 1 0 1 +680 227 2 4.0283841723983022e-01 5.8203615544809295e-01 2.6764007370292994e+01 7.8694081214223246e+00 1 -1 0 +1509 503 2 3.8770948720614790e-01 2.0034500066489502e-02 3.0034440585611247e+01 7.1254400770143738e+00 0 -1 0 +1507 503 1 -7.5437694527071142e-01 3.7022571074369785e-02 3.0666165280521902e+01 6.3857002569780912e+00 0 -1 0 +1653 551 2 3.5883296888623417e-01 2.8474263742866501e+00 2.9495322724824696e+01 2.4680526617736120e+00 0 -1 1 +16 6 1 -7.2949093288191802e-01 2.5958855517257855e+00 2.8592930499102319e+01 2.2199622917335491e+00 0 -1 0 +108 36 2 3.6168532880153298e-01 2.4820354224226322e+00 2.4655039907155640e+01 4.3932622392821898e-03 0 -1 0 +2596 866 1 -7.3884773905394074e-01 5.6845506450879366e+00 2.8179861155318306e+01 5.6133334243432298e+00 0 0 1 +2598 866 2 3.6510608759941843e-01 6.2632055888284510e+00 2.8826680396986436e+01 5.1770222846244129e+00 0 0 1 +2917 973 1 -7.3092209538063713e-01 2.9999889001514347e+01 2.6751046624975530e+01 7.1138141231407346e+00 0 0 1 +2619 873 2 3.4575735632172039e-01 2.3651954241411102e+00 2.8667144260223125e+01 1.2163286206696953e+00 0 0 1 +2599 867 1 -7.5488422254164322e-01 4.8841104236752351e+00 2.6925542396030586e+01 1.2838580867329015e+00 0 0 1 +2979 993 2 3.4397986483063014e-01 8.1965699631026423e-01 2.5376454781663146e+01 2.5295589716767419e+00 1 0 1 +2977 993 1 -7.4518508058038901e-01 3.1035985845318130e+01 2.5570830792796205e+01 2.0267725385352917e+00 0 0 1 +2240 747 2 3.5078401128980990e-01 2.4308205531827095e+01 1.8898609856773312e+01 1.4167813111160538e-01 0 0 1 +1537 513 1 -7.3777883422486357e-01 2.8183611068164300e+01 2.8021526755735568e+01 1.4909216079243803e+01 -1 -1 0 +1078 360 1 -7.1161377304581475e-01 1.0603164880436095e+01 3.0287962315273230e+01 1.2742050479495079e+01 0 0 0 +2381 794 2 3.5399757106050078e-01 6.1067728487761750e+00 2.4781064959124869e+01 3.6336376148565597e+00 0 0 1 +283 95 1 -7.5672796575542789e-01 7.3340276396581530e+00 2.4120587328236045e+01 6.7334638335770185e+00 0 0 0 +2382 794 2 3.4011467000542039e-01 5.6781126010134022e+00 2.6154821192660336e+01 3.3820129454259331e+00 0 0 1 +285 95 2 3.4574003908113682e-01 6.9889042977657487e+00 2.4462488098381062e+01 5.8661198873599929e+00 0 0 0 +2380 794 1 -7.0966788174009432e-01 6.1891249826381323e+00 2.5677801265080234e+01 4.0114929462837150e+00 0 0 1 +866 289 2 3.7974762058817363e-01 1.1437161451323156e+01 2.3935483643544291e+01 6.4844741141495179e+00 0 0 0 +865 289 1 -7.5045270964496991e-01 1.1684542206206830e+01 2.4034220174916079e+01 5.6087450809481565e+00 0 0 0 +713 238 2 3.8100618498572247e-01 2.2784688436261732e+01 2.8067384693091206e+01 1.5168157765466054e+01 0 -1 0 +2651 884 2 3.7134754646185764e-01 1.0564932711540903e+01 2.4417224439023801e+01 3.9821442280327397e+00 0 0 0 +2497 833 1 -7.8008249791842177e-01 1.0146781899866344e+01 2.4716450193775763e+01 3.1827349450385665e+00 0 0 0 +2499 833 2 3.9519385266339480e-01 9.8251259176630352e+00 2.5593636191229397e+01 3.3708764163336000e+00 0 0 0 +947 316 2 3.9253924940428797e-01 1.0263825030224725e+01 2.7852683659544994e+01 4.0455615741418205e+00 0 0 0 +948 316 2 3.9725362218035121e-01 9.1515364235489809e+00 2.8305362413977200e+01 3.1159321237190047e+00 0 0 0 +946 316 1 -7.0669887383965291e-01 9.6698379933881409e+00 2.7491147131501222e+01 3.3837868622275784e+00 0 0 0 +2415 805 2 3.9085663853667518e-01 7.8214692137169388e+00 3.0262367492327279e+01 3.6417069179902399e+00 0 0 1 +2413 805 1 -7.3042635851030735e-01 7.8611977585993138e+00 2.9503130536524999e+01 3.0631082528549514e+00 0 0 1 +2414 805 2 3.6257527513306098e-01 7.5130039510401589e+00 2.9877260365777943e+01 2.2557876138095705e+00 0 0 1 +2597 866 2 3.4847208100918808e-01 5.9287756755990690e+00 2.7333902335473979e+01 5.1899307770680885e+00 0 0 1 +1595 532 2 3.6244592889370902e-01 1.2433936904412802e+01 2.1934965053416544e+01 1.4992406370894184e+01 0 0 0 +2271 757 2 4.0909570526419575e-01 1.3522451860086692e+01 1.6951634432715593e+01 1.5508375253755103e+01 0 0 0 +327 109 2 3.8759023730211123e-01 1.2050978705537872e+01 1.5573452653055504e+01 8.2784716132267206e+00 0 0 0 +35 12 2 3.4845842899276164e-01 1.1812588280128036e+01 2.9385188020711290e+01 2.5041572044769072e+00 0 -1 0 +46 16 1 -7.1593692545468413e-01 1.1232403277271668e+01 3.0168149651200153e+01 2.3303314562343735e+00 0 -1 0 +1059 353 2 3.6824864110585426e-01 1.1638504469448538e+01 2.5099123254431568e+01 2.0648781431552830e+00 0 0 0 +48 16 2 3.1878107605473444e-01 1.0347514158940282e+01 2.9690768110446829e+01 2.1037573159972309e+00 0 -1 0 +2306 769 2 3.6730774642582426e-01 1.1677638270183767e+01 2.7832135131347837e+01 5.4673888184085717e+00 0 0 0 +867 289 2 3.1370858253756073e-01 1.2192252410484890e+01 2.4874949039818269e+01 5.6579771234908787e+00 0 0 0 +1240 414 1 -7.5180796299280950e-01 1.2327087450360994e+01 2.6722712144246813e+01 7.0555309702582889e+00 0 0 0 +970 324 1 -7.3146600161462005e-01 1.1248152038688696e+01 2.8611069856538506e+01 5.1499323635329528e+00 0 0 0 +797 266 2 4.0297523845729272e-01 4.7530543081548977e+00 1.5871585490732055e+01 2.8057350832087859e-02 0 0 0 +2907 969 2 3.3000121827207451e-01 1.4254911479743537e+01 2.5045975715533139e+01 2.5261004334418780e-01 0 0 1 +1310 437 2 3.6912627891884631e-01 1.1435715601608260e+01 3.0051416679416132e+01 6.5685756635319086e+00 0 0 0 +194 65 2 3.4139849350075085e-01 7.1415094141566895e+00 3.0604232298233732e+01 1.2211017372962626e+01 0 -1 0 +2404 802 1 -7.2918970427923557e-01 7.7443173631668092e+00 2.6595939568484972e+01 3.4140147144317651e-01 0 0 1 +2241 747 2 3.9659912662053765e-01 2.2799435060564139e+01 1.9066923564805702e+01 6.9285759649524839e-02 0 0 1 +2024 675 2 3.2328026818693090e-01 1.2934503583841352e+01 3.0969340188993392e+01 1.0085149821386086e+00 0 -1 1 +2600 867 2 3.7262301809038745e-01 7.8437230034604051e+00 2.8625302519356289e+01 3.6919372515878351e-01 0 0 1 +2503 835 1 -7.2267250532881955e-01 8.1079081356276106e+00 2.9515055246603296e+01 2.2072243477987505e-01 0 0 1 +892 298 1 -7.5148672502679792e-01 2.0888208841338542e+01 3.0715669616108823e+01 5.4691140517319417e+00 -1 0 0 +2914 972 1 -7.6421926990744804e-01 2.9510703840073099e+01 2.3060877292649728e+01 1.5053406826873461e+01 0 0 0 +422 141 2 3.9557308470781993e-01 1.4958599980011073e+01 2.3266598884233236e+01 2.7100072576749090e+00 0 -1 0 +1440 480 2 3.3666172492882906e-01 1.5566427432003387e+01 2.3299397669057697e+01 5.7236708951045312e+00 0 0 0 +971 324 2 3.2567165474977544e-01 1.1929566312924079e+01 2.8923647751821658e+01 4.4487948302918046e+00 0 0 0 +1438 480 1 -7.6400355645773477e-01 1.4805332823009291e+01 2.3937420344020648e+01 5.6136468707181102e+00 0 0 0 +1439 480 2 3.3814215799380470e-01 1.3976209769692970e+01 2.3456528366304326e+01 5.7527473356036429e+00 0 0 0 +1165 389 1 -7.7180149244132290e-01 1.6892018185723501e+01 2.5179950685440588e+01 1.9553738940112357e+00 0 0 0 +2758 920 1 -7.2968332908530154e-01 1.3875326099665889e+01 3.0808333193614605e+01 7.2626576973725365e-01 0 0 1 +1057 353 1 -7.3718390505409592e-01 1.2453032324606104e+01 2.5482972853962679e+01 1.6979261521525946e+00 0 0 0 +1058 353 2 3.7170747392897024e-01 1.3154453168675921e+01 2.4886115881196488e+01 2.1278488278569094e+00 0 0 0 +361 121 1 -7.2020473249304684e-01 1.5111938052273384e+01 2.6545935198238293e+01 6.5288380534713806e+00 0 0 0 +363 121 2 3.7710795587665641e-01 1.4130307401196781e+01 2.6895766235910095e+01 6.7011746282590110e+00 0 0 0 +1787 596 2 3.6506550621193440e-01 1.6437016935767591e+01 2.8270823428873410e+01 7.1889962650727446e-01 0 0 0 +500 167 2 3.9563439978420145e-01 1.3139570395859357e+01 2.7125366038007243e+01 2.4405650434562336e+00 0 -1 0 +499 167 1 -7.4192491401160543e-01 1.3246382458096035e+01 2.7884269656775327e+01 2.9621932171635712e+00 0 -1 0 +1786 596 1 -7.2694685533705328e-01 1.6124079983728649e+01 2.7701169952745143e+01 1.4707548318084380e+00 0 0 0 +501 167 2 3.4901563025656368e-01 1.4186706205235831e+01 2.8044701640144048e+01 2.9716726018831583e+00 0 -1 0 +1788 596 2 3.7300324528589590e-01 1.6565487798225700e+01 2.6743546285094954e+01 1.4172319899393557e+00 0 0 0 +485 162 2 3.8917163444130082e-01 1.7133153268846343e+01 2.8432448855102731e+01 2.5828995953958405e+00 0 -1 0 +484 162 1 -7.2478139607319303e-01 1.7771011581849773e+01 2.9090312988370790e+01 3.0195170845673602e+00 0 -1 0 +719 240 2 3.5973544565603732e-01 1.3210824358055650e+01 2.9980253058615219e+01 6.8901163302489712e+00 0 -1 0 +1131 377 2 3.7398792739649861e-01 1.4972565243952641e+01 2.5615051745422370e+01 6.2364669835306543e+00 0 0 0 +1120 374 1 -7.6437393633003570e-01 1.7188136437858049e+01 2.7620586692659064e+01 5.2313564427111094e+00 0 0 0 +478 160 1 -7.7153794208645088e-01 1.4556112571796843e+01 2.4170731992946010e+01 2.8571853183454174e+00 0 -1 0 +480 160 2 3.7039279087856108e-01 1.4659375689306321e+01 2.4377802333564819e+01 3.8306330776186162e+00 0 -1 0 +1166 389 2 3.6818913917165530e-01 1.5988849046281164e+01 2.4719250714218951e+01 2.0730647480009945e+00 0 0 0 +718 240 1 -7.0007226663817013e-01 1.4033321826486652e+01 2.9451312566205477e+01 7.1128216935617550e+00 0 -1 0 +1167 389 2 3.7923338543484714e-01 1.7372547670804369e+01 2.5141492059876267e+01 2.8388481697703978e+00 0 0 0 +486 162 2 3.4851896327417431e-01 1.7840015927983163e+01 2.8729788861126512e+01 3.9900023789032013e+00 0 -1 0 +1122 374 2 3.9950948061246394e-01 1.6283452598076114e+01 2.7493752546370004e+01 5.6820739550444701e+00 0 0 0 +1004 335 2 3.6922321685265796e-01 1.8067819858332463e+01 2.6103514753011648e+01 4.7800600944944955e+00 0 0 0 +1241 414 2 3.8317209833142313e-01 1.2631762626548294e+01 2.6617459281135197e+01 7.9366488579655634e+00 0 0 0 +720 240 2 3.8883256719159187e-01 1.4886218006873349e+01 3.0052887370892567e+01 7.0252477601468382e+00 0 -1 0 +317 106 2 3.7660963558257304e-01 2.0474708064777836e+01 2.3357459428841722e+01 7.2036772262635322e+00 0 -1 0 +569 190 2 3.8783285696535674e-01 2.2455722248379106e+00 2.2066220204576794e+01 1.5370151484013425e+01 1 -1 0 +2269 757 1 -7.1752401459424253e-01 1.2711347438041340e+01 1.7352224147378934e+01 1.5155041314866999e+01 0 0 0 +1825 609 1 -6.9402006245137993e-01 8.4972674772146011e+00 1.9497033734637270e+01 1.1809872771074947e+00 0 0 1 +430 144 1 -6.5456537019421690e-01 2.0996612135100165e+01 2.3575278454644387e+01 4.4848104634520487e+00 0 -1 0 +479 160 2 3.5143149704121679e-01 2.0090941043366730e+01 2.3794803455930094e+01 4.1063801965498241e+00 0 -1 0 +452 151 2 3.7511039745343261e-01 1.8242038568261091e+01 2.4312676814993754e+01 1.2408014532412548e+00 0 0 0 +2335 779 1 -7.0663871699902170e-01 2.7803249955786349e+01 3.0841525302039685e+01 1.1576639981750375e+01 -1 0 1 +2215 739 1 -7.5759516482600286e-01 2.4044598058876268e+01 3.0499261364788985e+01 7.5098444224430383e-01 0 -1 1 +432 144 2 3.5321799230547979e-01 2.1099341991831480e+01 2.3978205976758272e+01 5.3721841612848751e+00 0 -1 0 +1121 374 2 3.6602716921762257e-01 1.7788562511675782e+01 2.7500115242099934e+01 5.9408997621475974e+00 0 0 0 +451 151 1 -7.7479114258616244e-01 1.8956195284318440e+01 2.3779380845961956e+01 8.1650275600510236e-01 0 0 0 +1005 335 2 3.7425010479579085e-01 1.9019115995034273e+01 2.5937547750436089e+01 3.5420941138403799e+00 0 0 0 +391 131 1 -7.1903343169706346e-01 2.0633741021534266e+01 2.9437036759946299e+01 2.7178639091630310e+00 0 -1 0 +393 131 2 3.5197438791556285e-01 2.1042308894894298e+01 2.9938298988577603e+01 3.4500547962865422e+00 0 -1 0 +1 1 1 -7.5275174968800906e-01 2.2274546567364681e+01 2.3971593227612047e+01 7.0297719550043682e+00 -1 -1 0 +593 198 2 3.6821692456138522e-01 2.2630094997345115e+01 2.7119253615506256e+01 5.8004682052621579e+00 0 -1 0 +594 198 2 3.4130618206757080e-01 2.1599167406847030e+01 2.6222489465669813e+01 4.9644171821037251e+00 0 -1 0 +592 198 1 -7.4558336044021079e-01 2.1854184757612302e+01 2.6584592873719430e+01 5.8904946484285450e+00 0 -1 0 +392 131 2 3.4369613413918820e-01 1.9697038968448663e+01 2.9724448606225398e+01 2.8358995172859380e+00 0 -1 0 +126 42 2 3.7422219785173821e-01 2.0285381681406673e+01 2.7775135400249162e+01 3.0427494983516028e+00 -1 -1 0 +124 42 1 -7.2809449525284942e-01 2.0423346277474227e+01 2.6777363351430647e+01 3.1271560553692686e+00 -1 -1 0 +1857 619 2 3.4776498394299105e-01 2.0266250559281630e+01 2.8889562568593252e+01 5.3890956197132767e-01 0 -1 1 +125 42 2 3.7886289804488649e-01 2.0661450519657514e+01 2.6403793270474445e+01 2.1939402385286337e+00 -1 -1 0 +1003 335 1 -7.3374260266434299e-01 1.8394082976062357e+01 2.5426417334217984e+01 4.1281055653717926e+00 0 0 0 +1358 453 2 3.5320920959414304e-01 2.0181884329293933e+01 2.7535391615396801e+01 6.0836395423973135e+00 0 0 0 +453 151 2 3.8464374378974286e-01 1.9753646988402490e+01 2.4321280695410977e+01 7.1526528408521084e-01 0 0 0 +2217 739 2 3.7007639929684993e-01 2.4513342179557473e+01 2.9827918774373099e+01 1.2963472561364868e+00 0 -1 1 +1170 390 2 3.7203639517515485e-01 2.4316477511954879e+01 2.6019812701370970e+01 2.5424985484790432e+00 0 0 0 +1190 397 2 3.6648816131771772e-01 2.3530990378337936e+01 2.5373947402039541e+01 1.4763190384323588e+00 0 0 0 +1168 390 1 -7.1726548443494753e-01 2.3669431004163265e+01 2.6222569850352421e+01 1.8849284222704075e+00 0 0 0 +774 258 2 3.5870976329075838e-01 2.4611646906770677e+01 2.8008246261675229e+01 2.2690190621100172e+00 -1 0 0 +772 258 1 -7.6998498468766385e-01 2.5231146016647635e+01 2.8697308125595963e+01 2.6048632096997633e+00 -1 0 0 +1357 453 1 -7.2474852232336362e-01 1.9542919602024099e+01 2.7539633386633540e+01 6.8697274120249769e+00 0 0 0 +574 192 1 -7.3565241237755274e-01 2.0874195857857323e+01 2.5872258837729937e+01 6.5644486888479714e-01 0 -1 0 +576 192 2 3.2214123564982566e-01 2.1856440541000719e+01 2.6118436770139766e+01 5.2721422664059880e-01 0 -1 0 +1561 521 1 -7.2442043641608134e-01 6.1478558005357398e+00 1.7351146160950446e+01 2.1199996540750790e-01 0 0 1 +2707 903 1 -7.4908870477242695e-01 2.3572987187960493e+01 3.0247951655633539e+01 4.2770187072569259e+00 0 0 1 +2709 903 2 3.7701416401847976e-01 2.4018228287972992e+01 3.0016839751672130e+01 3.4541154315762790e+00 0 0 1 +121 41 1 -7.2051113576138714e-01 2.4191625099975827e+01 3.0650915047544217e+01 7.4574712232716918e+00 -1 -1 0 +3 1 2 4.1577633930000224e-01 2.3105901992940503e+01 2.3975506485778499e+01 7.5010060338255879e+00 -1 -1 0 +571 191 1 -7.1341890243255535e-01 2.4930557565015704e+01 2.4176879224243887e+01 7.6865627972039157e+00 0 -1 0 +123 41 2 3.3569826248679580e-01 2.4039494944321241e+01 2.9712947151475923e+01 7.2580477181558241e+00 -1 -1 0 +2451 817 2 3.7901607775320451e-01 1.7260992719357549e+01 1.7280321903502422e+01 1.5507075495442072e+01 0 0 0 +36 12 2 3.2211910731470411e-01 2.8596288805862930e+01 2.8755568105638790e+01 1.2611351594675826e+00 -1 -1 0 +1420 474 1 -7.6839855138204449e-01 2.9369288731394516e+01 2.3152743013854376e+01 3.5229814268119322e+00 0 0 0 +1418 473 2 3.3332506312944232e-01 2.7799031631687289e+01 2.4206610139617137e+01 4.8937517743836914e+00 0 0 0 +1079 360 2 4.1202959723708116e-01 1.1017085812565135e+01 3.0958157562986710e+01 1.3435728670024270e+01 0 0 0 +77 26 2 4.1061427900959452e-01 1.0175736789658936e+00 2.8182432170832623e+01 2.6693340884161372e+00 0 0 0 +103 35 1 -7.5456901333818416e-01 2.9649161718599714e+01 2.7187899327989076e+01 1.7311454374726398e-01 -1 -1 0 +1422 474 2 3.7138709430363176e-01 2.9407740548480952e+01 2.2677894956409339e+01 4.3436692679758417e+00 0 0 0 +573 191 2 3.7154365941629924e-01 2.5535670144797308e+01 2.4038380722464264e+01 6.9828917470572112e+00 0 -1 0 +2439 813 2 3.6826283620290740e-01 2.4691029633893312e+01 2.7767950007339177e+01 7.2722458966768038e+00 -1 0 1 +2437 813 1 -7.3154265702444210e-01 2.4484744310442654e+01 2.7802548689359515e+01 6.3432053449949279e+00 -1 0 1 +2981 994 2 3.6511473696165159e-01 2.9588960281624633e+01 2.7115320512173195e+01 6.3101417465397853e+00 0 0 1 +76 26 1 -7.4446262168796229e-01 4.4347907502734367e-02 2.8083582667516676e+01 2.8106831640334979e+00 0 0 0 +1417 473 1 -7.0444574478905619e-01 2.7176785934000979e+01 2.4342046570308533e+01 5.6224049670235079e+00 0 0 0 +2955 985 2 3.7873227585346980e-01 2.5593963277319812e+01 2.4460708836016174e+01 4.2460155714017382e+00 0 0 1 +78 26 2 3.6862115269425916e-01 3.0742708187176721e+01 2.7191840167992034e+01 2.5352936045524888e+00 -1 0 0 +1419 473 2 3.5501644844363678e-01 2.7621550811901798e+01 2.3813714936953865e+01 6.3081552703764885e+00 0 0 0 +2332 778 1 -7.3611234651260138e-01 2.9578056580891140e+01 2.8697427284645038e+01 5.0539779490147163e+00 -1 0 1 +2334 778 2 4.0171294821696840e-01 3.0129444416058540e+01 2.9357390069091423e+01 5.3552591046352775e+00 -1 0 1 +2953 985 1 -7.7697637895686589e-01 2.5324831336060210e+01 2.4487390586951999e+01 3.3571062370488240e+00 0 0 1 +907 303 1 -7.2251028040591492e-01 2.7100203938797701e+01 2.6593106258267170e+01 2.4440379882400376e+00 -1 0 0 +909 303 2 3.3500662682571025e-01 2.7427278216403398e+01 2.6522956737287711e+01 1.5033342341908511e+00 -1 0 0 +908 303 2 3.7961236192047176e-01 2.6956469552165704e+01 2.5744703492226272e+01 2.6400960394064432e+00 -1 0 0 +2412 804 2 3.4623101210603358e-01 2.6029577309995265e+01 2.9171189633077898e+01 4.3079987642570918e+00 -1 0 1 +2411 804 2 3.5218645700129853e-01 2.7336288672869212e+01 2.8783519190678735e+01 5.0785014135684090e+00 -1 0 1 +2410 804 1 -7.6011493149154941e-01 2.6477880327746849e+01 2.9184653431160037e+01 5.2067375322384324e+00 -1 0 1 +2708 903 2 3.3181334848678523e-01 2.4164266597886574e+01 2.9822345617660844e+01 4.9099631442280707e+00 0 0 1 +773 258 2 3.7012580699728387e-01 2.6102804889668402e+01 2.8294793487265327e+01 2.4404325203689918e+00 -1 0 0 +60 20 2 3.6438661909224723e-01 2.9672415367119456e+01 2.8687242549486129e+01 4.0691075695933865e+00 -1 -1 0 +2438 813 2 3.6905390739666244e-01 2.5397596245482042e+01 2.8086722995784147e+01 5.9351200968678022e+00 -1 0 1 +1913 638 2 3.9777170499484688e-01 1.2445734247165840e+01 1.5994290894358539e+01 1.1900694900542913e+01 0 0 0 +105 35 2 3.8022186632645188e-01 3.0441932538363968e+01 2.6795585923877784e+01 5.8196599449822606e-01 -1 -1 0 +34 12 1 -6.9103165850333870e-01 2.9102913931594440e+01 2.9592407312246191e+01 1.5211275179373571e+00 -1 -1 0 +2918 973 2 3.6744823694418821e-01 2.9460198883696403e+01 2.7028527124131571e+01 7.8749192047765266e+00 0 0 1 +1655 552 2 3.7093515606989202e-01 2.9881610170356275e+01 2.9150987659245054e+01 1.8389359555123999e+00 -1 -1 1 +1064 355 2 3.3879951321891011e-01 2.5483525215636931e+00 2.0024626791342854e+01 8.1380248165505513e+00 0 0 0 +1065 355 2 3.6124126446920163e-01 3.4938963528843967e+00 1.9346220672408222e+01 7.2481726367541306e+00 0 0 0 +818 273 2 3.8826292627461073e-01 4.9533731605449649e+00 3.1001128832846643e+01 2.7089246988955824e+00 0 0 0 +781 261 1 -7.1053193243808477e-01 3.0918245522048736e+01 2.2210287096960165e+01 8.4999784213451690e+00 -1 0 0 +783 261 2 3.3829689662728679e-01 1.9347358200781137e-02 2.1413498559152941e+01 9.0284816532350796e+00 0 0 0 +897 299 2 3.9667986531971500e-01 3.0590078971226010e+01 1.6721897173546587e+01 1.1712801130585841e+01 -1 0 0 +896 299 2 3.9060271093257459e-01 7.1430249162270276e-01 1.7354038616218705e+01 1.0935784766862362e+01 0 0 0 +2978 993 2 3.3328822053012341e-01 3.0403075834293748e+01 2.5154780732356976e+01 2.5831932127906847e+00 0 0 1 +782 261 2 3.8068974490929453e-01 3.6850592315502234e-01 2.2868794731213487e+01 8.9895074290264496e+00 0 0 0 +2479 827 1 -7.4283161069088044e-01 4.9449624192179638e+00 2.0053044930582871e+01 8.7838756901349413e+00 0 0 0 +2480 827 2 3.8904952102009055e-01 4.6308351414032618e+00 2.0801035198761209e+01 9.3320441559769840e+00 0 0 0 +2481 827 2 3.9032107431036239e-01 5.0447721051635677e+00 1.9232398023379780e+01 9.3816456769200052e+00 0 0 0 +902 301 2 3.7392508857859746e-01 2.8598438701388549e+00 1.6635609298857183e+01 1.1753616607594813e+01 0 0 0 +903 301 2 3.8081156908654729e-01 2.3674417963906715e+00 1.8052996094063570e+01 1.2287970858182797e+01 0 0 0 +1570 524 1 -7.5893671651103367e-01 3.0218300902229167e+00 1.9308785499479292e+01 1.3536737357231672e+01 0 0 0 +1571 524 2 3.8388295512999776e-01 3.8972856227907071e+00 1.9678335988182738e+01 1.3330824242472874e+01 0 0 0 +1572 524 2 4.0340330515784095e-01 2.9148444381818490e+00 1.9257058322215780e+01 1.4503628319612218e+01 0 0 0 +170 57 2 3.8882921609954363e-01 2.9427592381579668e+00 2.1619466459223013e+01 1.1027876270810093e+01 0 0 0 +169 57 1 -7.7463134278409251e-01 3.8529636758273407e+00 2.1699173051760646e+01 1.0628485272851613e+01 0 0 0 +1484 495 2 4.0383560934081486e-01 4.2071330215285281e+00 2.2606910771010458e+01 1.0772474498839145e+01 1 0 0 +2308 770 1 -7.3569171940956501e-01 1.5017620852195062e+00 2.0831890139540402e+01 1.1782616700171493e+01 0 0 0 +2309 770 2 3.8366802113539478e-01 1.9342199150744828e+00 2.0244472854130983e+01 1.2485520341268021e+01 0 0 0 +2310 770 2 3.9498363709379281e-01 1.2958100040264249e+00 2.0300058783725483e+01 1.0983524237686135e+01 0 0 0 +917 306 2 3.7008761071742147e-01 4.8220292832352154e+00 2.0914860722736151e+01 1.1825020786045929e+01 0 0 0 +901 301 1 -7.1954901362842083e-01 2.4476472653585248e+00 1.7539212404128129e+01 1.1476237039039427e+01 0 0 0 +2653 885 1 -7.1407794147296166e-01 2.2223217817991088e+01 1.5600288137492777e+01 9.7129661428534746e+00 0 0 1 +1661 554 2 3.5806502752998431e-01 2.8723309707562222e-01 1.8518812070504179e+01 9.5105582699629085e+00 0 0 1 +2681 894 2 3.7408838542420436e-01 2.5692127879270789e+01 2.4050868588982262e+01 1.5209429065012028e+01 0 0 0 +895 299 1 -7.7254256646473796e-01 3.0916044323341680e+01 1.6865507987979797e+01 1.0832587972324836e+01 -1 0 0 +972 324 2 3.8958678083689607e-01 5.2845295544754913e+00 2.2041888025454103e+01 1.4164436092325849e+01 0 0 0 +916 306 1 -7.1849250243876217e-01 5.2917958307580353e+00 2.0765686248163561e+01 1.2715811801842168e+01 0 0 0 +41 14 2 3.4597041917537447e-01 4.5404653034810440e+00 1.7441943296259307e+01 1.0763676472309626e+01 0 0 0 +42 14 2 3.4625268632405820e-01 5.4911163946317982e+00 1.6955800727265036e+01 9.6416415245918454e+00 0 0 0 +40 14 1 -6.9298718920580493e-01 5.3586832037896297e+00 1.7668787968159918e+01 1.0272929656102887e+01 0 0 0 +918 306 2 3.7241349642923333e-01 6.2774434684204188e+00 2.0597766446606272e+01 1.2439943861592742e+01 0 0 0 +2817 939 2 3.6362109850572560e-01 1.7072551470060397e+01 2.0791821797317706e+01 1.9730653547291296e-01 0 0 1 +2473 825 1 -7.8376303661055080e-01 5.2329675428867226e+00 2.2926869569941765e+01 1.4508261223785039e+01 0 0 0 +1394 465 2 3.7561675712294307e-01 1.0066961393282048e+01 2.2137513267239317e+01 7.9241561763396282e+00 1 1 0 +182 61 2 3.7036336294443822e-01 2.9772454062655132e+01 2.7398338040325360e+01 1.2452158687330796e+01 -1 0 0 +1929 643 2 3.7304411352453759e-01 2.0571506036799700e+01 1.5843275251657795e+01 1.4902031573720491e+01 0 -1 0 +2735 912 2 4.0466389476064457e-01 1.3663928778675162e+01 1.7700859662394102e+01 1.1273600014757855e+01 0 0 0 +693 231 2 3.7355905365668080e-01 8.2924051047883438e+00 2.1211611421873101e+01 7.5605276769303620e+00 1 -1 0 +81 27 2 3.4643788751501525e-01 1.3437500808154157e+01 2.0858005523084625e+01 7.0855832710738369e+00 0 0 0 +79 27 1 -7.0472834330902390e-01 1.2891631836566249e+01 2.0075875296449333e+01 6.7214342140418841e+00 0 0 0 +1094 365 2 3.8663965999858252e-01 1.1538959925197428e+01 1.8805378150876944e+01 1.4242985681441615e+01 0 0 0 +2154 718 2 3.6420188231188699e-01 1.0521146231131416e+01 2.2524680111552552e+01 9.4763834191858258e+00 1 0 1 +1362 454 2 3.5824690391237357e-01 6.5921348900644317e+00 2.0394826958198973e+01 8.1492985187104168e+00 1 0 0 +1635 545 2 3.6460421980976943e-01 7.8791961372700694e+00 1.9437307217523852e+01 8.4551633696940574e+00 0 0 1 +691 231 1 -7.1634038175820036e-01 7.4457620197018342e+00 2.0340597100576886e+01 8.7188804807012357e+00 1 -1 0 +1091 364 2 3.5348108080554042e-01 9.2352024301846232e+00 2.3062119115273926e+01 1.0688071281129636e+01 0 0 0 +1093 365 1 -7.5610592836972312e-01 1.1176049494231272e+01 1.9369925143825022e+01 1.3526617279730933e+01 0 0 0 +1092 364 2 3.5698678780043508e-01 1.0428095081578661e+01 2.2355387862443486e+01 1.1390639381003277e+01 0 0 0 +1090 364 1 -7.4170775116856325e-01 9.7310897953903712e+00 2.2196116250200184e+01 1.0732220278777797e+01 0 0 0 +2297 766 2 3.7934871719845747e-01 1.0794042060809771e+01 2.1020294208138296e+01 1.3887529507469980e+01 0 0 0 +2488 830 1 -7.3192761463762990e-01 7.5729790375084214e+00 1.9966054609970051e+01 1.1495176640393668e+01 0 0 0 +2489 830 2 3.9010762880406841e-01 7.2457720749580972e+00 2.0103302581885902e+01 1.0563387900827802e+01 0 0 0 +2490 830 2 3.5552434097681462e-01 8.2903037248428042e+00 2.0628250272285275e+01 1.1486238901911690e+01 0 0 0 +177 59 2 3.8421024410092713e-01 7.6534694143330260e+00 1.7274206383348062e+01 1.3765775587804821e+01 0 0 0 +2355 785 2 3.5028584914948896e-01 1.1086995691185416e+01 2.2359508348038510e+01 1.3131526882750579e+01 0 0 0 +2344 782 1 -7.2028535602954824e-01 8.3422327917342951e+00 1.7749713127973955e+01 1.3166647643860570e+01 0 1 0 +2346 782 2 4.0082094308859451e-01 7.8805465917902895e+00 1.8433376952478259e+01 1.2752454210832761e+01 0 1 0 +1095 365 2 3.5064756010964881e-01 1.0277271754319097e+01 1.9081853876585306e+01 1.3359986510885417e+01 0 0 0 +2353 785 1 -7.7169283784575082e-01 1.0892211058050357e+01 2.2012390989266652e+01 1.3985946095630926e+01 0 0 0 +329 110 2 3.8245793311242204e-01 9.4294825512239715e+00 1.8375170009595195e+01 9.3862643340546743e+00 0 0 0 +328 110 1 -6.8284934097088801e-01 1.0364693584158644e+01 1.8694073610397169e+01 9.3369426823978721e+00 0 0 0 +266 89 2 3.3998906893874364e-01 1.0835107512327555e+01 1.7886338480507185e+01 9.0448861727927401e+00 0 0 0 +180 60 2 3.6629437370309237e-01 8.9191909014610218e+00 1.6278123394845156e+01 1.2171630277942121e+01 0 0 0 +1230 410 2 3.4897159507022230e-01 1.2651522049522319e+01 2.2828698079773773e+01 1.1426060156834017e+01 0 0 0 +1248 416 2 3.7127122779483096e-01 1.2019755864652671e+01 1.9177004225515454e+01 1.0239280429073586e+01 0 0 0 +1246 416 1 -7.5123810229363408e-01 1.2612701047009665e+01 1.9269563800417110e+01 1.1007569385750237e+01 0 0 0 +1247 416 2 3.8478602703622933e-01 1.2022865885117511e+01 1.9363862621856210e+01 1.1794799083569512e+01 0 0 0 +325 109 1 -7.2032755691587191e-01 1.1154565249619596e+01 1.5905196799573638e+01 8.3293449943930895e+00 0 0 0 +628 210 1 -7.5200533637137024e-01 2.8083405600877811e+01 1.5856571411951402e+01 1.0421546054314188e+01 0 0 0 +1228 410 1 -7.2454729889141289e-01 1.1852767672858807e+01 2.3488213193315296e+01 1.1719209222607425e+01 0 0 0 +80 27 2 3.2829440486445405e-01 1.3397101627017882e+01 1.9252574526373138e+01 6.9684973749010570e+00 0 0 0 +1763 588 2 3.5492558261878643e-01 1.5831304590054888e+01 2.0671522283692784e+01 1.4260462216041889e+01 0 0 0 +1762 588 1 -7.4836374636434422e-01 1.5674285106779241e+01 2.1536284625293433e+01 1.4858417154632580e+01 0 0 0 +365 122 2 3.5847440711504786e-01 1.5936511086240854e+01 1.8619360678049826e+01 1.4222218270812556e+01 0 0 0 +364 122 1 -7.0291574883952124e-01 1.5402952506808310e+01 1.9153946361765730e+01 1.3562568591795484e+01 0 0 0 +483 161 2 3.0717727600877298e-01 1.5558502772744433e+01 2.3032799019011815e+01 1.3268370468094734e+01 0 -1 0 +2774 925 2 3.5465290195660870e-01 1.8661662836362428e+01 1.6595386784445584e+01 1.1730397209133352e+01 0 0 0 +1865 622 2 3.7846677915290078e-01 1.3991602498196146e+01 2.2008668217447539e+01 9.6822988125197078e+00 0 0 0 +1864 622 1 -7.5619108736371377e-01 1.3832629170277741e+01 2.1805191047844094e+01 1.0672757659842960e+01 0 0 0 +366 122 2 3.3662957893240802e-01 1.5892497289862192e+01 1.9052851851296623e+01 1.2798893411830880e+01 0 0 0 +2045 682 2 3.6843327272201931e-01 1.7383148487775625e+01 1.6242664951766255e+01 1.2430622317259399e+01 0 0 0 +1866 622 2 3.6888569615343975e-01 1.3449574509359403e+01 2.0853571389735475e+01 1.0770810432268060e+01 0 0 0 +1048 350 1 -7.7850812089130550e-01 6.2519657267750040e+00 1.6287851365657861e+01 4.4681118342316779e+00 0 0 0 +2773 925 1 -7.0289866530104472e-01 1.7720694473769644e+01 1.6392192292685635e+01 1.1554923167460693e+01 0 0 0 +1293 431 2 3.5874739847185821e-01 1.7573841405063501e+01 1.8998560915984307e+01 7.8418420310689143e+00 0 0 0 +1775 592 2 3.7930886030505406e-01 1.7628951233281235e+01 2.1651091800331972e+01 9.6374044199956437e+00 0 0 1 +1291 431 1 -7.1733704230154260e-01 1.6939076932549632e+01 1.8312466969617159e+01 8.2419840513479539e+00 0 0 0 +1292 431 2 3.8068886773413796e-01 1.7323067967853635e+01 1.7484472713562187e+01 7.8964692417287292e+00 0 0 0 +2627 876 2 3.2744916934268492e-01 1.5961330693165227e+01 2.0714668578823805e+01 1.0632985837133541e+01 0 0 0 +2626 876 1 -7.2597635668302984e-01 1.6852985064361519e+01 2.0338225510179768e+01 1.0533847084845975e+01 0 0 0 +482 161 2 3.7732523695064918e-01 1.4789997302559515e+01 2.2756784640945057e+01 1.1880158544694746e+01 0 -1 0 +2064 688 2 3.4982189958829368e-01 1.5398745546105964e+01 2.1573632558705661e+01 7.4042228792037763e+00 0 0 1 +2636 879 2 3.6801504006444241e-01 1.9287424658031981e+01 1.8884583749552444e+01 1.2304592146246019e+01 0 0 0 +2635 879 1 -7.1930182243662977e-01 1.8721799978166800e+01 1.9031954580377946e+01 1.3056327433617250e+01 0 0 0 +2834 945 2 3.3904231354261710e-01 1.8011825502857707e+01 1.9571668908372096e+01 1.2729719668732258e+01 0 0 0 +2062 688 1 -7.5233856886005890e-01 1.4720889017106710e+01 2.2083751114041338e+01 7.9319879318777540e+00 0 0 1 +2628 876 2 3.6013062061877316e-01 1.6793504274382368e+01 1.9667082287731365e+01 9.8196129202630988e+00 0 0 0 +246 82 2 3.8223723397471004e-01 1.9677629648349928e+01 2.2659560861524234e+01 1.3470837764260315e+01 0 -1 0 +318 106 2 3.6460510894379844e-01 1.9391691935460369e+01 2.2632410876852376e+01 7.8743501717128872e+00 0 -1 0 +1774 592 1 -7.3808776636459816e-01 1.8388365856387527e+01 2.2257583029510826e+01 9.4106770166346898e+00 0 0 1 +481 161 1 -7.3686566666960396e-01 1.5392754018076330e+01 2.3401506948523021e+01 1.2326685474492542e+01 0 -1 0 +2690 897 2 3.8077933113803375e-01 1.7118700699729459e+01 2.3755057829849676e+01 1.2108509925928093e+01 0 0 0 +2571 857 2 3.4705504739017007e-01 1.6659729929720985e+01 2.3120707191088925e+01 1.4711938719177578e+01 0 0 0 +2345 782 2 3.3408049698686781e-01 1.7951003949121066e+01 1.8490666724892229e+01 1.4971765217918959e+01 0 1 0 +1458 486 2 3.3546848630018994e-01 2.0688532644434744e+01 1.9796632568193832e+01 1.4429771487945500e+01 0 0 0 +274 92 1 -7.3567961464394083e-01 2.5123966332927758e+01 2.0330798567902363e+01 1.4445848293135958e+01 0 0 0 +2930 977 2 3.5568366779223870e-01 3.4285721790098439e-01 2.2938730406175065e+01 1.4631219344744295e+00 1 0 1 +1456 486 1 -6.9123898505827908e-01 2.1672533974329593e+01 1.9919714078324510e+01 1.4400695086354490e+01 0 0 0 +528 176 2 3.7194736345747315e-01 1.7530553520903077e+01 3.0545144868361422e+01 3.9729845031758839e+00 0 -1 0 +1244 415 2 3.7478692617993181e-01 2.0273458814267748e+01 1.7990155238290292e+01 1.1160300170329492e+01 0 0 0 +181 61 1 -7.4730568145306686e-01 2.9430578371317857e+01 2.6588779748915744e+01 1.1961461469247768e+01 -1 0 0 +1243 415 1 -7.3174734640122197e-01 2.0737337468379774e+01 1.7170816955908140e+01 1.1396599161137804e+01 0 0 0 +282 94 2 3.8360281622256703e-01 2.1021092367318527e+01 1.9731840779446717e+01 1.0351425630162543e+01 0 0 0 +1245 415 2 3.9155171097875230e-01 2.1419365418185183e+01 1.7423445127614535e+01 1.2048261554259843e+01 0 0 0 +280 94 1 -7.6743092679418234e-01 2.0178810112504355e+01 1.9743231124767004e+01 1.0680718568691095e+01 0 0 0 +281 94 2 3.5842289632887275e-01 1.9688873997523658e+01 2.0308117129783962e+01 1.0090800136651925e+01 0 0 0 +2957 986 2 3.4592950163766484e-01 2.3289160873739561e+01 2.2883794480643740e+01 9.3265178419923145e-01 0 0 1 +2655 885 2 3.7064092809625354e-01 2.2037209951736987e+01 1.6169541421012749e+01 1.0582799613228202e+01 0 0 1 +1276 426 1 -7.5469087222565279e-01 2.3008391762653400e+01 1.7326918310159513e+01 1.2818953611288835e+01 0 0 0 +1278 426 2 3.3681277895958806e-01 2.2801442616324763e+01 1.7137023953533227e+01 1.3770873088966352e+01 0 0 0 +1277 426 2 3.6340304975251581e-01 2.3505779351600385e+01 1.8086758659667957e+01 1.2957714615811325e+01 0 0 0 +1289 430 2 3.6533091991039757e-01 2.2848764884322208e+01 1.9894275044266344e+01 1.2794661809258885e+01 0 0 0 +1288 430 1 -7.1011042439796679e-01 2.3688861487805319e+01 2.0061435833718654e+01 1.2304173525710651e+01 0 0 0 +1290 430 2 3.8098515036334835e-01 2.4092879824807778e+01 2.0702079761935977e+01 1.2991360251216689e+01 0 0 0 +764 255 2 3.7022355281977826e-01 2.6872310051988801e+01 1.6115154023736682e+01 2.1725137676795652e+00 -1 0 0 +512 171 2 3.8412380436018584e-01 2.4267644800078443e+01 1.5986899549558521e+01 1.2225108267747364e+01 0 0 0 +1914 638 2 3.8847786056277950e-01 1.0897688610698163e+01 1.5810805535212650e+01 1.2033235321975353e+01 0 0 0 +244 82 1 -6.9521786709554856e-01 1.9544052489598037e+01 2.2348710749988040e+01 1.4370548852622965e+01 0 -1 0 +2742 914 2 3.6084303049161259e-01 2.0251362377557456e+01 2.1852148622208741e+01 1.1439894558044323e+01 0 0 1 +2633 878 2 3.9933252227664767e-01 2.3440361873456663e+01 1.6723943395913373e+01 9.3598720620014166e+00 0 0 0 +2632 878 1 -7.3915576872259658e-01 2.4038034342201431e+01 1.7447894673381377e+01 9.0492303629412252e+00 0 0 0 +1179 393 2 3.9660368888882308e-01 2.1852866160514409e+01 1.9522164809799822e+01 7.7530687749261791e+00 0 0 0 +2781 927 2 4.1030647399571779e-01 2.2890591164047450e+01 1.8612554158838794e+01 8.5930560897962547e+00 0 0 1 +2779 927 1 -7.2727859115035309e-01 2.2073751557777175e+01 1.9198543875935329e+01 8.6298631073995491e+00 0 0 1 +1434 478 2 3.9851599447773650e-01 2.3506887394850455e+01 2.1020272739838518e+01 1.0948284240640614e+01 0 0 0 +2741 914 2 3.3678527741236330e-01 2.0181249639319986e+01 2.3318724259645538e+01 1.1561525817332308e+01 0 0 1 +2740 914 1 -7.4866476455259201e-01 2.0600744267511196e+01 2.2554120619800575e+01 1.1914395065903795e+01 0 0 1 +1433 478 2 3.8322665744508810e-01 2.2869176642482675e+01 2.0539493450712051e+01 9.5226028653044441e+00 0 0 0 +1432 478 1 -6.6847296558310765e-01 2.3298033615914775e+01 2.1312867632419710e+01 9.9907725484808871e+00 0 0 0 +1205 402 2 3.8377984232055873e-01 2.3499690111339021e+01 2.3320835146967340e+01 1.0111167479857757e+01 0 0 0 +1137 379 2 3.6770268558152153e-01 1.8353088651016321e+01 2.2953721785978278e+01 1.0058670775751686e+01 0 0 0 +1453 485 1 -7.5145082130426499e-01 2.6789096505217518e+01 2.2430587692014818e+01 1.5442910304471745e+01 0 0 0 +2637 879 2 3.9311219977788153e-01 2.4741204898595598e+01 1.9647113231003271e+01 1.5113791566614278e+01 0 0 0 +1468 490 1 -7.2068342123639539e-01 2.8966434349854417e+01 1.9154201968148524e+01 1.4979358376186727e+01 0 0 0 +861 287 2 4.0651075317900559e-01 2.5806411494840208e-02 2.1270450064237135e+01 1.2783883048745254e+01 0 0 0 +608 203 2 3.6675238729668996e-01 2.7850178787626216e+01 1.9136371441949084e+01 1.3803217393134240e+01 0 0 0 +630 210 2 3.6309080307885683e-01 2.9028125951237563e+01 1.6058989394956633e+01 1.0415260748932875e+01 0 0 0 +1660 554 1 -7.5442722379400595e-01 4.0135881704838167e-01 1.9431027012911230e+01 9.7173969865152667e+00 0 0 1 +1662 554 2 3.5618623031647290e-01 3.0574287542183043e+01 1.9722017819454177e+01 9.4855283779133952e+00 -1 0 1 +859 287 1 -7.5023654268626561e-01 3.0254978323648722e+01 2.1079628652697938e+01 1.3298100381778786e+01 -1 0 0 +275 92 2 3.8390079721216863e-01 2.5787637441177402e+01 1.9840094727727273e+01 1.3938347969523656e+01 0 0 0 +786 262 2 3.6027909744608505e-01 2.8148054126738025e+01 1.8753102315176864e+01 8.6193906780994549e+00 -1 0 0 +784 262 1 -7.2302511553283211e-01 2.8903658671929485e+01 1.9389477793691043e+01 8.2089807192514126e+00 -1 0 0 +195 65 2 3.8191353315325044e-01 8.7113363255162319e+00 3.0846212294261775e+01 1.2596785873973463e+01 0 -1 0 +953 318 2 3.6027044517098017e-01 1.5817598124148383e+01 1.5714005722017710e+01 5.6174108869596939e-01 0 0 0 +1189 397 1 -7.1544367291068811e-01 2.6921682084028351e+01 1.7789488102408793e+01 8.9711005428389168e+00 0 0 0 +1733 578 2 3.6895704063676416e-01 9.1963439014940320e+00 1.5831193077288665e+01 2.3916686679337407e-01 0 0 1 +2847 949 2 3.9835923189317363e-01 2.7640457545297767e+01 2.0910592306274317e+01 8.6418918519677383e+00 0 0 1 +547 183 1 -7.2312140353185683e-01 2.7105741343730866e+01 1.9177755757790784e+01 1.3031043664579730e+01 0 0 0 +548 183 2 3.9742500055695790e-01 2.7304498342915164e+01 2.0033877462850207e+01 1.2530677573972113e+01 0 0 0 +1191 397 2 3.4840538967143153e-01 2.7451330835753257e+01 1.6933755771103396e+01 9.3414820357359876e+00 0 0 0 +708 236 2 3.6488594194418511e-01 2.7070039735781386e+01 1.7310121484343870e+01 1.3122638800061480e+01 0 0 0 +2719 907 1 -7.2966322172293274e-01 2.7107813178606079e+01 1.6311703555282133e+01 1.3207549150690276e+01 0 1 0 +449 150 2 3.5261750338568154e-01 2.5724691297489919e+01 1.5563016208233936e+01 1.2037111339031529e+01 0 0 0 +2845 949 1 -6.8769288041857168e-01 2.7025491040190250e+01 2.1592881727130667e+01 8.4990628473396512e+00 0 0 1 +2846 949 2 3.8038735579488880e-01 2.6433602461348386e+01 2.1354419784401358e+01 7.7688668323159575e+00 0 0 1 +1743 581 2 3.7765073139456967e-01 7.2356872641078835e+00 1.6060498379255343e+01 1.5391384239203663e+01 0 0 0 +535 179 1 -6.9351140030448077e-01 3.0284127290741271e+01 1.6230269670986370e+01 1.3573916799934615e+01 0 0 0 +536 179 2 3.7314818964639873e-01 2.9901479008657134e+01 1.6352230165212294e+01 1.4441972570683136e+01 0 0 0 +660 220 2 3.7179064244987614e-01 2.8865788050204245e+01 2.1362944491574712e+01 1.2154042996054416e+01 0 0 0 +659 220 2 4.0432105193771761e-01 2.7791523949705152e+01 2.2456870164268040e+01 1.1704153621669375e+01 0 0 0 +658 220 1 -6.9223023092681224e-01 2.8012348343654654e+01 2.1448870618608790e+01 1.1715364926751253e+01 0 0 0 +2721 907 2 3.6108356320386598e-01 2.6732987384118097e+01 1.6118864937044048e+01 1.4054984522232740e+01 0 1 0 +2406 802 2 3.5759213084386299e-01 6.9917753744641971e+00 2.6618904346310060e+01 9.1981759563612431e-01 0 0 1 +2634 878 2 3.7251254928066418e-01 2.4933829306015355e+01 1.7281373873388898e+01 9.4288325992868725e+00 0 0 0 +852 284 2 3.6451835468165611e-01 2.7934010582606248e+01 2.3453446618877454e+01 9.1836728485920904e+00 -1 0 0 +851 284 2 3.6612875001996253e-01 2.9385911656431233e+01 2.3579932011057522e+01 8.9765043757203298e+00 -1 0 0 +850 284 1 -6.8714835947063957e-01 2.8609390307377367e+01 2.4166971249212075e+01 9.0063218834278285e+00 -1 0 0 +1465 489 1 -7.0697422021671075e-01 2.6814958960255879e+01 2.3821799842204708e+01 1.1510981608322417e+01 0 0 0 +1470 490 2 3.9396544034778719e-01 2.9607576814578849e+01 1.9739531833934805e+01 1.4554791256008762e+01 0 0 0 +860 287 2 3.9738405253143166e-01 3.0049415937613894e+01 2.1845685412330898e+01 1.3854917881241008e+01 -1 0 0 +1970 657 2 3.6631544657957621e-01 4.4801048982882392e+00 3.0384862741634578e+01 1.2457271286002571e+01 1 0 0 +679 227 1 -7.3884430294729031e-01 1.3884601581128519e+00 2.7307601184088483e+01 8.0433511615065196e+00 1 -1 0 +2138 713 2 3.6574522442457519e-01 6.9649678246169577e-01 2.4684228485841167e+01 1.3184934328737844e+01 1 0 0 +2137 713 1 -7.0704388954002095e-01 9.3231783484885575e-02 2.4368009481772123e+01 1.2452573721020419e+01 1 0 0 +741 247 2 3.7434885247858879e-01 2.7727092391315016e+00 2.6691716599280845e+01 8.7988528462250741e+00 1 0 0 +1445 482 2 3.8548131930074031e-01 2.2005697343618769e+00 2.4900957451708251e+01 1.0087717825901684e+01 1 0 0 +739 247 1 -7.5354058077878527e-01 3.3607101838340738e+00 2.6226518828141142e+01 9.4456856881618663e+00 1 0 0 +1689 563 2 3.5366450763106971e-01 4.6756331867403400e+00 2.7096660767504279e+01 8.6034060848582605e+00 0 0 1 +2664 888 2 3.6248914724789583e-01 3.6253351295021203e+00 2.3415664233892677e+01 1.4668228614684358e+01 0 0 0 +740 247 2 3.7813238114201547e-01 3.2460095888464986e+00 2.6699903299190165e+01 1.0368050223914613e+01 1 0 0 +1586 529 2 3.7914039895457374e-01 2.5740308199525472e+01 1.6185108114413278e+01 3.9510960135165032e+00 -1 0 1 +681 227 2 3.6443997307201897e-01 1.0555671798228803e+00 2.8004445704230264e+01 8.7094294737145947e+00 1 -1 0 +1360 454 1 -6.7480008408751069e-01 1.4882493780982777e+00 2.4269534685597151e+01 1.0097032697747219e+01 1 0 0 +2491 831 1 -7.4313586911541984e-01 3.7274056157859561e+00 2.7308610645775840e+01 1.1901978495234834e+01 0 0 0 +1010 337 2 3.5848162394431332e-01 4.3408557086198805e+00 2.8087849175057361e+01 1.1869491949944251e+01 0 0 0 +1969 657 1 -7.1861000860944768e-01 3.7762539101629833e+00 3.0949819758938002e+01 1.2762526107510293e+01 1 0 0 +1361 454 2 3.7604403072138470e-01 9.6890215047289319e-01 2.4434767575930834e+01 1.0987557222386553e+01 1 0 0 +2663 888 2 3.7514753484908803e-01 2.5655514490488831e+00 2.4484266788593096e+01 1.4091030504039944e+01 0 0 0 +2281 761 1 -7.2337854692324965e-01 8.3296510298333487e-02 2.9523357072742080e+01 9.0212914448415393e+00 0 0 0 +111 37 2 3.4865849155406547e-01 2.5712482674108879e+00 2.6740270841671524e+01 1.3652703216261845e+01 0 -1 0 +337 113 1 -7.3277063770123152e-01 5.2120488092907511e+00 2.3985492898151392e+01 1.0959719444651245e+01 0 -1 0 +338 113 2 3.4553558971079390e-01 6.2101215163811032e+00 2.4246202947588152e+01 1.0943827835801443e+01 0 -1 0 +339 113 2 3.3212807815336182e-01 4.9598037038503726e+00 2.4396189596964280e+01 1.1791023608398064e+01 0 -1 0 +2283 761 2 4.1823708180317992e-01 4.5748216314865070e-01 2.9633425011777803e+01 9.9150992687357231e+00 0 0 0 +2662 888 1 -7.4003655433427440e-01 2.6664637143622563e+00 2.3560630291725882e+01 1.4418375427170361e+01 0 0 0 +109 37 1 -7.5977382313663044e-01 1.9055882972700284e+00 2.6096448762336642e+01 1.4006135911992970e+01 0 -1 0 +110 37 2 3.5479215686412657e-01 1.3927653851935911e+00 2.6513347488364442e+01 1.4765745062724859e+01 0 -1 0 +2475 825 2 3.5741072622930053e-01 5.6307128342522352e+00 2.2855817075340919e+01 1.5361045007921270e+01 0 0 0 +2492 831 2 3.4668336412011003e-01 4.2340425669308424e+00 2.6694833106235713e+01 1.2413656554824133e+01 0 0 0 +2487 829 2 3.6683106593829695e-01 5.5441176634189455e+00 2.4617578699145994e+01 1.3662232150179799e+01 0 0 0 +2485 829 1 -7.3305340844882494e-01 5.7369451291585660e+00 2.5553291098444294e+01 1.3448761055350099e+01 0 0 0 +912 304 2 3.7863694181231811e-01 2.7893370743276495e+01 3.0413138803232307e+01 8.0702270047507252e+00 -1 0 0 +92 31 2 3.8132548215501233e-01 2.1190540495800669e+00 3.0302769407529631e+01 1.1789497509934840e+01 0 0 0 +91 31 1 -6.9177040178921889e-01 1.2569725004997006e+00 3.0103235284568061e+01 1.1455679813964528e+01 0 0 0 +575 192 2 3.3863973483648530e-01 2.0446333414633720e+01 2.6761208615750910e+01 4.0302338863605713e-01 0 -1 0 +1688 563 2 3.8521082307435872e-01 5.6336866786490143e+00 2.7608018581349981e+01 7.4137911714745517e+00 0 0 1 +2831 944 2 4.0120236849744478e-01 1.1541474163486269e+01 2.9359371686660065e+01 1.1752173950452967e+01 0 0 0 +2152 718 1 -7.2840395014258164e-01 1.0771233970095382e+01 2.2869455708534712e+01 8.4131440408646938e+00 1 0 1 +2153 718 2 3.4814834762962904e-01 1.0147816463516468e+01 2.3775620741313222e+01 8.3219357419077973e+00 1 0 1 +2037 679 2 3.8362085249896749e-01 1.9899847643284769e+01 2.5336370734770949e+01 1.4911183385682811e+01 0 0 1 +894 298 2 3.4374717299163865e-01 2.1779549416947212e+01 3.0425566677244884e+01 5.2775980603456469e+00 -1 0 0 +188 63 2 3.8115975079692371e-01 3.0992125779233263e+01 2.1477571266727409e+01 1.1216504440015862e+00 -1 0 1 +1687 563 1 -7.1719615304991724e-01 5.5991592764731992e+00 2.7338239278206903e+01 8.3617872748748301e+00 0 0 1 +1795 599 1 -7.6870820021542008e-01 5.9494360062101341e+00 2.8972972617046459e+01 1.2403016717369882e+01 0 -1 0 +1878 626 2 3.7636298385944633e-01 6.4934736890311697e+00 2.8466200272256263e+01 1.1743586516661779e+01 0 -1 0 +1242 414 2 3.4819153269248820e-01 1.1458703621783737e+01 2.6217662116156244e+01 7.0050228561939214e+00 0 0 0 +172 58 1 -7.1874989402726008e-01 9.8018782620938776e+00 2.5205555533011093e+01 7.6901266485896800e+00 0 0 0 +174 58 2 3.4596646801330511e-01 8.8205436118645792e+00 2.5004152451287883e+01 7.4015636926675379e+00 0 0 0 +173 58 2 3.0562091312378320e-01 9.5135997837157511e+00 2.5731573796909860e+01 8.5283624559504201e+00 0 0 0 +2289 763 2 3.4569195403219072e-01 8.3959156523212233e+00 2.4458657913821110e+01 1.2248577581774047e+01 0 0 0 +1874 625 2 3.4453520128448678e-01 1.1217599696795792e+01 2.5665299626114340e+01 1.4875566851880778e+01 0 0 0 +1875 625 2 3.0763144174779811e-01 1.1633158219400611e+01 2.6723684815386864e+01 1.3980132317917876e+01 0 0 0 +1873 625 1 -7.7644829978827168e-01 1.0870391602787791e+01 2.6164980504216064e+01 1.4163444117104003e+01 0 0 0 +2944 982 1 -7.8030950606872118e-01 2.5094625183601316e+01 2.4729624226333470e+01 1.4848347488443634e+01 0 0 0 +2287 763 1 -7.5971256236996898e-01 8.1613287892445463e+00 2.4424577554753924e+01 1.1296842670315336e+01 0 0 0 +1796 599 2 3.5652387618113229e-01 6.1658294090837220e+00 2.8629799499281052e+01 1.3291114191694442e+01 0 -1 0 +171 57 2 3.5455462731887888e-01 8.7845489577640645e+00 2.5037455967793871e+01 1.0824436580267422e+01 0 0 0 +2830 944 1 -7.4329954283332977e-01 1.1656641946018244e+01 2.8912746684218583e+01 1.0890491019252101e+01 0 0 0 +1274 425 2 3.3728908911554367e-01 1.0254271118106468e+01 2.6247367068049233e+01 1.1641460915073457e+01 0 0 0 +2457 819 2 3.1916350196148274e-01 7.4395176851492133e+00 2.6616304689440746e+01 1.0786739217533420e+01 0 0 0 +1017 339 2 3.4525292214042869e-01 9.9089982397385334e+00 2.7756063275864712e+01 1.4549603740398132e+01 0 0 0 +2455 819 1 -7.2212191390713598e-01 7.1761790177787246e+00 2.7529759230761492e+01 1.0450754065767292e+01 0 0 0 +2456 819 2 4.0167138987704837e-01 6.3966272305360334e+00 2.7358149110698143e+01 9.8423136660914370e+00 0 0 0 +1129 377 1 -7.4402689481222684e-01 9.8679871040149294e+00 2.6428557603968883e+01 1.0818379404068505e+01 0 0 0 +1130 377 2 3.4906253787067065e-01 1.0308848949186933e+01 2.7296657017511102e+01 1.0631858315759979e+01 0 0 0 +1108 370 1 -7.3509866285050496e-01 6.7819386709148510e+00 2.8350745869579519e+01 1.5157542166913336e+01 0 0 0 +2486 829 2 3.7124170033753284e-01 6.7668685306300000e+00 2.5639416955711489e+01 1.3452178874451207e+01 0 0 0 +1309 437 1 -7.7410997084759603e-01 1.1738301814259012e+01 3.0966864452431789e+01 6.6548083195092929e+00 0 0 0 +1080 360 2 3.5058274539291207e-01 1.0337418717062187e+01 2.9558191710750361e+01 1.3402523135697662e+01 0 0 0 +1275 425 2 3.6837993201431540e-01 9.0598754230804577e+00 2.5439639281251701e+01 1.4159497195899700e+01 0 0 0 +1273 425 1 -7.5103018929361298e-01 8.2221070722734506e+00 2.4989921683706754e+01 1.4234853006812012e+01 0 0 0 +545 182 2 3.7983422390290761e-01 8.3190199387179860e+00 2.4323247452721915e+01 1.4988061584299976e+01 0 0 0 +1015 339 1 -7.2625316751530800e-01 9.5679904653137164e+00 2.8632579762848515e+01 1.4747348448165372e+01 0 0 0 +1016 339 2 3.8358706448607893e-01 8.5947944756125754e+00 2.8552143838314887e+01 1.4740479930045707e+01 0 0 0 +2832 944 2 3.6833849269024443e-01 1.2588437322679425e+01 2.9053786834328644e+01 1.0683054358137804e+01 0 0 0 +227 76 2 3.8069043050140500e-01 6.7542390031189177e+00 3.0773260057919693e+01 9.1966885347387062e-01 0 -1 0 +2915 972 2 3.8551792146819380e-01 2.9656999864425053e+01 2.3973228441648722e+01 1.4866838077747847e+01 0 0 0 +2639 880 2 3.5382776357617346e-01 1.6007331995540330e+01 2.5236837403739859e+01 7.9389906345421988e+00 0 0 0 +1193 398 2 3.8051987740779625e-01 1.8522913699255128e+01 2.9847006931604518e+01 8.6640675735241128e+00 0 0 0 +1732 578 1 -7.4532839113724625e-01 8.2798027313755096e+00 1.5589978915163060e+01 6.0614107305412301e-01 0 0 1 +1538 513 2 3.2744579304075944e-01 2.8846945819764723e+01 2.8684559785946476e+01 1.4562564651170861e+01 -1 -1 0 +1073 358 2 3.5008751492266438e-01 1.3516348774983586e+01 2.7235119518117589e+01 1.5243551143419339e+01 0 0 0 +1227 409 2 3.8695006736496318e-01 1.6865139872453611e+01 2.5470963849060176e+01 1.4541920940672078e+01 0 0 0 +1226 409 2 3.7873760396994960e-01 1.5874096929113774e+01 2.6770712919022515e+01 1.4331108043844960e+01 0 0 0 +2063 688 2 3.8209526769738550e-01 1.4922461290486877e+01 2.3021166676742244e+01 7.9279146966643985e+00 0 0 1 +1172 391 2 3.5355614092858006e-01 1.2267462673473288e+01 2.4221920277934284e+01 1.2202751818008295e+01 0 0 0 +1317 439 2 3.6427128582856894e-01 1.7258174439809238e+01 2.8197828259110025e+01 1.4529929347731880e+01 0 0 0 +1315 439 1 -7.0673690633660369e-01 1.7467177185380216e+01 2.8996844434408963e+01 1.5032248418901911e+01 0 0 0 +1225 409 1 -7.3521269320585547e-01 1.6760428185466743e+01 2.6343852476671227e+01 1.4119017882511317e+01 0 0 0 +2307 769 2 4.1092433174476961e-01 1.3686499160217535e+01 2.6190888129513567e+01 1.0509522490312445e+01 0 0 0 +2305 769 1 -7.3363234297698821e-01 1.3801725526248331e+01 2.6425268615620343e+01 9.5587547222638403e+00 0 0 0 +1043 348 2 3.7488238002414792e-01 1.4224794825377835e+01 2.4795576440808638e+01 1.2407501077041029e+01 0 0 0 +1072 358 1 -7.5077515467102973e-01 1.4100174963763427e+01 2.7158099946067772e+01 1.4422332292510733e+01 0 0 0 +2354 785 2 3.7955646818807254e-01 1.4403336353317394e+01 2.5707977956498741e+01 9.0801816765774657e+00 0 0 0 +1042 348 1 -7.5574451851450375e-01 1.3722560202291875e+01 2.5625203017520530e+01 1.2160140075432530e+01 0 0 0 +2689 897 1 -7.5596613291204851e-01 1.8049130070871175e+01 2.4077677492745515e+01 1.1843914553786719e+01 0 0 0 +1044 348 2 3.8444265938506628e-01 1.3719370747684914e+01 2.6258494731729748e+01 1.2866591766800873e+01 0 0 0 +2638 880 1 -7.3946183648271491e-01 1.5838469627839384e+01 2.4793575644859470e+01 8.7445951541069427e+00 0 0 0 +2640 880 2 3.8000076377866066e-01 1.6482863244304806e+01 2.5165264274375453e+01 9.3536532814575395e+00 0 0 0 +402 134 2 3.5434434072595594e-01 1.6485829848811974e+01 2.9322011186864653e+01 1.1874800116819284e+01 0 -1 0 +2691 897 2 3.4324381271677640e-01 1.8497596222731573e+01 2.4288384210517094e+01 1.2685712673771203e+01 0 0 0 +456 152 2 4.0156213536723340e-01 1.4079078091068254e+01 2.9208691867340892e+01 8.7948409004611250e+00 0 0 0 +454 152 1 -7.4724607350644467e-01 1.4269704606927844e+01 2.9049367119220246e+01 9.7639277367604222e+00 0 0 0 +1157 386 2 3.9693621783976146e-01 1.4549899230700456e+01 3.0410698280629511e+01 1.2407421056395414e+01 0 0 0 +455 152 2 3.8938432504030729e-01 1.4306317791770821e+01 2.8082202413390142e+01 9.8257789927633485e+00 0 0 0 +1074 358 2 3.3688842220012999e-01 1.4007528479879568e+01 2.8062766023229749e+01 1.4005996237181597e+01 0 0 0 +1158 386 2 3.6991769068996366e-01 1.4328583456193895e+01 2.9097732895946045e+01 1.1522628580131078e+01 0 0 0 +1156 386 1 -7.3693579554483479e-01 1.4375724792677884e+01 2.9473555471827485e+01 1.2424077907767250e+01 0 0 0 +494 165 2 3.8074666430643545e-01 1.7744184738142668e+01 2.5702243032888457e+01 1.1254239154423740e+01 0 -1 0 +495 165 2 4.0180544917710997e-01 1.7684296342007571e+01 2.7320131652222550e+01 1.1035037616890445e+01 0 -1 0 +493 165 1 -7.2753012853380328e-01 1.7560127483372341e+01 2.6468309166629076e+01 1.0624576470576089e+01 0 -1 0 +400 134 1 -7.4414814174795618e-01 1.7364456511259320e+01 2.9156083069696830e+01 1.1409583424397898e+01 0 -1 0 +2526 842 2 3.8682226415933840e-01 1.7407891697735227e+01 2.9800800492857434e+01 1.0697719107152466e+01 0 0 1 +1192 398 1 -7.5146970683876402e-01 1.7676230764997566e+01 3.0276716962852685e+01 8.8718959354934217e+00 0 0 0 +1741 581 1 -7.3205757942065153e-01 6.5646294206871234e+00 1.6602793438545699e+01 1.4935295448350956e+01 0 0 0 +1019 340 2 3.7533566628932991e-01 1.5494448101255530e+01 1.7967393218913010e+01 9.6419364205948610e-01 0 1 0 +1457 486 2 3.3608578371234021e-01 2.1802152775354795e+01 1.9974146943511290e+01 1.5349502717791385e+01 0 0 0 +429 143 2 3.7369022834846510e-01 2.3737537351792326e+01 2.9042833884525809e+01 9.9993294061308617e+00 0 -1 0 +245 82 2 3.2729285075045900e-01 1.9299541545737657e+01 2.3204914995461841e+01 1.4823889772453104e+01 0 -1 0 +2945 982 2 3.8493052695990354e-01 2.4558820099153891e+01 2.4237362512852961e+01 1.4248491875091533e+01 0 0 0 +1110 370 2 3.2284115324006901e-01 5.9629587183467230e+00 2.7879547095184176e+01 1.5289372348273277e+01 0 0 0 +1946 649 2 3.4319387916119626e-01 2.6385533926690393e+01 2.6915266267265956e+01 1.2790122706965821e+01 0 0 0 +2035 679 1 -7.4850951670186616e-01 1.9522439391815791e+01 2.5501955878457565e+01 1.4044260114417856e+01 0 0 1 +2 1 2 3.7182616676479113e-01 2.2099257703414636e+01 2.4866968193163192e+01 6.7331328722075625e+00 -1 -1 0 +1486 496 1 -7.4570053510063972e-01 2.9970113727581392e+01 3.0166641069568584e+01 1.4964882298871128e+01 0 0 0 +2084 695 2 3.6571927225739886e-01 1.8926476090992040e+01 2.5747936370918769e+01 9.4622934725375138e+00 0 -1 0 +1885 629 1 -7.5905026705536827e-01 1.9492371208209629e+01 2.5436962842319616e+01 8.7592194762612987e+00 0 -1 0 +1886 629 2 3.9134367693637823e-01 1.9417671525079349e+01 2.6040516596834813e+01 8.0482391152251491e+00 0 -1 0 +2264 755 2 3.6876059672045897e-01 2.0127903249874674e+01 2.9294240185926455e+01 1.0162597224450533e+01 -1 0 0 +1359 453 2 3.5682764756711299e-01 2.0003498669298974e+01 2.8159304742168526e+01 7.4747609713330609e+00 0 0 0 +1014 338 2 3.4719095364891989e-01 2.2834738116041521e+01 2.7860297648398340e+01 7.6587750779259025e+00 0 0 0 +2736 912 2 3.4769891114122353e-01 1.3599245093020784e+01 1.6479025823656730e+01 1.0280685422969542e+01 0 0 0 +2263 755 1 -7.4090646041065489e-01 2.0305524809265258e+01 2.9319573919632511e+01 9.0448243895213505e+00 -1 0 0 +1012 338 1 -7.6915917651958687e-01 2.2686210632562460e+01 2.8150152827682845e+01 8.5602338989257909e+00 0 0 0 +2265 755 2 3.6087503388705217e-01 2.1257154507068531e+01 2.9033514336035918e+01 8.9465941849200608e+00 -1 0 0 +1013 338 2 3.6505715459970411e-01 2.2306724491447220e+01 2.7355122049564567e+01 9.0130000203875085e+00 0 0 0 +2954 985 2 3.7582232234417695e-01 2.1564640697541989e+01 2.6395567250149814e+01 1.0872246030938877e+01 0 0 1 +2755 919 1 -7.6148392492405548e-01 2.1799280755174109e+01 2.5846175036755039e+01 1.0063024342258730e+01 0 0 1 +1184 395 2 3.7014196369676028e-01 2.0509120429392205e+01 2.8869233821073585e+01 1.2145827657275872e+01 0 0 0 +2757 919 2 3.8709186019132275e-01 2.0979702888375712e+01 2.5586546353317935e+01 9.5932138541673204e+00 0 0 1 +1185 395 2 3.7230877560740350e-01 1.9055063706262271e+01 2.9462956218345347e+01 1.1831934015659300e+01 0 0 0 +2076 692 2 3.7915662099277253e-01 2.0567140417363138e+01 2.6485831293818670e+01 1.2865693203352905e+01 0 -1 0 +1183 395 1 -7.3721753404518597e-01 2.0050729408969488e+01 2.9641306532156555e+01 1.1671696178352919e+01 0 0 0 +2074 692 1 -7.7414661817605712e-01 2.1190928563446558e+01 2.7145357222097807e+01 1.2441861780772955e+01 0 -1 0 +2075 692 2 4.0285127557932976e-01 2.1963979517384846e+01 2.7248635801780097e+01 1.2960945200595175e+01 0 -1 0 +2882 961 2 3.4567728753195492e-01 2.3689262756956474e+01 2.6221608865749200e+01 1.3897438508303820e+01 0 0 0 +683 228 2 3.8850947898225768e-01 2.2287043656262462e+01 2.2710659639236084e+01 1.3159838603159599e+01 0 -1 0 +684 228 2 3.9098808257530643e-01 2.3339634958910594e+01 2.3402399945945756e+01 1.2344122318292756e+01 0 -1 0 +682 228 1 -6.9746337220353483e-01 2.3125296302024395e+01 2.3166784061331143e+01 1.3275389404967701e+01 0 -1 0 +2883 961 2 3.3405337731821316e-01 2.4594507691402203e+01 2.7413326810741978e+01 1.3573785439163032e+01 0 0 0 +2881 961 1 -7.4833507498208907e-01 2.3678702829374647e+01 2.7157308162026748e+01 1.3777877093008364e+01 0 0 0 +1206 402 2 4.0841236155139748e-01 2.3127446955732903e+01 2.4816037541215099e+01 1.0488707043851456e+01 0 0 0 +1204 402 1 -7.3831533211398614e-01 2.3666061908616861e+01 2.4028985318967081e+01 1.0766836745112006e+01 0 0 0 +572 191 2 3.5723901917161704e-01 2.5448062543971378e+01 2.4378839592437217e+01 8.4478213725293188e+00 0 -1 0 +427 143 1 -7.2658915359131349e-01 2.4338046472811751e+01 2.9165416708310708e+01 1.0751912586528359e+01 0 -1 0 +911 304 2 3.2269895416079913e-01 2.8199373540185583e+01 2.9038503386115810e+01 8.8708669066955714e+00 -1 0 0 +428 143 2 3.4990884231565705e-01 2.4398068524033910e+01 3.0172422508081215e+01 1.0810772009746300e+01 0 -1 0 +2331 777 2 3.5079342493493992e-01 5.2064627058065236e+00 2.7708451934664833e+01 9.4589076273547601e-01 0 0 1 +289 97 1 -6.8890047440900226e-01 2.5614823927510720e+01 2.7405470988437354e+01 9.0938119240594943e+00 -1 -1 0 +2143 715 1 -7.5804542689975407e-01 7.8745710373642239e-02 2.8267785805496505e+01 1.3067751100228358e+01 1 0 0 +2139 713 2 3.7928201005903961e-01 3.0523943861771443e+01 2.5123347238073457e+01 1.2286052823693883e+01 0 0 0 +2337 779 2 3.5914943750021483e-01 2.7982980760739459e+01 3.0361659529949762e+01 1.0725883676226925e+01 -1 0 1 +1467 489 2 3.5954451884135707e-01 2.5873940482334660e+01 2.3683995088923901e+01 1.1185822601501235e+01 0 0 0 +1455 485 2 3.7693870283650671e-01 2.6146068105875198e+01 2.1789399816838561e+01 1.5035604289235520e+01 0 0 0 +183 61 2 3.4828795567031207e-01 2.8557800567354928e+01 2.6376138691493416e+01 1.2266070203373703e+01 -1 0 0 +677 226 2 3.6396272860491191e-01 2.5712859436769588e+01 2.9030195725155021e+01 1.2128497063177194e+01 0 -1 0 +1106 369 2 3.9913351683679482e-01 1.8174279945828175e+01 3.0684727674107993e+01 1.4512233723842488e+01 0 0 0 +1304 435 2 3.6107063623748398e-01 2.8625501449869109e+01 2.7181843318364749e+01 1.0310947948550398e+01 0 0 0 +1912 638 1 -7.4104414153033016e-01 1.1698069005670529e+01 1.5744419460621131e+01 1.2544597663609681e+01 0 0 0 +678 226 2 3.3044914957682942e-01 2.6419359007871105e+01 2.9680792073147057e+01 1.3215613763102581e+01 0 -1 0 +910 304 1 -7.4281924048833048e-01 2.8437280336074551e+01 2.9976056974506591e+01 8.8325068950829451e+00 -1 0 0 +676 226 1 -7.6505901219117389e-01 2.6301827644936228e+01 2.8799583958072560e+01 1.2882579797955763e+01 0 -1 0 +1303 435 1 -7.8727795606889606e-01 2.8309919864935516e+01 2.7010363946789624e+01 9.4216674720800295e+00 0 0 0 +290 97 2 3.7043836185306966e-01 2.6565017029408050e+01 2.7390411449107006e+01 9.1249793246568327e+00 -1 -1 0 +2171 724 2 3.4326834663890887e-01 2.7562919121937277e+01 2.7975513531725674e+01 1.4186873036472745e+01 0 -1 0 +2145 715 2 3.5341020361431097e-01 5.8511868267090583e-01 2.7692818681943656e+01 1.3752232476885101e+01 1 0 0 +1945 649 1 -7.6402729752946219e-01 2.6695077837973667e+01 2.6000376719885502e+01 1.2969061133326520e+01 0 0 0 +93 31 2 3.7976280265708601e-01 9.0348566445855460e-01 2.9409424590030735e+01 1.2152921026129114e+01 0 0 0 +1947 649 2 3.5703833910423982e-01 2.6106173714029055e+01 2.5634024907519958e+01 1.3699848668347313e+01 0 0 0 +2282 761 2 3.8799513008704178e-01 3.0099826630609414e+01 2.9613146404803253e+01 8.9160193148825062e+00 -1 0 0 +291 97 2 3.5750723329860512e-01 2.5331940887455815e+01 2.8152410132656726e+01 9.7326543340109648e+00 -1 -1 0 +2144 715 2 3.3552473139954792e-01 3.0642422856655269e+01 2.8868905179467856e+01 1.3638219124658908e+01 0 0 0 +1305 435 2 3.9480578818462042e-01 2.8376297744365395e+01 2.6030779364580070e+01 9.3636649868968576e+00 0 0 0 +1466 489 2 3.9246402888933674e-01 2.6904922929046229e+01 2.4783907287116225e+01 1.1771241445637314e+01 0 0 0 +2734 912 1 -7.2382854903492777e-01 1.3707108314973883e+01 1.6770863409777963e+01 1.1231203325519900e+01 0 0 0 +1238 413 2 3.4481247578860302e-01 2.9313808677053302e+01 2.6259789677049987e+01 1.5302785766078491e+01 0 0 0 +2569 857 1 -7.3177289447898375e-01 1.7137009565743430e+01 2.3885095763143838e+01 1.5187813887405355e+01 0 0 0 +1488 496 2 3.5692691954684008e-01 2.9509775826894746e+01 3.0717097422710697e+01 1.4205998097752483e+01 0 0 0 +1967 656 2 3.5178852207702033e-01 5.1822116287820572e+00 1.6081427724137171e+01 7.8795791913758668e+00 0 0 1 +178 60 1 -6.7984691073543635e-01 9.1232380330040979e+00 1.5777570487371852e+01 1.1278161510519119e+01 0 0 0 +2216 739 2 3.4190717057196779e-01 2.4732804026675620e+01 3.0787678630554399e+01 6.5088003105526468e-02 0 -1 1 +107 36 2 3.4971144609339067e-01 3.5813792575530221e+00 2.5772053968346633e+01 2.5939715693812210e-01 0 -1 0 +1596 532 2 3.8907654241846407e-01 1.3932695527699384e+01 2.1276800284547537e+01 1.5421449348608080e+01 0 0 0 +2812 938 1 -7.0935516142550625e-01 1.6201426602723924e+01 3.1004616013418381e+01 6.7505702489044870e+00 0 0 1 +942 314 2 3.5904571565151733e-01 9.9603587503673836e+00 2.2884806884661739e+01 1.5325075750172157e+01 0 0 0 +2476 826 1 -7.5195101737034253e-01 1.6465874655471463e+01 1.5593224616913542e+01 1.3965217933360407e+01 0 0 0 +602 201 2 3.6704959261871023e-01 2.1035877062916210e+01 3.0977558031118289e+01 8.4737950394283104e+00 0 -1 0 +2829 943 2 3.8852471663730892e-01 2.2462937506558461e+01 1.5984134869706034e+01 1.5510374544909403e+01 0 0 0 +2841 947 2 3.6796209378854011e-01 6.3042865678625271e+00 2.2908991682961382e+01 8.0237084697705630e-02 1 0 0 +2565 855 2 4.0436469491963317e-01 1.2704761764209320e+00 1.6053650115450203e+01 1.9080890623613435e+01 0 0 0 +2563 855 1 -6.7611000077238470e-01 1.1472683325292459e+00 1.6249162632465769e+01 2.0035846446403664e+01 0 0 0 +2564 855 2 4.0778981150198818e-01 3.2501020578611023e-01 1.6753303182253919e+01 2.0229597294791944e+01 0 0 0 +2874 958 2 3.0889470933723584e-01 4.5820739533130483e+00 2.2128723260691615e+01 1.7462635147454915e+01 1 0 0 +1062 354 2 3.6037252280074866e-01 1.5638869745625017e+00 2.1597388647498928e+01 2.0415959146700228e+01 0 0 0 +2453 818 2 3.7904019657753646e-01 2.3220359130048061e+00 2.1698675539625103e+01 1.8975353307752130e+01 0 0 0 +2452 818 1 -7.1933244817353248e-01 1.8909493635495129e+00 2.1082951341513748e+01 1.9587431856443843e+01 0 0 0 +810 270 2 3.4622181872072527e-01 3.3923609315101131e+00 1.7049297110884318e+01 2.0486325237545703e+01 0 0 -1 +2467 823 1 -7.4410670249583011e-01 1.9985166093300266e+00 1.6134561924140069e+01 1.7564190458245303e+01 0 0 0 +2374 792 1 -7.5549882313366945e-01 4.9708970216671613e+00 1.5897640845727093e+01 1.8162153196036638e+01 0 0 0 +2376 792 2 3.4100942613539392e-01 5.3517499864409963e+00 1.6193354287035945e+01 1.7356460206206449e+01 0 0 0 +809 270 2 3.7578964355484112e-01 4.7014133471784998e+00 1.7027075716661063e+01 1.9863578419664893e+01 0 0 -1 +957 319 2 4.0200516441711215e-01 3.1711690929003957e+00 2.0435804024865750e+01 2.0366921012028225e+01 0 0 -1 +955 319 1 -7.8889873207496419e-01 3.9247566400771396e+00 2.0163465758259353e+01 2.0907781192972930e+01 0 0 -1 +956 319 2 3.8557050395591708e-01 4.0623801606004930e+00 1.9223205577425333e+01 2.0751641667477642e+01 0 0 -1 +2880 960 2 3.6470456104793036e-01 4.5590835487633585e+00 2.1324788166738507e+01 2.2180636558811027e+01 1 0 0 +2448 816 2 3.7891469717871362e-01 6.4104048348264353e+00 1.5780213047357663e+01 1.9122582220757749e+01 0 0 0 +581 194 2 3.7460426720235190e-01 1.5419382297134044e+01 3.0800518915771480e+01 2.6043886925557764e+01 0 -1 -1 +2872 958 1 -7.6269479373786953e-01 3.7009428876424453e+00 2.2413959840696482e+01 1.7771422527835437e+01 1 0 0 +2583 861 2 3.7327435409857357e-01 5.4441623512822481e+00 1.8249974051004482e+01 2.2056304735162637e+01 0 0 0 +2276 759 2 3.6149696853742197e-01 3.1288172812713939e+00 2.2351439514553785e+01 1.7001251371961878e+01 0 0 0 +1711 571 1 -6.8819152537359740e-01 5.8566533843091850e+00 1.8293718521491556e+01 2.2909298612410424e+01 0 -1 0 +570 190 2 3.7790956638870143e-01 1.0061486189159239e+00 2.2026618126685257e+01 1.6446196223609501e+01 1 -1 0 +1712 571 2 3.7429560628687081e-01 5.9482113502938487e+00 1.7356911971271291e+01 2.3291942335504508e+01 0 -1 0 +2997 999 2 3.5225437272715709e-01 6.6086757608250366e+00 2.1146860438570563e+01 1.9455868658346034e+01 1 0 0 +2995 999 1 -7.1265882757587440e-01 6.0246788973483776e+00 2.0382500638383885e+01 1.9229781344684003e+01 1 0 0 +2996 999 2 3.6650296349571998e-01 5.2499733116524041e+00 2.0470690161445592e+01 1.9880591363399045e+01 1 0 0 +868 290 1 -7.3205821000451254e-01 2.5958374885186419e+00 1.8850417537589575e+01 1.6354720355830807e+01 0 0 0 +2878 960 1 -7.1548846979217984e-01 4.9358770289344820e+00 2.2117119705858219e+01 2.2697449221692509e+01 1 0 0 +635 212 2 3.5961360442179929e-01 5.6901360064690110e+00 1.9633135447409259e+01 1.7042339689310896e+01 1 0 0 +634 212 1 -6.7563410020830350e-01 5.3605055245776070e+00 1.8786296859330406e+01 1.6629063670717017e+01 1 0 0 +2115 705 2 3.6239867576259466e-01 8.1957615718520105e-01 2.1726024313333614e+01 2.2120325638004008e+01 1 -1 0 +808 270 1 -7.5427064274521927e-01 4.2494047742010075e+00 1.7450448103663643e+01 2.0626646924584463e+01 0 0 -1 +869 290 2 3.8570557115870291e-01 2.5185340578773343e+00 1.7998889873837001e+01 1.6843735479251066e+01 0 0 0 +2879 960 2 3.7164260702824170e-01 5.8521700015176608e+00 2.2045790028891812e+01 2.2297213410798278e+01 1 0 0 +2929 977 1 -7.1547115163270913e-01 1.6733174735264713e+00 1.7565037739044858e+01 2.3239784168949743e+01 1 0 0 +2931 977 2 3.2300493004303144e-01 2.2415982955798239e+00 1.7185611160903488e+01 2.2537360933781954e+01 1 0 0 +636 212 2 3.5946336426886771e-01 4.4147762414063987e+00 1.9027776247970419e+01 1.6412064428481170e+01 1 0 0 +870 290 2 3.7872752608724825e-01 2.0905325493323708e+00 1.9511792379724071e+01 1.6829961939440512e+01 0 0 0 +90 30 2 3.8834987715673935e-01 3.0943079419730942e+01 2.3362929219921256e+01 1.7346239916805800e+01 -1 0 0 +2113 705 1 -7.4531961303516558e-01 4.7096294719936260e-01 2.2425780260519058e+01 2.1565634816952937e+01 1 -1 0 +84 28 2 3.4897705322751993e-01 6.4508803916872415e+00 2.3559543074305076e+01 1.9269480285743430e+01 0 0 0 +2446 816 1 -6.7386356744338205e-01 7.2018006619244739e+00 1.5776218241604699e+01 1.9761553973954879e+01 0 0 0 +2442 814 2 3.5677817428353492e-01 9.6049044051135581e+00 2.2246363140981110e+01 1.7420877969602010e+01 0 0 0 +2447 816 2 3.9770318677378780e-01 7.4935616608432012e+00 1.6709551456264087e+01 1.9776904052396038e+01 0 0 0 +1800 600 2 4.1263441495919023e-01 1.0493244043314887e+01 1.7856467585679393e+01 1.7093068535115474e+01 0 -1 0 +135 45 2 3.9020101999581147e-01 8.9585516768587699e+00 1.8955011839864781e+01 1.8149561907320830e+01 0 0 0 +2260 754 1 -7.0103070485976005e-01 9.3873721090698456e+00 1.9082381628952291e+01 1.7263300317648142e+01 0 0 0 +2459 820 2 4.0434139329975316e-01 9.9682070030173868e+00 1.9843076963821684e+01 1.7447146520603926e+01 0 0 0 +1672 558 1 -7.3253141780020958e-01 7.9840608557733734e+00 1.8482620317594353e+01 1.9685083124885651e+01 0 0 0 +1674 558 2 3.7607888027345554e-01 7.3596416275299301e+00 1.9230285660106546e+01 1.9813327146661464e+01 0 0 0 +1673 558 2 3.6415389748626503e-01 8.5081160988086832e+00 1.8502998507052023e+01 2.0514696258781356e+01 0 0 0 +2440 814 1 -7.2029648161625559e-01 9.6242880106291349e+00 2.1778741467411137e+01 1.8312320727913580e+01 0 0 0 +2441 814 2 3.4230058605961328e-01 8.8814147484251507e+00 2.2167102283532959e+01 1.8858178997559353e+01 0 0 0 +979 327 1 -6.7482259063424510e-01 9.3088737385903926e+00 1.8844654865070989e+01 2.2460656347640754e+01 0 0 -1 +981 327 2 3.2430814659994767e-01 1.0090752856278911e+01 1.8493242842363081e+01 2.3048318147233751e+01 0 0 -1 +2509 837 1 -7.0196068058637862e-01 1.1788754153574342e+01 2.1536558931188686e+01 2.2727285444582797e+01 0 0 0 +2494 832 1 -7.4134374356485211e-01 1.1760325640174159e+01 1.5944605909120598e+01 1.9376881358470484e+01 0 0 0 +1972 658 1 -7.0047005231308657e-01 1.0356107018540603e+01 1.5765792843229191e+01 2.1808303769585933e+01 0 -1 0 +1097 366 2 3.6804654533983650e-01 7.8990432043169108e+00 2.1860162981074073e+01 2.2981153842560516e+01 0 0 0 +1096 366 1 -7.2729234791305175e-01 7.6152216078739663e+00 2.1444382553767134e+01 2.2209500718085835e+01 0 0 0 +1098 366 2 3.4838062587641866e-01 8.2952355939697160e+00 2.0776200139787651e+01 2.1968914814861467e+01 0 0 0 +980 327 2 3.7621919366667722e-01 8.5832690427575464e+00 1.8897036762754400e+01 2.3096414297956674e+01 0 0 -1 +2511 837 2 3.7597610626228445e-01 1.2184327819808559e+01 2.1060047289538311e+01 2.1924792581040840e+01 0 0 0 +2652 884 2 3.9789000070420916e-01 1.2263660768542426e+01 2.0679378164077566e+01 1.6766552072505430e+01 0 0 0 +2650 884 1 -6.8409435611026848e-01 1.1940315526251053e+01 1.9971637937423427e+01 1.7402509219403665e+01 0 0 0 +276 92 2 3.5792728558793091e-01 1.2473518730115815e+01 1.9986571964075942e+01 1.8227032133933289e+01 0 0 0 +1883 628 2 3.5294858934765755e-01 2.0126515986864028e+01 2.6600416664575562e+01 1.6710503370343691e+01 0 -1 0 +2468 823 2 3.5615560919483652e-01 2.8654151542591384e+00 1.5740984955840435e+01 1.7791581939739004e+01 0 0 0 +47 16 2 3.7949325700519548e-01 2.9817534616981050e+01 2.8032334758234612e+01 3.0746086176961189e+01 -1 -1 -1 +82 28 1 -7.7671112964081956e-01 7.1843657320280654e+00 2.3006719761256434e+01 1.9524647308538508e+01 0 0 0 +83 28 2 3.7436185898904384e-01 7.7254895369175776e+00 2.3519389228185439e+01 2.0129349219977321e+01 0 0 0 +1799 600 2 4.0180775006962682e-01 1.1810581389420010e+01 1.7033363248374886e+01 1.6621855523625594e+01 0 -1 0 +2496 832 2 4.0008485730469134e-01 1.1250540164512902e+01 1.6368263642458796e+01 1.8542999428761011e+01 0 0 0 +1083 361 2 3.4433348874294767e-01 1.1232902323015876e+01 2.5552244869791163e+01 3.0999593987954334e+01 0 0 -1 +2259 753 2 3.6420374135793915e-01 2.8495310473049784e+01 1.6082096260150365e+01 2.4803330061870188e+01 -1 0 0 +605 202 2 3.6069102724715812e-01 1.0653259836693101e+01 3.0665436152166350e+01 2.8953516374747096e+01 0 -1 -1 +1798 600 1 -7.4143336877672139e-01 1.0949162989447700e+01 1.6939559656764274e+01 1.7089535490890931e+01 0 -1 0 +1973 658 2 3.9184314405503479e-01 1.0849543291546629e+01 1.6068095219841016e+01 2.1029731159266454e+01 0 -1 0 +2682 894 2 3.5444139370273653e-01 2.2872210746000949e+01 1.5823126078637777e+01 1.9045757247082200e+01 0 0 0 +2177 726 2 3.7577310362369815e-01 2.7328595985351306e+01 2.7745186194996887e+01 2.7380636598096508e+01 0 -1 0 +1861 621 1 -7.2948921739616235e-01 1.4647541013196969e+01 1.5893645690038790e+01 1.6279559372752470e+01 0 0 0 +2498 833 2 3.8097263973112555e-01 1.2938270040404607e+01 1.7100569370949469e+01 1.9757891409716329e+01 0 0 0 +2510 837 2 3.9891115678219063e-01 1.2767352583765447e+01 2.1753746710905055e+01 2.3420981789955796e+01 0 0 0 +1200 400 2 3.8872285951965591e-01 1.3469725203925210e+01 2.0688908003932251e+01 2.0114797967351016e+01 0 0 0 +2558 853 2 3.6746091393743319e-01 1.4197026966545986e+01 1.7970933823901291e+01 2.1890988724450011e+01 0 0 0 +2753 918 2 3.7812641223402427e-01 1.4503789050574767e+01 1.7016554098710056e+01 2.0007044748354808e+01 0 0 0 +2752 918 1 -7.5794476806788680e-01 1.3773058971560914e+01 1.7610063743754900e+01 2.0147381432369915e+01 0 0 0 +1198 400 1 -7.3785542644020652e-01 1.2722945994650141e+01 2.0178892074428340e+01 2.0412494058857920e+01 0 0 0 +2754 918 2 3.7953874501108459e-01 1.2955585724155942e+01 1.9237787247783668e+01 2.0402977981879534e+01 0 0 0 +2501 834 2 3.8591245743111002e-01 1.7069179347359253e+01 2.0427873319025792e+01 1.8107261744812714e+01 0 0 0 +2500 834 1 -7.6572664227792298e-01 1.7451409436569911e+01 2.0796108924863930e+01 1.7384990849850592e+01 0 0 0 +627 209 2 3.8642862893208907e-01 2.9111656614776731e+01 3.0905618749578579e+01 2.1355596991645790e+01 0 -1 -1 +949 317 1 -7.3787771051202400e-01 1.6477607738654012e+01 1.9366811648631813e+01 1.9731657372562406e+01 0 0 -1 +950 317 2 3.3931122396063440e-01 1.5985927502409446e+01 1.8563515801563192e+01 2.0012871080420258e+01 0 0 -1 +951 317 2 3.3522345570974904e-01 1.6399763962324545e+01 1.9974858343661673e+01 2.0488216687038562e+01 0 0 -1 +2502 834 2 3.2300893204683401e-01 1.7701586389495752e+01 1.9978779271362470e+01 1.6797287143588839e+01 0 0 0 +2856 952 2 3.6286740285890251e-01 1.9088413504040428e+01 2.1422083807728644e+01 1.7331561596723645e+01 0 0 0 +1896 632 2 3.3866811829528354e-01 1.8154982291173472e+01 2.2262265937145784e+01 1.8813822681117955e+01 0 -1 0 +1894 632 1 -7.3085053977240566e-01 1.8742250855955579e+01 2.2242430132658562e+01 1.9587550246900438e+01 0 -1 0 +1153 385 1 -7.0909725109401156e-01 1.4568212577030154e+01 2.1758084676468798e+01 1.9084218084358760e+01 0 0 0 +1155 385 2 3.9048148196889804e-01 1.4683212818975365e+01 2.2584919729163854e+01 1.8463305709392731e+01 0 0 0 +1594 532 1 -7.5416754141135045e-01 1.3083912575970864e+01 2.1704003403232615e+01 1.5708244538227005e+01 0 0 0 +1813 605 1 -6.9441977609673300e-01 6.3039324182827920e+00 3.0821799880495821e+01 2.1189606677534080e+01 0 -1 0 +2849 950 2 3.5480349581328491e-01 1.8129051651410556e+01 1.8705079174557753e+01 2.0228902761443340e+01 0 0 0 +1863 621 2 3.6854576007161327e-01 1.5172666627302098e+01 1.6095702708726595e+01 1.7029458334273805e+01 0 0 0 +2746 916 1 -7.3273328749835243e-01 1.6093205557140369e+01 1.6337803951705954e+01 1.9134412030967425e+01 0 0 0 +2670 890 2 3.7884885366866627e-01 1.6904941489106388e+01 3.1017946547072516e+01 1.8351426234861631e+01 0 0 0 +2747 916 2 3.7526896474913241e-01 1.6632130676703571e+01 1.6039388323818944e+01 1.8415729258210146e+01 0 0 0 +1386 462 2 3.8475593535460384e-01 2.7164340055959478e+01 3.0099801116608390e+01 1.7095499208172395e+01 0 0 0 +653 218 2 3.7600427557950300e-01 1.8429978363641840e+01 1.6393214087114725e+01 2.0536708163206043e+01 0 0 0 +926 309 2 3.3585894276326667e-01 1.1333087962713002e+01 3.0477256321291371e+01 2.4285673591173943e+01 0 0 0 +2965 989 1 -7.2583966210207052e-01 1.2864962032239149e+00 1.6632632849149697e+01 3.0381041687091447e+01 1 0 0 +2559 853 2 3.4260462364336525e-01 1.4848326918990606e+01 1.8875073679901682e+01 2.2968734193161435e+01 0 0 0 +2557 853 1 -7.0605139533455008e-01 1.4331764527916098e+01 1.8058309776495935e+01 2.2872018353667798e+01 0 0 0 +568 190 1 -7.1732389025140930e-01 1.8578047794583581e+00 2.1535792668020783e+01 1.6028395496735452e+01 1 -1 0 +2748 916 2 3.8168868936078065e-01 1.6471888994325148e+01 1.6105801488731093e+01 1.9974337730133673e+01 0 0 0 +2193 731 2 3.7234436478270250e-01 2.7998844550166559e+01 2.6328675841197466e+01 2.6367469356902838e+01 0 -1 0 +2855 952 2 3.6194534394557654e-01 2.0033965557468058e+01 2.1858791951418684e+01 1.6125877121497311e+01 0 0 0 +1148 383 2 3.4354261902983407e-01 2.5158469268152945e+01 1.6053290568144252e+01 2.3155099627088500e+01 0 0 -1 +2835 945 2 3.3871436051537818e-01 2.1391769693115197e+01 1.6752990314935037e+01 1.6522425972689309e+01 0 0 0 +2854 952 1 -7.6148130321416307e-01 2.0042981091993074e+01 2.1579410100574112e+01 1.7093249739522637e+01 0 0 0 +1895 632 2 3.3633802886671432e-01 1.9645176520042821e+01 2.2097828586501326e+01 1.9152440208691370e+01 0 -1 0 +1811 604 2 3.5609428898676954e-01 1.8707827025288051e+01 1.6952055951109241e+01 2.3651863342904992e+01 0 -1 0 +701 234 2 3.9222358501290394e-01 2.3503612900094463e+01 2.0341372940500914e+01 1.7687642841542818e+01 0 0 0 +702 234 2 3.7651346292397025e-01 2.4993255123712686e+01 2.0385384067740553e+01 1.7991898240006243e+01 0 0 0 +1199 400 2 3.6152846434730673e-01 2.1925673007890705e+01 2.2668013759151197e+01 1.7366330540124970e+01 0 0 0 +2922 974 2 3.6359369647919776e-01 2.3361693486816201e+01 1.7936969153801638e+01 1.5680260362233357e+01 0 0 0 +1951 651 1 -7.9328339981929941e-01 2.0314945917663909e+01 1.7053498194643307e+01 1.8136306919551057e+01 0 0 0 +1953 651 2 4.0646187120711424e-01 1.9964678378818739e+01 1.7591120829025456e+01 1.8830486704836559e+01 0 0 0 +1471 491 1 -7.0560238583825863e-01 2.1591710370264284e+01 1.9400709504333953e+01 1.7575382984451089e+01 0 0 0 +1473 491 2 3.6358229425505018e-01 2.0895794207685931e+01 2.0046956148602124e+01 1.7377298397087262e+01 0 0 0 +1472 491 2 3.5797336917149358e-01 2.1135558773815383e+01 1.8509993956440493e+01 1.7515866130752990e+01 0 0 0 +2848 950 1 -7.4639765540348535e-01 1.8884359102375498e+01 1.8088210388615583e+01 2.0089347304986042e+01 0 0 0 +2823 941 2 3.3361870878766836e-01 1.9594100684430078e+01 1.8350188943716372e+01 2.0815798117173369e+01 0 0 0 +729 243 2 3.7204357853523695e-01 2.5116144885662930e+01 1.7388683086282882e+01 1.8512589751641979e+01 0 0 0 +727 243 1 -7.5798923778031790e-01 2.4500483041448923e+01 1.6633913849547586e+01 1.8522427042114860e+01 0 0 0 +700 234 1 -7.2428328091107230e-01 2.4173472907905484e+01 2.0978036113664331e+01 1.7857787913545049e+01 0 0 0 +1598 533 2 3.5615949548720716e-01 2.4266877405299546e+01 2.1718804381820732e+01 1.9993608189643279e+01 -1 -1 0 +1597 533 1 -6.8879075016082236e-01 2.4547053504657136e+01 2.1460191437475498e+01 2.0842654794992228e+01 -1 -1 0 +2895 965 2 3.4721873723606850e-01 2.3611735806262967e+01 1.7418190978508740e+01 2.0520242610221505e+01 0 1 0 +728 243 2 3.2560686269065575e-01 2.4729109153127549e+01 1.6294300081678781e+01 1.7621847646784289e+01 0 0 0 +812 271 2 3.6544233381893815e-01 3.0350325135098089e+01 2.9852854799496011e+01 1.8855060403428610e+01 -1 0 0 +1262 421 2 3.9280028734695327e-01 2.3320715372853154e+01 2.2594933660546744e+01 1.8002306692272668e+01 0 0 0 +2893 965 1 -6.7043759366381761e-01 2.3372327680289807e+01 1.7931492806898280e+01 2.1317027953159300e+01 0 1 0 +687 229 2 3.8011281492684679e-01 2.2063828530596499e+01 3.0140444948093727e+01 1.8154991056672642e+01 0 -1 0 +1261 421 1 -7.8027245716304938e-01 2.2625684936239633e+01 2.3207155910459772e+01 1.7695133159849458e+01 0 0 0 +1599 533 2 3.4109075232904440e-01 2.5005131269365876e+01 2.2272712024131749e+01 2.1123917212844873e+01 -1 -1 0 +2894 965 2 3.8818749381521300e-01 2.2400140867531587e+01 1.8072813606607230e+01 2.1214357055362939e+01 0 1 0 +2920 974 1 -7.4414679730307309e-01 2.4285015990036879e+01 1.8212687527780602e+01 1.5899101547282720e+01 0 0 0 +1300 434 1 -7.4822613276536010e-01 2.0800383473570825e+01 1.8465849784410672e+01 2.2204085512601551e+01 0 0 0 +1302 434 2 3.5738914623477813e-01 2.0487439209381307e+01 1.9408482096827495e+01 2.2244477767286060e+01 0 0 0 +1149 383 2 4.0392969453323502e-01 2.3972783245823674e+01 1.7019307704670378e+01 2.2751918520546074e+01 0 0 -1 +1916 639 2 3.3613964528713897e-01 1.8997302249916039e+01 2.0878099496222401e+01 2.1543113259621361e+01 0 0 0 +1915 639 1 -7.6926925654261991e-01 1.9342540467916194e+01 2.0868884698068083e+01 2.2407952677753215e+01 0 0 0 +1964 655 2 4.0187800998034429e-01 1.9927315977925936e+01 2.1596354965791296e+01 2.2454076308555667e+01 0 0 0 +1909 637 1 -7.2852885325819183e-01 2.1619076440640026e+01 2.2641295424567502e+01 2.2370432722815025e+01 0 -1 0 +1923 641 2 3.3898145705281468e-01 2.2544854891054413e+01 2.2316554998686897e+01 2.2403423703457392e+01 0 -1 0 +2939 980 2 3.8223651968555239e-01 1.8668189867310097e+01 1.6390840966832787e+01 1.7277087787602792e+01 0 0 0 +2484 828 2 3.7307712781596902e-01 7.6359864421142936e+00 3.0975696403139899e+01 2.5643613489742151e+01 0 0 0 +1652 551 2 3.5794883155325735e-01 5.0427297969356157e+00 3.0832567574938459e+01 2.2775451059533083e+01 0 -1 0 +2174 725 2 3.8363043313262279e-01 2.6110317662816119e+01 2.0443548485530055e+01 2.1075769124118832e+01 0 -1 0 +1391 464 2 3.7290317354576341e-01 2.7111382834942216e+01 2.1894183992540228e+01 1.6151440859766556e+01 0 0 0 +2358 786 2 3.8008604609966268e-01 9.3263411365665654e+00 1.5948262579326640e+01 1.5980403394054617e+01 0 0 0 +2833 945 1 -7.7680805794190866e-01 2.1889033295979491e+01 1.6742009812923342e+01 1.5635214724251041e+01 0 0 0 +2552 851 2 3.4690752209002046e-01 3.0224935614711704e+01 1.8289187070138855e+01 2.0077458156807612e+01 -1 0 0 +2551 851 1 -6.9442600053127224e-01 2.9902739622371950e+01 1.7510894175084186e+01 2.0595281762567023e+01 -1 0 0 +2671 891 1 -7.8981279469468568e-01 2.7038448668057629e+01 1.6109327801297642e+01 2.1980652823958877e+01 0 0 0 +2553 851 2 3.4054194871104354e-01 2.9932848115363079e+01 1.7888113838751423e+01 2.1503092451354249e+01 -1 0 0 +2673 891 2 3.5462103090337649e-01 2.7642869727354125e+01 1.6345687751129560e+01 2.1314664342917510e+01 0 0 0 +1339 447 1 -7.1505846326089539e-01 3.0264441714750088e+01 2.0001447498995709e+01 1.8559038714274156e+01 0 0 -1 +1340 447 2 3.8626202073150107e-01 3.0830832560579825e+01 2.0507250999418257e+01 1.8012385725203700e+01 0 0 -1 +1341 447 2 3.6031343875946437e-01 3.0053357011462392e+01 2.0572482492739759e+01 1.9371104911776399e+01 0 0 -1 +133 45 1 -7.3076751616149360e-01 2.8186702082558806e+01 2.0605350989896191e+01 1.6998728028641448e+01 -1 0 0 +2288 763 2 3.6741410489919724e-01 2.8499639413149080e+01 1.9791474184393412e+01 1.6047710584435372e+01 -1 0 0 +88 30 1 -7.3974407319908686e-01 3.0642275184573499e+01 2.2444786654927732e+01 1.7303369220099167e+01 -1 0 0 +2147 716 2 3.7038335781937110e-01 2.7025335670146816e+01 1.9672959580777288e+01 1.7723089611091176e+01 0 0 0 +2148 716 2 3.7651016205666127e-01 2.6496805034932265e+01 1.9443354706358477e+01 1.9246338887601325e+01 0 0 0 +2146 716 1 -7.2104093540569658e-01 2.6280388468820234e+01 1.9237152426356072e+01 1.8293702857600966e+01 0 0 0 +654 218 2 3.4769438023806692e-01 1.7623658204021812e+01 1.5643832632787415e+01 2.1610894594067368e+01 0 0 0 +1877 626 2 3.2112080310880986e-01 1.3870985175542049e+01 2.9875449119889161e+01 1.5792307590707940e+01 0 -1 0 +651 217 2 3.9286800400053029e-01 2.9192664370322753e+01 1.7711724994172208e+01 1.5802045269930654e+01 0 0 0 +134 45 2 3.9047567034986069e-01 2.9008881684968355e+01 2.0503523319701635e+01 1.7547946173593918e+01 -1 0 0 +2275 759 1 -6.4774583495306726e-01 2.9360709086511637e+01 1.6935661418682951e+01 1.6403866516251814e+01 -1 0 0 +2173 725 1 -7.3404361623082071e-01 2.6633380646204319e+01 1.9635410283715427e+01 2.1140455287178625e+01 0 -1 0 +89 30 2 3.8746167291159628e-01 2.9827072030322309e+01 2.2528212416225113e+01 1.6740639784501301e+01 -1 0 0 +1392 464 2 3.7102612806233226e-01 2.8390741155099267e+01 2.0538409814570340e+01 2.1339382996650819e+01 0 0 0 +1974 658 2 3.9124312565084696e-01 1.1007641386595305e+01 1.5652532773548923e+01 2.2598675846856850e+01 0 -1 0 +1766 589 2 4.1012433962073519e-01 1.2093625146649675e+01 1.5616728719308202e+01 2.4139661025106957e+01 0 0 0 +1390 464 1 -7.4075990346411791e-01 2.8955462743157913e+01 2.1197977826611819e+01 2.0980214939671992e+01 0 0 0 +14 5 2 3.3216402906072906e-01 3.0807338651004379e+01 2.0010596347711214e+01 2.3173548166399449e+01 -1 0 -1 +13 5 1 -7.1823393407369551e-01 3.0181623694281640e+01 1.9196841376224548e+01 2.3232789797521033e+01 -1 0 -1 +15 5 2 3.6643141516383010e-01 3.0824115746408197e+01 1.8564929535970997e+01 2.3620467024305327e+01 -1 0 -1 +2946 982 2 3.5464067049253556e-01 2.8347711815742397e+01 2.1955609811562447e+01 2.0786727957214900e+01 0 0 0 +609 203 2 3.3726211282363161e-01 2.6722126209328781e+01 2.1864245394913599e+01 1.8227963199264458e+01 0 0 0 +2114 705 2 3.6294635940713710e-01 3.0569382111652988e+01 2.2092167602819217e+01 2.1384765432168759e+01 0 -1 0 +2175 725 2 3.6956857299387247e-01 2.6775328288934990e+01 1.9391414265406720e+01 2.2070995898872191e+01 0 -1 0 +2277 759 2 3.4130372475137410e-01 2.8461490696868786e+01 1.6572290727888070e+01 1.6616339409653147e+01 -1 0 0 +607 203 1 -6.7870281831109713e-01 2.6848217984759554e+01 2.2629066216455989e+01 1.8799515229904490e+01 0 0 0 +1742 581 2 3.7733924902200827e-01 6.2124954020967262e+00 1.7260377098056626e+01 1.5550962438447414e+01 0 0 0 +1330 444 1 -7.8496253413332018e-01 2.3270089834049863e+01 2.6534928251474859e+01 2.4065661470658988e+01 0 0 -1 +887 296 2 3.6946757095486138e-01 2.0040782937944233e+00 3.0061591848212984e+01 1.8686775775007728e+01 0 0 0 +737 246 2 3.7155224071670767e-01 3.5949238954512595e+00 2.9850888051310818e+01 1.7110461504270695e+01 1 0 0 +835 279 1 -7.3994905485209217e-01 1.9001215466248231e+00 3.0243246749550234e+01 2.2811929013447735e+01 0 0 0 +1482 494 2 3.2537375859813600e-01 1.9086213375222647e+00 2.4433742767312904e+01 1.6078242920839681e+01 1 0 0 +2379 793 2 3.8172034119539050e-01 1.1872760584299091e+00 2.8351728036452197e+01 1.6573683527548113e+01 0 0 0 +1658 553 2 3.7598090017212937e-01 4.3362350139691737e+00 2.3622345476035559e+01 1.8845548092946810e+01 0 0 0 +1448 483 2 3.9598335182587041e-01 2.8956507372101109e-01 2.4211592747288478e+01 2.1898365888876480e+01 1 0 0 +1816 606 1 -7.4039505542705264e-01 4.4548197327358166e+00 2.9048771957014083e+01 2.0364574050961149e+01 0 -1 0 +1608 536 2 3.8415672467719181e-01 3.4094829216785132e+00 2.4810241251644356e+01 2.3214769057767086e+01 0 -1 0 +1480 494 1 -7.4321766030088710e-01 1.3151549441660131e+00 2.4699572551697230e+01 1.6845119956996410e+01 1 0 0 +1657 553 1 -7.5391051177746882e-01 4.6406861138286324e+00 2.4411640466564599e+01 1.9369193193625961e+01 0 0 0 +1607 536 2 3.4950019252893449e-01 3.9391172258977307e+00 2.4668809266498091e+01 2.1762309228807219e+01 0 -1 0 +168 56 2 3.9778111545845751e-01 4.8475093205966653e+00 2.6357860575154756e+01 2.2702131321288228e+01 0 -1 0 +890 297 2 3.6811701282287895e-01 6.2511905814711950e+00 2.6600886977625279e+01 1.9000587336021255e+01 0 0 0 +2218 740 1 -7.7505098638268577e-01 1.6972191076454666e+00 2.7678944955362095e+01 2.0391031360233221e+01 1 -1 0 +2220 740 2 3.2792785896845461e-01 1.0077534081334456e+00 2.6993360710017047e+01 2.0440971238793225e+01 1 -1 0 +1659 553 2 3.8144052861295125e-01 4.0897156698269264e+00 2.5182641988673712e+01 1.9084729215070265e+01 0 0 0 +891 297 2 3.5274381077766698e-01 6.2083068484585358e+00 2.5461600949760292e+01 2.0013337957564250e+01 0 0 0 +889 297 1 -7.6685202371536598e-01 6.4538906183109939e+00 2.6406976884223820e+01 1.9888325559538149e+01 0 0 0 +2389 797 1 -7.4567975904915462e-01 2.9232523437030604e+00 2.6152195051468794e+01 1.8331498017525611e+01 0 0 0 +2391 797 2 3.9326254808262040e-01 2.3780527706042967e+00 2.5518835027557358e+01 1.7847227822781967e+01 0 0 0 +2219 740 2 3.5504751925497596e-01 1.9382781297843090e+00 2.7899885033152866e+01 2.1228752311420461e+01 1 -1 0 +2390 797 2 3.5492559747849900e-01 2.3951946751869384e+00 2.6463788627000607e+01 1.9098362572217635e+01 0 0 0 +1606 536 1 -7.8273983031529759e-01 3.5379376735739876e+00 2.5287692988003748e+01 2.2404395229677025e+01 0 -1 0 +824 275 2 3.5757835209464606e-01 1.6778081964300646e+00 2.8544713183763236e+01 1.8504583158296640e+01 0 0 0 +1447 483 1 -7.8084231982991281e-01 4.1723176459940631e-01 2.5098881068255277e+01 2.2252886266331245e+01 1 0 0 +886 296 1 -7.4338410648607733e-01 1.9580275389767821e+00 2.9338943355103435e+01 1.8031630550089133e+01 0 0 0 +1449 483 2 3.4068386353378610e-01 1.3526734389341162e+00 2.5260052242748490e+01 2.2189683785804149e+01 1 0 0 +1817 606 2 3.3863263823282508e-01 4.7495420765212675e+00 2.8245071703044033e+01 2.0815730761767309e+01 0 -1 0 +1818 606 2 3.6230976516486735e-01 3.6050574599956482e+00 2.8796585338422496e+01 2.0080230250081200e+01 0 -1 0 +836 279 2 3.7944051003969576e-01 1.8343953575126255e+00 2.9269659788844582e+01 2.2711957199106845e+01 0 0 0 +1619 540 2 3.0865492332967515e-01 5.2531346251025601e+00 2.5839475428431044e+01 1.7155063367279972e+01 0 -1 0 +1553 518 2 3.3759533236758055e-01 2.3331642385303124e+00 2.6798799991892459e+01 2.3233869925364218e+01 0 -1 0 +2888 963 2 3.7221098412170578e-01 2.1736036678608901e+00 3.0554994531806472e+01 3.0547439384624489e+01 1 0 0 +1618 540 1 -7.2150748307404122e-01 6.0675544812496733e+00 2.6343445561732437e+01 1.6914227835244521e+01 0 -1 0 +166 56 1 -7.7798256713464498e-01 5.4730584070999084e+00 2.7036778709998938e+01 2.2512398414187615e+01 0 -1 0 +1481 494 2 3.6273777416015407e-01 7.8842479601488002e-01 2.5379055134433440e+01 1.6393740924115864e+01 1 0 0 +1622 541 2 3.7958629953034284e-01 3.0355259666111596e+01 2.8912811005557533e+01 2.8734220869269837e+01 -1 -1 0 +2658 886 2 3.3046556022745233e-01 1.2616239059600234e+01 2.3718554088655857e+01 1.6156384330192726e+01 0 0 0 +2967 989 2 3.9694405617735240e-01 7.8619980381494770e-01 1.5852233150811893e+01 3.0191631415087002e+01 1 0 0 +1536 512 2 2.9020479076616773e-01 1.2721807801685799e+01 3.0544256463690271e+01 2.7995926123662766e+01 0 -1 0 +1521 507 2 3.8855343951159921e-01 2.9008050743040521e+01 2.4575896530061790e+01 2.9455934354360195e+01 -1 -1 0 +1581 527 2 3.4044964783745879e-01 6.6704753023468610e+00 2.2146446156744457e+01 1.7720354237761928e+01 0 0 0 +1579 527 1 -7.3079233402842936e-01 6.8473799725083850e+00 2.2032389149695376e+01 1.6775499150127768e+01 0 0 0 +1710 570 2 3.3164288297072542e-01 6.3442717039164833e+00 2.9399264140279374e+01 1.7809259870664633e+01 0 -1 0 +1186 396 1 -7.1762498153613963e-01 1.2061130362862064e+01 2.7710725555119232e+01 1.6303129930368414e+01 0 0 0 +2543 848 2 3.9132667210679384e-01 8.0328620678882103e+00 2.7360249799475074e+01 2.0200877092041747e+01 0 0 0 +2542 848 1 -7.4335551537365108e-01 8.8588566111759999e+00 2.7839565103082613e+01 2.0158454636607239e+01 0 0 0 +1580 527 2 3.6660103810031852e-01 7.7822935418275607e+00 2.2187181491108323e+01 1.6653747143274629e+01 0 0 0 +905 302 2 3.8125581257206370e-01 9.9809440180732878e+00 2.5058303935333765e+01 1.8708120984336677e+01 0 0 0 +904 302 1 -6.6718807913192824e-01 9.7640093485817729e+00 2.5881439346480942e+01 1.8157436649501598e+01 0 0 0 +2028 676 2 3.7288708414509059e-01 1.1465150032820725e+01 2.2959931806776911e+01 2.2204695762379774e+01 0 -1 0 +189 63 2 3.6496297873456091e-01 9.5150793476160480e+00 2.6576982078446441e+01 1.8746133122372619e+01 0 0 0 +1683 561 2 3.3609316699776010e-01 9.5418941214948010e+00 2.4143828787022262e+01 2.1454915643622822e+01 0 0 0 +2544 848 2 3.5925502517564772e-01 8.7192940972858128e+00 2.8455501814449036e+01 1.9433901210997096e+01 0 0 0 +2026 676 1 -7.6000936424524745e-01 1.1481342449937031e+01 2.4001709511526855e+01 2.1916569286833848e+01 0 -1 0 +167 56 2 3.5939831747318335e-01 5.8399563755352411e+00 2.6838134911364133e+01 2.1648050653970635e+01 0 -1 0 +2387 796 2 3.7171811309155250e-01 2.7904319420004885e+01 2.8455017550611686e+01 3.0357763291847803e+01 -1 0 0 +99 33 2 3.6473960429000868e-01 1.0731596183910357e+01 2.2867900148968648e+01 1.9092941586161427e+01 0 -1 0 +2700 900 2 3.7199849930061141e-01 2.0852448107235148e+01 1.7054906030418309e+01 3.0575464308630306e+01 0 0 0 +97 33 1 -7.5071721085194021e-01 1.1049890349600167e+01 2.3840135524714370e+01 1.9254247088408178e+01 0 -1 0 +800 267 2 3.5710118669031121e-01 2.4035493305068787e+01 3.0830422818147284e+01 2.5625406350025436e+01 -1 0 -1 +98 33 2 3.9763138146762189e-01 1.1341014006311463e+01 2.3953077489078169e+01 2.0157369867347231e+01 0 -1 0 +1682 561 2 3.5912858910436246e-01 8.3063524807804434e+00 2.3893927687367249e+01 2.2415732600795270e+01 0 0 0 +1746 582 2 4.0922736998545300e-01 1.0218875115844151e+01 2.7265474418666845e+01 2.1122927422688214e+01 0 -1 0 +1681 561 1 -7.1194996980377623e-01 8.5989116638959242e+00 2.4407703998472464e+01 2.1619795482451607e+01 0 0 0 +1745 582 2 3.7183887959671857e-01 1.0709595644695415e+01 2.5864885948545112e+01 2.1638167364185758e+01 0 -1 0 +1744 582 1 -7.3448628392948379e-01 1.0884850457999093e+01 2.6795137266220760e+01 2.1657055121225177e+01 0 -1 0 +2656 886 1 -7.3595319421670635e-01 1.2278339467500622e+01 2.4569208954327447e+01 1.6485816072697872e+01 0 0 0 +2657 886 2 3.4676392257192501e-01 1.1761127253799433e+01 2.4296052154892031e+01 1.7274728627990154e+01 0 0 0 +1708 570 1 -7.2804739697530674e-01 7.2541583481233065e+00 2.9027374704991516e+01 1.7779498249360810e+01 0 -1 0 +1769 590 2 3.6420768175652235e-01 1.0065218192421860e+01 2.4199319642198414e+01 2.4657457497983135e+01 0 0 0 +1814 605 2 3.4098094159333331e-01 6.6857723747746620e+00 2.9926880883147600e+01 2.1470524305880222e+01 0 -1 0 +1704 568 2 3.4684011316705121e-01 7.0846777559195795e+00 2.8056444158164609e+01 1.7623210577804553e+01 0 -1 0 +1026 342 2 3.8781539415751987e-01 1.0532268753529356e+01 2.7258597941924911e+01 2.3254135035277464e+01 0 0 0 +1815 605 2 3.6556475865578497e-01 5.4602084228133503e+00 3.0496894748905664e+01 2.0791504545758951e+01 0 -1 0 +1532 511 2 4.1676796539526711e-01 2.6985021244925864e+00 3.0332255359412574e+01 2.3328311399892229e+01 0 -1 0 +941 314 2 3.3011655614087365e-01 1.0235075396833105e+01 2.3914868421003952e+01 1.6431859224198476e+01 0 0 0 +1960 654 1 -7.4577671936548362e-01 1.0672557369495419e+01 2.2202495197016393e+01 3.0797234871241518e+01 0 0 0 +1187 396 2 3.5475340768696395e-01 1.2074232581338990e+01 2.6801524266253413e+01 1.6557468728805507e+01 0 0 0 +1263 421 2 3.6177104414988503e-01 6.8798332669191469e+00 2.8866167446549504e+01 1.6015683362064738e+01 0 0 0 +1025 342 2 3.4740510085813531e-01 1.3831000128405167e+01 2.9956041032301236e+01 2.0265276112271710e+01 0 0 0 +1887 629 2 3.4401208015117996e-01 1.3693521295342007e+01 2.9883365004670086e+01 1.8803328339921094e+01 0 -1 0 +1024 342 1 -7.4732187151657015e-01 1.4087397191898239e+01 2.9404061588278498e+01 1.9492453858151610e+01 0 0 0 +530 177 2 3.7072902686858572e-01 1.8333980877958460e+01 2.8495650933719439e+01 2.1013438094557412e+01 0 -1 0 +2668 890 1 -7.2586779053953332e-01 1.6468616660246916e+01 3.0200576834508450e+01 1.8107458376186266e+01 0 0 0 +1154 385 2 3.4661338446117257e-01 1.5147437638589933e+01 2.1087505274478012e+01 1.8824016883184473e+01 0 0 0 +2027 676 2 3.6997504158884464e-01 1.2396017155534320e+01 2.4352657259825314e+01 2.2151001049086265e+01 0 -1 0 +1140 380 2 3.4746339177485541e-01 1.3293086927379797e+01 2.8899256805032657e+01 2.1625048514514795e+01 0 0 -1 +964 322 1 -7.4458835564014869e-01 1.4019783567999925e+01 2.4794847815034593e+01 2.1473518938176689e+01 0 0 -1 +1625 542 2 3.4774047102489730e-01 1.5675859432699948e+01 2.4603413527062351e+01 1.8148153647608549e+01 0 -1 0 +2620 874 1 -7.0699379411909236e-01 1.4511457350057446e+01 2.6632506733136950e+01 1.9393603708328243e+01 0 0 0 +2622 874 2 4.0309427424184130e-01 1.4177434274016157e+01 2.7522401107493817e+01 1.9327041279340989e+01 0 0 0 +965 322 2 3.7670942870363838e-01 1.4795561586879975e+01 2.4239948137266012e+01 2.1598707770989751e+01 0 0 -1 +966 322 2 4.0283551317030708e-01 1.4130893948778615e+01 2.5315683513789242e+01 2.0618639203639322e+01 0 0 -1 +2621 874 2 3.7009770339032583e-01 1.5534641821589435e+01 2.6597926923867742e+01 1.9152049738736999e+01 0 0 0 +546 182 2 3.9382516461967920e-01 1.7478807026721604e+01 2.5575790465036320e+01 1.9552121382113413e+01 0 0 0 +1109 370 2 3.9603631716475218e-01 1.7587893381911218e+01 2.7037447379780758e+01 1.8842235312372665e+01 0 0 0 +544 182 1 -7.5072975927881780e-01 1.7106796996545597e+01 2.6158125046985724e+01 1.8868433779044160e+01 0 0 0 +2521 841 1 -7.4647176537913629e-01 1.6428268017121251e+01 2.3429442241142524e+01 2.2041669613978961e+01 0 0 0 +529 177 1 -7.0375099083884907e-01 1.8131769227280607e+01 2.8795775098271839e+01 2.1924862280486551e+01 0 -1 0 +531 177 2 3.5122400712037394e-01 1.8980691893033367e+01 2.9179868653899451e+01 2.2242680310203820e+01 0 -1 0 +2570 857 2 3.6124228882708764e-01 1.6866886169502983e+01 2.3823010403779197e+01 1.6164612093841882e+01 0 0 0 +2021 674 2 3.5382380688622811e-01 8.1392963818983528e+00 2.9579488267733431e+01 3.0253733617405214e+01 0 -1 0 +2523 841 2 3.6929354710445378e-01 1.7232548888680952e+01 2.3622220153421953e+01 2.1593006085617734e+01 0 0 0 +1256 419 2 3.8051453201239649e-01 1.9030161814415106e+01 2.8274253626770872e+01 1.8113350609912985e+01 0 0 0 +1454 485 2 3.5206106808239324e-01 1.7664833885406878e+01 2.9013449343858760e+01 1.8533401541384283e+01 0 0 0 +1255 419 1 -7.5347409426897416e-01 1.8438052720492330e+01 2.8456261883209745e+01 1.8922797934676712e+01 0 0 0 +2083 695 1 -7.0262180250070194e-01 1.8718730438484116e+01 2.4754632237447048e+01 2.0588384405181767e+01 0 -1 0 +1624 542 1 -7.3956337810603157e-01 1.5475438283386362e+01 2.3771735795258046e+01 1.7641629969102098e+01 0 -1 0 +1138 380 1 -7.6146681499474245e-01 1.3501118733959119e+01 2.9300473626089911e+01 2.2448873836361070e+01 0 0 -1 +2474 825 2 3.5290603632116113e-01 1.2611528613337823e+01 2.9176722611242191e+01 2.2934708093577072e+01 0 0 0 +1626 542 2 3.2229356468678999e-01 1.4641124069320480e+01 2.3957978604511425e+01 1.7192156142550395e+01 0 -1 0 +2669 890 2 3.4717046986472083e-01 1.5952070580594635e+01 2.9875827566246453e+01 1.8883612975171534e+01 0 0 0 +1901 634 2 3.5317885571686453e-01 1.4822065551027405e+01 3.0854677505537257e+01 1.6477916041192977e+01 0 -1 0 +1136 379 2 4.0767392731456431e-01 2.6442879725683227e+01 1.5660008620575594e+01 2.8388589670819208e+01 0 0 -1 +1176 392 2 3.9978903776553631e-01 1.6613533320728646e+01 2.8201931388980782e+01 2.2813638686767995e+01 0 0 -1 +1174 392 1 -7.1174938226555085e-01 1.5872914593859974e+01 2.7707197555882992e+01 2.3184198145441943e+01 0 0 -1 +1286 429 2 3.4628438558018088e-01 1.3704448050920417e+01 2.4838717995177532e+01 2.3350832111526049e+01 0 0 0 +1175 392 2 3.8363519506068650e-01 1.5078492004653695e+01 2.8150711279424037e+01 2.2899483423447752e+01 0 0 -1 +1651 551 1 -7.8285060938598927e-01 4.4194403360896963e+00 3.0887922791398800e+01 2.3466532786569424e+01 0 -1 0 +626 209 2 3.9621845435720282e-01 2.7847615437997295e+01 3.0501424331885072e+01 2.2180508767960035e+01 0 -1 -1 +1992 664 2 3.6051410708628318e-01 2.0626178995937018e+01 3.0100602719890823e+01 2.3131218091174588e+01 0 -1 0 +686 229 2 3.7421055410712623e-01 2.3659852309891750e+01 3.0028143307556778e+01 1.8342547479037314e+01 0 -1 0 +2079 693 2 3.9583162780992048e-01 1.9723128741721968e+01 2.4988631778753060e+01 2.0407977996557332e+01 0 -1 0 +1932 644 2 3.4421227945259986e-01 2.1344207544968793e+01 2.7851226360959707e+01 2.1272955535337648e+01 0 -1 0 +2094 698 2 3.6354366099202706e-01 2.0173786607516888e+01 2.9422326227873164e+01 1.9269407748667831e+01 0 -1 0 +2085 695 2 3.8122818574191608e-01 1.8605509104893063e+01 2.3830764690561470e+01 2.0277565134432361e+01 0 -1 0 +1930 644 1 -7.1467213111077366e-01 2.1061847246342328e+01 2.6972145939373167e+01 2.0962496030190213e+01 0 -1 0 +2861 954 2 3.7137108517621442e-01 2.4010162127788433e+01 2.8885012400371821e+01 2.2101341853608798e+01 0 0 0 +1493 498 2 3.1921227646168970e-01 2.1941377844299840e+01 2.6041777970915742e+01 1.6078635848747432e+01 0 0 0 +2645 882 2 3.7965892203550533e-01 2.1310205260161514e+01 2.3565953570186085e+01 2.0756286030596012e+01 0 0 0 +2646 882 2 3.5161030539515398e-01 2.1820045308662191e+01 2.3535148380306374e+01 1.9184269218590966e+01 0 0 0 +2644 882 1 -7.1520438057815272e-01 2.1191335657157019e+01 2.3965552173549941e+01 1.9868811349623044e+01 0 0 0 +2000 667 2 3.1274855451952654e-01 2.2624599183228213e+01 2.6435976023384825e+01 1.7772537425430986e+01 0 -1 0 +2001 667 2 3.6783470505669036e-01 2.2505073076895595e+01 2.5088515871338409e+01 1.8459579740222669e+01 0 -1 0 +1999 667 1 -7.3642715313987328e-01 2.2887589255464917e+01 2.5970513611562644e+01 1.8578068888355745e+01 0 -1 0 +1501 501 1 -6.9287330548869552e-01 2.0836175516565266e+01 2.5384126095132398e+01 2.3299606156038639e+01 -1 -1 0 +1503 501 2 3.7331495611030308e-01 2.0789067022777637e+01 2.5767747167377664e+01 2.2398845118656855e+01 -1 -1 0 +87 29 2 3.8326523475718316e-01 2.4548780893894236e+01 2.5925905445403366e+01 1.9298195248266229e+01 -1 0 0 +714 238 2 3.6404874289258238e-01 2.2611542123142179e+01 2.9062648080099102e+01 1.6401000149738167e+01 0 -1 0 +1494 498 2 3.6072749688955152e-01 2.1849896753612629e+01 2.4555361021431327e+01 1.6572136572799668e+01 0 0 0 +1492 498 1 -7.3316391226676914e-01 2.1376452327114844e+01 2.5236755111693732e+01 1.6013729069238671e+01 0 0 0 +712 238 1 -7.6409342265939650e-01 2.2275477138770068e+01 2.8254020254038011e+01 1.5978890268152776e+01 0 -1 0 +1502 501 2 3.2750900876334710e-01 2.1854605585089143e+01 2.5496881375028856e+01 2.3527282653141938e+01 -1 -1 0 +1979 660 2 3.5852533808203746e-01 2.1799106933111819e+01 2.6740398500441689e+01 2.0401528248955636e+01 0 -1 0 +788 263 2 3.6507823480155110e-01 6.4987601079497761e+00 1.5912072241343145e+01 2.7219369238076688e+01 0 0 -1 +940 314 1 -7.5993433492151319e-01 9.4971805038864261e+00 2.3359367531046708e+01 1.6091599198667009e+01 0 0 0 +1477 493 1 -7.1577442377359546e-01 2.3053780979927641e+01 2.8890241959665630e+01 2.2208804037335931e+01 0 0 0 +2092 698 1 -7.5466715536911633e-01 2.0846215571218774e+01 3.0087135731962384e+01 1.9428012576765440e+01 0 -1 0 +1884 628 2 3.5873098249391222e-01 2.0613278823251694e+01 2.8033346049140139e+01 1.6555712592891147e+01 0 -1 0 +2093 698 2 3.5280392882267042e-01 2.1063815814163046e+01 3.0163670223973018e+01 2.0433479183754347e+01 0 -1 0 +2660 887 2 3.5286436995863907e-01 2.7487043461046728e+01 1.5571799794734668e+01 2.2627831911794022e+01 0 0 0 +1334 445 2 2.7821251700341615e-01 2.6832516560421453e+01 2.0818061555282569e+01 3.0764535328747993e+01 0 0 -1 +1487 496 2 3.4957869916832085e-01 2.9561919775415696e+01 3.0500099929317116e+01 1.5755978158247848e+01 0 0 0 +1764 588 2 3.5788303295335155e-01 1.6073523692620853e+01 2.1330068963384001e+01 1.5693728250753868e+01 0 0 0 +2251 751 1 -6.5790732008145958e-01 2.7060622111411480e+01 2.3138700873311208e+01 2.2664690476658780e+01 -1 0 0 +1312 438 1 -7.3031361001199424e-01 2.5070922222013131e+01 3.0006153655259908e+01 1.9220975369543176e+01 0 0 0 +1313 438 2 3.5012392042868484e-01 2.5663626027006142e+01 2.9716243149321699e+01 1.8394812199552447e+01 0 0 0 +1425 475 2 3.7723369047906075e-01 2.8704011049145159e+01 2.8681496250141464e+01 1.8905034529406556e+01 0 -1 0 +1423 475 1 -7.6388720290780832e-01 2.9459068497605028e+01 2.8458150964772159e+01 1.9529336963744697e+01 0 -1 0 +2859 953 2 3.3898463393995498e-01 2.4412946085468128e+01 2.5266811427507651e+01 2.2706451280232127e+01 0 0 0 +1314 438 2 3.9911783707008580e-01 2.5230358647721125e+01 2.9296964356321265e+01 1.9878087884485009e+01 0 0 0 +85 29 1 -7.2176281150996591e-01 2.5501815796869369e+01 2.5912885136275552e+01 1.9550462972877664e+01 -1 0 0 +86 29 2 3.7828471673898134e-01 2.5977024907606967e+01 2.6044837885169201e+01 1.8729185148217773e+01 -1 0 0 +2857 953 1 -7.1861125738522080e-01 2.4810140820814162e+01 2.4609540156158999e+01 2.2135171478698584e+01 0 0 0 +2858 953 2 3.5289203010979869e-01 2.5210821844548992e+01 2.5198328136581399e+01 2.1434880036131528e+01 0 0 0 +2860 954 1 -7.5285457172525971e-01 2.5601738315333559e+01 2.8319951749867720e+01 2.1315971798595246e+01 0 0 0 +2329 777 1 -7.1587306170789655e-01 1.2745333444452337e+01 3.0713852883838449e+01 2.8991351654586076e+01 0 0 0 +210 70 2 3.6226682833164664e-01 1.4143902594545324e+01 1.9423887559536048e+01 3.0612047887587707e+01 0 -1 -1 +2959 987 1 -7.3013535989558320e-01 3.0237182633524661e+01 2.5890023663243380e+01 1.9740863231399143e+01 0 0 0 +2960 987 2 3.5622862537414779e-01 3.0299131846153013e+01 2.5693359166793037e+01 2.0688122868310288e+01 0 0 0 +1257 419 2 3.5933204238177729e-01 2.5657296690931656e+01 2.7455889667437290e+01 2.0917270722460326e+01 0 0 0 +2862 954 2 3.7250045307840729e-01 2.6255280745453227e+01 2.8288700086652774e+01 2.2064979665634123e+01 0 0 0 +1922 641 2 3.4362641349359224e-01 2.6976547696003230e+01 2.6801524385294677e+01 1.6077574805213192e+01 0 -1 0 +655 219 1 -7.3923104617492019e-01 2.8532214575804154e+01 2.4786964313114087e+01 1.7945087656029163e+01 0 0 0 +2961 987 2 3.8798185001293345e-01 3.0122827747604592e+01 2.6862559208414233e+01 1.9598814034183825e+01 0 0 0 +1239 413 2 3.4811734015773615e-01 2.9401706320264012e+01 2.5196281784305587e+01 1.6473066862725489e+01 0 0 0 +1980 660 2 3.5305149377366718e-01 2.5905406120992328e+01 2.5790280102005948e+01 1.6219988346805874e+01 0 -1 0 +2828 943 2 3.9278023582779725e-01 2.7598890178238655e+01 2.3144953493614747e+01 1.8505526299270542e+01 0 0 0 +1989 663 2 3.4454112243938917e-01 3.0076554704847812e+01 2.6633317441455134e+01 2.2689203245614717e+01 0 -1 0 +1978 660 1 -7.6844919196992867e-01 2.6583171425421828e+01 2.6293726405368989e+01 1.6752193747778342e+01 0 -1 0 +2885 962 2 3.9118904723554615e-01 2.8359710255059280e+01 2.7730344669396558e+01 2.2859672370126003e+01 0 0 0 +656 219 2 3.9255638374308610e-01 2.9045824561554294e+01 2.5362944038839306e+01 1.8596145177741722e+01 0 0 0 +657 219 2 3.7129585855316388e-01 2.7893426569355885e+01 2.5397429958062208e+01 1.7541061765761540e+01 0 0 0 +2884 962 1 -7.3268410251980332e-01 2.7413006812704335e+01 2.7529314741846104e+01 2.3251247739875684e+01 0 0 0 +1948 650 1 -7.4953320836361537e-01 2.8122726365632381e+01 3.0850868487460112e+01 2.7573055039574019e+01 0 -1 0 +1385 462 2 3.3269047709986116e-01 2.6842454196208301e+01 2.8600625368696640e+01 1.6957790706377303e+01 0 0 0 +1384 462 1 -7.1975854813490003e-01 2.7167743036007774e+01 2.9237737336757228e+01 1.7610578135538887e+01 0 0 0 +2253 751 2 3.8404855165492230e-01 2.6250991974089555e+01 2.3689503084155746e+01 2.2698207350136617e+01 -1 0 0 +1990 664 1 -7.5799876694940427e-01 2.0310033339867175e+01 3.0558379448676224e+01 2.2290969717053880e+01 0 -1 0 +504 168 2 3.2915485874146866e-01 2.7263663448182932e+01 3.0494235989220375e+01 2.7481866585701230e+01 0 -1 -1 +2947 983 1 -7.3195509874969900e-01 2.6441829801977150e+01 2.5826687157912477e+01 2.5428823592552760e+01 0 0 0 +1424 475 2 3.9331289744865816e-01 2.9214220635044462e+01 2.8921798538790245e+01 2.0328427778120837e+01 0 -1 0 +2886 962 2 3.7960746802718409e-01 2.7191708866374935e+01 2.8239158756923270e+01 2.3829865930469452e+01 0 0 0 +1237 413 1 -7.3117183968274879e-01 2.9918237329244480e+01 2.5592796656982234e+01 1.5666137887588182e+01 0 0 0 +1952 651 2 3.7923751450845622e-01 2.0907546181404513e+01 1.6385037666537183e+01 1.8589971419953056e+01 0 0 0 +2952 984 2 3.8170399981523723e-01 2.8453831402895418e+01 3.0346460350421467e+01 2.8318315062606668e+01 0 0 0 +2982 994 2 3.5160848176065723e-01 2.1433520797686438e+00 1.9570177324108638e+01 2.3107669594727223e+01 1 0 0 +738 246 2 3.3881585883435528e-01 4.3942328605555732e+00 3.0940415646398296e+01 1.7571086406364834e+01 1 0 0 +2527 843 1 -7.2698607350615241e-01 2.3196844427726404e+00 2.8597361533093011e+01 3.0511378841156507e+01 0 0 0 +2385 795 2 3.8112394632777896e-01 2.9961022611046481e+01 3.0046928320472791e+01 2.9583730813162237e+01 -1 0 0 +2425 809 1 -7.1482193954971462e-01 3.3532621097783730e+00 1.9839960179927040e+01 3.0697845470502060e+01 0 0 0 +2044 682 1 -7.6541947644699238e-01 2.4080883844593615e+00 1.6570250945378213e+01 2.6274366783401948e+01 0 0 0 +2349 783 2 3.4925697880558282e-01 4.2177899621053410e+00 1.8625834447867678e+01 2.8263978262672715e+01 0 0 0 +1670 557 2 3.5537701753545869e-01 4.3957175266996851e+00 1.8261981054295262e+01 2.4220414729432971e+01 0 0 0 +2993 998 2 3.5601728201365512e-01 5.9966209851872598e+00 2.1505486325908254e+01 2.9316820119416924e+01 1 0 0 +2185 729 1 -7.2026698964259472e-01 5.9251447342090566e+00 2.1302848211743100e+01 3.0255932247279645e+01 1 -1 0 +2427 809 2 3.7781551298825800e-01 3.2391788583891357e+00 1.9129839771225384e+01 3.0004605488449087e+01 0 0 0 +2186 729 2 3.8086033796125646e-01 5.1316614119440169e+00 2.0823693620839357e+01 3.0628727699587035e+01 1 -1 0 +662 221 2 3.7040438123801894e-01 5.6057775253857596e+00 2.1244164183074147e+01 2.7714058504464710e+01 1 0 -1 +1669 557 1 -7.7973807097322501e-01 3.7105665137867598e+00 1.8465511511109611e+01 2.4917478135107892e+01 0 0 0 +661 221 1 -7.4345978647853916e-01 5.4534343238070910e+00 2.2178300475985267e+01 2.7535137116941208e+01 1 0 -1 +1671 557 2 3.7906399431028182e-01 3.6035188306125527e+00 1.9407400904731173e+01 2.5080826225205467e+01 0 0 0 +639 213 2 3.4775917502865855e-01 5.0086058037080203e+00 2.1304207456058961e+01 2.5805251422869500e+01 1 0 -1 +638 213 2 3.7575797283131918e-01 4.8161222937691592e+00 2.1373822266418401e+01 2.4186793679858802e+01 1 0 -1 +2609 870 2 3.6207718172912584e-01 2.5653745886657213e+00 1.7346433081956352e+01 2.5687148876610067e+01 0 0 0 +637 213 1 -7.5029474511640637e-01 4.3746138153245155e+00 2.1132142902691289e+01 2.5054344794489687e+01 1 0 -1 +1781 594 2 3.7299382573261469e-01 1.5271124588344611e+00 2.2359489900499078e+01 2.7318293041670938e+01 0 0 0 +1782 594 2 3.4965800040112033e-01 4.0408778846199250e-01 2.2811477995160018e+01 2.6495021835586197e+01 0 0 0 +1780 594 1 -6.6727446371460963e-01 7.6765915283417141e-01 2.1982486223802791e+01 2.6826298420496851e+01 0 0 0 +8 3 2 4.0004543789923119e-01 3.7389007622466433e+00 2.2956485676150958e+01 2.4736635630508982e+01 0 -1 -1 +2373 791 2 3.4132676429244602e-01 2.2320075841095659e+00 1.7572741224824838e+01 2.3968808897901820e+01 0 0 0 +2347 783 1 -6.9994644078339785e-01 3.2585968610693312e+00 1.8514001117853020e+01 2.8126629022433701e+01 0 0 0 +663 221 2 3.8517369262463574e-01 6.2863239824351833e+00 2.2550862664264713e+01 2.7125988994371482e+01 1 0 -1 +2985 995 2 3.5959307243929090e-01 2.7533647909566361e+00 2.0801544070023564e+01 2.3695961648486293e+01 1 0 0 +2980 994 1 -7.2435082162749465e-01 1.9530433639087641e+00 2.0497439297340019e+01 2.3255410862279671e+01 1 0 0 +2348 783 2 3.9242028395195871e-01 3.2298511116835784e+00 1.7896940828707912e+01 2.7452545440331555e+01 0 0 0 +1332 444 2 3.7557528071718405e-01 2.3335505391886112e+01 2.7170785156078885e+01 2.4806508931105750e+01 0 0 -1 +2970 990 2 3.6688522164120557e-01 2.1392287851070968e-01 1.6775029319005199e+01 2.8400191754781204e+01 1 0 0 +1164 388 2 3.7203740054446527e-01 2.3420702508344302e+01 1.5916410685922342e+01 2.7892214141606132e+01 0 0 -1 +877 293 1 -7.2797792673171768e-01 2.7326507547330130e+00 2.3122953324870057e+01 2.8587166585888376e+01 0 0 -1 +1373 458 2 3.7454744342175622e-01 3.5294120548527474e+00 2.2758599641007351e+01 2.8177262459028825e+01 1 0 -1 +878 293 2 3.4533057748804208e-01 2.7299791782970173e+00 2.2789702867485666e+01 2.9454504281095979e+01 0 0 -1 +1855 619 1 -7.4413045278774148e-01 2.0109463741570114e+01 2.8384278303775087e+01 3.0775028429911707e+01 0 -1 0 +789 263 2 3.2201335287888250e-01 8.0366521987961370e+00 1.6295480587007585e+01 2.6943826305270736e+01 0 0 -1 +1008 336 2 3.6199647950362324e-01 1.1433061008357118e+01 2.0584924781475298e+01 2.4739606332638903e+01 0 0 -1 +1007 336 2 3.3963757848030784e-01 1.1848870115635458e+01 1.9859120995618696e+01 2.6036267103374858e+01 0 0 -1 +2046 682 2 3.7504334709875575e-01 1.6784148202346003e+00 1.6097212511656824e+01 2.5866521603033110e+01 0 0 0 +1368 456 2 3.5296855135188632e-01 2.6786486543256075e+01 2.9770869533580811e+01 2.5853573431031720e+01 0 0 -1 +854 285 2 3.6495895283248919e-01 1.0286963693574066e+01 1.6226732856398215e+01 2.7079333688374668e+01 0 0 -1 +2580 860 2 3.7666573385358160e-01 8.0818711634162241e+00 1.9557816392836582e+01 3.0249395448745599e+01 0 0 0 +2984 995 2 3.4942380265166256e-01 7.3056665123708395e+00 2.4380438677743957e+01 2.9776738135504704e+01 1 0 0 +787 263 1 -7.1655311593151649e-01 7.1150450095111992e+00 1.6645050808161916e+01 2.6734791315587966e+01 0 0 -1 +2372 791 2 3.2708739682564875e-01 5.0403624953012516e+00 1.9460215584045418e+01 2.6762566269908149e+01 0 0 0 +2933 978 2 3.6884964838213624e-01 6.2588127909998352e+00 1.8712568461369344e+01 2.7358088496745232e+01 1 0 0 +2371 791 1 -7.6084226326464821e-01 5.7205299563339622e+00 1.9502373901037121e+01 2.7485782073226098e+01 0 0 0 +2579 860 2 3.7101854074803220e-01 7.3931112197157898e+00 1.9412394060699523e+01 2.8883205652423072e+01 0 0 0 +816 272 2 3.6774779926751000e-01 9.4885281301581639e+00 2.0502346966278203e+01 2.6628657758632169e+01 0 0 -1 +814 272 1 -7.4049522540214852e-01 8.9900266550976813e+00 2.0373456443070861e+01 2.7417177277438903e+01 0 0 -1 +1006 336 1 -7.4730406840951236e-01 1.1097194937958344e+01 2.0016171171720160e+01 2.5430917037415238e+01 0 0 -1 +815 272 2 3.5102478765766632e-01 9.6899271298978391e+00 2.0409386983556040e+01 2.8102725733044746e+01 0 0 -1 +929 310 2 3.5755448360355291e-01 1.2546024301591041e+01 2.0845001726412651e+01 2.8344045518432125e+01 0 0 -1 +2517 839 2 3.6053355160253997e-01 8.4146087133532834e+00 1.8066566043726258e+01 2.5923904072527709e+01 0 0 0 +2516 839 2 3.4208952252192504e-01 9.2010884982553840e+00 1.9021930393649431e+01 2.5203628674164495e+01 0 0 0 +2515 839 1 -6.8006417961155186e-01 8.3528672536724606e+00 1.8612341393371388e+01 2.5136481650863537e+01 0 0 0 +928 310 1 -7.4850589529028377e-01 1.1671665128308016e+01 2.0545031197013902e+01 2.8559542782304217e+01 0 0 -1 +930 310 2 3.5951898378706293e-01 1.1589631713643650e+01 2.0699238047084538e+01 2.9503360926302939e+01 0 0 -1 +411 137 2 3.6526854477137383e-01 1.0645338564008624e+01 1.8898674590499819e+01 2.8282499080327316e+01 0 -1 -1 +409 137 1 -7.3779704757276465e-01 1.0766834302382104e+01 1.7944319338377518e+01 2.8103255051933751e+01 0 -1 -1 +270 90 2 4.0932337550909392e-01 8.1287106356269145e+00 2.3450734020607989e+01 2.7686443730116949e+01 0 0 -1 +268 90 1 -7.6334650286139838e-01 7.9717188740338152e+00 2.2791802523291700e+01 2.6972408292185314e+01 0 0 -1 +269 90 2 3.8850743812907546e-01 8.3507946121563723e+00 2.1871436925633514e+01 2.7166011096979176e+01 0 0 -1 +10 4 1 -7.4144922682737113e-01 1.2652418375462048e+01 2.3822356309873324e+01 2.9498822671200010e+01 0 -1 -1 +2578 860 1 -6.8685119850518728e-01 7.7546564097184811e+00 1.8883074033833029e+01 2.9632613543449569e+01 0 0 0 +277 93 1 -7.4706014041644864e-01 6.3301207185237756e+00 1.5872939889636022e+01 2.4321732661954936e+01 0 0 0 +1139 380 2 3.3703715380538052e-01 1.1492728536418293e+01 1.7905262033176264e+01 2.4808368934517500e+01 0 0 -1 +11 4 2 3.5868183038247675e-01 1.3261055176239545e+01 2.4501129818021180e+01 2.9929913633790228e+01 0 -1 -1 +279 93 2 3.9636694809602385e-01 6.6822072006268058e+00 1.6388886105691455e+01 2.5120445204020498e+01 0 0 0 +1845 615 2 4.0037342141108112e-01 7.9788801684986606e+00 2.3368313336261640e+01 2.5155337074150104e+01 0 -1 0 +969 323 2 3.7681680487321695e-01 1.0780364875361105e+01 1.6902594079348503e+01 2.9810591300870293e+01 0 0 -1 +967 323 1 -8.0341325939387198e-01 1.0920621920707132e+01 1.6408302649097482e+01 3.0592893380933546e+01 0 0 -1 +2020 674 1 -7.7720933259377167e-01 8.2167274088490192e+00 2.3526983558392313e+01 2.4273999926959096e+01 0 -1 0 +2330 777 2 3.1725450587772430e-01 1.3446069005233168e+01 3.0100047985129379e+01 2.9198445776585761e+01 0 0 0 +1562 521 2 4.0113596528416090e-01 6.7074618120947695e+00 1.8100496235919344e+01 3.0879391555179403e+01 0 0 0 +2340 780 2 3.4546254223701778e-01 2.6540877819908410e+01 3.0447579965943490e+01 3.0279007941670262e+01 -1 0 0 +2333 778 2 3.7427108553013344e-01 3.0312874408061170e+01 2.7955092532008830e+01 2.7083093710849329e+01 -1 0 0 +1838 613 2 3.6426806310453319e-01 2.7112712927454506e+01 2.5237078829455747e+01 2.9994996804296004e+01 -1 -1 0 +2921 974 2 3.6796808973412642e-01 2.4922742466873604e+01 1.7489024369484341e+01 1.5888872013393337e+01 0 0 0 +736 246 1 -7.4994288039603940e-01 4.4751578473554732e+00 3.0231809296514271e+01 1.6926561001074131e+01 1 0 0 +410 137 2 3.7103952897677045e-01 1.1700570944419812e+01 1.7907387620704849e+01 2.8072410962195082e+01 0 -1 -1 +2249 750 2 3.6271331741513041e-01 1.6047288290823513e+01 2.1465633278741688e+01 2.2290319722325474e+01 0 0 0 +2248 750 1 -7.5260699785787322e-01 1.5731104879424302e+01 2.0552829578736780e+01 2.2430334922013024e+01 0 0 0 +2804 935 2 3.4363111603013075e-01 1.4471450578665561e+01 2.1724211498166685e+01 2.3504168456583962e+01 0 0 0 +2803 935 1 -7.4214056675984197e-01 1.3740812956746506e+01 2.1922717519747298e+01 2.4070672139493468e+01 0 0 0 +2250 750 2 3.5142395968296219e-01 1.6129463650684603e+01 2.0248459053629599e+01 2.3317441670243696e+01 0 0 0 +2582 861 2 3.8977704893254450e-01 1.2861941248787465e+01 1.7812813146045013e+01 2.3995236909727296e+01 0 0 0 +563 188 2 3.5360806667720890e-01 1.5080638054134404e+01 1.8520850171831054e+01 2.5758444075542553e+01 0 0 0 +580 194 1 -7.1206380693296645e-01 1.5819259777887305e+01 3.0978924485328747e+01 2.6928838839147804e+01 0 -1 -1 +2581 861 1 -7.2464733914795854e-01 1.2072914091350238e+01 1.7310040258710867e+01 2.4319887671166473e+01 0 0 0 +2606 869 2 3.8488747493431397e-01 1.7223805320404139e+01 1.8751765336860593e+01 2.8549103739813059e+01 0 0 0 +2629 877 1 -7.1240331807136525e-01 1.3724090020591767e+01 1.7128619971024985e+01 2.8231056127148104e+01 0 0 0 +2630 877 2 3.9094337921919620e-01 1.4281730500596009e+01 1.6483114767839940e+01 2.7746463813392200e+01 0 0 0 +2607 869 2 3.9206192799752232e-01 1.6847408948963519e+01 1.7849259917193070e+01 2.7332766647667007e+01 0 0 0 +2631 877 2 3.9134762402389950e-01 1.4279825054977309e+01 1.7441650590514307e+01 2.8860695893539742e+01 0 0 0 +2763 921 2 3.7883083012660163e-01 1.4862849102273890e+01 2.1199087176219283e+01 2.7047873708804747e+01 0 0 0 +2610 870 2 3.8097877885246345e-01 1.4310294745680100e+01 2.1191642484291055e+01 2.5568789027123973e+01 0 0 0 +564 188 2 3.8620485995142811e-01 1.6334436071431139e+01 1.8209376617717730e+01 2.4885801605375711e+01 0 0 0 +562 188 1 -6.9442575926660211e-01 1.5960965023542474e+01 1.8000404601672813e+01 2.5681609184661667e+01 0 0 0 +1993 665 1 -7.8544544675307293e-01 1.7438500911029035e+01 1.9461175578395899e+01 2.4088072177965216e+01 0 -1 0 +1995 665 2 3.6610933987576810e-01 1.7858694438469321e+01 1.9743094768525580e+01 2.4957071043448625e+01 0 -1 0 +1994 665 2 3.8039387092930027e-01 1.8053146063622791e+01 1.9757759414042464e+01 2.3452471451239436e+01 0 -1 0 +2608 870 1 -6.9546497224632975e-01 1.4427363092491850e+01 2.0614043292949013e+01 2.6354243067334536e+01 0 0 0 +2605 869 1 -7.0024437477443791e-01 1.7089106746636350e+01 1.7781850141267849e+01 2.8280314037135241e+01 0 0 0 +470 157 2 3.4606186412457152e-01 1.6607238470069163e+01 2.1272678734434784e+01 2.8979620400158684e+01 0 0 -1 +471 157 2 3.8486238589398858e-01 1.8010319637759057e+01 2.0559641968183449e+01 2.9183181282864364e+01 0 0 -1 +469 157 1 -7.5831135526856086e-01 1.7013760232937795e+01 2.0417007679385165e+01 2.9221752671395731e+01 0 0 -1 +1810 604 1 -6.8899465113569558e-01 1.7911312854825663e+01 1.6412749962375969e+01 2.3513700999536169e+01 0 -1 0 +2771 924 2 3.7489250165045396e-01 1.8493762769375266e+01 1.6714324027319922e+01 2.8490710819456293e+01 0 0 0 +204 68 2 3.6041723731107411e-01 1.5442314737664583e+01 1.9466709597492596e+01 3.0037712119166141e+01 0 -1 -1 +208 70 1 -7.2934340302405676e-01 1.4871228020502002e+01 1.8824698229469004e+01 3.0484373772147251e+01 0 -1 -1 +1366 456 1 -7.4613125621415322e-01 2.6643465478865014e+01 2.9872579896477610e+01 2.4914848573997180e+01 0 0 -1 +1147 383 1 -7.5456616405851118e-01 2.4163657367115821e+01 1.6259721158965124e+01 2.3377254583738907e+01 0 0 -1 +2964 988 2 3.6279463005322188e-01 2.4298622883527816e+01 1.6542279311060948e+01 2.5095159947458509e+01 0 0 0 +2770 924 1 -7.7205724521821151e-01 1.9427531126532596e+01 1.6342768478911413e+01 2.8787123080373348e+01 0 0 0 +2772 924 2 3.6390852749045111e-01 1.9248788262341225e+01 1.5861972063849548e+01 2.9589690494124500e+01 0 0 0 +2692 898 1 -7.3114909635428738e-01 2.4990018061830138e+01 2.3585327886121178e+01 2.6797083651917649e+01 0 0 0 +424 142 1 -7.2929243113180064e-01 2.1239111080180553e+01 1.8939714610065902e+01 3.0062136047596304e+01 0 0 -1 +426 142 2 4.1507469421731258e-01 2.0759460028566689e+01 1.9761222262362434e+01 3.0087046903840445e+01 0 0 -1 +1301 434 2 4.0909015601880788e-01 2.0767657987657248e+01 1.8167735872840655e+01 2.3088357058105732e+01 0 0 0 +447 149 2 3.6191683487441856e-01 2.4868176168858252e+01 1.7637350263868818e+01 2.9233546595072163e+01 0 0 -1 +1169 390 2 3.5321442406942771e-01 2.0277735005661945e+01 2.0606302196555387e+01 2.6436307245565981e+01 0 0 -1 +421 141 1 -6.7318672714800865e-01 1.9429796533662035e+01 2.0122675620520248e+01 2.6266337750176962e+01 0 -1 -1 +423 141 2 3.2409281002149115e-01 1.9884268339156151e+01 1.9303723181849239e+01 2.5886815017702389e+01 0 -1 -1 +2765 922 2 3.5381083906999028e-01 2.0505030447930626e+01 1.7688359823121470e+01 2.5712955095425375e+01 0 0 0 +2764 922 1 -7.5695650025452821e-01 2.0398911189531699e+01 1.7533166422233943e+01 2.4798122794444140e+01 0 0 0 +2766 922 2 3.8334976508300433e-01 2.0683086237215296e+01 1.6572826079878492e+01 2.4694602340485581e+01 0 0 0 +2739 913 2 3.8092389943616745e-01 2.0598879023088998e+01 1.7308868782891839e+01 2.7904348744792323e+01 0 0 0 +2737 913 1 -7.5949639804443092e-01 2.1237717472622915e+01 1.7984561023148117e+01 2.7588141215097284e+01 0 0 0 +2800 934 1 -7.6863444694662719e-01 1.9762401024159434e+01 2.0920727819452814e+01 2.9158192822963130e+01 0 0 0 +2962 988 1 -7.2012821007221539e-01 2.4782289513233604e+01 1.7161592013255284e+01 2.5759584365449108e+01 0 0 0 +2963 988 2 3.9475884974624215e-01 2.4642101980632091e+01 1.8152731193999116e+01 2.5386051097155971e+01 0 0 0 +2200 734 1 -7.0806354251879322e-01 2.4803482404097416e+01 1.9573007909627194e+01 2.4639957992118209e+01 0 0 0 +2202 734 2 3.5398416735722610e-01 2.5208295664395344e+01 2.0065017129635752e+01 2.5355732899804082e+01 0 0 0 +1345 449 1 -7.4077799166676994e-01 2.4337151889574532e+01 2.0976359468170397e+01 2.7482560070454834e+01 0 0 0 +2738 913 2 3.5382670487519752e-01 2.2154171455854229e+01 1.7571991838633284e+01 2.7621612234553314e+01 0 0 0 +1347 449 2 3.5767944889164582e-01 2.4098675887539958e+01 2.1058088172753649e+01 2.8429073543605433e+01 0 0 0 +2890 964 1 -7.1134171079813080e-01 2.3948994068967480e+01 2.1768390795138274e+01 3.0239052543182453e+01 0 0 0 +2194 732 1 -7.7005533830644213e-01 2.1593578849022897e+01 2.1909665487347979e+01 2.7150936207444126e+01 0 -1 0 +2801 934 2 3.7680248718311998e-01 1.9753315877993963e+01 2.1850851090497795e+01 2.9250284169925031e+01 0 0 0 +2802 934 2 3.7775311204537776e-01 2.0088431299985153e+01 2.0835141653967284e+01 2.8262560503447393e+01 0 0 0 +1931 644 2 3.7340981769755499e-01 2.2481048550654055e+01 2.1634913462016630e+01 2.7334322781005660e+01 0 -1 0 +425 142 2 3.7733790477895340e-01 2.1341562748922446e+01 1.8715140346393170e+01 2.9035597074486233e+01 0 0 -1 +1520 507 2 3.5081941354284474e-01 2.8604862763264908e+01 2.6064968730485209e+01 3.0012145223389343e+01 -1 -1 0 +1163 388 2 3.5123299324139184e-01 2.4218545706233790e+01 1.7177471664828058e+01 2.7344628742021239e+01 0 0 -1 +2195 732 2 3.7191712074675409e-01 2.1641294437109263e+01 2.2553720625071406e+01 2.6358006779170779e+01 0 -1 0 +2787 929 2 3.7900832422832464e-01 2.1357955026866012e+01 2.3358944425225616e+01 2.8043798120570020e+01 0 0 0 +1162 388 1 -7.7294150906629944e-01 2.3738793405157892e+01 1.6793835797848175e+01 2.8183931456706201e+01 0 0 -1 +777 259 2 3.6526099881417373e-01 2.9291447506110003e+01 1.9633422795007050e+01 3.0227173720571582e+01 -1 0 -1 +2948 983 2 3.3876707305675657e-01 2.5840550746034133e+01 2.6563734313338895e+01 2.5634148093608594e+01 0 0 0 +1519 507 1 -7.4423344612837405e-01 2.8566053943919371e+01 2.5389228152121881e+01 2.9231470426526773e+01 -1 -1 0 +2892 964 2 3.4394128628595089e-01 2.7411376064331339e+01 1.8548164515244540e+01 3.0704759839983378e+01 0 0 0 +2891 964 2 3.1500274960369046e-01 2.4942839275197503e+01 2.1683154869679498e+01 3.0248557032862443e+01 0 0 0 +445 149 1 -7.2055742434151882e-01 2.5453325969256660e+01 1.8201205864971534e+01 2.9922644033042840e+01 0 0 -1 +1346 449 2 3.7426422957622152e-01 2.4777820535855341e+01 2.1777859132828794e+01 2.7157887994497667e+01 0 0 0 +1959 653 2 3.5676757844118456e-01 2.5955744968716498e+01 1.8830190125656461e+01 2.9401250695427361e+01 0 0 0 +2778 926 2 3.3240223367030014e-01 2.5653419504413105e+01 1.5905306876794777e+01 2.7091852749206318e+01 0 0 0 +2969 990 2 3.6140904145656000e-01 3.0371147281621667e+01 1.7962524420357099e+01 2.8442466939553253e+01 0 0 0 +1759 587 1 -7.0207241864620085e-01 2.6803821166335151e+01 1.9902731058748088e+01 2.8047471868469973e+01 0 0 0 +1761 587 2 3.3033621077096037e-01 2.6146036844911823e+01 2.0376170066351857e+01 2.7486409083193607e+01 0 0 0 +2201 734 2 3.7114937986094171e-01 2.5492265507516144e+01 1.9491449559574850e+01 2.3980633814947911e+01 0 0 0 +2852 951 2 3.8642713804367368e-01 3.0292001594240364e+01 2.0568454834328030e+01 2.6273874260723719e+01 0 0 0 +2851 951 1 -7.1396659452734812e-01 2.9781360737889816e+01 1.9760783830209274e+01 2.6173936849067317e+01 0 0 0 +2853 951 2 3.6259541874575191e-01 2.9856612523789366e+01 1.9371806996527081e+01 2.7002171787561632e+01 0 0 0 +1760 587 2 3.3584733374450615e-01 2.7063943447771521e+01 2.0579588662236208e+01 2.8739497742062330e+01 0 0 0 +2873 958 2 3.8156420091352133e-01 2.8303034274005881e+01 1.8810809494973025e+01 2.3592363344886095e+01 0 0 0 +2377 793 1 -7.7285998145380552e-01 2.7411198341751980e+01 1.8610465274165609e+01 2.3509268190818457e+01 -1 0 0 +2368 790 1 -7.4133803164839684e-01 3.0071042992031234e+01 1.7172635406489047e+01 2.5360360610992696e+01 -1 0 0 +1411 471 1 -7.0726184327607333e-01 2.9703089302358126e+01 2.2688212790944046e+01 2.9781736784407720e+01 0 1 -1 +2378 793 2 3.6741168961987092e-01 2.7325458878714954e+01 1.7854217822780477e+01 2.2924957783030532e+01 -1 0 0 +1413 471 2 3.4035912367261106e-01 2.8906208759675490e+01 2.2121840792563646e+01 2.9850792566144921e+01 0 1 -1 +2366 789 2 3.6557559721913407e-01 2.7846204052099736e+01 2.0623467579608405e+01 2.4661950593140830e+01 -1 0 0 +1412 471 2 3.7429572264244859e-01 2.9997367793858011e+01 2.2785128819122058e+01 3.0713338178886954e+01 0 1 -1 +1333 445 1 -7.5236688755738135e-01 2.7027778479900594e+01 2.1701169214954394e+01 3.0363360727079922e+01 0 0 -1 +2370 790 2 3.8938617284034410e-01 2.9791141378046454e+01 1.8065002579796118e+01 2.5164060641733553e+01 -1 0 0 +2365 789 1 -7.0341069822843671e-01 2.7292999694524205e+01 2.1051650997946986e+01 2.5299927111788076e+01 -1 0 0 +2367 789 2 3.5931050852613372e-01 2.7202886627774667e+01 2.0591058063121025e+01 2.6141104189896701e+01 -1 0 0 +1081 361 1 -7.2623026523966339e-01 1.0359708259632736e+01 2.5754602836530488e+01 3.0597181989901138e+01 0 0 -1 +2369 790 2 3.8601335417491206e-01 3.0184442787734234e+01 1.7122241626572624e+01 2.6392827528273283e+01 -1 0 0 +2151 717 2 3.5893200566606132e-01 2.9853835223179420e+01 2.0775184427352997e+01 2.9358028437581574e+01 0 0 0 +2968 990 1 -7.0585150738382718e-01 3.0415294278882868e+01 1.7061252469570523e+01 2.8049592201235807e+01 0 0 0 +2252 751 2 3.3233735956158739e-01 2.7135265159528309e+01 2.2677530133245838e+01 2.3586960967350421e+01 -1 0 0 +775 259 1 -7.1814401310402909e-01 2.9918594119506444e+01 1.9839242677151031e+01 2.9430222869433294e+01 -1 0 -1 +1882 628 1 -7.2962295169510083e-01 1.9766300369619930e+01 2.7484739766634636e+01 1.6840089774999381e+01 0 -1 0 +2363 788 2 3.9183006922419689e-01 3.0839120732604822e+01 1.5524605227580697e+01 2.5368644947236863e+01 -1 0 0 +1988 663 2 3.6340908240412312e-01 3.0967276367153293e+01 2.7788527741365566e+01 2.3146059568728401e+01 0 -1 0 +1554 518 2 3.5062160154457800e-01 2.1164725943631124e+00 2.7678281093954819e+01 2.4448838860822121e+01 0 -1 0 +1552 518 1 -7.5913021673515657e-01 1.9530853219502355e+00 2.7658148697066434e+01 2.3496036916015548e+01 0 -1 0 +2617 873 1 -7.1264602361352236e-01 1.5842973009205968e-01 2.8313015250304193e+01 2.7375141368128162e+01 0 0 0 +1383 461 2 3.4875302711310585e-01 1.4474008158954297e+00 2.4172295651312034e+01 2.4966607673459713e+01 1 0 -1 +1483 495 1 -7.6320194121864704e-01 2.5453294539634537e+00 2.9521571381169366e+01 2.6039842449803501e+01 1 0 0 +1611 537 2 3.5863197081729287e-01 3.6205108526375840e+00 3.0060441539693148e+01 2.7362278849312919e+01 0 -1 0 +7 3 1 -7.5409262646562625e-01 3.3900185909921507e+00 2.3823035607086346e+01 2.4742428461570352e+01 0 -1 -1 +992 331 2 3.7610283904537362e-01 7.4047158409418379e-01 2.4993492128150478e+01 2.6937442204874170e+01 0 0 -1 +1381 461 1 -7.0217098583733417e-01 4.5520265359593814e-01 2.4391166630035702e+01 2.5003301853567422e+01 1 0 -1 +9 3 2 3.7975874120524844e-01 3.9878364961086796e+00 2.4416407729365705e+01 2.5299613634629868e+01 0 -1 -1 +2988 996 2 3.6537032146765108e-01 5.3630589197478207e+00 2.6674288377103551e+01 2.5588961302343627e+01 1 0 0 +888 296 2 3.7320512175451920e-01 2.0259605386041040e+00 2.8989725874326989e+01 2.6643812594427295e+01 0 0 0 +1648 550 1 -6.8731347318196734e-01 4.3383930649571809e+00 2.6876900521866716e+01 2.8627980167180233e+01 0 -1 0 +1650 550 2 3.5035214020937255e-01 4.4602818424953181e+00 2.7800290571680282e+01 2.8974432396754139e+01 0 -1 0 +1485 495 2 3.7992839106175530e-01 2.0724564809390413e+00 3.0352605799639591e+01 2.6080167500462871e+01 1 0 0 +2986 996 1 -7.0517640356463918e-01 5.0520641376271467e+00 2.5868858529121702e+01 2.5993326509601506e+01 1 0 0 +2529 843 2 3.4380582257115677e-01 2.2785048511840382e+00 2.7600134441466800e+01 3.0465877467269781e+01 0 0 0 +1649 550 2 3.6993684073797140e-01 3.7866749124656991e+00 2.6503061020048609e+01 2.9334048146157194e+01 0 -1 0 +794 265 2 3.4907112031664300e-01 5.0334666622090438e+00 2.9699565783287376e+01 2.9453950022178201e+01 0 0 -1 +2528 843 2 3.2110433303502028e-01 3.2630215633260642e+00 2.8788177915042240e+01 3.0266879555696274e+01 0 0 0 +94 32 1 -7.3215244151473424e-01 5.4398947636738129e+00 2.8944232487265118e+01 2.9996847749942390e+01 0 0 -1 +1961 654 2 3.6720856359441328e-01 1.1058221646402345e+01 2.3018171575082601e+01 3.0437508092903503e+01 0 0 0 +96 32 2 3.6525225261484517e-01 6.3672541858607197e+00 2.8908676796345578e+01 2.9657490921514537e+01 0 0 -1 +1389 463 2 3.6840834067600892e-01 4.3452777825173037e+00 2.9298867914184569e+01 2.5621753667941775e+01 1 0 -1 +2942 981 2 3.8448109061175989e-01 5.1013602095786190e+00 2.6106041213995315e+01 2.6924039253064095e+01 1 -1 0 +1387 463 1 -7.2554241457730873e-01 5.2127084233274603e+00 2.8978618994196445e+01 2.5197873399463443e+01 1 0 -1 +2386 796 1 -7.7376847037950447e-01 2.6969910565227856e+01 2.8386413434994740e+01 3.0314562483857912e+01 -1 0 0 +793 265 1 -7.1460856800938677e-01 9.7591676489196044e-01 2.5523489704217855e+01 2.7659852576475188e+01 0 0 -1 +795 265 2 3.8577436027645262e-01 1.4825937931493596e+00 2.4955746313923022e+01 2.8220796550580239e+01 0 0 -1 +1388 463 2 3.6925195446831038e-01 5.1691797847700611e+00 2.9393746663623940e+01 2.4310500047171569e+01 1 0 -1 +2618 873 2 3.7121663015303408e-01 5.8782697787149829e-01 2.7432234349809995e+01 2.7603766565551126e+01 0 0 0 +1382 461 2 3.7990383263614713e-01 2.6443699335495163e-01 2.4767822202894063e+01 2.4144401120631628e+01 1 0 -1 +106 36 1 -7.0486890047044037e-01 2.7985788214763172e+00 2.5569580527672773e+01 3.0721585942445316e+01 0 -1 -1 +2191 731 1 -7.3083575291983516e-01 2.8704437797836427e+01 2.6894651490831347e+01 2.6734975656461348e+01 0 -1 0 +2694 898 2 3.6337366625768674e-01 2.5737670399612583e+01 2.4216796695439196e+01 2.6649687322663659e+01 0 0 0 +2176 726 1 -7.5613931522288169e-01 2.6762040473911160e+01 2.8483105591886680e+01 2.7605050075699619e+01 0 -1 0 +925 309 1 -7.2044071090621375e-01 1.1004842122560150e+01 3.0016032342643072e+01 2.3574561590193454e+01 0 0 0 +927 309 2 3.5110245458827566e-01 1.0466623919005164e+01 2.9355810372546408e+01 2.4065796143698797e+01 0 0 0 +779 260 2 3.6630765481385175e-01 8.6167900450400197e+00 2.8521014218489622e+01 2.3190577399418117e+01 0 0 0 +1535 512 2 3.4816152118132787e-01 7.0727241547640611e+00 2.8396433899465585e+01 2.2807856871500093e+01 0 -1 0 +2178 726 2 3.5675646291851237e-01 2.6856755211333482e+01 2.8666566478278924e+01 2.8626403150797390e+01 0 -1 0 +1534 512 1 -7.2079320399291869e-01 7.8709229505903080e+00 2.8881479574040327e+01 2.2696054936946226e+01 0 -1 0 +209 70 2 3.7890348180635819e-01 1.2096436414616607e+01 2.4283157202713589e+01 2.8853301925179338e+01 0 -1 -1 +1694 565 2 3.7520729136396180e-01 1.0953731572345454e+01 2.4580176926173490e+01 2.6777936550244700e+01 0 -1 0 +1693 565 1 -7.2028810897973572e-01 1.0715917823054868e+01 2.4721082239705062e+01 2.7764209730456109e+01 0 -1 0 +2483 828 2 3.8049307740787236e-01 6.8324288598040166e+00 2.9479525315165830e+01 2.5702964183565111e+01 0 0 0 +2983 995 1 -7.3414451880007303e-01 7.9875708816313775e+00 2.4463438658456099e+01 2.9096783413365394e+01 1 0 0 +2590 864 1 -7.2907085058343046e-01 1.0713225216098387e+01 2.8165099995967665e+01 2.9144048021431452e+01 0 0 0 +2022 674 2 3.7474215018716495e-01 7.9321816111131778e+00 2.4454649762766973e+01 2.4141189095730770e+01 0 -1 0 +2388 796 2 3.3855074313136202e-01 8.8410670268371678e+00 2.4523189780805186e+01 2.9687125346169363e+01 0 0 0 +778 260 1 -7.3530338721298338e-01 7.4537888540314698e+00 2.6201661620481389e+01 2.4328928176807235e+01 0 0 0 +95 32 2 3.5587007654712272e-01 6.6464886966388210e+00 2.6455432280956632e+01 2.3738958179300059e+01 0 0 -1 +780 260 2 3.6094472110162096e-01 8.1797419624579817e+00 2.6754160530349242e+01 2.4063336587493822e+01 0 0 0 +2351 784 2 3.7263350397852646e-01 1.2095558771593497e+01 2.6893517914914153e+01 2.8658514256147928e+01 0 0 0 +1900 634 1 -7.5017107106248870e-01 1.0047486607705302e+01 2.7297477414103192e+01 2.4106027791286110e+01 0 -1 0 +1902 634 2 3.7742380634974315e-01 1.0357768258223230e+01 2.6528225575362569e+01 2.4640372223980712e+01 0 -1 0 +2436 812 2 3.3064507514740132e-01 8.2323848658921044e+00 2.6245640125394928e+01 2.7666321339555154e+01 0 0 0 +2434 812 1 -7.6684558527022262e-01 8.6740245078306568e+00 2.6918569071689486e+01 2.7162793777667694e+01 0 0 0 +2435 812 2 3.6972965492390847e-01 8.2509188569067984e+00 2.6878450585816331e+01 2.6292718318792783e+01 0 0 0 +1713 571 2 3.6317368550040352e-01 9.9653952796582459e+00 2.5352711622882772e+01 2.7677101168969372e+01 0 -1 0 +2482 828 1 -6.6884895017431434e-01 7.7119215590855346e+00 2.9819988715105385e+01 2.5913585988215438e+01 0 0 0 +1768 590 1 -7.4820989217329548e-01 1.0806932376836187e+01 2.4697294621808201e+01 2.4999548897865250e+01 0 0 0 +2352 784 2 3.3682209783127309e-01 1.2465870149761788e+01 2.5664582375565605e+01 2.7903000497471627e+01 0 0 0 +986 329 2 3.6084021645724457e-01 8.2753706048266480e+00 2.8074798137637920e+01 2.8296011002168939e+01 0 0 -1 +985 329 1 -7.8115382437982284e-01 7.8739472659069119e+00 2.9015117011382625e+01 2.8528028459092397e+01 0 0 -1 +987 329 2 3.9002089906374315e-01 7.6985290404801940e+00 2.9413557581916631e+01 2.7637481126301328e+01 0 0 -1 +1316 439 2 3.5091206851755652e-01 1.7770036251770858e+01 2.8700256245078734e+01 1.5883152222774891e+01 0 0 0 +2350 784 1 -7.1253130897378247e-01 1.2814965956497741e+01 2.6557520855818161e+01 2.8070815413822476e+01 0 0 0 +2592 864 2 3.4110753363333102e-01 1.0030333530839522e+01 2.8107151557959874e+01 2.8417960549489454e+01 0 0 0 +1770 590 2 3.5170336486136156e-01 1.1513488860313641e+01 2.4656801810522989e+01 2.4286819711244870e+01 0 0 0 +606 202 2 3.6385264633856612e-01 9.1466917539784660e+00 3.0404332468949825e+01 2.8859181933473284e+01 0 -1 -1 +2591 864 2 3.7854329901120853e-01 1.0438083463654520e+01 2.7540518291983641e+01 2.9775168239414267e+01 0 0 0 +1620 540 2 3.3604212857084048e-01 6.0709212969241069e+00 2.6247420923327301e+01 1.5980916154775347e+01 0 -1 0 +2687 896 2 3.9087604956725852e-01 1.7622129756600057e+01 2.9928015108487546e+01 3.0079417920144522e+01 0 0 0 +1647 549 2 3.6075636633338520e-01 2.5235880987689036e+01 2.8038742066905233e+01 2.6646719148616551e+01 -1 -1 0 +1727 576 2 3.6764575340621874e-01 1.6452491471712243e+01 2.4081167199556990e+01 2.2777656890647606e+01 0 -1 0 +582 194 2 3.6831021773205630e-01 1.5549289163030222e+01 3.0201367488385721e+01 2.7417632738869521e+01 0 -1 -1 +823 275 1 -7.3516470270034551e-01 1.0035927205217823e+00 2.8118524429521937e+01 1.5676637337578386e+01 0 0 0 +2805 935 2 3.7391239590807357e-01 1.3538816278882962e+01 2.3684716482749010e+01 2.4326891292117342e+01 0 0 0 +2810 937 2 3.9093755993206647e-01 1.4014598370655994e+01 2.3023500339754261e+01 2.8639030381633468e+01 0 0 0 +2809 937 1 -7.3262781038372915e-01 1.4756960259799975e+01 2.2508609309234476e+01 2.8255141987300249e+01 0 0 0 +2190 730 2 3.6014914737506321e-01 1.5334509282582109e+01 2.3213266681974812e+01 2.7842344949930002e+01 0 -1 0 +2070 690 2 3.8882041488348895e-01 1.6553590010225371e+01 2.5286772999264638e+01 2.7442275352269800e+01 0 -1 0 +2002 668 1 -7.0378300403560734e-01 1.7129616940812923e+01 2.5389778301853571e+01 2.4275413345063487e+01 0 -1 0 +2003 668 2 3.8780752904161625e-01 1.6655070310705369e+01 2.6207382688531730e+01 2.3936863052330455e+01 0 -1 0 +2068 690 1 -7.2808066890463030e-01 1.6095334105090782e+01 2.4803547543770900e+01 2.6784206983098890e+01 0 -1 0 +1478 493 2 4.1761848612086006e-01 1.6254280242307647e+01 2.5075195163945317e+01 2.5934700912500176e+01 0 0 0 +2905 969 1 -7.1075187786685157e-01 1.4617800468373995e+01 2.5410815879726041e+01 3.0487900816105022e+01 0 0 0 +2906 969 2 3.7754294860194931e-01 1.4223248156640576e+01 2.6338978664063184e+01 3.0430746927634406e+01 0 0 0 +2572 858 1 -7.4531379502836315e-01 1.3546298381435944e+01 2.8095604635320178e+01 3.0502364202542847e+01 0 0 0 +384 128 2 3.5651215750392595e-01 1.3886508788719953e+01 2.9870827945273504e+01 2.4100047036607084e+01 0 -1 -1 +1285 429 1 -7.2050589708172608e-01 1.3511883500665618e+01 2.4681824286146849e+01 2.4301924947063576e+01 0 0 0 +1287 429 2 3.9328036995849186e-01 1.4036705975733248e+01 2.9008649365676227e+01 2.5465121929570358e+01 0 0 0 +382 128 1 -7.5527424873250282e-01 1.4117349154791070e+01 2.9941452563643050e+01 2.5081547463325599e+01 0 -1 -1 +2313 771 2 4.0458292355223296e-01 1.3659834686985018e+01 2.6447811829920681e+01 2.5044311700596946e+01 0 0 0 +1843 615 1 -7.3135402935307969e-01 1.3676724329591480e+01 2.7330696169100058e+01 2.5481621223302461e+01 0 -1 0 +1844 615 2 3.7595962128880162e-01 1.3557345164051824e+01 2.7180939481059948e+01 2.6412742230556990e+01 0 -1 0 +2057 686 2 3.6506409503807830e-01 1.7042007962283868e+01 2.7042214182468303e+01 2.9010314649618508e+01 0 0 0 +2058 686 2 3.4009653230409059e-01 1.7064597438359606e+01 2.5768114672953143e+01 2.9894780175783726e+01 0 0 0 +2056 686 1 -7.2199243227411480e-01 1.7325713749006116e+01 2.6102863001217031e+01 2.9065231302929991e+01 0 0 0 +387 129 2 3.3951229230480767e-01 1.4242415604477493e+01 2.8193928381198607e+01 2.7710812344400068e+01 0 -1 -1 +2524 842 1 -7.1540897185153074e-01 1.5088215211884521e+01 2.8346132092430032e+01 2.8163745691278145e+01 0 0 0 +2525 842 2 3.3713086907605433e-01 1.4908941862619400e+01 2.8028687490498818e+01 2.9120332366794937e+01 0 0 0 +2573 858 2 3.5737926522529234e-01 1.2760235703432556e+01 2.8621653619195200e+01 3.0370938938254547e+01 0 0 0 +2688 896 2 3.3244394654366038e-01 1.6467799768217787e+01 2.8971082726217151e+01 2.9575279074570702e+01 0 0 0 +1748 583 2 3.9932207221014837e-01 1.7943470010350762e+01 2.5823004247923688e+01 2.4619943642054714e+01 0 -1 0 +2686 896 1 -7.4281423106968880e-01 1.7209207993618779e+01 2.9010021595303098e+01 3.0203456019417672e+01 0 0 0 +2726 909 2 3.6069766156550270e-01 1.8044706625504677e+01 2.4171176863546254e+01 2.8673693693914721e+01 0 0 0 +1911 637 2 3.6333317646275737e-01 2.1674751578335314e+01 2.3230973178826719e+01 2.3120171874733760e+01 0 -1 0 +1856 619 2 3.7801019952403159e-01 1.9157564727075059e+01 2.8463717008823142e+01 3.0565682923722431e+01 0 -1 0 +2089 697 1 -7.0496813300901562e-01 3.8846483720764891e+00 1.5580136852342440e+01 3.0988989949697324e+01 1 0 -1 +1446 482 2 3.5684944118174039e-01 2.3622382153967447e+01 2.1145980699353274e+01 3.0922007381584152e+01 0 0 -1 +20 7 2 3.8313988649451719e-01 2.3567149168289870e+01 2.6521600224523564e+01 2.9047557301732944e+01 -1 -1 -1 +1645 549 1 -7.2975217517491020e-01 2.4503116602137837e+01 2.8220645360772622e+01 2.6024256833339081e+01 -1 -1 0 +1479 493 2 3.3277901451789660e-01 2.3043266049476788e+01 2.9472055510377256e+01 2.3026684338522582e+01 0 0 0 +21 7 2 3.6957552563387847e-01 2.3004009724383639e+01 2.5151261985446151e+01 2.9010157214707696e+01 -1 -1 -1 +19 7 1 -7.3283206707000104e-01 2.3837342577896429e+01 2.5590600819654583e+01 2.9004041557282498e+01 -1 -1 -1 +2919 973 2 3.3657564800542050e-01 2.3226334412340972e+01 2.8631419923044739e+01 3.0565437556374363e+01 0 0 0 +2994 998 2 3.3185646686298959e-01 2.2130529141372453e+01 2.7788822981808160e+01 3.0249116095757081e+01 0 0 0 +2811 937 2 3.4347782695574663e-01 2.1728890000655692e+01 2.9920986248140004e+01 2.5214011447807373e+01 0 0 0 +2950 984 1 -7.5540204534745348e-01 2.0926670256690628e+01 2.9448847715040952e+01 2.5024621462083321e+01 0 0 0 +2725 909 1 -7.3873503702858367e-01 1.8570953662424213e+01 2.3495487828789724e+01 2.9114240296907006e+01 0 0 0 +2727 909 2 3.4578431704926010e-01 1.8521402073736528e+01 2.3803369510420776e+01 3.0046711269915065e+01 0 0 0 +2706 902 2 4.0134355968739022e-01 2.0027182644166121e+01 2.6557493357920286e+01 2.4145390728749291e+01 0 0 0 +2992 998 1 -7.5913711940645257e-01 2.2970109524231784e+01 2.8032645642922468e+01 2.9869171958268229e+01 0 0 0 +385 129 1 -7.1279576946000944e-01 2.2400765939444359e+01 2.3888346755024067e+01 2.5425837077985594e+01 0 -1 -1 +584 195 2 3.3997388729632499e-01 2.3252595381056373e+01 2.3597189808628819e+01 2.5892592333652562e+01 0 -1 -1 +386 129 2 3.6021614130896101e-01 2.2591488978199816e+01 2.4730541934939339e+01 2.5006367399286887e+01 0 -1 -1 +1646 549 2 3.5247924473061648e-01 2.4187891291529947e+01 2.9084220378797124e+01 2.6265107250975543e+01 -1 -1 0 +2704 902 1 -7.2538461010879418e-01 1.9366548933982255e+01 2.7003482749459032e+01 2.4784293272716216e+01 0 0 0 +2705 902 2 3.5569396967362998e-01 1.9532957843494568e+01 2.7959407245345876e+01 2.4860260856571184e+01 0 0 0 +799 267 1 -7.6050101057871444e-01 2.3988048355725599e+01 3.0636437496838141e+01 2.4652500799214650e+01 -1 0 -1 +1268 423 2 3.7639747176313071e-01 2.2231703368249963e+01 2.9098356754253786e+01 2.8585082778064507e+01 0 0 -1 +1986 662 2 3.5487267787675603e-01 1.9750188049423382e+01 2.7187594892472802e+01 2.6640233875527738e+01 0 -1 0 +1985 662 2 3.3736674454677884e-01 2.0267462855064423e+01 2.6820323975036533e+01 2.8102370674810249e+01 0 -1 0 +1984 662 1 -6.9783562612802830e-01 1.9825533572332510e+01 2.7529939521248139e+01 2.7600380138886276e+01 0 -1 0 +1267 423 1 -7.2532864435020250e-01 2.1636063668219499e+01 2.9461977229570202e+01 2.7859512169419489e+01 0 0 -1 +2785 929 1 -6.8589612528722610e-01 2.1172630996025855e+01 2.4133535125323121e+01 2.8645805385843328e+01 0 0 0 +2786 929 2 3.6187004113704491e-01 2.0324955226508639e+01 2.3878077420526786e+01 2.9143893808061488e+01 0 0 0 +1269 423 2 3.8169946623808348e-01 2.0777827361035222e+01 2.8843598204104719e+01 2.7926543763986889e+01 0 0 -1 +2827 943 1 -7.5178981778370491e-01 2.5980207330104658e+01 1.5883927015697910e+01 1.5933980603556099e+01 0 0 0 +2951 984 2 3.5115645556354869e-01 2.0613112882121001e+01 2.9282777176086590e+01 2.5849956558510126e+01 0 0 0 +1830 610 2 3.4562081475759565e-01 2.5042883762442986e-01 1.9659806805631007e+01 3.0838531101438452e+01 0 0 0 +2949 983 2 3.7538315262016592e-01 2.6728904078646107e+01 2.5980725541678012e+01 2.4524765091211119e+01 0 0 0 +2693 898 2 3.3339425832370145e-01 2.4465202567280162e+01 2.4127880542052008e+01 2.7395744824065918e+01 0 0 0 +2192 731 2 3.6659376702940660e-01 2.8856470552368346e+01 2.6506868869494156e+01 2.7596926665383766e+01 0 -1 0 +1837 613 1 -7.1365031316252459e-01 2.6425043242862866e+01 2.5620135077268284e+01 3.0621573076223548e+01 -1 -1 0 +1331 444 2 3.5500527902638757e-01 2.3184779434937365e+01 2.7082744171995643e+01 2.3370410135977959e+01 0 0 -1 +1621 541 1 -7.6435417363797209e-01 2.9628730033886924e+01 2.9180588446022917e+01 2.9391911565459942e+01 -1 -1 0 +1367 456 2 3.6840931346151579e-01 2.5693374475437924e+01 3.0087113401159538e+01 2.4915942123885991e+01 0 0 -1 +1987 663 1 -7.1082251196474511e-01 3.0060262246121411e+01 2.7610554694576539e+01 2.2780775200354022e+01 0 -1 0 +2938 980 1 -7.4112000273699075e-01 1.8149803686751540e+01 1.5695169511354322e+01 1.6947474577849174e+01 0 0 0 +1839 613 2 3.6079283000119255e-01 2.5602942316285514e+01 2.5649254220041389e+01 3.0064023277643344e+01 -1 -1 0 +1876 626 1 -7.1122447250616871e-01 1.3882831693372349e+01 3.0791374304312075e+01 1.6088923223980341e+01 0 -1 0 +1188 396 2 3.5912490985459461e-01 1.1132479352648046e+01 2.7769533203195365e+01 1.6085424043853980e+01 0 0 0 +625 209 1 -6.8070199915260399e-01 2.8298375442686439e+01 3.0378227657718618e+01 2.1330941736995175e+01 0 -1 -1 +2324 775 2 3.6528238885428532e-01 2.6624285533476154e+01 2.7465633462681023e+01 3.0405350018301814e+01 -1 0 0 +2966 989 2 3.8324270048809833e-01 2.2145736866876939e+00 1.6293361592060393e+01 3.0554627512122444e+01 1 0 0 +685 229 1 -7.6185286627974624e-01 2.2911596052139330e+01 3.0356836516298955e+01 1.7698177981943278e+01 0 -1 0 +1812 604 2 3.4587306522017625e-01 1.7231487300098411e+01 1.6994206995354919e+01 2.3772481960570808e+01 0 -1 0 +2449 817 1 -7.3098760066670754e-01 1.7226073658772862e+01 1.8207511631168725e+01 1.5571328926836692e+01 0 0 0 +1609 537 1 -7.3209378689090843e-01 3.8038541319091670e+00 3.0469943247784794e+01 2.8248713179443495e+01 0 -1 0 +71 24 2 3.7722929972710306e-01 1.1828349487701109e+01 1.6115815808013849e+01 3.0621871422273017e+01 0 0 -1 +811 271 1 -6.9547622941354248e-01 3.0428812893249077e+01 3.0859717988145043e+01 1.8802269306680319e+01 -1 0 0 +2405 802 2 3.4020652691064257e-01 7.4528018084076963e+00 2.6012876505596005e+01 3.0705739252272764e+01 0 0 0 +1253 418 2 3.5717004716194040e-01 2.3664945895202479e+01 1.6287715192098435e+01 3.0322970930456712e+01 0 0 -1 +252 84 2 3.8701305495106386e-01 2.1482185801453028e+01 3.1006367209523919e+01 2.7196564479751714e+01 0 -1 -1 +1862 621 2 3.7625538466757952e-01 1.5251364631771182e+01 1.5616838924692072e+01 1.5618905489741165e+01 0 0 0 +813 271 2 3.7367922684603366e-01 1.1794541687145023e-01 3.1039606881210492e+01 1.9416399237735966e+01 0 0 0 + +Velocities + +1497 -7.9908248671464147e-04 -6.9675512015525938e-03 3.2292593769422430e-03 +2401 -1.7029119258100784e-03 6.5786545574567602e-03 -7.1634214865199416e-04 +498 -1.4889038379136452e-02 6.0207394475226697e-03 4.6966531302689496e-03 +496 6.3219969784109780e-04 2.2321548020049638e-03 3.4544614014290223e-04 +497 1.4631764920825336e-02 -1.3634778534498128e-02 1.2125535370129783e-02 +141 2.3371872243926940e-02 8.1476690431276991e-03 1.4207354972945677e-02 +139 1.0448385364179786e-03 5.9608177851918371e-03 -1.2261980087153538e-04 +140 1.2255983075075130e-02 2.7338869476814733e-03 -1.3770348145577416e-02 +1528 -1.3521275511788509e-03 1.1726775431755605e-03 -9.8759379403351899e-04 +1530 1.8001754874431734e-02 9.1461492532777505e-03 -1.0444731352960538e-02 +239 1.2389416308185531e-02 -2.5955525930197324e-03 -8.0215624758931715e-03 +1631 -3.3265181519548342e-03 1.1104629355244753e-02 -1.9897173502549551e-02 +238 -1.2701840064846999e-03 3.4196063086705513e-03 1.6842498088798607e-03 +1529 -2.4868344781390540e-02 -1.1133892839065063e-02 2.4864041376688661e-03 +803 7.1394671703609719e-03 5.6585268030506222e-03 -2.2733608265207791e-04 +25 -1.7249343978559273e-03 2.4810022710645531e-03 3.4924588933320936e-03 +27 -5.0428846320595046e-03 1.7320294903628027e-02 -5.6321151453934040e-03 +2163 -3.3958709041529735e-02 -2.0738704238807911e-02 -7.2168895495345296e-03 +1496 3.3932904136772329e-02 -2.2943311875440034e-02 1.1925801251448123e-02 +115 -3.8291117424671798e-03 -1.4356220061687160e-03 -1.5567825512875866e-03 +1085 1.4151018369228637e-02 7.2462606762886336e-04 2.4230597298895526e-02 +314 -4.6366129011873375e-03 -2.1251289979213436e-02 4.5084912395395287e-03 +819 9.2995415763434946e-04 -1.5453650605656054e-02 1.6636814226414803e-02 +2403 2.0553039888732701e-02 1.9287250588282026e-02 7.2925233326843345e-03 +1574 -3.1387819600591588e-02 -3.5337305711420717e-03 -4.2754843285378544e-03 +116 -1.8804397063959324e-02 3.9726395158581626e-03 7.1182476783205554e-03 +1636 -8.6767453502839596e-04 3.3942419974190528e-03 -3.5001938986360692e-03 +2065 -1.5087437376439595e-03 7.7479480964932803e-04 -1.6531762020403210e-03 +802 1.0297125084103291e-02 5.8985547904963796e-03 3.7686876163752470e-03 +59 1.3334716389293401e-02 -3.2144983842388695e-02 4.0081564516293239e-03 +33 -2.4642736707804775e-02 -1.1902076214958479e-02 1.3031888521401838e-03 +2127 6.5926226014652962e-03 -6.5497062246737073e-03 -1.1567140407727652e-04 +550 -1.4933298545652121e-03 1.1002722972805927e-03 -1.7795404091809186e-03 +309 -1.3748205859442112e-02 -1.2259882474524966e-02 -3.4689085026771774e-02 +2232 4.5983141685747644e-03 1.3862171001298329e-02 -2.2530139414434255e-02 +226 3.3349674195616045e-03 -5.1781308752756028e-04 -1.2002176550137183e-03 +1637 7.6205091219548934e-03 -4.0081232308130700e-04 3.5968631343695989e-02 +260 -3.3403602971350817e-02 2.8250853701100882e-02 -1.5274833341109477e-02 +1086 -1.0023424591843770e-03 1.5327591650978252e-02 -2.5562375327172850e-03 +1840 3.2307881788933086e-03 2.2986359903590901e-03 -6.7659643518051581e-03 +2612 3.8735506261235557e-02 1.5513405616829118e-02 -2.6848180598106314e-02 +1842 -1.1142163255096630e-02 -1.9151374964429314e-03 -2.8368866918332403e-02 +963 -3.1638608216044898e-03 -7.7590469836181768e-03 -1.6364006689190438e-02 +1084 1.8112200927775130e-03 -1.3320498187405420e-03 1.5630974824608391e-03 +1663 -2.6848931431822476e-03 1.4575757088130287e-03 -1.0776365225923823e-02 +821 8.6268419964264948e-04 3.0348378323378160e-02 -1.1502324882662139e-02 +1791 5.4827560413404034e-03 1.4265998199797813e-03 -1.5051259350392331e-02 +2023 -5.7776444910683806e-03 3.2473898089544076e-03 3.8026464348636215e-03 +1664 3.0811957336586107e-02 1.7482676041505385e-02 -3.3456218474794742e-03 +1767 -1.5679284009508833e-03 6.6028843507724743e-03 -4.0376982020013665e-04 +2311 3.6353731506225920e-03 -4.3529484245046230e-03 -3.6589735208805291e-03 +2312 2.6883718835233352e-02 -1.7886351502707912e-02 2.4629402286361752e-02 +303 -2.3902419387264118e-02 -1.8780343237262739e-02 2.0595586539500211e-02 +1853 -2.3219294334831758e-02 -1.2620322457578849e-03 5.7106648837436883e-03 +1852 6.9314011744484689e-03 7.1005808378865067e-04 6.0192342495425889e-03 +829 3.2207373877966142e-05 3.2194400415736396e-03 -5.9542364435181318e-03 +2875 -4.0768256924573489e-04 -5.5742789255987151e-03 -1.9733858361812135e-03 +2759 4.1946424357806262e-03 1.9056908498682690e-02 -1.0044174151598221e-02 +249 2.4597525973642675e-02 -1.7136986042041554e-02 -4.1867889050482892e-03 +993 -3.9445437329963138e-03 -1.8203490431599013e-02 1.5285818602264221e-02 +401 1.0084441479019801e-02 2.5263381903938401e-02 -9.5254761024347022e-04 +247 3.6523020941608537e-03 3.8160207316955698e-03 5.9316269927768448e-03 +1103 1.4018444024400147e-02 -7.4703301937026840e-03 -1.5629662611476318e-03 +2876 -8.6942966622013135e-03 3.6365953815311954e-03 2.4100636611584150e-02 +1011 -2.9660286377169932e-02 2.6874710301892047e-03 1.1380700179317117e-02 +1893 1.5243524586900916e-02 -1.2812710776664259e-02 1.2158592932092215e-02 +2877 -4.9200678351322561e-03 3.0277740648936045e-02 1.1793100812982371e-02 +1841 3.8357388644642662e-03 5.7528198576615126e-02 -1.1108941227455338e-02 +203 -2.3942554375920390e-02 -4.7051700386042368e-03 -2.5723217671385469e-03 +2466 -1.8948946307082555e-02 1.7774504089244586e-03 -1.5232182550048871e-02 +1700 -2.9736569561357677e-03 -2.5058346754390306e-02 -5.0312550901366977e-03 +218 -2.3730352353472480e-02 3.3912934534408558e-02 1.6947962883746188e-02 +202 -3.2285676107068500e-03 2.7687995824540556e-03 5.3321424791669065e-03 +1104 -2.1688665108721375e-02 9.8780770537531520e-03 1.0355933590996064e-02 +991 -1.6449432749044320e-03 1.0433811726119312e-03 -1.5729885044967832e-04 +102 3.0531561352095241e-02 1.6671569523484916e-02 2.7767166598439256e-02 +2029 -7.5705858032099347e-03 -1.5469945971573534e-03 -2.7575400714465064e-03 +2025 -9.0757440976590338e-03 2.8997301655393076e-02 -1.3325255127122999e-02 +2031 1.1564805316764194e-02 4.1450659987947433e-02 9.2421187407129412e-03 +1111 -3.7797263947524601e-03 7.2932771930494808e-03 -1.5109121569061726e-03 +1112 -3.9882388949374374e-03 -1.4624103754530476e-02 4.4086941935867893e-03 +1009 -1.9298372007628551e-03 -7.1441072550341225e-03 -3.2734111423607108e-03 +1113 -1.8670078667432453e-02 1.0084807937404383e-02 1.2694270635380773e-02 +983 -7.9006614707362432e-03 -5.3612666460449362e-03 -1.9792230379126436e-02 +982 -1.9213662811703592e-03 -4.0402971683784102e-03 -2.6012202808595639e-03 +196 1.5807385039279345e-03 3.4124820184570073e-03 2.9412162347673856e-03 +379 -4.7759991743171817e-03 -4.1647686397480411e-03 8.0626806993175978e-03 +954 -6.0283680173137651e-03 2.3754947343410920e-02 -2.0012784733558701e-03 +197 -9.4191817020314664e-03 4.9469394531384166e-02 -4.0486780450487383e-02 +308 2.6895764165053609e-02 1.8949578394687246e-02 -1.1277184344689769e-02 +2674 1.3580305721036065e-03 -3.3714502402179733e-03 1.4639409888692744e-03 +2675 1.0625932247659385e-02 -2.9097042447537906e-02 1.5048660163659683e-02 +381 1.6579468577162301e-02 -1.5371545143266213e-02 1.6326107873304381e-03 +2676 -1.5871459419951880e-02 -2.6451658473754950e-03 -2.8274795117569737e-02 +221 -2.3856285850125770e-02 -1.0714748886340360e-02 3.5771895720480402e-03 +220 1.5292771199528698e-03 -7.2016850461439420e-04 3.5022211303377638e-03 +222 -2.6486465688803633e-02 -3.6432163435968440e-03 1.2376105856868458e-02 +958 3.1126091759404111e-04 -1.2234737209281109e-03 -2.1266923441997975e-03 +960 -5.0626210474542244e-03 -3.9478650008964280e-03 -4.0410108626986766e-03 +320 2.8242957850156351e-02 8.4746649553843357e-03 -3.0281433004504001e-02 +380 1.8154876756822938e-02 4.4784443901255185e-03 6.7199002758236591e-03 +319 -1.5728502631223910e-03 3.0200925364802160e-03 -3.6361960116831132e-03 +2078 -1.0385692101242967e-02 2.0953706275628418e-02 -1.1809805295382159e-02 +2042 -1.4824696091829960e-02 -8.0128126829382643e-03 2.6352556093538492e-02 +525 1.5845548588373847e-02 7.1570009412015353e-03 -6.4563146531564763e-03 +526 -2.1128899657902531e-03 6.2502023739401732e-04 -2.9703400186317890e-03 +527 -1.5812906644533005e-02 -8.1647490174383795e-03 -1.2165630916335858e-02 +534 -1.2303058027773055e-02 1.1139512700674512e-02 4.3667271405646900e-03 +119 2.9527810679875220e-02 6.5568891080373523e-03 1.0126637251472880e-02 +307 1.0707814269067405e-02 5.7871418009752002e-03 3.5586406305592650e-03 +434 -1.8190310227323134e-02 1.9384540451324705e-02 -4.3978085725698253e-03 +2538 -5.3020960727519426e-03 -1.3539011987247013e-02 2.5992096548517404e-02 +362 -1.7565598164536265e-02 -1.3650909699945462e-02 3.2028180365857396e-02 +1773 -1.2411419199548310e-02 -1.0930022545076546e-03 -2.1063614931651528e-02 +1441 -2.9140371426869599e-03 -7.5167969708285617e-03 -2.6357647644734547e-03 +2049 -1.1224604000171487e-02 1.3110637205062885e-02 2.7389681385523051e-03 +1311 1.6055225998483309e-02 2.6767448824675903e-03 8.2759835212376355e-04 +1194 1.7665069350946413e-02 2.2954180885461417e-02 -7.9032083968161512e-03 +1144 4.7458724509818785e-03 -3.2595847142712700e-03 -3.3234060688876909e-04 +2043 1.9516371123338767e-02 1.9760262340664627e-04 4.4002343239351194e-03 +532 -1.5980456410984552e-04 -3.8877705698683088e-03 -1.7467513936720899e-03 +533 -1.0957828014863056e-02 2.0732537936417741e-02 3.6094682730025286e-02 +2041 7.0778179148645406e-04 5.4008608274392863e-04 -7.2819103482043325e-03 +1905 1.4013068870782375e-02 9.5073180731355261e-03 9.0716645735606748e-03 +1903 -8.3770307959708332e-03 -2.1136005802252439e-03 3.0366232626571047e-04 +1217 1.7093454936111713e-02 -1.7723088392309944e-03 6.6831480887197259e-03 +1904 2.1035380263701085e-02 -3.4958734899867075e-02 1.0105471587484502e-03 +1216 2.0839788826823554e-03 3.9198582112532901e-03 4.6282452892582654e-03 +248 4.9397004628372191e-03 2.7124092292430856e-02 -2.1981392513447520e-02 +1146 1.9492565447298538e-02 2.5891462461180865e-02 1.0639081823799914e-02 +515 2.0350607263225615e-02 -1.5769570082929573e-02 -3.7822148840436802e-03 +1116 3.8276102726921987e-02 -5.5358928814725579e-03 -6.3262627764779636e-03 +1114 4.2380501899051126e-03 -8.1582630155345170e-03 -2.4371542164668093e-03 +1115 2.2499100650836369e-04 2.5380180120596639e-02 3.3485059686344165e-03 +579 2.7347993011689370e-05 -6.8516546752483039e-03 1.2240705121263837e-02 +585 -2.9143210077597820e-02 1.7587412122898865e-02 -1.8639019185146419e-02 +1196 1.0562661609733211e-02 5.7332997501171185e-03 1.9076106204504908e-02 +1714 -6.2288022081633055e-03 1.9478668416106019e-03 -8.6946021315406283e-03 +2814 2.7283831626297696e-02 -6.3225500206647127e-03 -1.7090762228530464e-02 +2819 1.6878615356606060e-02 1.6929757237440158e-02 2.7777918934105975e-02 +583 7.6555237769561808e-03 -4.2284829221785579e-03 -5.7378168147331479e-03 +624 6.1809515630607305e-03 1.5552572427243170e-02 1.9327603131701094e-03 +1195 3.5654906929441332e-03 -1.7064601082626197e-03 5.1414358938934625e-04 +1197 -1.3275027831289019e-02 4.7400299614444620e-03 -2.1335383701082143e-02 +418 -1.1948486073443340e-03 -1.0948919708370538e-04 1.9898658249684550e-03 +420 -9.7388193707794186e-03 -6.7622152711292599e-03 1.5574650116846657e-03 +419 9.3172242931418396e-03 1.7273338643516638e-03 4.0445918581911407e-03 +1145 -2.4522847461295905e-02 9.8121751529528737e-03 -1.8308018057293114e-02 +1171 -4.2151354426788268e-03 1.9293519001271717e-03 1.7310159952826202e-04 +503 -1.7384172515226753e-02 -1.7508224355168255e-02 2.2175992383319288e-02 +1280 -8.9864323235905284e-03 1.6902017750351410e-03 -1.9331090431908938e-02 +502 -1.3050166721160132e-03 -1.5556534582607748e-03 -2.2159765041914808e-03 +884 -4.2370397255939969e-03 6.9437586667193945e-03 -8.4688017007669529e-03 +2161 -3.9167491579275441e-03 1.8181216156665074e-03 -1.7966616998454903e-03 +32 -9.9540970061759090e-03 2.2156986128890627e-03 2.1169406565725697e-02 +31 4.3981567275504889e-03 2.2992295438212743e-03 -3.5965320854600660e-03 +1397 2.8309930711169023e-03 5.1230167916413915e-03 2.0366340643227634e-02 +615 4.4128385758732602e-03 2.0562394428451012e-02 8.0622027070894487e-03 +302 2.6701951591005081e-03 -2.8812872734757099e-02 -1.4611308554352890e-02 +2901 2.4554236617988908e-03 2.6200007687199305e-02 -7.6641395980791283e-03 +301 -8.1570686615924527e-03 -1.5517340417907813e-03 -3.3238917847137205e-03 +58 -6.4484328893117202e-03 -8.1749351391990493e-03 2.5541139895602868e-03 +240 2.3145555721682042e-02 -3.0400002739604696e-02 2.1470863825593683e-02 +2007 1.1423541525369662e-02 1.1304813193999565e-02 7.9081505702398372e-03 +622 -7.9881010901281333e-03 5.7043528207857772e-04 7.3821548310272671e-03 +1298 -7.5326500444896684e-04 -2.1402435648813577e-02 3.0939076956864837e-02 +448 -5.6320927430805563e-03 3.6972528583864282e-03 -5.7900631861106293e-03 +2004 1.0632522299561038e-02 1.8655173197884362e-02 1.2370566958585424e-02 +1415 1.3213912121440846e-02 -8.2652026917753151e-03 -4.6154935818122543e-02 +935 -2.4283843589203540e-02 9.8106299406359419e-03 1.9615140587429376e-02 +934 -5.7337950421257619e-03 -6.1827871225546144e-03 4.0956528399324205e-03 +936 -1.8582812449941900e-02 -1.7180964712145728e-02 9.1146857455487486e-03 +1654 -5.1397029914029557e-03 2.4487963510356333e-03 1.6869646772605759e-04 +1656 5.1576910145896679e-03 -3.1756851617265061e-02 7.9418897971444951e-03 +1416 4.1133901636328657e-03 1.2679927742279772e-03 -1.5268725360768615e-02 +1284 -1.2511248360173501e-02 -2.6240768227013853e-02 -1.4651483239920576e-02 +1282 7.8226025717472811e-03 -3.5214730291049777e-04 2.5435455237222278e-03 +395 1.9082612646208214e-02 3.4666991005522013e-03 1.4317905638957948e-04 +315 -1.0616189277544309e-02 -8.5104706481865661e-03 3.8606320247686304e-03 +2005 -1.4165879490791817e-03 1.6381419502027757e-03 -2.3208776328252178e-03 +1283 1.0769494722266782e-02 -1.3978745627494097e-02 -7.7702121906975397e-03 +2454 -4.8162213284155099e-03 1.6090251952430679e-02 -5.9110020254276394e-03 +143 6.6786611885027341e-03 2.2339205772339627e-02 -8.1559406848548937e-03 +322 -8.3633610063082887e-03 5.4893124421780820e-03 5.3189479669179382e-03 +2006 -1.7863332275124034e-02 1.9155365939569534e-02 1.9178922916634047e-02 +144 -7.4184533239827592e-03 -9.1174389182046480e-03 3.5975869712366981e-03 +142 1.4582610560141805e-03 -5.3917942477474997e-03 -1.6759378774080917e-03 +128 3.6087448923352715e-02 1.5897514723517799e-02 -1.6339102475492449e-02 +893 -3.2320026227000656e-02 9.7797689571352143e-03 -2.4804100240806540e-02 +613 5.8334013233233275e-03 -1.2159731793847473e-03 5.3996142175316087e-04 +1854 1.5158367686553471e-02 6.0857772198515073e-03 8.0068019634841284e-03 +313 -5.7867036382897028e-05 1.8162825117730723e-04 1.6040612407688000e-03 +489 1.9644361768644838e-02 8.0170993609708467e-03 -1.4830922863632466e-02 +1582 8.7280254189198582e-04 4.4664659123654074e-03 2.7712389622180276e-03 +1583 -1.1135060672097559e-02 -3.2747025959565516e-02 1.0487246059545310e-02 +1545 1.0402316858020847e-02 1.6417970965281966e-03 -2.3095562532846718e-02 +487 -5.3554273515514002e-03 3.2419915934690756e-03 -4.4955993392181920e-03 +488 3.3932279087654045e-03 1.1547676959171225e-02 -1.4206371129410573e-02 +236 1.9073649800892885e-02 -4.4236148318942846e-03 -9.2531439824011970e-03 +1087 -4.2278747431775806e-03 -1.2251055706367586e-02 1.6593042429528986e-03 +876 8.0851011625596662e-03 9.8534564416091087e-03 2.2051029912712902e-02 +1089 -1.2401424363918480e-02 -3.6312421117871904e-03 4.6470781873664286e-03 +988 -2.0031298690486498e-04 1.8913231226289633e-03 3.1856759037971849e-03 +989 -8.8008124638151665e-04 1.6900784009326133e-03 -9.7803790718916355e-03 +351 -1.1501925670547365e-03 -5.2731829229935483e-03 8.7865369622840365e-03 +349 -1.1343793330540408e-03 -1.3534801453992391e-03 -2.7308408145738186e-03 +2204 3.9762044158305608e-02 2.0522188710398685e-02 -2.0027583278764981e-02 +2090 -7.1056200379739937e-03 5.7132563886989488e-03 5.5889441884288571e-04 +2165 1.8250633326371276e-02 2.0331830441215511e-03 5.1538183844372799e-03 +2822 -1.3264839818237148e-03 -1.7103714682673809e-02 1.4689889325815449e-02 +2821 2.2937374641922603e-03 2.1073013808293605e-03 2.2432304890401228e-03 +2838 8.9508553976786771e-03 -8.6333697654156979e-03 1.2380402098545658e-02 +2164 4.3681381606283046e-03 -1.5635940328132709e-03 3.1171543303073301e-03 +975 -1.5780669417482726e-02 4.2822013186961062e-03 5.6812340198926009e-03 +2066 8.3484909403207762e-03 4.6155365397040297e-05 -5.2864242986176910e-03 +2935 -2.5929368540499554e-03 1.9938103102073079e-04 3.6570941196694936e-03 +2244 -2.8060432182550193e-02 1.4449309738672002e-02 1.0605045858308107e-02 +990 2.0647605821813485e-02 -1.4356708535669182e-02 -3.1344060989562869e-02 +2149 9.2850028827261939e-04 -3.5584783649996550e-04 -5.2645781917208274e-03 +973 -6.0239151849522171e-03 -4.3887523425169706e-03 -4.9412128021200045e-03 +762 6.4503170762220318e-03 -2.6447943908276771e-02 1.4048282461466258e-02 +2795 1.8662674248859555e-02 1.3701609209244727e-02 -1.8128015120106360e-02 +122 1.2357317851714322e-02 -1.3571886388583328e-03 -2.1652603370572791e-02 +358 2.3183878962753398e-03 -5.8161198604382864e-03 7.3873897411191370e-04 +417 -2.0988330308678492e-02 1.1691162118937739e-05 1.2312284433254217e-03 +961 4.6823824693189029e-03 6.2879730381568359e-03 -4.8517610730746475e-03 +962 -4.3390594354374215e-03 1.3275938005346733e-02 8.1694361656435965e-03 +2030 -1.0734452435421721e-02 -5.5605162255385158e-04 -6.3487753536457629e-03 +296 -1.9713496536959658e-02 2.0484874067763170e-02 2.0545839714418545e-02 +1684 1.4930722192608172e-03 6.3814741154114597e-03 2.4403631508149392e-03 +295 1.7077669789548641e-03 1.8627776779282603e-03 -4.4052133981464020e-03 +297 -1.6437135718561841e-02 -1.7345498143376829e-02 -4.5477812511563621e-03 +752 8.3097414126224785e-03 1.7055075331385235e-02 -1.2444271033261664e-02 +751 -1.1563975966299162e-03 -4.1231927296061469e-04 9.7590485125591774e-04 +333 -1.6959452828296932e-03 -1.1989619504064472e-02 1.3843929644496714e-02 +1721 -5.6106817101860334e-03 2.4082471312009712e-04 2.2036736416472472e-03 +1720 2.7590592816905605e-03 3.0900925558540663e-04 7.0064912355726457e-03 +1722 -1.5556877154767767e-02 -3.4567467218731877e-02 3.0965675356712024e-03 +513 4.2395231799385062e-03 -5.8656120038155205e-04 4.8378196247026014e-03 +359 -2.5592252545755083e-02 2.8627024249044102e-03 -3.2997647226055962e-03 +1686 -3.3899339642793624e-02 -7.0879424672288032e-03 2.3684631204696386e-02 +2280 -3.8372074506195480e-02 -4.4469950252267534e-03 1.1831588725206676e-02 +332 1.0883180586158676e-02 1.6457569037258549e-02 -1.5171604514664039e-02 +994 7.6227324704301784e-03 -2.3477907727690911e-03 -1.0663617570308511e-04 +341 -2.5916841793148385e-03 1.0671979152266782e-02 2.1503002693621643e-02 +340 2.5480572384286421e-04 1.8096069402814066e-03 3.4090454881240246e-03 +2278 -2.4506359818393633e-03 -2.1872694271245605e-03 6.5129840401316366e-04 +331 -2.6604521730524628e-03 -7.4539078271880054e-04 -7.8899932770064242e-04 +1272 -5.6046143087255121e-03 2.2318135216007295e-02 -1.3555160069386889e-02 +2279 2.3385414346932011e-02 1.0677944001547885e-02 3.3692976618471095e-03 +552 1.3372721966117320e-02 2.8530931436333683e-02 -2.7100370743465929e-03 +1071 3.5793967672013197e-03 -1.2849752859292489e-02 -1.7380386478403438e-03 +753 1.9587335114256022e-02 -1.2449836153186174e-02 6.3781771822438438e-03 +996 -1.1138025376782944e-02 -2.1213389139999993e-03 8.8953630420522483e-04 +649 4.8597280856150349e-04 5.7943603461439936e-04 -2.0122725687411482e-03 +1069 -5.8952304517893470e-04 -2.5215500227489746e-03 -3.3825104973519318e-03 +698 5.0250748337215701e-03 -2.7563037035671337e-03 -4.2622847806343802e-04 +2720 -2.4409711862176123e-02 1.7892036460270457e-02 5.3154209057393390e-03 +806 2.4627653020782434e-02 9.8357855686826562e-03 1.8945461941756218e-02 +524 5.6472699032750432e-03 9.8200604025397366e-04 2.1506458458607713e-03 +523 -2.1239008837839963e-03 1.4318426235828032e-03 9.7702620973164552e-05 +1892 2.8162979899861353e-02 1.2813032386062791e-02 -4.7507067659916602e-03 +977 -9.5317235921080282e-03 -8.1826889931665234e-03 1.0263044808705667e-02 +1270 -4.8198121768810163e-04 -1.9423143951583827e-03 4.5151344572185465e-03 +1271 2.3442467611663166e-02 -2.5680943177814382e-03 5.5724885277921399e-04 +1891 5.0071056670207201e-04 1.5483942800350139e-03 -2.9122633030638777e-04 +374 1.0746575716787374e-02 -5.6222652980072304e-03 2.2646197626385828e-02 +999 -2.0026616245369364e-02 -7.4515226815074038e-03 2.0689362099200061e-02 +976 1.9654016332718038e-03 -2.9046601492808332e-03 9.6896463680203656e-03 +2537 3.0693245246296904e-02 1.1457190747015145e-02 -8.3984337197257897e-03 +945 -1.1711091533662219e-03 6.2458666277018168e-03 -1.8179963175873500e-02 +1925 2.6294243773367861e-02 1.9550584080346375e-02 9.9120011032159724e-03 +1924 -1.5036409784334015e-05 6.7695477628962313e-03 3.0427680499407815e-03 +1926 -1.9205465926749300e-02 1.0241389444802186e-02 8.9776784721134276e-03 +1128 1.2477213539079055e-02 3.6102921627798983e-02 -7.4867099670139128e-03 +1126 5.3220822748564663e-03 -2.2978245225661675e-04 7.1488574977183919e-04 +1127 1.1460913441514725e-02 -1.1153846553058335e-02 -3.5756043558795296e-02 +997 -1.9503454415126162e-03 -2.3951965191235085e-03 -1.9519881332752881e-03 +1962 6.2196389541928970e-03 -3.8111576198025699e-03 -1.0040445776900336e-02 +373 -4.9331117684815930e-03 -6.3140186652721683e-03 -1.3237306877335380e-03 +558 -4.8844056123380133e-04 -1.3019793882195037e-02 -2.3684345893905612e-02 +2536 -5.1793519166329800e-03 -1.6374719788108908e-03 -7.7098394441548332e-03 +1758 -3.2438503860604765e-03 -2.5531214354915933e-02 1.1347815308592692e-02 +2450 1.0674742082644720e-02 -4.1183677455603040e-03 1.4545829421484994e-02 +1060 7.1439929231997589e-03 6.1867854448685697e-04 3.9878052666437727e-03 +1052 1.2582676920429707e-02 2.6911429136777503e-03 2.4306404177531965e-02 +952 -2.1490982130722655e-03 9.8867210827582983e-04 -7.6896126498907169e-03 +1160 -5.3787908533191519e-03 7.8249936911554303e-03 -1.0149541475741326e-02 +1061 -1.5316758586522485e-02 -4.5768087514248372e-03 -2.0698596818227302e-02 +2157 -1.0087460703138171e-03 6.2172632630697359e-03 -2.7516235597048792e-02 +271 -5.6925362952664721e-04 -2.9923293909952238e-03 5.5835728996127378e-03 +2843 6.0565712223069890e-03 -9.2556773676401079e-03 8.9927577301182268e-03 +2865 1.3917014306235518e-02 5.9072256603351066e-04 -1.3236000191757554e-02 +2336 -2.3385143231520675e-02 -3.3556099927422145e-02 1.5799939046797077e-03 +560 -2.8204463180717045e-02 7.8563695772583854e-03 4.6256400396129304e-04 +1002 -8.8207597339263200e-03 1.4929329764313232e-02 1.9862063082583214e-02 +556 5.4361450764519679e-03 -1.7311851966339376e-05 4.9915479512840076e-04 +557 2.5183273813222523e-02 2.4551305787412950e-02 2.0325015986316700e-02 +1051 4.1396776457323431e-03 1.7197326356439867e-03 1.7060318714160489e-03 +1141 9.8270318109728682e-04 -4.6771889214383532e-03 4.4512141684878862e-03 +1143 1.3733265409892762e-03 6.6469830218041284e-03 3.1074666166456322e-02 +1142 -2.6097320005064775e-02 -6.6722911601741902e-03 1.7396906851512475e-02 +1344 -2.5649393058574894e-02 -1.0403790899133581e-02 -5.7270816894730385e-04 +1342 -2.6067322806399254e-03 -2.8126823416459480e-03 5.6116582650408845e-03 +1279 3.5151198980035007e-03 -1.5808812130168157e-03 -1.1813572318390119e-02 +1323 5.1283070718133013e-04 -5.8599355507204434e-03 1.3977372723877094e-03 +749 -1.5186778337127451e-02 -3.3703453264668916e-03 3.9793140760593778e-03 +750 -1.6570515149865496e-02 -1.4577002220814851e-02 1.9745396493641679e-03 +1053 -4.3573594907291404e-03 2.5757213868678248e-02 -2.4018792624876620e-02 +1364 -2.4314326859848939e-02 2.4130358993098903e-02 -3.6202964951386235e-03 +1343 4.6330190769088824e-03 7.0240818624747658e-03 1.3627345858885446e-02 +1363 -1.0118739042827685e-04 -8.5554959150187552e-04 -1.9613151204872221e-03 +1365 4.0816226369735070e-03 8.5746244674397322e-03 2.2875310610935944e-03 +1294 -2.3753439809136409e-03 5.7504642275787077e-04 3.8240985640198336e-03 +1229 -3.0773313723246747e-02 1.6539023966694673e-03 -1.3273033691027067e-02 +1296 1.6313468565145761e-02 7.1453637116003620e-03 -2.4754280794175038e-02 +2934 -2.2735285236326321e-02 -1.1821903317200936e-02 1.6644689928562398e-02 +2850 4.3900790848486696e-03 1.0958587054645344e-02 7.8332120025196282e-04 +2932 -3.9316997155717385e-03 -1.1402412159147860e-03 -7.2948527765480213e-03 +748 3.0384761123419541e-04 2.8601312069580441e-03 4.3599809337755572e-03 +1321 2.5023349794384198e-03 -3.9080028036248566e-03 2.8048242801276068e-04 +1281 1.6932224693713110e-03 3.0603262663149826e-02 1.0124246452556154e-02 +2780 4.5753895599900396e-03 -8.3999679750539243e-04 1.3977275667926413e-02 +1295 -1.0793880248871995e-02 4.7700387051792291e-03 1.3833730496220156e-02 +1177 3.2592230738516708e-03 1.1412281078458032e-03 2.8564529311870721e-04 +1178 -1.0043551392854087e-02 -2.3606180891535513e-02 1.8274395919374260e-02 +2228 -6.6089067731486305e-03 -1.3038598987000048e-02 2.7607180716283836e-02 +1322 -2.9188769161998890e-02 6.6450932226007548e-04 -9.8827057372842149e-03 +224 -1.6330096300922359e-02 9.9281628647898620e-03 3.8838367107170250e-03 +2227 5.5825259630152624e-04 -8.8927765043569171e-03 -7.5409098447736639e-04 +2229 -9.2522808431036510e-03 -1.2955200078652739e-02 -1.1512332979194840e-02 +507 -4.0596489215045335e-02 -1.2043874467277742e-02 -7.5742361893262038e-03 +2080 -1.6780805351525512e-03 2.1300309544506576e-03 2.7894895921929215e-03 +2082 9.3278048168107790e-03 -1.8503019761558815e-02 -1.4437343592013948e-02 +431 -1.7970970442943487e-02 1.6966920506839019e-02 2.5416471968755360e-02 +1632 8.8731642268009888e-03 6.2008183217713304e-03 1.3488695586579857e-03 +1630 -4.7729948900931138e-03 -5.3314175320369845e-03 -4.8026639904379109e-03 +2166 1.5421912450648400e-02 8.8867356836217024e-03 1.1283620166305662e-03 +1917 -1.2981236133267980e-02 5.6213828483000442e-03 2.6000722328151094e-02 +2203 3.9560417203961190e-03 -2.1492936524055684e-03 5.0069306307212241e-03 +1180 9.6595432829880046e-04 2.0348909305603147e-03 5.2908533404696142e-03 +127 -1.7201495780087191e-04 -1.7082771225344414e-03 -4.4615181375701829e-03 +12 1.9085797233466906e-03 -8.4668246410390720e-03 9.1398461897689845e-04 +2095 8.8028185379506133e-03 -3.9856897017941556e-04 -5.8543777417833620e-04 +2096 -3.1298684693479385e-02 -1.7142821375137111e-03 -1.0657514240271615e-02 +623 -7.2635282775017863e-03 2.0491935068731541e-02 -8.2425649680650821e-03 +2159 -1.2083556607193961e-02 2.4400363190270325e-02 -4.6974752391323593e-03 +2158 -5.2891954798547159e-03 -6.6940382679632924e-03 2.4758539506489880e-04 +2130 4.3946100377987513e-03 1.5641241196024620e-02 1.8968977737618551e-02 +1182 2.6281009869255519e-02 -1.7712848019945389e-02 -3.6550775797022559e-03 +2128 1.8370294395987678e-03 3.8537231793827013e-03 3.9338726235784776e-03 +2129 1.8436271134434627e-02 -2.3809312559408108e-03 -2.2307501206812390e-03 +2870 -1.2950823524070934e-02 9.8992226384152435e-03 -2.3535256313017019e-03 +1328 1.8154210542831112e-03 6.4051298786240215e-03 1.2221815375361536e-02 +2869 4.1145062138576395e-03 5.0235485727370464e-05 9.5040995880935446e-03 +610 8.2100411762774106e-04 5.9501112024884257e-04 -5.3869553102587631e-05 +611 3.0725469667712890e-02 -7.4176835469131870e-03 5.6582977168987605e-03 +2160 -1.6801350588389240e-02 -2.0243246191774915e-02 -3.7276363024980956e-04 +612 7.8112773144968679e-03 -2.0965959332623192e-02 2.0050501872459502e-02 +759 2.8724381808172935e-02 -2.5300000115752912e-03 -1.4303655424813625e-02 +559 2.6748620282049120e-03 -2.4639604934416576e-04 -1.4325833983717326e-03 +561 -2.5208471076728009e-03 -4.5732539866626832e-03 1.5554751956218233e-02 +2048 5.2438164346097068e-03 -1.8562753055782661e-02 -1.6170343558195764e-02 +1623 -2.0392100576989078e-02 2.1583683429712120e-04 2.8970024689775054e-03 +2047 1.7292581602734239e-03 -6.3835870795923098e-03 -3.6936829055842463e-03 +2871 4.5061445171060123e-02 -9.9370718522232039e-03 1.1571108558708094e-02 +1379 1.6802636621881396e-02 -2.9007986645578018e-02 1.9156234617218496e-02 +2863 -2.9963319086937219e-03 -1.0252799871228806e-03 1.4341840097249791e-03 +1327 -3.1781942804154080e-03 -2.1276281607710565e-03 6.5535122932126044e-03 +228 1.3113528398231517e-02 1.0607197902729577e-02 -1.8638274294522791e-02 +1495 1.0215042357295851e-03 6.4844842059432577e-03 3.2605528188463782e-03 +1706 1.2279002805988585e-03 7.5129469107125166e-04 -8.0499857552969248e-03 +1707 6.7309062605877337e-03 -3.8425751118826754e-03 1.6146622060683281e-02 +1100 7.2340224131082565e-03 -1.5123050484955821e-02 7.5760142594100974e-03 +117 -1.1745285863412457e-02 -9.6527105163808080e-03 -2.9699171748310826e-02 +6 1.0398684830444189e-03 -1.1326819160551508e-02 -8.0103679734646379e-03 +4 7.9300319388166587e-03 1.5588247243824281e-03 3.9934275954154556e-03 +1527 -3.3451541456593556e-02 -1.6064973288055059e-02 -7.1951283163256691e-03 +151 -2.2714105561264195e-04 1.5580435765071181e-03 3.0091638279819539e-03 +153 1.3853863456791619e-02 7.7015340286341093e-03 -3.4646807495578151e-03 +1119 -1.2060411918084855e-03 -1.3392071248193492e-02 2.3950825025691163e-02 +147 -2.9040279007548020e-02 7.8999845264930018e-04 -1.7323210176867873e-02 +1117 1.8161088323784391e-03 5.1026702375422549e-04 -1.3972729748696012e-03 +1118 -6.1566307800894858e-03 3.2578472648126015e-02 1.1122556142761753e-02 +1123 7.2073614706866327e-03 6.7890389917652652e-03 -8.0441519203632156e-03 +5 9.8561925901574140e-03 8.9489669188231123e-03 -1.9746974282814946e-02 +2433 -2.7866872482827685e-02 -1.4261214774256997e-02 -2.2379101263735414e-02 +2431 -2.9278786122333479e-03 2.2279529535554786e-03 -2.0795357300178925e-03 +2432 1.3620997589977504e-02 2.0614282129853938e-02 -1.6543602060513829e-03 +152 -1.0732489230868839e-02 7.4778981675791877e-03 1.3851058553065006e-02 +857 1.0995564681565380e-02 1.0365525023570668e-02 -6.7592397224120410e-03 +923 5.4181998750686923e-03 -6.4818113758654703e-03 5.6791265645178939e-03 +1525 7.5180370366078469e-03 -3.5878566476114397e-03 6.5307903415456284e-04 +856 -1.3239775008756385e-03 -5.8462454014034312e-03 1.7816821354425993e-03 +858 -7.4125018697117513e-04 -6.8748722846075708e-03 -3.2183221014895402e-02 +120 6.6916697485917744e-03 -1.5901927686281802e-02 4.2849592643050428e-03 +118 9.3427320908879025e-03 -2.9597111715163834e-03 -3.8988925312918475e-03 +1705 -3.3378803927446986e-04 4.0431016150284079e-03 5.6802344932020176e-03 +792 2.2348932746030944e-02 -2.6291725541217264e-02 -2.0400604046977508e-02 +145 -1.6601877806911021e-03 -1.7014885662745851e-03 3.1702631982706351e-03 +146 1.2259956546065481e-03 1.2536509833861686e-02 3.0810976525283508e-02 +885 -4.9855954469564629e-03 6.5442089755096732e-03 -1.3861371246305590e-02 +733 5.7175196350662443e-03 -2.1499117979208800e-03 4.7705830908564865e-03 +734 3.1831318259227789e-02 1.3253613721506121e-03 1.7665458829965114e-03 +2326 -2.7795332249576409e-03 -1.0830160386524331e-04 1.1513013765163550e-03 +2118 -1.4620441935358455e-02 -5.0886215626466140e-03 2.3463084611727778e-02 +1871 2.8613600450906999e-02 1.4102128901414469e-02 1.4245378834279393e-03 +2205 -4.7435273146522478e-03 1.2009577697258252e-02 -1.7484105929029083e-02 +1641 1.6734807214937125e-02 -1.8538051018826683e-02 3.2741854200235183e-02 +1208 -3.1432608722127005e-02 -7.5309825125516264e-03 -2.0073253660416124e-02 +1125 -3.3294941070362280e-02 -6.7975604713130253e-03 1.0913423610557653e-02 +1124 -1.7356102482522940e-02 -3.0354334944041481e-02 -1.3409118051615656e-03 +75 1.4637894615629485e-02 -9.4596296292534729e-03 -2.5365509628471845e-02 +1699 2.6767466709100594e-04 1.9514011808139092e-04 1.7782442285921814e-03 +1701 -1.2410763729193813e-02 -1.5965764396177844e-02 -1.7650605372070401e-03 +830 -7.0484557328133240e-04 3.2486166400479124e-03 2.5217549982308064e-02 +73 -3.2556291512370991e-03 1.4515261870159479e-03 1.3010852987245017e-03 +848 -5.7296837605919334e-03 2.7296138766444631e-02 -3.5465871862223310e-02 +101 4.3959668953035555e-03 -3.1331906779051449e-03 1.6982207987257400e-04 +217 4.1123238309669578e-03 4.8739553734844093e-03 4.6511651019501277e-04 +219 -1.0700265413985615e-02 1.0623674178352024e-02 -3.2567136362535956e-02 +820 4.3787103848519759e-03 2.2744043249583643e-03 -3.7676146939115331e-03 +822 1.1719857730609408e-02 3.0445168282162791e-02 -3.3319170866296429e-03 +2937 -2.9451341357895379e-03 4.6642524812255687e-03 1.2577304732932953e-02 +2293 5.9520526737052754e-04 -5.9247135323262290e-03 -4.5971368169950267e-04 +2585 2.8203355822353747e-02 -1.8055875535576811e-05 -1.3034780783668973e-02 +2586 1.1133372276605330e-02 2.1264645926462263e-02 -2.1609390034570426e-02 +2295 -1.6380458969287082e-02 5.2972709667094596e-03 1.2630303319920235e-02 +567 6.5889849077103340e-03 -2.0349414839488929e-02 -1.1643861631945055e-02 +100 3.8319252579413873e-03 -7.3569165066411663e-03 1.9898894336001526e-03 +2300 1.3093251213214680e-02 1.4223760909286964e-03 1.3765798988962290e-02 +1559 -3.5875604480110090e-03 -9.0653335074133735e-03 2.1212085096761143e-02 +1522 -8.8542402648616797e-04 4.3367017484145388e-03 -3.8979733324639430e-03 +1524 2.5104750276818067e-02 -2.0915043203839526e-02 -1.3645610557637104e-02 +53 -2.9551984093641962e-02 2.3993428298663875e-03 1.0789637674787293e-03 +54 2.2785382426985998e-02 -4.8386537936912161e-03 4.6155732944451614e-03 +52 -3.2007566738965947e-03 9.7792668056745531e-04 1.4144213727226495e-03 +1558 -4.1591187058528942e-03 5.0579269224239991e-03 -2.9718588517321448e-03 +1523 3.3445423731995488e-03 -1.7215794988860182e-03 -4.1316358070762269e-03 +1560 -3.0017955808523708e-03 4.0563892814942815e-03 8.8699541004474414e-03 +1035 9.7074514991829751e-03 -2.4745591862646018e-02 1.9754391831301199e-03 +1033 4.3089927812104691e-04 2.1832828437034942e-03 -2.2466672433104481e-03 +849 8.5018930097442540e-03 -9.5853128739613758e-04 -7.3222869664458356e-03 +2584 -6.4328018872965359e-03 1.8286680028888709e-03 1.1751036533722283e-03 +193 -2.2480098542165378e-03 2.2646740253360878e-03 2.0145600253728426e-03 +1692 -1.1587283811058133e-05 7.9425216414750373e-03 -2.4445192564464382e-02 +1547 -8.2387557659736460e-03 5.9156711568857613e-03 -2.6290058241457840e-03 +1443 -1.4818630623489764e-02 -1.4928939053244612e-02 1.9161766449431534e-02 +832 -4.3870821139546474e-03 -1.1456279029166021e-03 5.2779870367085603e-03 +833 -2.4584942732215807e-02 -2.6807522410358598e-02 -1.2747363885186042e-02 +2642 1.8291979805763553e-02 5.2393551254613438e-03 9.7208868992593907e-03 +603 -4.1449367112937931e-03 4.7534301576199426e-03 5.2207795944835501e-03 +1949 -1.5519453989048701e-02 -7.0241500913215951e-03 3.6728924068801898e-03 +56 1.5836287509072750e-02 -5.2844429305851613e-03 5.4432693887044043e-03 +1998 8.3933718837670198e-03 -4.3650464796903101e-03 7.0599931261895593e-03 +1996 4.1352591784007183e-03 -1.4013802587202417e-03 5.7494827867307511e-03 +2394 -1.2274422997661653e-02 6.5791688324991710e-03 -1.3060547270329647e-03 +2392 -1.2744963406278143e-03 -2.8877718787350768e-03 1.2163429550339283e-03 +1997 1.4533377326528350e-02 -1.9747667790179366e-02 -2.2176133680817490e-02 +2393 -1.0158817551956741e-02 -7.3212383990551716e-03 2.2758264216641372e-02 +831 2.5741833607243268e-02 8.5534880229850997e-03 9.9090687042133526e-03 +343 1.0918793368839778e-02 2.8350566454412112e-03 2.3184602490560987e-03 +345 -1.5585825904956390e-02 9.3104451323450883e-04 -2.0377254906902016e-02 +492 2.4142616932829802e-02 2.2275312109065974e-02 -4.3992811358473126e-02 +490 4.9632654182506378e-03 -4.0765350606645203e-03 3.1760835396470563e-03 +344 -5.8444752934103021e-03 -2.6847087713090512e-02 7.5864355256840654e-04 +520 3.5283303316789335e-03 -1.3751479753414016e-03 -1.0738253659260562e-03 +521 -5.6143572230481246e-03 -3.4080161568024359e-03 -1.8408612068368374e-03 +522 1.6412676543618186e-02 4.2499861298431569e-03 -2.8807651667557424e-03 +1756 5.7568352569534638e-03 1.6603995135413612e-03 2.2675542229855933e-03 +1747 -6.4618018248306722e-03 2.4841781373751244e-03 -3.9991989857699559e-03 +1749 9.6246704485537064e-03 3.9973484280294040e-03 1.3246146381243860e-02 +267 -1.7488393174228060e-02 2.9125216609426591e-03 -5.9365119263557658e-03 +356 -1.8215915377678173e-03 -2.5500737851810337e-02 -1.9713557787447347e-02 +2478 2.0345092341372280e-02 1.4370507731803666e-02 4.8630419916578542e-03 +292 4.1467573832269589e-03 -1.7246344139196092e-03 -3.0558723920447047e-03 +293 1.9515162435984887e-03 -3.1480128381542870e-02 1.8934603406939716e-02 +1107 -1.2180276527344013e-02 1.0525487903983572e-02 8.9447915512334986e-03 +1105 2.0814462722643718e-05 -3.7499626668227697e-03 -2.6719853919175474e-03 +2125 -7.1193382333069235e-03 -7.0821877334481843e-03 -8.1707302958682060e-03 +43 -3.2886599394774839e-03 2.8083324425702051e-03 -3.0748593955078375e-03 +1757 -3.2135941796972601e-04 -2.7969442735396501e-02 -1.4229503054140284e-02 +509 -9.9807815511398492e-04 -2.4586476401398008e-02 3.6094802748203959e-02 +1380 -3.3773211705721506e-02 1.0073474700427789e-02 -1.7286111984736841e-02 +578 -5.7936187413037687e-03 -6.4229829341231927e-03 3.7891381409427532e-03 +367 2.6813755654399411e-03 6.2659578405034697e-03 -5.1763778313490263e-03 +511 3.1563011228144945e-03 -5.1697525748700445e-03 -1.4512771967219039e-03 +2011 -1.0842543220403575e-03 -1.3923039222047304e-03 -2.2291696590771059e-03 +1475 1.2974801830156349e-02 -1.2533759288663544e-03 -3.6834753847083665e-02 +601 9.1785550580064787e-04 -9.8701263037667113e-03 -6.0727890481403082e-04 +2187 1.2601926869680121e-02 -1.7588297396200530e-02 2.4261419707251792e-03 +577 7.0579569972602642e-04 4.2402548815904462e-03 -1.9179859462882460e-03 +614 2.4179689801740019e-02 1.0394120263072088e-02 -2.4714699459964771e-02 +2866 3.7488588275006112e-05 -5.1809936554334272e-03 -3.7528881362686849e-03 +1474 2.2651709245384540e-03 9.2562041088301034e-03 2.0425527861735564e-03 +1476 7.4462404598182475e-03 1.6531602596115573e-02 1.6634166165890685e-02 +1218 -8.2522539839901821e-03 -1.2093162563315990e-03 -6.5639247500507026e-03 +688 5.6827419529101482e-03 8.0927005040723945e-03 -8.8204741594665684e-03 +1499 -1.6725523241246476e-03 -1.6659235928223843e-02 -6.7910882222246526e-03 +1498 -1.5304012778496298e-03 -4.0732506246741046e-03 4.9127382619160364e-03 +1258 3.3409562010576193e-03 -3.8331444937332875e-03 -2.7346525243854571e-03 +1259 4.3840351759065867e-03 -6.6433424642396936e-03 1.5135600667495303e-02 +1260 -8.4403435394699456e-03 1.9440788767968550e-02 2.8964180073827181e-03 +516 2.7565897425045730e-02 1.5077538837234943e-02 -1.6562478512389851e-02 +450 2.3823700518826791e-03 1.1527885033464590e-03 -3.0880060422541497e-03 +514 1.5304566102900625e-03 -3.2445577201152785e-03 7.8397342303063670e-03 +543 1.2985166809883840e-02 -2.1137982646094598e-02 -7.4848642258770618e-03 +477 -1.1621070490518047e-02 -4.2016227913850471e-02 3.4733593255656496e-02 +1500 -1.6716182270554616e-02 2.8251886216702118e-02 -2.2604675067731818e-02 +540 -5.5424873966339978e-03 -8.8236177249678711e-03 -2.2266983465138900e-02 +475 -3.4812067638899605e-03 8.4840322454202855e-03 7.3034515865462515e-03 +519 1.5704501716473730e-02 -5.5603826818958584e-03 7.4018060097969353e-04 +518 3.4382592011514214e-03 -3.8449922885134109e-02 2.7225384452486162e-03 +517 7.5966879440616229e-04 -2.0023685090745829e-03 -4.0662699704659654e-03 +1463 1.9695423536959127e-02 -9.7789260634590820e-03 -5.4661212474546141e-03 +690 -6.1216815475334738e-03 -7.8170841651037885e-03 -6.8724124006339518e-03 +305 -6.8839888464922909e-03 2.1496952088068760e-02 1.5461637717108241e-02 +1427 -1.6204082142436516e-02 1.5066058979556825e-02 4.0541040835246088e-02 +705 3.4970295867624711e-03 -3.7184924544771988e-03 3.7168509060510591e-03 +541 2.6336515340293740e-03 -1.3312573889001009e-03 -1.5866443430100281e-03 +1899 -2.1138876137897711e-02 -2.9942720282296026e-02 6.8133759540536885e-03 +1426 2.4826364675595348e-03 1.1389752360385082e-03 2.5025292287421340e-03 +1428 -1.5765226019282853e-02 -9.3905304231731001e-03 2.0940413714171701e-03 +1414 -5.9806203215921642e-03 2.6318986516043110e-03 4.3936166834771207e-03 +1927 7.5575942717717353e-03 8.1567481440209346e-04 3.8982661731355103e-03 +689 -5.9639049184151659e-03 1.7273616557351341e-02 -3.9702329739646465e-03 +435 6.2441517645837382e-03 2.5973195023326515e-02 -9.3262362300429620e-03 +2162 1.1306464492703420e-02 -1.2811243791629123e-02 -2.2970783412229290e-02 +542 2.2989142431353218e-02 3.6575628227692473e-03 -4.3783908943746275e-03 +1462 -1.4124643493014964e-03 1.5178849345083066e-03 -5.9252268630575573e-03 +1464 -1.8097671423959700e-04 -4.4829525761881563e-03 1.0632373877834942e-02 +433 4.5309319817150133e-03 -2.5205176712716094e-03 -7.9062584889003627e-04 +790 6.9359443055998856e-04 -4.6195930770891847e-04 7.5587820657737302e-04 +791 1.9371948232549372e-02 4.0520318432027162e-03 -1.7127118224336522e-02 +1898 1.8574080931509224e-03 4.0099532507375177e-03 5.3129452151888228e-03 +932 -2.3939149102098576e-03 -8.5693909834957133e-03 2.2335442311690816e-02 +1897 1.1600807970819523e-03 5.5664601732971931e-03 2.1720233528524004e-03 +65 1.4002236669823932e-02 1.1774895612312486e-02 1.5622160759663462e-02 +931 -5.3052903243461045e-03 -3.4472994233734943e-04 2.6058656955989462e-03 +619 -2.7772272399897327e-03 -6.1465928725469047e-03 2.6730948430234085e-03 +621 -3.1216590406813433e-02 1.1458676841053018e-02 -1.9267526745345719e-02 +149 -1.2848200221162657e-03 -2.6020416849107691e-02 -2.9121204825382795e-02 +620 8.1510656360134250e-03 1.2938412551021856e-02 -3.9865489854576117e-03 +64 -5.3120071565939658e-03 7.0936939946775780e-03 1.5935756691597713e-03 +933 -3.5886324589867791e-02 6.8341983971100537e-03 -7.0684342461307965e-03 +66 1.8732600645491548e-02 -1.2841665422029733e-02 1.9213279695868470e-02 +150 4.1425250247916941e-03 1.5595094868646232e-02 -6.2047030863383590e-03 +148 3.2297962869624105e-04 1.1833270023829467e-04 6.0826303974982933e-03 +1410 -9.5016535675107958e-03 -1.7410765052676278e-02 -2.4703010964963286e-03 +565 -7.8929817752781050e-04 3.3568223993787113e-03 5.6491549040318641e-03 +632 -5.7879682263846308e-02 1.3066746485658611e-02 -9.8054531687921404e-03 +2361 9.7649025383708173e-03 8.9574191798462901e-03 1.4486459129621895e-03 +175 -8.6944198843490260e-04 4.3501593508675261e-03 9.3435083504950299e-04 +2328 -2.3803114304375646e-02 -3.7813162781045540e-03 1.9220992773429670e-02 +176 -5.8540712488969653e-03 1.5809979344411137e-02 -7.5580927249089087e-03 +330 -4.2787894462868650e-03 1.2515067108551657e-02 1.1332771760602023e-02 +2327 8.6824097108754092e-03 -1.1276416179270225e-02 -2.4363726710935778e-02 +62 5.1848506613628277e-03 -8.9979081529791820e-03 2.9710817689234031e-02 +1041 1.7131883979998184e-02 2.9194514424658303e-02 5.9371336714447969e-04 +1351 -7.1820125723772955e-03 -8.8124625218635603e-04 1.2182119474716951e-04 +2198 1.5036541793914549e-03 1.3694755227752727e-03 2.9645030654139770e-03 +974 1.3863236162573169e-02 2.4381191249751480e-02 -7.2451498086123570e-03 +631 3.6246056647445514e-03 -2.3166474548755962e-03 -1.6369523006268736e-03 +1088 1.6588684755222929e-02 1.5283981294499038e-02 5.7072423282499864e-04 +2199 3.1709026198799509e-03 1.8076156326300490e-02 -4.8535103866887627e-03 +235 4.8812169400327147e-03 1.9977033501207813e-03 1.0384963860526806e-03 +898 -2.6670752224445945e-03 -1.0532863310103531e-03 6.5203043111548703e-03 +900 -6.2454763281321463e-03 -1.0994330646999942e-02 -1.0586223086333659e-02 +600 9.5417157330575965e-03 3.6151975601749348e-02 1.3631236589241216e-03 +69 1.1015662883939908e-02 -2.7202617802215227e-02 1.0516065511655959e-03 +1353 1.3672593096603096e-02 -8.7752458366165235e-03 -2.2995461680932899e-02 +67 3.5116013569569380e-03 -2.6459670345702528e-03 7.4682392948989659e-04 +598 3.7027143989079633e-03 6.4454514008106746e-04 -1.1164139401510509e-03 +2097 7.7419045810497959e-03 -3.0168523117437396e-02 -6.2736455552135041e-03 +2402 1.2336339320338292e-02 9.2393258512332866e-03 -6.3776628151700271e-03 +237 1.8149075779100004e-02 -1.7917484197094907e-02 -2.8187074086761722e-02 +68 -1.1071496712737780e-02 -1.2069776736242424e-02 -2.7349219831211420e-02 +2116 1.1004852163865304e-03 1.3918672800169673e-03 2.1751097567855710e-03 +1040 -1.9839610245003315e-04 1.1628675657168925e-02 -4.5607745752555611e-03 +1039 -1.8397211074367981e-03 -8.0376790411538328e-03 -4.7530935597362621e-04 +2117 1.1105014620608797e-02 -2.1439844727011048e-02 -1.2379065113831010e-02 +2825 4.6728857635098568e-03 1.5549058963814219e-03 1.4727730941840050e-02 +706 -3.3066503434313111e-03 -2.2135935822038808e-03 3.2168667678046953e-03 +707 3.5629747500847144e-03 -3.2460463010475150e-02 -2.1622598747264819e-02 +416 -1.7654173969000011e-02 3.1810755382372574e-02 -1.3698122893007878e-02 +1515 -1.5434866876681132e-02 -3.6343594505257077e-03 -3.2365278303168966e-02 +2197 -3.8887385373241245e-03 -6.7201251329111981e-03 7.6029105165288278e-04 +342 1.7478893498519745e-02 1.4410772302266343e-02 -1.3455882486593247e-02 +1820 -2.8806583954184731e-02 1.9946432754658041e-02 1.8889623605106001e-02 +1396 -5.2374911690025391e-04 -1.0481296553396084e-03 2.2021129751406097e-03 +1971 -1.7589435442098587e-02 -1.1234233621112994e-02 -1.4984445918424801e-02 +864 1.9527933731912413e-02 -3.1229911901937231e-03 -5.9821086530537611e-03 +862 -1.3362794971511149e-03 1.5982341894007811e-03 -1.9257051479585855e-03 +179 -1.4564214012017488e-02 1.2709097516040725e-02 2.7303896418359487e-02 +368 3.0665434092681460e-03 2.7136906027898696e-03 -4.3034271371233451e-03 +847 -3.8550088743124641e-03 2.3233356576100807e-03 9.1055832086773365e-04 +1556 6.9309645352695287e-03 4.0177739101722159e-03 -2.8706616655655125e-03 +1849 4.8466231565905708e-03 1.1526990867562124e-02 -1.9955680891864331e-03 +875 1.0096065382048471e-02 1.2143726899545643e-02 3.8151976146329294e-03 +874 -5.4709458606675317e-03 7.8567061090069126e-03 3.8764664030056670e-04 +1850 -1.2966564753690230e-03 1.9202371074052212e-02 -1.7656131467088495e-02 +1352 -1.2494827018427669e-02 -9.1563788883172650e-04 -6.3845159759930419e-03 +697 1.0149116951036680e-02 -4.6355094940113313e-03 5.3394325622184728e-04 +1819 -5.7112986428482001e-03 1.1673371817808372e-03 7.3337593373349061e-03 +863 2.9978211498484529e-02 3.9903670909463380e-03 2.0806520002270137e-02 +1889 5.5742307415614107e-03 -4.5968534295882796e-03 -2.5616580987192173e-03 +259 -4.8653517881894204e-03 5.5802080740623688e-03 1.9954681513140814e-04 +261 -7.7992370335544150e-03 -1.2523010460657562e-02 5.9031787697073953e-03 +995 1.9360811736134291e-02 -1.2049743394263554e-02 1.0271380116842407e-02 +1034 -1.0049296179541305e-02 1.5934932787159427e-02 -1.7188574075347393e-02 +699 -2.1025643740643304e-02 -1.6639946140088485e-02 1.9246160373972504e-02 +2623 2.1800174291668221e-03 -2.7678395129016784e-03 -6.0934750650414333e-03 +1888 4.2717176070919630e-03 -6.3343105459383168e-04 -1.1503028945615753e-02 +1890 -5.5955377644141989e-03 1.1315962574896990e-02 4.1650395172195178e-03 +2624 -1.2920499177701151e-02 1.7655880360161802e-02 -9.2981033903080934e-03 +2625 -3.5571413360365400e-02 -4.0662877170849999e-03 3.2491428178670094e-03 +1851 8.4446991653115647e-03 -4.1321778467796957e-03 -4.2070619070498257e-02 +2299 -1.9764459090569563e-03 -8.8168096720081489e-03 -5.7744541293744444e-03 +1703 3.9603719412224878e-03 3.1222791800768191e-02 1.5401441059888285e-02 +1702 2.6156414886276277e-03 2.2314749799760111e-03 7.3916212058577251e-03 +1797 3.4289327206565363e-02 3.5368604522796423e-03 -3.1373582196129443e-02 +335 6.2145613803535399e-03 -3.6625801076478148e-04 -8.6371050615048777e-05 +336 -1.0408636566081812e-02 2.2753775762681474e-02 -2.9540250005816180e-03 +334 6.4632136855019146e-03 4.2906147274826729e-03 -4.2445887325278904e-03 +1685 9.4992069951221093e-03 1.8690278113404075e-02 7.2638476217375125e-03 +537 -1.0442081428720109e-02 5.6226486297988416e-03 8.7686876788282825e-03 +375 1.1589359251601684e-02 -1.5378410567504497e-02 -2.3371767082565286e-02 +436 4.7516107934585904e-03 3.8634669944673278e-03 6.6720448576453829e-03 +2465 8.4136618658546755e-03 5.7909892815410950e-03 -2.2889029356387980e-03 +2477 -1.9485502291330673e-02 -2.4295227173013381e-03 2.6972222180504636e-02 +1207 1.2349577684247920e-03 5.6923825493039384e-03 5.4004580685425019e-03 +2301 8.0767665172992390e-03 -1.2008790542343590e-02 3.1639100693260654e-02 +2464 -1.6967483461002812e-04 5.6421839342378627e-03 2.2750798413380771e-04 +1049 1.5715822436578079e-03 6.8308215391332293e-03 3.7491416929201220e-03 +2508 -1.5400712611074062e-02 9.0956451052876773e-03 -5.5423525795155774e-03 +347 2.0260028582111390e-02 -4.8032326302104716e-03 1.7592748235414687e-03 +1378 -2.3022398346483363e-03 -5.3015969097252344e-04 4.7810194199404046e-03 +2507 1.4485817689609643e-02 2.5479348585698575e-02 1.5978431936466621e-02 +491 5.1722686614272793e-04 -7.6554193056536657e-03 5.9033858224144739e-03 +44 -1.9530310125315919e-03 2.3087357488499844e-02 -6.7871749828631953e-03 +2506 -4.9819858926126136e-03 -8.7343106241852837e-03 2.0049389142283856e-03 +2445 -1.1120194011137136e-02 3.7775691926297081e-02 -1.1714051642715594e-02 +2444 3.9976000893982871e-02 1.4401560282569751e-02 -1.9200207164810777e-02 +2443 5.1943547244816361e-03 -2.2667434121750635e-03 -1.8297902976889011e-03 +1679 2.4636547562577216e-02 -1.3106267607790816e-02 9.2552710442407539e-04 +294 1.4390338908804592e-03 -3.3456022491801123e-02 -1.1768537081589321e-02 +2322 1.2362097121716341e-02 -9.3436285415096545e-03 -5.3108817270641154e-04 +1236 -4.2092020325554362e-02 -1.5147167020572365e-02 -8.5137685966025743e-03 +1234 -1.7456882132483673e-03 7.9459258379664197e-03 -3.3443745484590035e-04 +2320 -4.4707127668523354e-04 -1.3633731666010361e-03 6.9142267322863020e-05 +2321 -2.0891914468419995e-02 -2.2625351356356408e-02 -1.7226138874639245e-02 +1235 1.2265397746248557e-02 3.0287733022692745e-03 1.1310957508311360e-02 +192 2.2545879553343379e-02 3.5783470337723708e-02 -8.5798218343374789e-03 +225 4.8809594744885117e-03 8.0411082844797990e-03 -1.9472272075523659e-02 +190 5.8081210304029036e-03 -2.2760866930957996e-03 -3.9381247082410000e-03 +191 -1.1365060349958612e-02 -4.8939550329504576e-03 1.5379431138418373e-02 +464 -8.8462307062590288e-03 -1.5695462199154464e-02 -1.0003636181384707e-03 +1678 -5.2763576983378925e-03 -3.5761740834455778e-03 2.7106051536359447e-03 +1680 2.1439178335978006e-02 -1.3851602488299485e-02 2.9709631603883426e-02 +265 -4.5742841441966083e-03 -1.0481338167026731e-03 -2.8096885473685774e-03 +1629 -1.1209411958181190e-03 4.1199386847218531e-03 -7.5982615890169266e-03 +463 7.0733125411808092e-04 -2.0233536374320853e-03 -5.1558249346714692e-04 +1821 9.8688504778165001e-03 -1.9913098095287230e-02 -1.1251662720286344e-02 +465 6.0099417550669304e-03 -1.7133107363676344e-02 2.2058002313315745e-02 +438 -2.0297513203418129e-02 2.0970209552087830e-03 -9.4606084669311577e-04 +437 -7.5541007516931444e-04 -3.6095589388707452e-02 -5.3093581462316511e-03 +348 1.2471090916213895e-02 -5.5598268164196224e-03 -1.0577208876613651e-02 +2684 -3.4753302542474278e-03 -8.9751751906408470e-03 1.5733435201285705e-03 +2685 -3.8313767425281878e-02 -1.5654809392553228e-03 -5.2459073025491812e-03 +2683 1.6976385791960206e-03 7.3573956244477054e-03 1.4637997868620154e-03 +1299 -2.2654937847154864e-02 -1.3746514006564178e-02 1.8389740122484760e-02 +1297 -3.9617461601682957e-03 -7.3149449240608169e-03 6.5148496841855030e-03 +369 2.3137621353726891e-04 5.8083495878752207e-03 1.0980232796230905e-04 +223 -1.1191784644375650e-02 5.7935171620910144e-04 -2.1984065043322326e-03 +306 -2.6601438637751548e-02 7.1349266823393107e-03 -1.9194273692026267e-02 +216 2.2180468935361894e-02 8.7878315093042926e-03 -4.0297533367396427e-03 +2903 7.9381247997693267e-03 7.6889553670778316e-03 -7.0850677253628362e-03 +2818 -2.9094278735880613e-03 4.6776384841518701e-03 5.4612700908307380e-04 +304 5.6624167322692478e-03 -4.4123619860433503e-03 -5.2059707878624375e-03 +215 1.8173561110142761e-02 -3.2606526077607330e-03 8.5277438244941699e-03 +1771 4.4901704296658549e-03 -3.8080030707240780e-03 -3.8964875188691752e-03 +2091 1.1806964528576932e-02 -1.1381595544424385e-02 5.3406145262332788e-04 +357 -1.5806299681809462e-02 4.7910825109631168e-03 -9.9777494817381001e-03 +2060 2.5251876968662254e-02 -1.1631165978639339e-02 -2.7346121291276507e-02 +476 -2.7332307745619841e-03 -1.1142842249760913e-02 -6.6828026136335969e-03 +539 1.0884335215718634e-02 -2.4034825141323785e-02 -2.7283396054725677e-03 +2081 -8.5936822092890083e-04 -1.9877129732525776e-02 -1.0522887485497704e-02 +566 -2.0451842076063161e-02 -2.6470359545674810e-02 -1.2263912239344114e-03 +2661 -1.0141990853102103e-04 1.5208355572957145e-02 -1.5201395379070037e-02 +2659 7.0126090458366109e-03 -6.5879885769274163e-04 1.9545972755095715e-03 +538 -1.0528988746147598e-02 -5.1478400286006955e-03 -5.5116474547117229e-03 +2679 1.6692886911580267e-02 -1.1997680159848811e-02 1.5313204695726293e-02 +743 5.3079572757044689e-02 -1.0103660543545631e-02 7.4935575173645354e-03 +744 -1.6864335397227658e-02 5.0106771177800130e-03 -1.3590745092696765e-02 +742 2.0618661448342916e-03 -3.1896646381179071e-03 2.3042535231951851e-03 +214 -3.5807298082980773e-03 -8.9113247308555445e-03 1.3174120233577699e-03 +2904 1.0766992552785931e-02 -9.8927721404613953e-03 -2.8531380043065428e-02 +2902 2.3197771358615137e-03 7.2185725845661953e-03 3.6448699823587527e-03 +2150 -1.6777422106881247e-02 -9.0777642159492397e-03 4.5583862162259904e-03 +599 1.0575635925467203e-03 5.2368415534757261e-03 -1.3194216097067040e-02 +508 3.9617184446751183e-03 5.4073769792698650e-04 4.5717897650252460e-03 +633 -1.6580289014997081e-02 2.2010695157749283e-02 6.6645125222143725e-03 +2545 -4.1221877641386502e-03 2.9930721569495127e-03 7.9251100843501024e-03 +2547 -1.4763669861780850e-02 -1.7850553465085399e-02 2.3686574163157240e-02 +360 3.0853361149142597e-02 2.0257700299298738e-03 -1.5556123099920934e-02 +2546 -8.8415065386751659e-03 -2.2617258219897761e-02 1.4756837342875711e-02 +1371 7.9700233579722043e-04 -2.2731027503980462e-02 -6.4137455522323729e-03 +324 -1.1445874982120133e-02 -2.1779349346498771e-02 1.3743283963231710e-02 +1513 3.3839424629611790e-03 -5.9026453776857514e-03 -7.9066162879411737e-04 +1209 -6.5653515724430952e-03 1.1676101760408697e-02 1.2040447177802938e-02 +2867 8.1879278117140096e-03 -1.5812810000633609e-03 -7.8057633133553463e-03 +726 -7.3903987804620642e-04 -1.7490757674027565e-03 1.8753510957703252e-03 +2842 -4.9714910363943135e-03 2.2251959485573279e-03 4.3183621283412665e-03 +696 -3.6293986672642472e-03 5.6868790618851374e-03 2.2284810825643930e-02 +1369 -6.8826776262527287e-03 -7.4453358627211356e-04 1.1146397888436468e-03 +694 6.1750090163475765e-03 7.6223235358588621e-04 -5.1675810785854013e-03 +323 -2.6473500669353525e-02 -3.9226987426223331e-03 3.2690539659413584e-02 +695 1.4437273348045579e-02 -8.3809112582447129e-04 1.8461615682056860e-02 +1514 -9.3748753799760970e-03 -2.6952046120769187e-02 1.6249188952877060e-02 +510 2.1212810538048899e-02 -1.4162922565366973e-02 2.3824258320727397e-02 +724 3.8466302193338763e-03 -1.1663087506371802e-03 2.4426545137865899e-03 +2826 2.0297911339497151e-02 3.5681607591885075e-03 2.5798664161177454e-03 +2824 -2.4312171733152825e-03 -1.2123938564969027e-03 2.8960040954892959e-03 +2820 -8.0934753735114658e-03 5.4673966870821831e-03 8.7854051065440666e-03 +355 -1.7468862037428189e-03 -3.5801673710711703e-03 -1.9501434931922404e-03 +1370 -7.0444885193290457e-03 4.8413822931737457e-03 -2.0228234327295822e-03 +1772 -1.8867130289880144e-02 1.5203398505628378e-02 1.8726224869642785e-02 +770 -3.8092845644746207e-03 -8.7292909080411464e-03 -2.0452512956627322e-03 +1928 -1.1133421917634672e-02 -7.9319997977331195e-03 6.6110597464566863e-03 +618 -2.2621871309256129e-02 7.8786593846449167e-04 1.2673011113716888e-02 +1398 7.3390389805562117e-03 -1.0792225199147557e-02 1.2077584902763519e-02 +2077 1.8078939508877929e-03 -3.7075418340914465e-03 -1.0269847684005224e-02 +2760 -2.0289924597709577e-02 5.0695744944855318e-04 2.7104081404216093e-02 +2360 5.7513813431439888e-03 -9.6441115695917383e-04 2.1250854258158595e-02 +1716 1.1553115815347535e-02 -1.5058644752797513e-02 1.2233289003677563e-02 +2495 2.1782530494843872e-02 -5.8454228204425050e-03 2.3406920584916925e-03 +1510 4.1873767197709161e-03 -5.8959146056897253e-03 7.2713366572871600e-04 +1399 2.2332280244639247e-03 -2.6699802968236808e-03 2.1517027006157860e-03 +1400 -1.8468402143493670e-02 1.3218623872161829e-02 -1.1295164700400151e-02 +1512 -8.6227742822880121e-03 -1.9614208357772956e-03 -1.4115838925092457e-03 +721 1.9621022857267182e-03 -1.2146943477289985e-03 3.7940624399410219e-03 +667 6.6722586995108541e-03 -2.8227371623104091e-03 1.8549315963080932e-03 +1489 1.1852325891429935e-03 1.2651471436277188e-03 1.7423708435793895e-04 +1491 -2.2375258567218300e-03 7.2791966758225060e-04 2.9747767168680640e-02 +2182 -3.3187518611119461e-03 8.0188000041352021e-03 3.2332340821415308e-03 +1490 1.0152757972224487e-02 -2.6917584690345917e-02 1.5916131090732501e-02 +1731 9.9734729851947146e-03 1.5922113372271604e-02 1.5896381042197327e-02 +1076 -2.0257897856946230e-02 -3.7620964729827033e-03 7.4855310022020217e-03 +1628 -2.4288227004964639e-02 -2.5502797102315733e-02 1.6071622805195862e-02 +1627 2.2871919893743568e-03 3.4381297234364863e-03 -1.4977965416520167e-03 +2302 -4.2986698547761099e-03 5.5407199294831583e-03 3.2642260110443402e-03 +2304 4.3651090076178818e-03 2.9886209040119668e-02 3.6918359164011660e-03 +1730 1.4433775964571771e-02 8.6759571231752059e-03 -1.7769742172954642e-02 +2123 -7.8971792004133585e-03 3.5785189838888685e-03 -9.4799147982448703e-03 +18 -1.7023809024210395e-02 6.8676103892999297e-03 2.7910140298274982e-03 +1576 -3.5868305928465921e-04 4.7828945927694076e-03 4.8813581508511843e-05 +834 -2.9999508953667160e-02 7.4244636390859362e-03 -1.6568177514410150e-02 +1077 -1.6536433100596812e-02 -2.5013346441054730e-02 9.2391747034044468e-03 +2768 1.7536367999246589e-03 -3.4082232471121100e-03 2.2715592229408995e-03 +1075 -3.5947726302157043e-03 3.4627910521514093e-03 -4.7419915933612795e-03 +1737 -1.4969880711748218e-03 4.5643649691593742e-02 2.1308550219428731e-02 +74 -9.4281977422483766e-03 -2.5422930399190160e-02 1.0585104058399786e-02 +723 -2.0360028899832862e-03 1.1317131761810225e-02 6.7005414613191356e-03 +1557 -3.9304974619947877e-03 2.7628070346897560e-02 -2.2819486702588950e-03 +2012 -3.4145852900875108e-03 -5.6267270780852550e-03 -1.0848255454587296e-04 +1548 2.9810743442654563e-02 1.3106259446698562e-02 1.6109351243981985e-02 +1526 -9.7204531638516983e-03 -5.7936491383988173e-03 3.4767925912167351e-03 +1736 -3.1348064574343304e-02 8.2705004776335526e-03 -5.4308471083894640e-03 +199 -5.5342325857701716e-04 1.6056008320789452e-03 5.5016165348487547e-03 +2183 3.4738296843776724e-02 -6.7972758176419786e-03 3.4461958731541046e-03 +2184 5.6700168457441561e-03 -1.8746406454250675e-03 -9.1937888773714598e-03 +2119 1.0501651727895858e-03 -6.1381910278108173e-03 -3.0892924490849151e-03 +1029 -1.2842453258054852e-02 -3.7597237814061428e-02 -8.0344530942802906e-03 +1578 9.9899673411240134e-03 9.2922758160511355e-03 1.4892589650023538e-02 +922 3.7701847276911545e-03 5.5273818230473807e-03 -6.0312856307657634e-04 +350 -8.0897841702380381e-03 3.4388552980184561e-02 2.2613160933256979e-02 +1642 -3.2577977983322690e-03 -4.1187082676103657e-03 -3.7516698985450405e-04 +1729 6.1632153885622159e-03 2.7241561960902037e-03 7.8684375155640938e-03 +2126 -1.2151714064690698e-02 9.0706729623139040e-03 -1.7192372501048839e-02 +1577 -1.4007854443933094e-02 -1.0010662248714346e-02 2.3881531167589100e-02 +1555 -2.7971018829463881e-03 4.0348291921058158e-03 -6.3241940733172386e-03 +2314 5.8992240315575211e-03 1.7230535902070254e-03 1.5254379783913843e-03 +2316 -1.1856364579079976e-02 9.9268799664342672e-03 3.5151308179421628e-03 +2339 -2.3009541734639011e-02 2.3170812415419500e-02 8.4670364360542160e-03 +1717 5.7545161016772477e-03 -4.8399476669078846e-03 1.3900306932827734e-03 +1718 -2.5155490539654985e-03 2.9495557810460898e-03 1.7937485106029105e-02 +2535 2.5933495224930610e-02 3.7587285389416880e-03 9.8742823122279152e-03 +2533 -5.5924279219118269e-03 -2.6666919805528417e-03 3.5491308207239126e-03 +1719 1.3281515669529319e-03 -9.6224473845851564e-03 4.2566747633789190e-02 +461 -1.9462733399319056e-02 -1.1937311592682743e-03 1.4438073458779770e-02 +880 1.6202019752395115e-03 -3.8412309245916001e-03 -1.0072701996289280e-03 +837 -1.9252685202326498e-02 -8.1063553407912659e-03 3.2394505970674654e-03 +1858 9.0011042731020651e-04 2.3461924325105712e-03 -3.3053221925081083e-03 +1846 -3.4582460658737087e-03 9.3263999820615312e-04 -2.2427776299394281e-04 +1847 2.9214664087014439e-03 1.4932567071714130e-02 -9.6743245650882485e-03 +1848 -2.7360175681713349e-03 8.6147103328772876e-03 -1.1302087329205884e-02 +2291 -2.6605871877827141e-03 4.4138649857467394e-03 5.3237626982369397e-03 +257 -2.1167864403673277e-02 2.2358705729425281e-03 -2.0817298304354886e-02 +1600 -4.0749546534046954e-03 -3.2914452722040493e-03 -7.0838875992131770e-03 +1408 -8.2828719146047936e-03 -1.0735486840729503e-03 -5.8903435360359866e-04 +2667 -1.4844329963153529e-02 -8.3075434872233699e-03 6.9436248648011714e-03 +1643 -1.3116033823711841e-03 9.4238914295293984e-03 1.4903962344460854e-02 +112 1.7208627555439647e-04 -2.6469244420673649e-05 9.2106058101868436e-04 +113 1.5923044567084980e-03 9.4652376397609556e-03 5.9141162371130112e-03 +114 -7.2532976976109409e-03 -2.4886003347910572e-02 -9.2042048625378004e-03 +460 -3.3209416931600038e-03 -2.9538218190224238e-03 -3.1166464304141486e-03 +258 2.6942834357103478e-02 3.8952284221222900e-03 -3.0865942729554410e-03 +256 1.2858984676719851e-03 4.3764041666590689e-03 5.0045917116111347e-03 +1602 -6.6821420336551970e-03 3.1866455692771599e-02 -2.1705500733340548e-03 +2274 2.0635440810869491e-02 1.0782029941465271e-02 1.3653244621478537e-02 +2273 1.9035432084021732e-02 4.7095403037266566e-03 -6.8474166488338220e-03 +2534 1.8568609218727872e-03 -1.1935455088940702e-03 2.3009502142260850e-02 +2723 -5.3155394619373532e-03 -1.5364552180998014e-02 -2.5782254009645022e-02 +2429 -2.5401462375148495e-02 8.7164130646154078e-03 -2.0084560497474108e-02 +2722 -3.9711828196128899e-03 -3.5096077866975102e-03 1.0664214980391225e-02 +2428 5.3279417483151920e-03 7.4369586747485075e-03 3.5269810568223097e-03 +2430 -2.5695547690921623e-03 -8.4733182730199249e-03 -5.9697117857432118e-03 +2724 -1.3341403600235018e-02 -1.8214736234076717e-03 -9.3034604191340377e-03 +212 4.7402490140049814e-03 -1.8835245186775793e-02 6.0585601232840429e-03 +2666 1.4321598725894827e-02 -2.9547463235453420e-02 1.9214248077265995e-03 +311 2.6719642739477332e-03 -1.5010802912732213e-02 7.5033819707199696e-03 +310 1.8757929911253600e-03 -3.0649262385815633e-03 -6.3153712082208513e-03 +312 -4.9594482672300757e-03 7.2236648722523427e-03 2.1277998839678478e-03 +2512 2.8615995714971598e-03 9.6484260620516241e-03 4.3313932349512470e-03 +1726 3.2557526811467685e-03 3.0303615698078360e-03 6.5681792861778795e-03 +2807 -1.0209179048467406e-02 -1.0542473028483232e-03 2.7881212323968063e-02 +2806 -2.0659956732365604e-04 2.5899526916358115e-03 4.5850795965196329e-03 +2808 1.4359400275840111e-02 -8.7909774109122540e-03 1.2252507325108376e-03 +1450 -3.6362450123263177e-03 7.6775858482572886e-04 -4.0825457152339579e-03 +2522 2.0867492547986845e-03 -1.1337138363229462e-02 -6.9694377013138483e-03 +1728 3.7652981116874741e-02 8.2754114704827689e-03 2.0818467335148583e-02 +2514 1.2831620070131836e-02 2.5353095614568673e-02 1.0364290837585954e-02 +597 -4.6124958908623937e-03 1.6274316145095568e-02 -4.3132647830369970e-03 +596 4.4657138275772034e-03 1.2322125076331408e-02 -1.4991334210370626e-02 +2531 -1.4916083772084318e-02 -5.9177508347181508e-03 -3.0270043845481054e-03 +2665 -3.5311305131473861e-03 -4.5503849504392995e-03 8.4858418816432266e-04 +1452 -2.0032261332491769e-02 -1.3177300446016284e-02 2.2735961836914606e-02 +595 -4.4084396900991524e-03 7.5668229828477433e-03 -3.0973504292022835e-03 +1906 -8.6653948959397892e-03 1.0848829235406317e-03 -3.6297297591585597e-03 +1907 1.6952277901192553e-02 1.4593135626814517e-02 -2.1266374133669448e-02 +1908 -1.0521613334837353e-02 -2.7146507925315160e-03 1.2166252048804817e-02 +2568 1.1260945518182972e-02 4.4342103836110145e-03 1.0245338438335781e-02 +2696 -2.1739981088608723e-02 4.2133452818836174e-03 5.2941460397915550e-03 +1870 3.0787906505172148e-03 6.3237224549699889e-04 -3.9252554954461918e-03 +1451 5.9529146905303596e-03 -3.4758309668157308e-03 3.4223465818162317e-02 +1807 -2.2028689340245753e-03 1.4778377701297569e-03 -2.1731050644294711e-03 +1809 1.2227447635051066e-02 -2.1859079099612717e-02 7.6903362379429293e-04 +1872 -1.6618549410523584e-02 1.6467876359083710e-02 8.1487100323690224e-03 +2513 -1.4760203303030623e-02 1.1344986476839163e-02 1.4307129156069999e-02 +2750 5.2194214189922221e-03 -1.5880174364188142e-04 -2.7846416013732511e-03 +2751 7.8222965565202581e-03 3.1769438007495858e-03 -2.5582607418204416e-02 +2548 7.2566208708694339e-03 -8.9054130482111015e-05 -5.4429175481304918e-03 +2549 -1.8660523001514705e-03 -7.1786628998580807e-05 -1.8412323588645352e-02 +704 -1.4442717149436386e-02 2.4087520297439335e-02 -1.1716963559490680e-03 +703 -6.8811283645828451e-03 -2.8439167320672971e-03 2.8400990947281563e-03 +2104 -1.9111227688370649e-03 -3.9813948687399698e-03 2.4110900184827005e-03 +2106 -5.6983412341213985e-03 3.8946203870920417e-03 -1.5653095407653764e-02 +1933 5.9797701372703927e-03 -4.4435458178703055e-03 2.2753867260753228e-04 +1935 8.4407887992514457e-03 9.4615711240335926e-03 1.0697614188848039e-02 +1934 8.7481729445598715e-03 1.3738160296325774e-02 1.1701539603530106e-02 +2105 -1.2292228652611939e-02 2.8495716449651133e-02 1.0183329984706419e-03 +2703 -2.7922608177286472e-02 1.2180476645146368e-02 1.0285308486536086e-02 +1977 -2.2765710658665228e-02 3.3212640359116226e-03 2.3738919380528720e-02 +2897 -1.0215795983551147e-02 1.2218559410032068e-02 1.1466549530877152e-02 +1214 1.5099282980285495e-02 -2.1919641254321706e-02 -9.0965026393692808e-03 +2701 -9.2343799856178040e-04 3.7180597994865908e-03 -3.5423827545514301e-04 +2898 -1.0929591331462861e-02 1.5096983584933553e-03 -1.9061768076544781e-02 +1215 -1.1820727478545701e-02 3.5947877002824064e-02 -5.8097941865867843e-03 +1213 4.5870629651888744e-03 -7.0282081473379979e-03 1.7318876090757749e-03 +1539 1.6993149736423480e-02 7.4493184002777874e-03 -1.0450835867709425e-02 +2212 2.8730572090647556e-03 -1.6789257749508164e-03 -8.3720297459441307e-03 +2695 -2.0096924902550435e-04 -3.1241134032147446e-03 2.6317797144038584e-03 +1806 -1.9375740939111027e-03 -7.0804889324131955e-03 -1.1907975201236222e-02 +1805 2.6289607957129733e-02 -1.0037100820420948e-03 -1.7843984049119965e-02 +2697 1.8049430525681790e-03 -8.3036699584831987e-03 -2.0341230246721735e-02 +2896 8.6888764495022062e-03 2.4159256078046584e-03 -8.4181045033604950e-04 +1804 -2.1361433714273915e-03 -4.2255159576024379e-05 -6.7796229287825013e-04 +2749 1.3724863345470904e-03 -4.0907655806422189e-03 4.3878804204077627e-03 +2702 1.7128518460931389e-02 2.1380199651985392e-02 1.3189687647901544e-03 +1976 -1.5718114842899894e-02 1.2716104106989175e-02 1.4182059792983970e-03 +1752 -1.0058942486917999e-02 -9.8639080364881730e-03 1.0967210480249364e-02 +1750 -3.3300654548443112e-03 2.2035109594392712e-03 -7.6234687681543179e-04 +2110 -9.8432853514743290e-04 -3.4206651391559995e-03 5.6511131771244628e-03 +2844 2.1803409363509239e-02 -8.5982983733458810e-03 -1.1140776017805588e-02 +1751 8.5371717606016022e-03 -1.7134830553343899e-02 -2.2797815769592108e-02 +1511 -6.0685315319953144e-03 -2.2315137257649933e-03 -1.4779673971983995e-02 +883 3.4830940815201517e-03 3.2050347048504057e-03 2.6408876028662181e-03 +2231 -2.6297931166342544e-02 3.8234170853961117e-04 1.3934494117820282e-02 +2294 -2.0263332204144970e-02 1.5640742225175017e-02 1.4897308031846320e-03 +2550 -8.4005115689421567e-03 3.0239966689176870e-03 6.1282975074042900e-03 +1404 1.1057300653846271e-02 -2.9893561978853334e-02 -1.8246261664589661e-02 +840 1.5208863601205557e-02 1.0458620647805915e-02 6.3675348618557311e-03 +2532 2.2290177401731757e-02 8.7357637144285186e-03 6.9025652187657983e-03 +1546 2.4451299061385360e-03 -4.6273988457249142e-03 4.8295525371394002e-04 +1921 -1.1256162066996984e-03 1.5919639921603498e-03 2.8043946181225874e-03 +555 1.5537481048285626e-02 -9.9265215555044937e-03 7.9694547287325196e-03 +2913 -7.5329529587697995e-03 -1.5280741958014238e-02 -6.6326864397219477e-03 +919 3.8526790351892182e-03 -4.0487970591562179e-03 5.0456814531953109e-04 +2317 -5.6323788995950687e-04 -1.0012542145731379e-03 -2.6670174573451212e-03 +650 1.8107872191990870e-03 -2.2394879175377545e-02 -5.4671257038948814e-03 +2103 -1.5667745089498281e-02 -4.5378205325091832e-03 -6.0241722445946583e-03 +735 9.1662727505154393e-03 -7.7539312995504083e-03 -4.0814291815298331e-05 +553 5.2697136215956349e-03 -2.5272053026822788e-03 1.0752611193459772e-03 +2319 -2.0694507894428037e-03 2.4121746751841311e-02 -8.8721652754561921e-03 +2318 -6.7772156461066548e-03 -2.3856096539389166e-02 -3.2959730447241781e-03 +2069 -1.2852048043782984e-02 1.7731325169701353e-02 4.1862597551735065e-03 +2419 -9.6818989023380701e-03 2.8835117267081121e-03 2.7259802895640748e-03 +2234 -1.1724773405985083e-02 -7.8968924236113049e-03 -3.2367681838718639e-02 +1910 2.1228707860859153e-03 1.9582743541653680e-02 1.5611584141568447e-02 +554 -1.8786454841880737e-03 -1.5621677303784165e-02 -3.9575911958831108e-03 +2101 6.6709636008879694e-04 6.6431495696890894e-03 5.9261179795122966e-04 +3000 1.7997421984771032e-02 2.1021242605273743e-02 -2.2996276879130820e-02 +2998 2.6831586215136627e-03 5.4512430788147799e-03 -3.0689365423809804e-03 +2799 -1.8961956702256241e-02 1.7232155526710164e-02 -5.1239417164792103e-04 +1920 5.6641983983105500e-03 -1.4889416429201446e-03 3.0746689576399113e-02 +2338 -1.1573006514173250e-03 -3.1663750927403997e-04 -1.6461048693563424e-03 +2196 1.9035117011193500e-03 -1.0692717340521667e-02 2.5596368193515844e-02 +2562 1.5095950071613508e-03 -2.6433960217113334e-02 2.4793961358974333e-02 +2086 5.8414274144507079e-03 2.9426324231129758e-03 -2.5233207868811283e-03 +920 1.3009230933417043e-02 -2.9299892191783260e-02 -4.9560283864803099e-03 +2102 -1.8042263069040106e-03 -5.0055239585904327e-04 1.3092593328045276e-02 +2088 3.9581676558257855e-03 -1.6923598163707143e-02 6.7633004343422903e-03 +2375 1.6362315182469323e-02 -1.4943395956439537e-02 1.9291372114144289e-02 +30 -7.8888150317413634e-03 -1.2664400000813834e-02 -3.5169196970374168e-03 +131 -5.9249825503164405e-03 2.4120361937025690e-02 -2.0057071923667260e-02 +722 2.1517318763168300e-02 2.5381578473905691e-02 2.4699845632912909e-03 +2071 5.4575071919587817e-03 5.0152655480952772e-03 -1.6478953281730523e-04 +1566 -3.2718879877749588e-02 1.2231898555658595e-02 2.8982840836591002e-03 +164 -3.9394089400017838e-02 -1.1558707283781720e-02 6.4885235270630750e-03 +165 -1.3886115484699910e-02 1.7972583300968289e-02 -3.3004464754429315e-02 +163 1.6108398067763807e-03 2.2533118566053544e-03 -2.5630408226250904e-03 +2073 7.5808364919918141e-03 1.0820956855111254e-02 -1.2201175427072976e-02 +1564 -1.0830944509238523e-02 -3.6041987198867898e-03 -9.0219698185139323e-04 +1565 5.0362441837360572e-03 8.8957699511256188e-03 -6.6965713626294231e-03 +28 -9.0753340873349457e-03 -7.4700682188243691e-03 6.4963391156673527e-03 +843 7.9478223813691032e-03 1.8735254599479948e-02 -3.6016189613991556e-02 +841 5.3735330670492195e-04 1.3969589986446748e-03 -5.1310075759716149e-03 +136 -8.9131489890136240e-05 -2.1365271568322885e-03 1.7144358840669071e-04 +29 -1.1213403922672399e-02 -9.2510848345780505e-03 -1.9173527167139527e-02 +138 2.3000659125496571e-02 1.6988675358897642e-02 -2.6485762300686277e-02 +161 -1.4613233746234650e-02 -6.0268933261258704e-03 5.5713486028942175e-03 +1543 1.8344770604726381e-03 1.6894838752752265e-03 -2.3845253050890024e-03 +1544 3.2399504291227205e-02 -9.7504021158415603e-03 -1.4813834134766585e-02 +2989 1.5505240305071233e-03 1.6936803324418745e-03 3.5690123064785551e-03 +132 9.2209751992998589e-03 3.1833704148364369e-03 1.6547476558486471e-02 +130 1.7784815451243525e-03 -5.6356602605632826e-03 6.5168024961194610e-03 +2460 -1.2047415864991249e-03 1.2021391560916823e-02 -2.4159685229181820e-03 +2458 4.9406110295443931e-03 -7.8590454631885498e-04 5.4490617992918417e-03 +2261 3.0234203617943260e-03 -6.3453412910371484e-03 7.9638888940786572e-03 +2990 -7.2736992996892628e-03 -1.6852290994129032e-02 1.4665894148717343e-02 +2836 -4.9361069408576748e-03 -1.0400482419069001e-04 -2.4341270315524180e-04 +2991 -1.1307028974129923e-02 -1.4456146368696651e-02 -7.6152051239335497e-04 +1785 9.4427120514188022e-03 -4.5354855105607149e-03 1.4981315199470581e-02 +2121 -8.3382536217985106e-03 -8.5994996934463126e-03 7.8003242069910605e-03 +2837 -2.4482745192254455e-03 -1.6290127348245743e-02 1.9675628517705712e-02 +937 6.2952404501763074e-03 3.1202127931753130e-03 1.4784547767100027e-03 +938 -3.7446926691783768e-03 5.4774178447006402e-03 -3.9900034277200816e-05 +2900 3.9004362872633205e-03 8.9441790426882488e-03 -2.5706856260809333e-02 +405 2.8430014555504489e-03 3.7061982316805081e-03 8.7652769969546445e-03 +2794 1.6628823999182772e-03 7.2812533620743762e-03 -2.6233964095021818e-03 +2407 3.4152075701433336e-03 7.0132676656583690e-04 1.0200766132809663e-03 +2408 3.1435095751767582e-02 2.4261252512901763e-02 1.3918662570788980e-02 +2409 8.3639658221492427e-04 1.5805664408105300e-02 -1.3000512039044490e-02 +1640 7.6339224503678702e-03 2.9857680956059929e-03 -1.0136058092688968e-03 +207 -1.4874489153986715e-02 -9.6450898001622168e-03 1.1873560450455114e-02 +551 3.1542742918371280e-02 -2.2027294531271040e-02 -8.7185576601298571e-03 +1028 -3.2712195905228937e-03 3.9109973823868048e-03 -6.4580443414454392e-03 +1573 4.8300682349628988e-03 -5.4964222363255676e-03 -3.3325760180670347e-03 +129 -2.0084648675973921e-03 1.0841945525950379e-02 -6.5768040548586882e-03 +1575 1.1591034518933646e-02 -7.1057721717581630e-03 2.6110136750241912e-03 +2423 1.0101305616305909e-02 -2.0116238523679060e-02 3.0976974172648879e-02 +2422 -3.0903122876678483e-03 -1.0281448356487073e-03 -9.7456711958692627e-04 +1233 -7.7947095729944309e-03 -7.6402373138326710e-03 6.9609580332242798e-03 +1533 4.2737616865266394e-03 -3.2403716844566035e-03 -5.7267802677358802e-03 +1531 -2.4154832924064571e-03 -6.0512577265367442e-04 -7.6414748307114420e-03 +2357 1.2012098590314086e-02 2.1926075968953487e-03 1.9633740406068894e-02 +2567 2.0177699203127519e-02 1.2552195477171017e-02 1.2065118394904119e-02 +1784 2.2782051798829552e-02 -5.0454538298949575e-03 2.6736991472441879e-02 +2923 -1.6071543685610556e-03 -3.3277178321955174e-03 -7.6776079341914182e-03 +2561 -4.1519212299501677e-03 7.6680099006480535e-03 1.5797677611959444e-02 +2560 6.0602612236376307e-04 -1.9729859542692420e-04 -2.2295700069021808e-03 +1869 3.7721172328955374e-02 5.1426503018432998e-03 -1.2668195577407104e-04 +206 1.5896659841461592e-02 -3.5110683435796056e-02 -1.3294931731789700e-03 +2181 -1.4308697915177708e-02 9.1449572904297885e-04 2.4589963268491822e-02 +2924 -2.9394879230629438e-02 8.6910319875979445e-03 -1.7283255649024904e-02 +2053 -1.1745757884818729e-03 9.9453550040239855e-03 2.6113492812992046e-03 +1644 5.6477082228054282e-03 -6.1812396309940277e-03 -1.8071199628801996e-02 +1027 -3.6383960032899529e-03 -6.4235675589380801e-04 -2.6930998732679263e-03 +278 9.6041799255018722e-03 -2.3328493341893679e-02 1.1284412344735059e-03 +1783 -5.2104678976793647e-03 -1.0571445435430166e-04 -6.5649300961877419e-03 +2230 -3.5053803248529065e-03 -1.5841359479993090e-03 1.2449965246747227e-03 +2018 1.9357141454021346e-03 1.3311234838983440e-02 1.0148743412462165e-02 +403 5.3017412489506912e-04 -5.8358829352821749e-05 -3.5183560815460425e-04 +1401 -3.1811637998628399e-03 -8.2147760238893471e-03 -7.0664176487885456e-03 +1754 -4.4442498591915180e-02 6.0928617729348591e-03 -1.9180268532785125e-02 +1665 9.7290852731623991e-03 2.3106540611018987e-02 1.2059760509069284e-02 +2925 -7.7901173934518050e-03 -1.0423157604671990e-03 2.2287828499783439e-02 +1753 -1.0833342832741557e-03 4.7137181953237186e-03 -4.5600988936635454e-03 +2017 9.4110828066296965e-03 -2.4475236569269777e-03 -3.7675359857248028e-03 +404 3.7140317257933264e-02 1.5649892218787296e-02 6.2085295647082515e-03 +1755 6.8736781785526530e-03 -1.7585275162237238e-02 -1.1942383453483502e-02 +2019 -2.1663823922696696e-02 -1.2035593116261324e-02 1.3929539064784337e-02 +1739 1.0149526436248212e-02 -8.5380396888881955e-03 7.8404552917313453e-03 +1738 -1.1661314522872835e-03 4.7739629025928022e-03 1.8767010588152306e-03 +2730 -6.2134941997334285e-03 3.5090146092753779e-02 2.3168507687216979e-02 +1740 -9.1586308841153877e-03 2.1811276392761643e-03 -3.7131938793520031e-02 +1210 5.1659753849312854e-03 -2.2783995787803474e-03 1.2132732580736514e-03 +2519 1.7355422127825374e-02 -2.8560155400939637e-04 8.4430161641603060e-05 +2518 3.9330807862905598e-03 7.9534896694422800e-04 3.1462228555174054e-03 +2520 -1.5186911254071140e-02 -1.2987038872947339e-02 4.0218539437589362e-03 +2728 -4.4453616643241097e-03 -3.1942130085661367e-04 1.8755343371686167e-03 +2672 -5.6196139459183097e-03 1.9737162408741137e-02 4.1250175202453008e-03 +616 2.7455830724633337e-03 -2.4850167872809280e-03 2.7225072052684346e-04 +1212 -1.2138187766707321e-04 7.3828790423787248e-03 -6.3377524437495565e-03 +1211 3.7779492994559063e-03 -4.2594720671932816e-03 -6.8258250122936268e-03 +1037 1.2116966942377957e-03 -1.7666835696849962e-02 -9.6149036219203251e-04 +1836 1.1384523300547039e-02 9.8748207657307300e-03 1.8998928566693332e-03 +2940 1.8746135951617275e-02 -5.8627464351306245e-03 -1.1917777695209981e-03 +842 -3.7735325919170631e-03 -3.2521056928028085e-02 3.6581526563388450e-02 +1516 -1.1610660084353872e-03 2.0498210797111950e-03 1.8513631763574078e-03 +1639 -3.6706248116976040e-03 -3.6029442100492014e-03 -3.5768825636367139e-04 +1038 -3.5096367820552539e-03 1.9624885776908352e-02 -1.5557843618529021e-02 +388 -2.7701268289876406e-03 -5.4886918553212066e-03 -1.2444930696785569e-03 +390 9.0515243794977059e-03 -1.4849103330037857e-02 -4.5424664941536731e-03 +2595 -6.8386010674429404e-05 -1.8286648641719205e-02 -5.9532267568416413e-03 +1036 6.9620202475954955e-03 5.4132473858320928e-04 -2.5532355483769593e-03 +617 1.8716755707666875e-02 1.1816478846631766e-02 5.7199130734964807e-03 +1735 3.3298765438177680e-03 -3.8889215767150850e-03 4.1144194846314290e-03 +1991 -1.2185464275719033e-02 -8.3951998920313228e-03 2.0093017595502662e-02 +899 -2.2650507860805759e-03 -1.5379431913570512e-02 3.0758582046436890e-03 +398 3.7600514232992661e-02 4.3888284093829841e-03 -1.6634035858762039e-02 +2680 2.8425687492108511e-03 6.2950611201743325e-03 -1.0735117686267056e-03 +2170 -5.7637747122016815e-03 2.3197170665661304e-03 5.4996247643109303e-03 +716 -2.9068794142239323e-02 1.2219326038146985e-02 -2.6692981091121431e-02 +2678 -2.2267141426064289e-02 1.3940249536897337e-02 2.8108814371012457e-03 +354 1.9140129732542862e-02 -1.5683909601058060e-02 -1.9507786658932588e-02 +352 -3.1677122964698409e-03 3.4021054304876776e-04 -4.1157793280933172e-03 +353 -2.0256104253916135e-02 2.3736970460626339e-03 1.6418219924369180e-02 +2172 9.1205857091998157e-03 7.2251654541474687e-05 1.6176882564902156e-02 +506 -3.3594942251033655e-02 -1.2695592511052085e-02 1.7175259580540136e-04 +397 -3.1193042175671975e-04 -3.3532174449622137e-03 -3.4642085917339542e-03 +2112 5.3643090244211268e-03 -2.1329418523753019e-02 1.7327147552251326e-02 +399 -1.1902980881212321e-02 -1.0878793439271501e-02 3.9828459207725028e-02 +669 -1.9276183617556519e-02 -1.5048505721762731e-02 -1.4785440880067332e-02 +1939 1.8108198342531667e-03 -5.5959605539273420e-03 4.3958482441292367e-03 +715 -2.9938057827469601e-03 6.7178097891573340e-03 -6.2206076642797731e-03 +1940 1.2141457680067001e-02 -1.8894845983307307e-02 6.7970913315875401e-04 +717 -2.7906165891788091e-02 1.0543945329745515e-02 3.3345258709098165e-02 +459 -6.2903537659005134e-03 1.7999776507745213e-02 -3.1022127744917288e-02 +1834 1.3690748047997239e-03 -3.4107217952347542e-03 1.4131071178317698e-03 +505 2.2382509804435421e-03 2.5846416049208590e-03 -3.0344849724000685e-03 +1835 -4.0043174337263454e-02 8.7817842550408321e-04 -2.9300507201178599e-03 +458 -4.4734675071637697e-02 -1.9674612340735888e-02 -2.4000398693196680e-02 +457 -2.2796989490676003e-03 1.8924111769149279e-03 -6.5970910127152154e-03 +1956 -3.6413677235447393e-03 -4.5561071179907485e-03 -3.3454610763077614e-03 +2729 3.8620149543148963e-02 2.1018154724547544e-02 -2.7432091263045532e-02 +1941 2.2416043730371579e-02 2.2343996322047011e-03 2.1756912905634116e-02 +2111 4.9414992796692056e-03 -1.6431015881874213e-02 -4.0526999191382836e-03 +2303 -2.2004843820389790e-02 -6.7538093284636004e-03 5.3713592212120569e-02 +882 2.3572509648733649e-02 1.8360547713232884e-02 -2.9283176407515033e-02 +185 -3.9956679477586039e-03 -1.9057966096117741e-02 -2.1065995653151998e-02 +2384 2.9347967860145343e-02 1.9614353758366343e-02 -1.3198282565495704e-02 +1068 -7.0437635826682511e-03 -6.8265507889423583e-03 1.8782207233307043e-02 +2987 3.2833613013699397e-03 1.3393560508977914e-02 -2.5932316494915602e-02 +346 -1.0675034228181367e-03 2.2309525037340176e-03 -1.5593077875231071e-03 +184 -1.4685795688060481e-03 1.4085750996359844e-03 -5.5788569646531840e-04 +2469 -1.0873688687631416e-02 1.9561283237076770e-02 -1.5524531972238834e-02 +921 1.1395200713296666e-02 -2.2209442516459422e-03 2.1170428150941899e-02 +730 -4.4027538205802502e-03 9.4121179689254843e-03 -1.1405281654662820e-02 +732 1.2674583712728451e-02 1.3702149753515245e-02 1.1875209000673292e-02 +2132 1.5785788414173801e-02 -1.3817054725451288e-02 -4.1510224055123224e-03 +2131 3.5739864748601294e-03 -6.6223260503462996e-03 1.1739777777375923e-04 +2133 -4.7878157172712141e-02 1.2724352721668115e-02 1.0002882266846317e-02 +640 -3.7291463035579657e-03 -5.8059994068198825e-03 -2.1391329658067875e-05 +2225 3.5815386732032398e-02 6.5807693901682070e-03 -3.5647842732745350e-03 +2226 -1.1058691540211408e-02 8.1692306610872938e-03 1.1826847751184982e-02 +2246 1.2818156041711789e-02 1.4543791371354271e-02 1.5778324966882147e-02 +160 -4.8017131375171062e-03 3.0215976484426702e-03 5.2027125006182551e-03 +162 7.4681006155597569e-03 -1.0092340659900230e-02 2.8050449083676940e-03 +731 1.0965009505754703e-02 -1.8437844041698154e-02 3.2742904751814295e-02 +2136 -1.4032796986455308e-02 -1.4952727738257843e-02 -1.3382905524892200e-02 +2135 1.5236825740949705e-02 -1.1468788793638567e-02 6.8878886038568525e-03 +2134 4.7655916319149080e-03 1.1645376097190915e-04 9.9015992301453928e-03 +2072 2.6764309055621435e-02 -5.0900020351781665e-04 2.6216056668003503e-04 +2122 2.1685696176679246e-03 5.0320723700489943e-03 -1.9491076113982929e-03 +2224 6.6673894826928335e-04 -3.2873138662852411e-03 -3.5966644572368520e-03 +2124 1.7682474825395839e-02 1.9985869033842280e-02 -1.2598128877541795e-02 +2247 1.4263935112386140e-02 1.9708184974664457e-02 1.7247421311387491e-02 +2912 -1.4644793447434386e-02 2.6790674158272819e-02 -2.5506547423118590e-02 +2911 6.5419226807884754e-03 -2.4592596878463538e-03 8.9308367175942752e-04 +2245 1.2837652681617535e-03 -1.1067143428011144e-04 -4.2716714634892039e-03 +2732 1.3278082519476202e-02 1.4038512260410198e-02 -1.1746554712993316e-02 +1405 -1.7332484835875443e-03 6.3484956999024234e-04 2.0805300884516155e-03 +1919 -1.1145162827385017e-02 -4.8995030044975676e-03 3.2000499907205221e-03 +137 -1.8457035021480953e-02 2.4740558872461487e-03 2.6132162331425863e-02 +2797 -6.0353431501712551e-03 3.7995451875699054e-03 3.6091761133408154e-04 +1407 -1.3528412389138940e-02 -4.5046969822894580e-03 -2.0113515090093275e-03 +2887 3.7927681134298195e-03 8.6874809541921856e-05 -3.9201958785005176e-03 +2356 2.1176628362084412e-03 -6.5399309189686991e-03 3.0451877523082101e-03 +1135 -4.9866340539714534e-03 -6.4914782444517186e-03 3.4327588863643289e-03 +45 1.2134881406333044e-02 -1.4234635099986296e-02 8.3444152544774660e-03 +652 4.2243997298040984e-03 -3.3673044605537056e-03 -2.3349001049946800e-03 +1605 1.4533638627107570e-02 4.3525290711177288e-03 7.4482998098801979e-03 +156 -3.8484315260107647e-03 -2.2972719349141385e-04 1.4758747416682125e-02 +2576 5.3989795529265578e-03 -2.4642596410026911e-02 -3.5836190403392299e-04 +1603 6.2613869520187944e-03 6.8395592047592879e-03 -4.8931210728238696e-03 +1604 2.9340247084356612e-03 -2.6388022249803769e-02 1.1887476433072636e-02 +768 2.3714391411303215e-02 1.4255991209591569e-02 -4.1371012462918721e-03 +959 1.2863759859012660e-02 -2.6536994027197006e-02 4.1156417401455800e-03 +154 1.6911292062153744e-03 -1.8813537755465426e-04 -5.2059496135707364e-03 +155 -1.7487980733800909e-02 1.8919754276603647e-02 -2.7622450579299802e-02 +746 -1.2113744626078773e-02 9.9940349086061406e-03 -3.3447031442869531e-03 +745 3.6573938778566759e-03 -6.3541314563948523e-03 2.6737918406442890e-03 +747 3.7697726985566368e-03 5.8152859369390644e-03 7.3427189432917588e-03 +2140 -5.6633372754166349e-03 -1.5267300340636820e-03 6.4091264639984128e-03 +760 2.2434386794132233e-04 -4.0213229011716442e-03 -8.9019275404380910e-04 +761 -3.0449083643482545e-03 -1.7098366199043258e-02 1.7147064812116676e-02 +766 2.0916297269843761e-03 -2.4536387316146614e-03 -9.8281475860832624e-03 +2142 9.4101109558861846e-04 -2.9858811808401095e-02 1.1724946703669362e-02 +104 -1.2418419952200034e-02 7.9726500206063824e-03 -4.9911269875267603e-03 +55 -1.0522687906050720e-02 -1.2569141512756880e-03 -8.3918351097787521e-04 +2243 -3.5582768684221315e-03 -8.4934020168792018e-03 5.6699555613431559e-03 +57 6.6277695089915723e-03 5.1243737088573276e-03 5.9927699842043779e-03 +1610 4.9257918876607770e-02 4.9013336291325281e-03 1.0608164332608050e-02 +231 9.9695960359793461e-04 1.1301645420350538e-02 -9.4819828132878346e-03 +2575 2.7127357161202646e-03 -8.1513826975279972e-04 3.2410217104500592e-03 +229 7.7329879597292013e-04 -4.6222919301992524e-03 -2.3146200973959510e-03 +2242 -9.0209504680812964e-04 -2.9644495934353344e-03 -1.0805260188336333e-04 +1709 -3.8351681837977998e-02 -1.6599117163871323e-02 4.7017992430791076e-03 +230 -5.7626755834298592e-03 -6.1639151925451168e-03 1.5583626773846816e-02 +1437 -1.0743575587489668e-02 -1.2433721852692462e-02 -3.0772492863519155e-03 +2257 -7.3923051284173922e-03 6.2129466490578617e-03 8.8138042098433404e-03 +2141 -7.2714095161625488e-03 -1.5760528592084821e-02 -1.1235368547268948e-02 +1506 -1.0506699682838105e-02 -2.3335193693751064e-02 9.3837101007653995e-03 +2341 -3.3973711213332023e-03 -2.6469407282303163e-03 3.9575128482247273e-03 +604 -1.4618855215027440e-03 9.6519536440830818e-04 -1.7403256211312203e-03 +1668 1.7534098958897976e-02 -2.0375414432622328e-02 -3.5567658716850525e-02 +2470 1.5166067364283942e-03 -3.5360231900087021e-04 -3.8691799030862732e-03 +1698 -2.4716897981972255e-02 2.0040933695462705e-02 -4.4016420927061969e-02 +2505 -2.9116640109102958e-02 -4.7896778046688081e-03 -3.7378447783959829e-04 +1790 -3.2663498515424689e-03 -2.2836893897796248e-02 4.7363937618604829e-03 +1667 -1.2397393924148379e-03 8.7475780146837444e-03 -2.8030869990337232e-02 +2471 -2.7565438599438188e-02 9.7041432388047990e-03 8.7473845145631234e-03 +828 1.9947448488083319e-03 -6.8957210341379395e-03 -6.4156092822722039e-03 +827 -3.8623636740730286e-02 1.8461898651451744e-02 -8.6738726154083484e-03 +2290 -6.8743771797648741e-03 3.3585021868094644e-03 5.7333108680167767e-04 +2292 -1.0247391191970948e-02 6.3247267489258893e-03 -8.6661508718487955e-03 +826 -1.6259266053172142e-04 5.7795317642876957e-03 2.7983104842814518e-03 +2462 -1.9535226761532219e-02 2.1432396927996014e-03 5.0515030983687998e-03 +2577 7.7628636619037272e-03 -1.0724734915149721e-02 3.6316583560726833e-03 +1676 -1.3848201572828117e-03 6.8678335102865390e-03 1.6832355997771262e-02 +2463 6.6382166475122285e-03 2.1937583965811785e-02 1.8098939862423390e-03 +2461 3.1351165997900153e-03 5.5833019491045299e-03 2.5059087986740317e-03 +1675 -1.2206279680512285e-03 8.7617394917172890e-04 3.0136098549809953e-03 +1677 1.0151600358794177e-02 -7.6988173294200157e-03 -3.9691012173108151e-02 +1612 9.0513054705847814e-04 -1.6527254344774775e-03 3.3638071891002033e-03 +1695 -1.8510371114438578e-02 2.2838039594160999e-02 2.4427167432636277e-02 +1613 -5.7144129536230222e-04 -1.7336150938800754e-02 3.6111042040202737e-03 +1614 -1.3568684576504228e-03 4.7030498831144105e-03 -6.4586016117114294e-03 +2504 -5.1041914530052029e-03 -4.0118094269264298e-03 -1.1805302243881878e-02 +1666 -5.6821603175807424e-03 -5.7312960776673286e-03 -2.7073000723184209e-03 +1789 -6.1966183272201191e-03 -9.0158556864047106e-03 2.5277502347839562e-03 +1102 -9.3731856460713518e-03 -2.6683181189153817e-03 -6.5300928823960030e-03 +1950 1.0749778363798921e-02 2.5156206969570525e-02 4.7200061250311925e-03 +201 -5.5877506423496698e-03 -7.3183832157075954e-03 -7.8683590493139940e-03 +213 -2.0583592449762912e-02 1.2296262575148265e-02 -2.5047805205362931e-02 +1697 1.0938907391590222e-02 -8.6394980337647000e-03 2.9639334834354663e-03 +1696 -4.3792800571055444e-03 -1.7141632661884832e-03 1.5489802887135684e-03 +2784 -9.0697713161321859e-04 2.3523399684660551e-02 -1.2528445923891034e-02 +200 9.7157463396414824e-03 1.2566495970827606e-02 -4.4833659820082486e-03 +2087 -2.8233884974944234e-02 -7.2997385790184305e-03 1.4401622047718403e-02 +2055 -4.2509666082394447e-04 -2.3769118180740163e-03 4.4980334078123813e-03 +2715 1.9914777175014618e-04 9.0075109820150386e-03 -1.5512577163363385e-02 +2530 -5.6430289705053874e-03 3.6299790487431886e-04 -4.0247076542163553e-03 +2713 5.3225301087822304e-03 2.3954189304616850e-03 -1.8410191681204270e-03 +1879 5.9511156079507495e-03 3.0374340839061788e-03 1.4507987049559793e-03 +198 -1.2883673962989155e-02 1.8301279262973959e-02 1.7957792200807454e-02 +383 -8.0509082160040990e-03 -1.3854591567546329e-02 -3.7409305579201003e-03 +2189 2.8352958405340836e-03 -5.8384839273534113e-03 -1.5664019872996607e-03 +1808 -8.1868402390121234e-03 1.2952619860399594e-02 -4.6513528556089449e-03 +412 8.1395974249253973e-04 -2.6285089615122161e-03 -4.8259275444473873e-04 +2188 -2.0474728968256353e-03 -7.9491866253731530e-04 9.7105931815255828e-03 +1794 -2.5929142026987709e-03 -3.4515531833495469e-02 2.0384919615728903e-02 +1691 -5.7679797532272170e-03 1.0285664890349336e-02 3.2624276822903253e-02 +2782 -2.9713747445793766e-03 4.0392564382160578e-03 2.5424228209583871e-03 +2714 1.3162898367440385e-02 -2.3845833302694623e-02 -1.8649128633478351e-02 +1867 -1.2690703203978467e-03 -4.0337839207295571e-05 4.4162070041811000e-03 +1860 -1.1629029928946632e-02 1.6458239920733920e-03 8.4931432119890807e-03 +1801 -4.5092081849371392e-03 -4.1780540791761999e-03 -4.5400892942719919e-03 +24 -3.0528175028562195e-03 -1.2601006977839502e-02 7.9175723483061993e-03 +23 1.0322321668748942e-02 -1.3016134063886218e-02 1.1963795978769634e-02 +22 -4.8283801949171415e-04 -3.2961476063603414e-03 -7.1707509685538110e-03 +2424 -3.0785050109302377e-02 1.6834518663765400e-02 -1.1826037925293473e-04 +1802 1.7725905896879935e-02 2.6327999745917957e-02 1.4257996201051044e-04 +1822 1.0642637167108820e-03 -4.8635750798811496e-03 5.4142069376117890e-03 +2566 -4.9039853111489213e-03 6.6505586608717818e-03 4.8408337206681945e-03 +1824 -1.8419504999049197e-03 -1.6950474017990661e-02 2.4453397583782182e-03 +1823 2.2414432907140848e-03 9.6726536834012364e-03 2.1963969295600794e-02 +413 -1.9446555245839426e-02 -8.3931225556562947e-03 -2.9994335093197325e-02 +1132 -6.4231979489460904e-03 -1.2789644880300622e-03 1.5162006609432924e-03 +1023 -1.1371876598377453e-02 8.2323556745618233e-03 -8.6430178641100190e-03 +1803 3.5589401976787020e-03 -3.6918127513925086e-03 -2.0227238762938561e-02 +1881 2.6996868816300968e-03 2.1220639135135499e-02 -1.9663830483979936e-02 +2783 -2.0659813761485343e-03 -9.1850109546643740e-03 6.3097144259986306e-03 +1021 8.0495570495012127e-03 2.6405831415153421e-03 3.5114314928829664e-03 +1134 2.4704526457354114e-02 6.7391480234321897e-03 -3.6991652705936021e-03 +1793 1.5646358722173979e-02 -2.0323593962404487e-02 2.3685605459774398e-02 +2796 1.0530607265388126e-02 -6.9568487050462782e-04 1.7187357813409051e-03 +1792 -8.5156430255584545e-03 4.4975161373297596e-03 9.8732300784366302e-04 +1880 -2.4665163486097059e-02 1.8598590365859115e-02 -5.4435251562495379e-03 +2061 1.1104378017164799e-02 -5.0029443467034208e-03 9.1289062965620206e-03 +839 -9.7962538498782715e-03 3.8261384400303196e-02 -1.2060633925059544e-03 +1308 1.3446744836091486e-02 -1.3000976720137510e-02 1.7425777977158701e-02 +414 -1.1533919250301707e-03 7.5801834950157722e-03 -1.6546046545037361e-02 +838 1.5487062475024853e-03 -4.5245731796761937e-03 7.4723825533203189e-03 +2040 4.2917151988277509e-03 2.4310769414829615e-02 -3.5027349765413981e-03 +408 -1.1038427022423736e-02 -3.2029572918294114e-02 4.0411356794996509e-02 +1319 -9.3809881812624094e-03 -1.6648917073407706e-02 -1.4799881360626684e-02 +1725 -4.1005122136254330e-03 -8.7187475419758000e-03 2.5953487643546637e-02 +1723 2.3742354562648308e-03 -3.4140432859399382e-03 -3.2500885166406052e-03 +2039 4.0744135505927183e-02 -2.8860920944403239e-03 -1.9283381149105407e-02 +1975 4.4314107434413402e-04 9.0494859608398635e-04 -5.3359425957688091e-04 +1133 -3.6635613643584497e-03 -1.7602086357102580e-02 -2.9239100326179084e-03 +251 -1.9202843097925457e-02 3.5561468758371628e-02 -1.0664619292028478e-02 +2013 -2.2099135064385534e-02 -2.1918173585781585e-03 6.8469115394924340e-03 +2221 -8.1447124187373500e-05 -4.0069348762539767e-03 -4.6643295571277563e-03 +2038 2.4701210841305563e-03 -4.1466965112934391e-03 4.3803492383791033e-03 +1918 -3.3429548881031275e-03 -3.6760150489460795e-04 -5.5719372838355418e-03 +2015 -5.0480925905297697e-03 -1.4576090735668698e-02 1.2150190424314191e-02 +2016 1.1880344484180830e-02 2.6567061494506827e-02 -1.7522071429886078e-02 +2014 5.5844062468488943e-04 1.8638775616939050e-03 -2.5724945788433589e-03 +1724 -2.6804795501001412e-03 2.5387840747768013e-02 -6.4824278527358687e-03 +2615 1.7147902640343819e-02 3.9161330325291968e-03 -7.7794110740749744e-03 +2616 4.3045241576987253e-03 1.1965225218082283e-02 1.0446667984160902e-02 +2614 -2.4183934434233246e-03 -3.0424809187724580e-03 -5.8095539095612070e-03 +250 -4.6760035523120526e-03 1.7242196691829045e-03 2.8284394303661753e-03 +2223 1.0239333852895259e-02 -2.1691671436795826e-03 1.1588135654299116e-02 +1938 -1.8807012154106934e-03 -1.0123441419652020e-02 -3.5233492865543295e-02 +2975 -2.8709686371426921e-03 -1.5208499469252221e-02 2.5417263933890533e-02 +2974 4.0901319881509243e-03 1.1577320432206047e-03 -1.7803600346072907e-03 +1936 -7.6364574367069065e-04 2.6574465513740901e-05 -7.9073752640545260e-03 +2208 -9.3322179470148852e-03 -9.6868799607093704e-03 -7.2842640075943760e-03 +1944 1.6335903835748546e-02 2.3457947684116139e-02 -2.2510285917337509e-02 +2222 -6.6357599179091504e-04 2.6356857437487849e-04 9.3616263852702424e-03 +2767 5.1288963797722848e-03 1.3622144296355124e-04 -7.4991239083403837e-03 +371 8.9363272335568622e-03 -2.5916879523191221e-03 5.8489020903671404e-03 +2268 1.6221502448823501e-02 -2.2584697393539098e-02 1.8612544807187349e-03 +1232 -1.9786800754746887e-02 7.3743062960923093e-04 -1.5291245918993241e-02 +1505 -3.9074784886647569e-04 1.2688301389030073e-02 -1.5875633702534996e-02 +2272 -1.1337277638205382e-03 -7.3431990534654793e-04 5.6812197824508931e-04 +1402 -3.0859097179142081e-03 4.4188057961232286e-03 -8.4155563328804984e-04 +642 2.8438306416816318e-03 2.1628429923926835e-02 1.2243243257486176e-02 +406 -2.3600128926649011e-03 -1.9260588099236186e-03 5.4509224408659605e-03 +2258 1.3696378534644347e-03 3.1719070701109317e-03 8.4260033480044357e-03 +1431 -6.0832345820218507e-03 1.5811076815276617e-02 6.9228127455048952e-03 +2976 7.8156437728838575e-04 3.7834743052758413e-03 -2.3586263197319791e-03 +2100 -4.1669630138620401e-03 1.3744704469731493e-02 -2.2864392335494080e-03 +2999 5.1216539052048289e-03 -3.9988585443113340e-03 3.7183884461688258e-03 +1220 4.7665084588303958e-02 -4.2717281223569046e-04 1.7716695488071046e-02 +881 -2.4510515474745587e-02 1.2085070491427900e-02 -1.6121712360848320e-02 +2120 7.4080042842941630e-03 1.2993185509750420e-02 6.7247884003297084e-03 +2098 5.0326514423403878e-05 -1.3121566231188860e-03 1.0043186843672718e-04 +1943 -6.4437273826040815e-04 6.7354959079545139e-03 -1.2287223663060612e-02 +2910 9.6472482795865611e-03 1.2477411279301607e-02 -2.8890691871943090e-02 +2908 3.0143316845454089e-03 -1.3954165762785095e-03 4.6554502039087790e-03 +1942 4.2204812533564902e-03 -5.1765374174126680e-03 -5.5413681537382293e-04 +2420 -5.5303158767172816e-02 4.7976680142489594e-03 2.5583634399066170e-02 +1504 7.1854503106156724e-03 6.9680683256789788e-04 2.8016523375910140e-04 +2168 -6.4381863005706641e-03 1.1172638220073334e-03 -1.0156034870359352e-02 +1306 4.2083879967255971e-03 -1.6907254040605640e-03 -6.0797409502951838e-03 +2868 -2.4440238575460638e-04 -1.0968918403450980e-02 -1.0123696886358289e-02 +2798 -8.5922103717945834e-05 4.3844106471119526e-03 1.9386142015573156e-02 +2167 1.0349561925549857e-03 2.3605234374770197e-03 1.1417525755199581e-04 +2909 2.5231942067955033e-03 7.2402934604104113e-03 1.5898920676856748e-02 +2889 -1.4301592109895013e-02 1.5032827753190564e-02 -4.4374534220664209e-03 +2733 -7.4113268688236738e-03 -1.7887934171684491e-02 -1.9362351639065304e-02 +2731 -4.8949906382751594e-03 1.6602119148040088e-03 -3.9606202655306484e-04 +671 -5.0369798282363411e-03 1.5313522869718994e-02 -3.5798714954169042e-03 +1403 2.2856752103675541e-02 -1.1495396730240099e-02 -2.0973827046560506e-02 +670 -1.9795846014516658e-03 -3.9986391999116411e-03 -2.3782322339492568e-03 +1221 1.3810085087202132e-02 2.6163938634605178e-03 -1.0922472751444921e-02 +1219 -2.8439501366017222e-03 -3.9126968891058170e-03 -1.4985514537218293e-03 +672 1.2747673423864823e-02 6.4480658237561338e-03 -1.3089401530081113e-02 +1435 2.9355092840236421e-03 9.2897169799663185e-04 1.1791921233193144e-04 +2059 -6.1595905187179622e-03 6.6989335903169817e-03 4.6190675794438134e-03 +1542 -1.2982389125210875e-02 8.0471599105017885e-03 1.6507068577454972e-02 +1540 -4.5223709239779241e-03 1.1057192183746545e-03 1.2120424465533023e-03 +39 1.5738101927388032e-02 8.1902618358887895e-03 1.6804601807858567e-03 +37 -8.5179842202353327e-03 -8.7630925205045497e-04 3.2293933747191018e-04 +38 7.5196406974598617e-03 -9.9631017329298369e-03 6.5984627941094564e-03 +2169 1.9471706151074571e-02 4.8903323210066543e-03 -1.4119219102571776e-02 +2267 7.8375222314070354e-03 -1.9107081606364974e-02 -1.4620400462593082e-02 +72 -6.3236635455994122e-03 7.6285218061949702e-03 4.3559438015236280e-03 +2864 -7.9658793204152208e-03 -7.0959974415113827e-03 -1.4970433559907702e-02 +2359 -3.3881726201940524e-03 4.6253978780186307e-03 -9.8424320050789294e-04 +462 7.3994705992826981e-03 9.1243366610505184e-03 1.6765143943179208e-02 +2362 4.2700597198740671e-03 2.3814332116677403e-03 -4.9843148624457391e-03 +1592 -1.5120479133169981e-02 4.8642681404021719e-02 1.1114435859441385e-02 +2941 4.8191937976723052e-03 -3.7422526330192604e-03 -4.0885221512468352e-03 +1591 -1.3803563221473512e-03 9.7104259447600052e-04 -4.4562416150882339e-04 +2396 6.8291034255025607e-03 -1.2682934324317770e-03 2.9029064517515499e-02 +2298 6.9910871996887647e-03 -4.7538341168383352e-03 2.2424658681156239e-02 +2284 -3.0327521257668094e-03 -9.1851653751053318e-05 2.4739416616834082e-04 +906 6.8628125909922502e-03 1.4065320464260418e-02 1.8543979538907449e-02 +1593 -4.6851311655746589e-02 1.5060668298635274e-02 -1.4579683030487215e-02 +2286 -3.6334447653499874e-03 -9.4754093509682984e-03 -1.6336729553965961e-02 +1588 1.5073109362037833e-03 -3.2477817942659251e-03 4.3653415884781368e-04 +1541 2.4298093626785731e-02 -2.7734967552036256e-02 3.8590298473223528e-03 +1590 2.7940564699003662e-02 -3.1604721254382424e-03 -8.5002006853526671e-04 +939 2.5495389571697953e-02 -2.6479674031499947e-02 1.3704294921133328e-02 +590 1.1282071248747461e-02 -2.2370631911156381e-02 2.1654472583791634e-02 +589 2.6683242553272074e-03 -4.0678187533449173e-04 7.6692646049059262e-04 +591 1.0733946610397130e-02 3.2675751911128118e-03 -7.9857263064817066e-03 +2209 -4.6928775058124369e-03 -2.2901531485887685e-03 -4.9622648286266032e-03 +2210 6.5679906266507661e-03 4.7829078114411672e-03 3.5863513678133147e-03 +2342 -1.3677158222707359e-03 2.1232822567035896e-02 2.8858946052333161e-03 +2211 3.2872613017315151e-02 -1.8916361077159365e-02 -2.1798986161719745e-02 +2943 2.9032009227341206e-02 -2.1009237742058089e-02 4.9744219060057935e-03 +2296 2.0137034697760483e-03 -3.3037359070453953e-03 -2.2307112489812326e-03 +2285 9.7687965409130467e-03 -1.0040806466386876e-02 9.5287345532497070e-03 +2936 -2.8109968883573092e-03 -3.4438265472009387e-03 -8.5022691777107695e-03 +1589 -2.0867022767077768e-02 1.2257675071626308e-02 2.8730259591851014e-02 +1715 -1.9692132645370668e-02 5.6441592423932506e-03 7.3313244158272521e-03 +2179 8.3483066353043649e-04 1.2288897634239366e-03 -3.1034052758463502e-03 +1430 -1.4294260964278604e-02 1.1281314989803682e-02 4.1605503088926729e-02 +2099 -6.6663828029743469e-03 -3.1729754465624316e-02 2.0039320778120130e-02 +2400 -5.3691983097487149e-03 2.6783312566526986e-03 1.5049794556075875e-03 +51 1.6210207635344625e-02 -7.6982815804511884e-03 2.1637759011294323e-02 +49 2.0071771102193356e-03 3.4391761491868126e-03 9.1157961172441920e-04 +50 -2.0835303293600040e-02 -9.7457718287784056e-03 5.3869829935947302e-03 +1223 2.7582296303949198e-02 3.0494384015355949e-02 6.4164964492068434e-04 +1222 -9.7276526282063791e-03 7.2964460184667080e-04 -4.1989137962427855e-03 +2613 -3.0732528273503049e-02 -1.1750109681592576e-03 3.2695302434140074e-02 +2399 -1.1095239952326594e-02 1.0132721651592201e-02 -2.3375842650394160e-02 +2421 -1.6266336146164258e-03 8.3190576111383096e-03 1.2236832491092622e-03 +2398 -5.6113237283608539e-03 2.1209063719527044e-03 -4.2978293822713131e-03 +1568 -1.9407904695142197e-02 6.8601797425234413e-03 5.3665300732763871e-04 +1601 1.9194133420215698e-02 -1.3934063057499096e-03 -1.1681388425715882e-02 +2233 1.3841730682003792e-03 3.7469528963750289e-03 -4.9050311371802253e-03 +2235 -1.4584718122489812e-02 -1.5918836936040584e-02 1.7590495169557258e-02 +205 4.7877887886617343e-03 -1.0759635601429109e-04 2.5836435704723109e-03 +807 4.2544234998647176e-03 -2.0002052101005747e-03 1.2521583553219391e-02 +1567 8.0373093813789660e-03 -4.6199657375812055e-03 -4.0424688542938669e-04 +1569 2.0359470478676860e-02 1.5510316404469770e-02 8.3050927338546212e-03 +2589 -1.7911460185190100e-02 1.0304864428308991e-02 -1.1357266184000181e-02 +1963 1.4480654660565593e-03 2.4557203830544911e-03 2.1141692799189478e-03 +2588 -9.5587820145652501e-03 -1.9983142154935834e-02 1.7080631042797615e-02 +2587 -4.8145946480311914e-03 8.2703488459501245e-03 -2.9573293684954762e-03 +1616 1.6572445278677531e-02 9.5833482399368952e-03 1.4603418073024061e-02 +2180 -2.5637235227932351e-02 -3.7993525020169859e-03 -2.5161892237713049e-02 +1615 -1.5588851650490240e-03 -8.1606391073429548e-03 -1.4899662253485229e-03 +1617 6.0838990883278392e-03 -1.0891635095636724e-02 -2.4189603404726149e-02 +243 1.7202916180877336e-02 -3.7065563910162547e-03 1.3935894398946606e-02 +241 -7.3923989563266660e-03 4.8634846659390552e-03 2.0293746909674359e-04 +242 7.4794887235027719e-03 4.3935913579066187e-04 4.4384810401090526e-03 +845 1.1601809056087846e-02 -1.8333478178195906e-02 2.8958514748966820e-02 +846 1.4942096427558381e-02 -1.6402047462416414e-02 -1.0772821086127607e-02 +844 -3.3707899283621995e-03 -2.2709617178389065e-03 4.2873540952536861e-04 +2775 -1.3481841212063427e-02 3.9399472178658435e-03 1.4080302832367667e-02 +1965 -2.7237718497109117e-03 4.5306077728639680e-03 -6.5732057394165986e-03 +1251 1.5737480232460885e-02 5.8970339193080588e-03 -1.0406862892049375e-02 +1429 -3.7909206060247210e-03 -1.2912553888965665e-03 -1.1945654350063398e-03 +1320 -8.8567023544534433e-03 3.7556328844523403e-02 2.1720800402250745e-02 +2611 4.9983116273621614e-03 -2.8787155104028701e-03 3.1473531504667925e-03 +1031 1.4802718577255340e-02 -9.9174247276489027e-04 -5.1288363962714448e-03 +1030 3.8766339780571931e-04 2.9363166690937800e-03 -7.1722528394949671e-03 +1032 -7.0106164244404766e-03 4.9808924507606378e-03 -1.4145911334290892e-02 +70 -7.3933139490376925e-03 -2.9188458286266237e-03 2.1189053218005123e-04 +1224 -1.0378869091231313e-02 7.2202918802744057e-03 9.7444575504754358e-03 +1584 8.6333808853172201e-03 1.9500291032530150e-05 5.6116986150951424e-03 +1690 -2.5283550066744365e-03 6.8263758779278769e-04 3.1345373641479958e-03 +254 3.3334963323692493e-03 1.0897307982863175e-02 -1.3530055708345005e-02 +1318 -2.8228969078819420e-03 1.0841593502202258e-03 9.5907517275569093e-04 +2067 -1.0939016350668096e-02 -5.0862337481093513e-03 8.9237826280688954e-03 +1249 -3.8185961642647022e-03 9.4623858412995628e-04 -4.8740251158962394e-03 +924 6.3461700681429478e-03 3.2306928815185224e-02 9.8727293007461712e-03 +1067 1.6722404108405545e-02 1.6611455875485695e-02 -1.8703190729472439e-02 +943 -1.5886575873565929e-03 8.1820260809128639e-04 -5.3054171921564182e-03 +944 -1.9547501354170101e-02 5.0996506708657473e-03 -1.3173268211278129e-02 +1066 1.0355623298513566e-03 2.4833865284648103e-03 3.9156882056731960e-03 +2927 -6.1667384063857512e-03 -6.0329219269496361e-03 1.6852018505552527e-02 +2594 4.1647558896521861e-03 1.2967189466332718e-02 -7.7908184213895011e-03 +2254 2.2945002174379838e-04 -2.4704266436254285e-03 4.9907696804409145e-03 +2256 -3.6960029903167465e-03 1.1621538343152233e-02 6.9599851455445306e-03 +1250 -1.2723374972933356e-02 4.9024080721671012e-02 -2.5336064976252123e-02 +2712 -2.5208618887422977e-02 -1.0329835661954993e-02 -3.8560261438447805e-03 +389 -9.0351252929883330e-03 1.0364094873835657e-02 2.2733568626080225e-02 +2926 -2.3766559256518612e-04 -3.1476587958176728e-03 6.6403623283818481e-03 +321 -3.3989448993621579e-02 -1.6243779483664064e-02 -1.5025169223672818e-02 +2593 3.0529657246262162e-03 6.0812445380532794e-03 -5.0189631335764828e-03 +2540 2.9715051682498168e-02 -4.4544904632389986e-03 2.3048291835516162e-02 +2539 1.5623090716851752e-03 4.3572216891756737e-03 1.7505647821347518e-04 +2541 8.5548149199125910e-04 8.8491928069255928e-03 1.4256155292555634e-02 +1765 -7.2726595657974782e-03 -7.7069227258923592e-04 7.2682730392435238e-03 +1868 7.0346406783156441e-03 -9.3909093893672774e-03 2.7693133473129270e-02 +2710 6.5295631462714996e-04 1.6312784303150341e-04 4.6489871430511472e-04 +2711 1.3707427456454526e-02 8.8436493290767609e-03 -3.4098047893246965e-03 +2255 4.9248778394765770e-03 -8.1741945236335576e-03 2.3462537114712781e-04 +1831 6.5856363312372691e-03 2.1538145063451294e-03 -8.3689131051730141e-04 +2928 -1.4754710249004080e-02 -1.0113629075504692e-02 1.8891753841098036e-02 +1252 6.6834848773954705e-03 7.2782794145453784e-03 -1.7493549377463546e-03 +273 9.1329505578506478e-04 1.9305426216985524e-02 -5.9195620968759879e-03 +2677 -2.7132919798366914e-03 2.4895300510643867e-05 2.1885964202159767e-03 +1954 3.4417455443246640e-04 -1.3849142450462278e-03 -4.4051519669404005e-03 +1955 1.3332978747911915e-03 2.7828819355608214e-02 -4.9881468063603584e-03 +767 4.0586889539880469e-03 3.8031077065155943e-03 -2.3854111172788562e-02 +1326 1.7937028943106031e-02 3.2465131740505609e-02 -4.0106443964153846e-02 +2769 4.9030752975042727e-03 -9.8194578189590223e-03 -3.2145998265856096e-02 +2050 3.0982517614910900e-03 -1.4060026060001586e-03 -7.3346492303351515e-03 +26 -1.8706719704874183e-02 -5.4740535199799992e-04 2.3794605466595821e-02 +2052 6.9874336867191203e-03 -8.9194382323126310e-03 7.5168585634706568e-03 +372 -1.3218197825168939e-02 -2.9062241385835580e-03 2.1387923244420510e-03 +2777 -8.1914508658104609e-03 1.2536083023343008e-02 -4.8067600929551013e-03 +2051 1.2526625606481413e-02 2.3053132332434743e-02 2.3310371328004620e-02 +1203 -5.8338980875518700e-03 -2.1937218689556150e-02 1.5880194904529986e-02 +2717 -1.5804711128559346e-02 -9.5763092644165406e-03 -2.2422739501477405e-02 +2716 1.4257190316896786e-02 -5.9770110273469389e-03 1.8922980669384777e-03 +1202 1.8972644292490182e-02 1.3869755056087077e-02 5.5865590493047708e-03 +2554 -3.3302193833783974e-04 3.1611571102607494e-04 -4.5879438224738257e-03 +2555 2.6821414049382303e-04 2.0872376193435240e-04 2.5380547540987241e-02 +1459 2.2519852260230845e-03 1.9989317015003936e-03 -5.0678269817322746e-03 +2207 -4.1298873772993207e-03 -1.3480137708692600e-03 7.6502655080772320e-03 +1461 1.9965810921035859e-02 1.9764457802453891e-02 2.1966102193841819e-02 +1460 1.0030284677700268e-02 1.3483635004924620e-02 -2.4168286547948670e-02 +1355 -1.7836174913806648e-02 2.9588811939423292e-02 -2.5534279456955897e-02 +1354 9.1063854716533666e-04 6.3488771949454376e-03 1.0934385718904202e-03 +1201 -1.2289267822981518e-03 -4.7116940952623646e-03 1.1527501739660260e-03 +1833 1.3276317005277252e-02 -5.1745405411054548e-03 3.7276687491668960e-03 +1832 -9.6875144460371078e-03 -5.6809468133738770e-03 9.5392524988357121e-03 +2556 -7.2361580747197620e-03 1.1891167658283573e-02 8.9401770491841503e-03 +2718 1.8084916912451520e-02 -9.7817280668905781e-03 8.5761315084779150e-03 +1937 -3.1638193958134352e-02 -1.6912297248460557e-02 -1.6314433931520513e-02 +2206 -9.6249517397468281e-04 -4.0036532358196427e-03 9.5079507410193091e-04 +2743 4.6398690479312410e-03 -6.3036553611458138e-03 -1.9067378444598225e-03 +2744 -7.6546438706489150e-03 -3.1273921411635623e-03 2.0848927176879150e-02 +2032 -4.5917458295615917e-03 3.7183916213613184e-03 -3.6232186232028878e-03 +2033 -2.5823371185302490e-02 2.8923504622174311e-02 3.4143584150347983e-03 +2034 5.3787532086518770e-03 1.9279771268806501e-03 -2.1831862467478352e-02 +370 -2.0628912701145755e-03 1.5140330640882797e-03 -1.2067178557805904e-03 +1324 -6.1071565409711445e-03 -3.1419856473084767e-03 -6.2120697934877718e-03 +1325 -2.6522170515609806e-02 -8.1895353176063071e-03 -1.7262037174691595e-02 +668 5.3849397167881974e-03 1.0099838810359828e-02 1.8151840861573849e-03 +1356 -1.0070372632112412e-02 -8.4620272835764015e-04 7.3508167528192640e-03 +1518 -7.0280349588918460e-03 -4.8578209707831280e-03 1.3643436774321033e-02 +805 3.7258025838807387e-03 5.8807609379900082e-03 4.2164818854332174e-03 +2054 -4.1588330027976066e-03 3.3339184078888022e-02 -1.3451054671282653e-02 +2397 -9.7959078180913789e-03 5.5224970300085177e-03 -6.0631014999098275e-03 +2383 -6.7546199622095463e-03 1.1622032227672390e-03 -5.1117584209004596e-03 +2214 -1.0785624623550767e-02 -7.5675040765243885e-03 -6.3216035005772666e-03 +439 -2.5111688087002910e-03 -2.6566064291321167e-03 -4.1449525005807881e-03 +2343 -1.0613322608508292e-02 2.2474320055321833e-02 1.7822862673589235e-02 +440 -5.6150021214155868e-03 -6.7380229202081750e-03 -3.5304505108827794e-04 +211 3.7645409148418340e-03 -1.1790672772464142e-03 2.0996475373073358e-03 +2745 -3.6187789746942395e-02 -4.5212294300417670e-02 2.5573608565128608e-02 +1517 -1.3525925366305626e-02 -1.6748737861579103e-02 -7.3540116488059444e-03 +2266 -7.1253473613380736e-04 -4.3462541534625655e-03 -1.9777106746614900e-03 +1231 -2.9571628715545973e-03 2.1989158215762741e-03 -1.5658860199653025e-03 +2364 -2.6834131206687523e-03 -7.9673461009032425e-03 -5.2616790683532371e-03 +17 -9.5591817366871938e-03 7.9233291491983895e-03 1.1997162979784957e-02 +441 -9.9040436100006225e-03 3.8306343877538805e-02 9.7108159268540321e-03 +1022 2.0216139712836634e-02 5.2843665652448097e-03 -9.6317128273891387e-03 +2899 3.1332772238514316e-03 1.2735286356204776e-03 5.6966773588913401e-03 +1859 2.3271870975665382e-02 1.0014692045177643e-02 4.6288360797729069e-03 +2262 5.3516781888330641e-03 -2.8357833926641570e-03 -1.1451094224629721e-02 +2395 -4.1714266232030809e-03 -9.0103072233161993e-03 -2.6618138728063895e-03 +186 -1.7611435516436340e-02 5.9628815689112512e-03 -3.3874862081581343e-03 +2472 2.1360242899358239e-02 6.7630766827202673e-03 3.6154772208828637e-02 +801 -1.7876090441299314e-02 -5.3110600808164874e-03 -1.4469269151283019e-02 +1406 -2.3870926856489175e-02 1.0698452968011514e-02 1.2242787732348274e-02 +2776 1.4013468698905783e-03 -5.7155866950095125e-03 -1.1850139003257180e-03 +984 9.0539219252344962e-03 -1.0217357956621636e-02 -1.8906564560272000e-02 +549 6.0599331385089135e-03 -8.5387450965941775e-03 9.8439300042527482e-03 +1409 -1.7141866971176506e-02 1.1772117056458480e-03 2.0821447278434695e-02 +407 6.9557739412280661e-03 -6.3363254499059669e-03 2.6772530723031002e-03 +1436 -1.0509651141095184e-02 1.0836805474933594e-02 -9.3913046925437858e-03 +2315 -1.5389130579561013e-02 8.9740003670197924e-03 3.0436857179600856e-02 +272 1.1216214713460662e-02 -8.8499297974021784e-03 -6.4359460879691559e-03 +998 3.4633071107197787e-02 5.8363500401187093e-03 -2.0651456582609206e-02 +641 1.3703177710646693e-02 7.6645668747920932e-03 2.5848971139729868e-02 +2213 -3.8019071035761721e-02 -8.3985806005476768e-03 -1.2909941238163703e-02 +1307 5.7799434227214976e-03 1.5486593808116992e-02 -4.4224235442713129e-03 +1377 3.6661933556623844e-03 1.9172966230548809e-02 -8.7111388834076389e-03 +853 1.8380104683260610e-03 -2.4939230941656851e-03 -9.2026503039371182e-04 +855 3.3822527499516440e-02 1.1246609966361397e-02 1.6115858402101287e-02 +674 -1.3780750056033722e-02 1.5193815261213999e-02 -6.0779217624604290e-03 +776 -8.7308763083532460e-03 -1.2339494640323363e-02 1.7762927624009717e-02 +673 5.0294320656071598e-03 5.6342224041133231e-05 -2.1168379858939163e-03 +1372 -3.3887063649058139e-04 7.2189996032480577e-03 -2.2044130576481216e-03 +1981 2.7928736804081850e-04 -4.7290724250508122e-03 -1.0572580137519431e-03 +1982 -1.2159133154660908e-02 1.0238550187520361e-02 8.6531849420077146e-04 +1983 -4.6394856491064904e-03 -6.6302946559024219e-03 -1.1729295648095557e-02 +675 -5.1248686870763319e-03 3.1511688589066643e-04 -5.1243896008130287e-03 +1374 1.5394679012688076e-02 1.9986264235126155e-02 1.9631517637559697e-03 +757 -1.6083051660576268e-03 3.3019900639344149e-03 5.3726645428184793e-04 +646 3.7977909457405303e-03 -6.7475070510741170e-03 4.2307256803446177e-03 +159 1.9256789779364999e-02 -7.0356715413304226e-03 3.1602165484143407e-02 +1829 3.1762715665122490e-03 1.9962304548822810e-02 1.5051664705396373e-02 +1638 -1.3849897543100009e-02 2.1913343870657676e-02 3.4794050530553662e-03 +758 9.6253729603026066e-03 2.4810998471445935e-02 -1.0233361097123564e-02 +2323 -9.2421950388953816e-04 2.0181157043997100e-03 2.8670668286139736e-03 +2325 -4.7733363014162795e-03 1.2966862220621213e-02 -4.9771930688444228e-03 +1828 2.5441559640913321e-03 1.8767929375823136e-03 5.8238257884331802e-03 +647 1.4025448875627392e-03 1.8235355279602697e-03 2.5750255154982364e-03 +1063 -3.9277923941230947e-03 1.0249493579299622e-03 -7.0744817884007264e-05 +648 -2.2570830103357544e-03 9.6670707550328898e-04 -5.4181660757202489e-03 +284 4.0885920914928951e-03 1.3788506176752285e-02 -2.6662627890173388e-02 +1469 -1.4077547686841885e-02 4.0646238492371388e-03 1.5133484788049736e-02 +1161 -9.2551416878296853e-03 -1.0801148447550275e-03 2.1207336211646172e-03 +61 -6.1880640825857686e-04 -9.4454261151766337e-04 9.5547172493799413e-04 +629 3.0887818259860188e-03 -7.5358359119143915e-03 -2.6845778007772207e-02 +769 -7.7413622157587302e-03 2.3816873976395458e-03 3.2481644181657264e-03 +63 -8.0702958544622682e-03 2.4614182236777013e-02 4.8859536584392217e-03 +1050 3.0269781154656995e-03 4.6361744305164869e-03 2.0009713639858634e-03 +771 1.7072335741209648e-03 2.8483289237505558e-04 -5.7505010431107787e-03 +1563 -1.4321649029728980e-02 1.7642564456403269e-02 4.5412868734067517e-03 +1376 -4.2350927372968809e-03 -7.2042485869649193e-03 -3.4996674645509603e-02 +756 -1.6518304220313012e-02 8.4331644057213575e-03 9.3473404951428789e-03 +1966 -3.2945798144449656e-03 -4.3208868406076090e-03 -8.1025731845370784e-03 +157 -1.5875688093974888e-03 -5.9045690336287154e-03 -7.9104590190640469e-04 +968 -3.5010041413668321e-02 -1.2543037118624693e-02 -1.0881189528846648e-02 +978 -7.1290519722669952e-03 -8.8078986585768317e-03 6.1848866665049282e-03 +1395 2.7173778239833368e-02 4.4313457522951209e-03 1.8535089544563382e-02 +1393 -1.8936001958204671e-03 3.6163049711839326e-03 5.0142161399572352e-03 +710 2.0989438205546832e-02 -3.4088934022658071e-02 -9.0542910164187907e-03 +709 3.8408693371470050e-03 -6.5090026053655822e-03 -2.2825826063897542e-04 +711 1.0292318139818211e-02 -1.8622722681832328e-02 2.3461637374117958e-03 +914 -1.4618404774245669e-02 1.6596861887157935e-02 -1.1989857072519754e-02 +913 5.1042292849715403e-03 -5.4091125549574764e-04 4.6422565708148173e-03 +915 1.6541265676092074e-02 1.8835973718973487e-02 2.4997948223801858e-02 +1633 6.8404189941023024e-04 9.9466145342036309e-04 5.4293971527952269e-03 +1634 1.2198828754390629e-03 8.6447214338725743e-03 -2.2424778415793011e-03 +158 1.5324336724593702e-02 -1.6538474281452278e-03 -4.2145525724915211e-03 +255 1.6898499972194461e-02 1.1600719265959902e-02 1.7809978171894780e-02 +253 2.4573628019139383e-03 8.7699702010406649e-05 -3.9259286853009110e-03 +300 -1.1257008856928671e-02 1.6849209482943277e-03 4.5085885396971958e-03 +299 3.0675690234799404e-02 3.4055453266222608e-03 -4.6817118881019486e-03 +466 -3.8679030982743017e-03 4.9978230411217954e-03 -6.1396135260051530e-03 +298 6.3824894887294040e-04 -4.2966024239090780e-03 3.2245388958262022e-03 +467 -1.3365934657201961e-02 1.2161378337012237e-03 4.0902455196440833e-02 +376 3.6633979667463445e-03 -2.2805170988987756e-03 -5.0494779527138862e-03 +468 -3.5714779156696109e-03 -1.9310689672488441e-03 -1.8855483602483548e-02 +825 2.6847380441402933e-03 1.8157899431598307e-02 8.4225797212359919e-04 +377 -1.3747860820366836e-02 2.5032337260466584e-02 -1.1374672260254612e-02 +1000 5.4502072048985399e-04 3.3584097161289362e-03 -1.6948489757467704e-03 +232 5.7720507469987267e-03 -5.2766416222994545e-03 -1.4269481303017045e-03 +233 -2.3106188810638598e-02 3.0106744727442160e-02 1.2563756183811465e-02 +1827 1.7787217662411946e-02 -2.5337798742357052e-02 -1.6649906003116093e-02 +378 1.8371969001563127e-02 6.3921178994264362e-03 -1.1592654850751595e-02 +2156 4.1029076072152303e-02 -8.5680655836572351e-03 1.9022219798293216e-02 +2155 -4.3004635987384755e-03 1.2663884927020530e-03 4.2802727564848086e-04 +1070 -3.3340261018889671e-02 1.7383709192420646e-02 6.1201368121637009e-03 +326 -1.5474869937826607e-02 8.4293448026893578e-03 4.8793765226372325e-03 +1375 4.2322054656518714e-03 -1.2581725672580831e-03 2.7767834814350378e-03 +234 -5.0371637284268916e-03 -3.6981295329221058e-03 1.7433357741564667e-02 +2036 2.8770020789961642e-02 2.5170994210385569e-02 1.5908090834360209e-02 +1018 6.5876415981703618e-04 -1.0557438650280446e-02 -5.7424742609147256e-03 +1001 -5.4870618311776403e-03 -1.2565471658242833e-02 1.3515138908497808e-02 +1734 7.9750053585306256e-03 5.6074428680709248e-03 -2.8091626937962373e-04 +2654 -8.1782550341452289e-03 -7.9353755108599149e-04 -2.3466892349410774e-02 +2108 -5.2358021850088723e-03 -1.7895145082296993e-02 -6.6405179951444862e-03 +264 -3.2161898502817902e-03 1.4975799193330527e-02 1.0891127517864247e-02 +2602 -5.7061222243245668e-03 -3.7123147022132480e-03 1.1969871602662203e-03 +2603 2.5468697106845316e-02 1.7193441491684628e-03 4.3179455757835557e-02 +1779 -5.1940415469354578e-03 -2.1787329997569813e-03 1.6070804161859025e-03 +1777 2.9502817994912526e-03 3.3524915788282123e-03 -2.6252243245344911e-03 +1778 -1.1602104855385707e-02 1.3098145310881555e-02 1.2357352819567192e-02 +287 -3.4847131096663563e-04 -4.3630747374589374e-03 -8.7073163564784055e-03 +2699 3.2060682025199197e-02 3.6112345729866300e-03 1.0075594323766826e-02 +263 -2.0111104125011912e-02 -2.3498421208101319e-04 -6.4520929574181721e-03 +286 2.1909538181564183e-03 -9.9728973695172246e-04 -2.8207306771426588e-03 +262 -6.6179416703361317e-03 -3.0779947683135466e-03 -3.5061132026604365e-03 +472 3.3058654513523685e-03 -1.6718677117964983e-03 -4.8147805728360167e-03 +288 1.0766219679026296e-02 -1.5703259503477111e-02 1.8473748075435156e-02 +473 -4.0099117881447297e-03 1.7927585089498355e-04 5.1592808495708924e-04 +1054 -5.0301652810861956e-04 3.6774103989044462e-03 -1.7518245593111789e-03 +1047 4.3543522626835592e-02 8.1154535837508427e-03 1.5433397584103829e-02 +1056 -1.8264066538611547e-02 1.1661286981792494e-03 1.9267582547192942e-02 +1055 -2.5938034204399524e-02 1.9073078070594548e-02 1.5227372554036387e-02 +1045 1.7400552747772878e-03 -1.6540651467708532e-03 -1.2992802021224987e-03 +2107 -3.1732736498241592e-03 -1.0565772833158401e-03 8.0997754317060702e-03 +2109 3.5013395216568384e-03 2.6322076263890146e-03 2.1587694139668431e-02 +2008 -1.3332116846892616e-03 1.8583978223803966e-03 -4.0788677730021318e-03 +2010 -1.1654182418166622e-02 1.7197709465261026e-02 1.7414719276246028e-02 +2009 4.0817379789735909e-02 -6.1656188594443485e-03 1.7078427160577472e-02 +1020 -7.4297182188355054e-03 5.5269982266499592e-03 -2.0053795491232557e-02 +316 -8.3622834473931333e-04 1.8013401045420400e-03 3.4049186052492546e-03 +2762 -1.7912111930247440e-02 1.6696741669809858e-02 -1.2393079466779368e-03 +2761 3.7352419089973486e-03 1.5308654001858579e-03 2.5938709310568148e-03 +2604 -1.6321025995157518e-02 3.1416487283437690e-02 -1.4727513470056701e-02 +1173 -1.1712237464641700e-02 -3.0566771648624833e-03 -1.0531581130678275e-02 +1082 2.0345500217712399e-02 4.9403208348810616e-03 -1.6688882113651965e-02 +2426 -2.1547601656281525e-02 5.0685272163577169e-02 8.3253694259656855e-03 +415 5.3199255381816447e-03 5.2119405979555245e-03 -8.7192460866039492e-04 +817 -1.6540908625459960e-03 5.0290421260034230e-03 4.1620205154054973e-04 +2916 -1.7008349279946860e-02 -7.9423203615748943e-03 -9.3879375153648192e-03 +474 -2.0460277298195134e-02 2.9197405934898075e-02 -3.5533957770341601e-02 +1442 -1.3139437429231342e-02 1.0824929000588448e-02 -6.2664935953494066e-03 +1254 3.8138482148669384e-03 -1.9645761440943630e-02 1.2630936933118897e-02 +2698 -2.4209479718859121e-03 -1.2080217344642597e-03 -4.0429157790556267e-03 +1046 3.0546035534071226e-03 1.3850122966057334e-02 -6.0111089687129953e-04 +1264 8.7747032368936046e-04 -9.6752884469951470e-04 2.3900134843280836e-03 +1265 -1.9397758319575048e-02 7.4155488627869756e-03 3.9334337892633839e-02 +1337 -2.1374853248490654e-02 2.8404031241028344e-03 5.0025273456436713e-03 +1336 -6.7109938775589714e-04 5.5976798510960222e-03 -4.6551887132098308e-03 +1338 -9.9054569724443767e-03 -8.5941126553342566e-03 3.4436497176912107e-03 +2973 -6.6279773154501887e-03 -1.0888943808175084e-02 1.3921576485065583e-02 +1181 1.2271628956593177e-03 5.3834253185373860e-04 -2.3317695561205637e-03 +1444 4.6739637987703713e-04 -2.3749032996041304e-03 -5.7532518260891442e-03 +1266 8.4967209502415982e-03 -5.8608553174353496e-03 -1.9339770457309065e-02 +1152 -1.6406970177404733e-02 9.7942099600380333e-03 -8.4297023287582956e-03 +2792 -3.7420245793941178e-04 8.9915568755152032e-03 -1.7601552166223309e-02 +1150 -2.1201213504384786e-03 -2.3199305535363569e-03 -4.6810052964062219e-03 +1151 6.5177089312119380e-03 -1.7868136962432883e-02 -1.8711372933902303e-02 +2239 6.1988965500149266e-03 -7.3347298265021119e-04 3.6025264804563275e-03 +2815 -1.4205926923919860e-03 -2.3869865955524179e-03 -1.6957651334063813e-03 +2793 -3.4046847507836634e-03 1.7396469681997744e-02 5.7637980552275358e-03 +2791 -5.1250445764047543e-03 -2.9277561933300361e-03 3.8064382995515911e-03 +2958 9.5988982000179066e-05 1.7345335558580895e-03 8.7434107841251989e-03 +1776 6.5592078298743102e-04 -9.3867166871300020e-03 -3.0430984127694269e-03 +1329 -1.7575606372684485e-02 -6.4998562085486879e-03 -6.3156954779900682e-03 +2643 -3.1375060468296863e-02 -1.0401411722207212e-02 -1.1084163914234238e-02 +2641 -3.3211622362933849e-03 1.9395242861961848e-03 -8.0554281716666595e-04 +396 2.3352487169343326e-02 -1.9306821322220082e-02 3.6721619785957458e-03 +394 5.2081801343100108e-03 -2.2538227938046864e-03 1.7594024581925613e-03 +1549 -5.2151340242811827e-03 6.9469941886338826e-03 2.8271762733442956e-04 +1550 5.9202410389466746e-03 1.9848991518999701e-03 -1.6821712517371298e-02 +1551 -5.8951601914081046e-03 3.4261600369964828e-03 2.8232441035284030e-02 +187 1.7990965346965572e-03 4.8000612561819645e-04 -3.9090815531180121e-04 +2956 -5.7117568167885770e-03 -8.2529437657748725e-04 3.2166727029289913e-03 +2816 -1.6100116044957216e-02 2.5672181048673286e-02 -1.0182049062328662e-02 +1826 1.6611230133695472e-03 -3.3410201913964245e-02 -5.5142174385229628e-03 +1099 -8.1014566061593887e-04 -4.0877549979627037e-03 2.6680292141664421e-03 +1968 2.6742643246559273e-02 1.6548644551737129e-02 2.2256513285365227e-02 +1101 1.9293108014849621e-02 -8.8854684379997741e-03 -5.4516294132559472e-03 +796 -3.6381424828504878e-04 3.5549462536024947e-03 -2.5692705121636442e-03 +785 -2.5224708135187370e-02 3.4665358327626683e-02 -9.1243644926352029e-03 +798 9.8182390882141477e-04 3.5779747911812196e-02 -1.6311865865873500e-02 +1585 5.8217501268045432e-05 -1.8385300329064745e-03 4.0613830558247641e-03 +1335 2.3976345669094825e-03 1.0943243952302629e-02 -2.2509516976651007e-02 +1348 -4.6164317187212516e-03 6.4268957503713581e-03 4.8755146239499204e-03 +444 -3.2878444949940573e-03 1.6814753623067988e-02 -1.5662541688287110e-02 +1587 2.0846521170204930e-02 -1.6028156593884995e-02 2.3352586159645042e-02 +1958 2.3493131814132664e-02 -1.0524658624125742e-02 -3.0970457151880265e-03 +873 -6.1015775094273219e-03 4.5253128726307316e-03 -2.6761850779673600e-02 +1159 -7.3724654352043690e-03 -3.1256750445038772e-03 1.0836897339976403e-03 +1957 -8.5599425659929288e-03 -3.5099076509748860e-03 -4.2942397224300750e-03 +871 3.5953519886389308e-03 -2.5151582132798785e-03 -4.4690641095412173e-03 +872 1.8820198524221968e-02 1.6095945415174010e-02 2.9649168871997388e-02 +725 2.7556533585856198e-02 1.0462639101347117e-02 9.5724423280577012e-03 +2574 1.0218387418602046e-02 -9.3123335424821166e-04 -9.6963771213936806e-03 +2647 -5.4031650215680916e-03 -5.1278928672077303e-03 1.6788149745366329e-03 +2649 6.6822883304245295e-03 1.3553945420034496e-02 -1.4717256853964767e-03 +665 -2.4521925796529807e-03 -1.2813313749529914e-02 1.3563208843762688e-02 +664 -1.2935218958700558e-03 -4.4715937176070799e-03 1.0410904334619592e-03 +666 2.3010380443653678e-03 2.1498124997794216e-02 2.0109960570370674e-02 +2648 -1.6013097815656095e-02 2.6965911044624702e-02 -3.5985199346087815e-03 +2237 2.5640480778391806e-03 1.8218342865076072e-02 7.0444186566574803e-03 +443 1.3004586860899650e-02 1.1484097669515539e-02 -2.9314561850284922e-02 +2236 -5.1319156770072852e-03 4.5254354426157517e-03 1.5021106015905632e-03 +2238 1.4240317432193611e-02 2.3889065213298200e-02 -1.1739167548868184e-02 +804 9.1609302563806245e-03 -2.1793010132471747e-02 4.3079190938504893e-03 +1350 6.4679331764449859e-04 -2.1801495226866606e-02 4.8001466881039184e-03 +763 -3.0669372214000732e-03 2.0973693660228630e-03 8.8004548000503754e-04 +446 -1.6988612015078206e-02 9.0555870850359179e-03 -1.4213046526222250e-02 +2972 -1.2621547139591840e-03 2.2776117733047399e-02 2.6526437437557490e-02 +442 -5.1289577222491103e-03 3.7004556741666510e-03 8.3169057755651309e-04 +1349 3.6642468975100442e-02 -1.2382299195060118e-02 -1.2361006353275837e-03 +765 1.3957358699071264e-02 1.7268507698446435e-02 6.4809479961862194e-03 +2971 9.6838026851791149e-04 -1.1121129836626157e-03 -8.0865518909376346e-04 +1421 1.2810687122750790e-02 4.8994567154577087e-03 -2.3167676995421192e-02 +2813 3.9915128903319922e-03 -1.6306617081985619e-02 1.1066316348530137e-02 +2756 1.0675941360377849e-02 1.4236400183564249e-02 -6.2532176253368554e-03 +2493 3.6193400029189700e-02 -1.1729188435267504e-02 -6.0622973435181856e-03 +879 -5.0279170637955676e-03 -1.1525977194999301e-03 2.1923495575761256e-02 +2840 -8.7921652321299813e-03 -5.8894502056179967e-03 1.7283345450454915e-02 +2839 2.2349745262216173e-03 1.7231531473834391e-03 1.4099771793915855e-03 +2270 2.5626969598306109e-02 5.6773083680094196e-03 3.2744913900103111e-02 +588 4.3465856686668945e-03 2.3797055244053889e-02 1.1004053301580557e-02 +586 -6.2501517574835306e-03 2.5877923199795023e-03 -3.9231982827692500e-03 +587 -7.2495035906044438e-03 3.7202930109817875e-03 -1.4321310108945771e-02 +2601 6.6235903063982995e-03 1.7398084415995985e-02 -1.3368569681545451e-02 +692 1.2457298229377696e-02 -2.9850297773099206e-04 1.6445662963307699e-03 +1508 7.4262979266509288e-03 -5.8786371140659788e-03 -9.0151365056986375e-03 +644 2.1918002419330743e-02 -4.7737496841466437e-03 -2.4328034098951103e-02 +643 -4.2151830603250964e-03 -1.9644198851922444e-03 3.0867573833774919e-03 +645 1.5698333320394508e-02 1.5432418066986654e-02 -3.5279840690182696e-02 +2790 -7.3902059329497933e-03 -2.7638071310817240e-02 3.3361196465283636e-03 +755 3.2258841205374152e-05 1.2008652568889153e-03 -2.0930983491656417e-02 +754 -5.1263369595561346e-03 1.6849999251657419e-03 -1.1415521937698425e-03 +2416 5.2910688296690619e-04 2.0550545544894020e-03 2.1321874055680763e-04 +2417 -4.9768012257998852e-03 2.8571481788914138e-02 -2.3953840366314860e-03 +2418 -3.7004068257206424e-02 -7.4308792414312826e-03 6.9397064822692093e-03 +2788 -1.3195885723820983e-03 1.4625522754557016e-03 4.3019414676377073e-03 +2789 -5.9133432080465762e-03 -4.7750718166814409e-03 2.2818976192169216e-02 +680 1.7055088173643148e-02 -1.0216418494573673e-02 -2.8897287594076070e-02 +1509 -1.4903626701955058e-02 5.1472695925762046e-03 -1.5567763265616423e-02 +1507 2.2495722041687969e-03 9.1331384008978399e-04 3.9731545536565043e-04 +1653 -8.5717807617125621e-03 -1.3737054518843137e-02 7.2648529552580684e-03 +16 4.4005356268597704e-03 8.5242077142401989e-03 -4.3874204580958134e-03 +108 3.3030835403254993e-02 8.8301743172662425e-03 -2.0308681836496388e-02 +2596 -1.0512990286694953e-03 -4.9198971355265400e-03 3.5967588678321072e-03 +2598 1.6885820881142499e-02 2.5772149021214136e-03 -2.3273133836570004e-03 +2917 2.1844135873054877e-03 -9.0206209081331468e-04 8.1680568991853353e-05 +2619 -4.5981249502886956e-02 2.1848011614164019e-02 1.5763109383488984e-02 +2599 6.8657199064631269e-03 -2.2581811148938693e-03 3.1131931604602278e-03 +2979 -2.4543925172314494e-02 -6.4943206664738705e-03 -2.1586781661229001e-02 +2977 -3.9091375720320037e-04 3.6696703637630048e-03 -3.2213200991832239e-04 +2240 4.8060671098988346e-03 -2.2410874786111701e-02 7.7392332982250461e-03 +1537 3.1214708231475465e-03 9.2411571417214133e-04 -3.9074316109646880e-03 +1078 3.6558732957338248e-04 -2.6979660304043856e-03 3.2513667303851052e-03 +2381 1.3784082651643966e-02 -5.8410114730036468e-03 1.1638924805544862e-02 +283 -2.0816165294039960e-03 4.9192893426181260e-03 -2.5276610069531443e-03 +2382 -1.0886441007951990e-02 6.4381194499097726e-03 2.3932188931671274e-03 +285 1.3655591397518941e-02 1.3899165630333818e-03 -2.2385906400561692e-02 +2380 -3.9480655729298214e-03 -3.1918839722452951e-03 1.7026532794103741e-03 +866 8.4083660957929521e-03 5.2126101680524878e-04 4.8139658783403023e-03 +865 1.2232397857458012e-03 -3.0686864513448011e-03 4.2024267076207766e-03 +713 2.2378470362235295e-02 -2.2070379891686542e-02 -2.0054036792419471e-02 +2651 -1.0689816910777865e-03 -8.4014800050505201e-03 6.0015228168710929e-03 +2497 2.6726374991682465e-03 2.2838927195723419e-03 -1.0200980938536548e-03 +2499 -7.2086820232390228e-03 -5.1724901459841163e-05 -5.5458926385782512e-03 +947 -7.0468420471916154e-03 4.3008384923950245e-03 9.0659246989075373e-03 +948 1.6292802949063469e-02 -1.8816917145104181e-02 7.5181377705681365e-03 +946 7.3380242190601965e-03 -4.4907138358796499e-04 -8.1049254921649831e-03 +2415 -2.9372519412953445e-02 9.8560738650917447e-03 6.5859771911621389e-03 +2413 -4.3544971980337462e-03 3.9963912741325814e-03 -4.1442992723351333e-03 +2414 1.3827291197529464e-03 -1.3417511895675010e-02 1.8056117387044816e-03 +2597 -1.7831544647804551e-02 5.6291866189848300e-03 -2.1779194882432788e-02 +1595 -1.8566711286259332e-02 -9.9876195606492246e-03 -9.3543504439086451e-03 +2271 6.2928106511355997e-03 -3.2445333200153454e-03 -3.5140907147725134e-03 +327 2.4574365227862119e-02 -1.0986857762574504e-02 6.7728723371646279e-03 +35 1.3533624267806087e-02 1.3219740692305505e-02 -2.6782860013411521e-04 +46 7.3103529937753936e-04 1.7023960523752959e-04 1.3161514038198623e-03 +1059 2.3023620033265427e-02 -9.4852027141490818e-03 7.6407435974403422e-03 +48 7.5997854020311685e-04 2.8766379394694272e-03 8.8062120855348057e-03 +2306 -1.5096508497772490e-02 -8.9095550297512635e-03 -1.9418460534229444e-02 +867 -1.3132571849893917e-02 -8.9984431828021069e-03 -9.3108859348477613e-03 +1240 5.1713173441371614e-03 -9.3335118930158115e-04 -3.0205548527554625e-03 +970 2.4913191542378990e-03 -3.7635729309597773e-03 -3.4300393522508057e-04 +797 -4.0197594116605445e-03 2.9883901628932907e-02 -2.4230972850095591e-02 +2907 2.0701414667410174e-02 2.8396795952596999e-03 7.2225365945992950e-03 +1310 9.1458701248608981e-03 2.0170328106376718e-02 -2.9600270952346405e-02 +194 2.8072474485450784e-02 -1.8059609891778617e-02 -2.0852910654867489e-02 +2404 1.2557848267130583e-03 -4.3530392997711042e-03 -4.4003483974187204e-03 +2241 -1.8684871605312420e-02 3.0993923164277719e-03 1.5523684126557728e-04 +2024 -1.7366738005875779e-02 -1.0549722588432833e-02 1.2783277484935750e-02 +2600 -2.9551040042212900e-03 -9.0962425797325962e-03 7.6212893353564135e-03 +2503 5.8892819409747156e-04 3.7503388833123610e-03 2.5598133679851972e-03 +892 -6.4772032136887862e-03 6.8538329698864435e-03 9.4170410478925184e-04 +2914 3.0048730434271156e-03 5.6945381693277548e-04 1.3584515358770067e-03 +422 -1.0408899851520681e-02 4.4307442099039696e-03 8.4719847160737022e-03 +1440 1.8143005687444178e-02 -1.4043315405372367e-02 2.5805818868904162e-02 +971 2.4888143429873232e-03 1.2507859368603307e-02 -1.8620129069961727e-02 +1438 -2.6253614848116957e-03 -9.3693732645107591e-04 -3.5627735693037838e-03 +1439 1.4518706123117427e-02 -2.4388986957498871e-03 5.5398227443711765e-03 +1165 -4.3306525518572623e-04 -5.7582829443353530e-03 1.7948340513997808e-03 +2758 -4.3923622355679549e-04 -4.3469515967725567e-03 9.7454760886073893e-04 +1057 2.8785256381127673e-03 1.5271592915087500e-03 1.8367590022184031e-03 +1058 1.8071760214732689e-03 -8.1357716185800476e-07 -3.3349253454654657e-02 +361 -2.2862763114459600e-03 -6.9277263832354943e-04 -3.9752435461844326e-03 +363 8.4404107968726397e-03 -1.3410286315578814e-02 -9.8685309527987361e-03 +1787 1.8151369995339242e-02 7.9897063075814534e-04 6.0158431227628406e-03 +500 3.0622969343231526e-02 2.4759934309009819e-02 2.1559265479784346e-03 +499 -3.2936552965127415e-04 -4.1775751023365275e-03 4.5676122808993656e-04 +1786 2.5140538267564494e-03 3.6025710874324464e-03 4.6137958496293239e-03 +501 -2.1498965245641464e-02 5.5876636942927646e-02 -2.0231977760471905e-03 +1788 1.2532297159247995e-02 1.4044351123669347e-02 2.6797169309784197e-02 +485 1.0025098752458815e-02 1.4339085986179030e-02 -4.2101428259678266e-04 +484 1.7191047410860382e-03 1.7924377062471719e-03 1.1092227412546390e-03 +719 -1.2634818960062574e-02 -6.5378651332649263e-03 1.2906794758668376e-02 +1131 -7.3017921994979543e-03 8.2216792676917429e-03 5.6760759775163943e-03 +1120 4.6761774676295611e-03 -2.0877735124803366e-03 5.1929869540143937e-03 +478 -3.8701661485944115e-03 1.9165109792362799e-03 -2.8869617533051357e-03 +480 2.7953791714727407e-03 2.6281699253873970e-03 -1.9040318699701686e-02 +1166 -1.3410216726111899e-02 3.4846166576299022e-03 -7.3100120813704133e-03 +718 -2.1641256369298784e-03 4.5872835450234381e-04 2.7443374466682947e-03 +1167 3.0722942824490184e-02 2.8694757638759978e-03 1.6064562810477225e-02 +486 -7.7596414064636720e-03 2.0213661469197289e-02 2.0390032415772356e-02 +1122 -2.8246374470102076e-03 1.8306267828125347e-02 7.3636239105694459e-03 +1004 1.1912495524471500e-02 -6.4144888238936602e-03 -2.1319500453015339e-02 +1241 7.9556587277232593e-03 -6.8812043316624390e-03 2.0917630897031612e-02 +720 -2.2053400455969933e-02 1.4718930602470221e-02 1.6559906730645873e-02 +317 4.0375239269020417e-02 1.2927398379736622e-02 -2.2833576700374700e-02 +569 -1.6653462886348596e-02 -2.3941336089184102e-03 -1.3979578673563992e-02 +2269 2.7096750949660176e-03 -5.2689298396158182e-03 6.3783071310961250e-03 +1825 5.5897842628185282e-04 -1.5980021787974643e-03 5.9397575924613226e-03 +430 5.9189495948992225e-03 -6.0799946473667386e-04 -8.1518010532487962e-03 +479 2.3051882403166739e-02 -2.7027948727148627e-03 -7.1160559621578686e-03 +452 8.3268191716822770e-03 9.1368980799044902e-03 -1.3251802922495887e-02 +2335 -4.8087252013446387e-03 -6.8611714505687942e-03 -2.2596792341718747e-03 +2215 -1.2257530426317608e-03 1.5628753694546978e-03 -3.7779586822590948e-03 +432 3.1156464574820129e-03 4.5786795090427424e-03 -6.7324254540858360e-03 +1121 4.9608468624480701e-03 3.8023958189945801e-03 -3.1640292289971238e-03 +451 -2.3161129261946058e-03 -1.5283028184845896e-03 3.3330652901100446e-03 +1005 -5.3380681822944752e-03 -2.4499936064176112e-02 -8.5797417792788985e-03 +391 -8.4659693655668514e-03 8.4293084456578209e-04 5.2661509864648471e-03 +393 2.3684641917413175e-03 8.4766538373071808e-03 1.6719184585063156e-02 +1 -5.2785836852064722e-03 -2.1906574603136513e-03 2.7835092522565442e-03 +593 1.2401230044721151e-02 9.4556404109012542e-04 -7.8355300315119444e-03 +594 -1.4678933885800460e-03 3.7214240352485702e-03 -9.7280838415835010e-03 +592 2.6740558800789726e-03 -9.3194003256839310e-04 4.0666350558379609e-03 +392 9.4663901115287045e-03 -2.2184881879450086e-02 4.0645892302332322e-03 +126 -1.2207094292677287e-02 -9.6434165878305760e-03 1.7899572293054665e-03 +124 -1.1712492021964845e-03 4.0370826726690706e-03 -5.3053104743377216e-03 +1857 -1.8513178037072482e-02 -8.8865902887732811e-03 -1.0504124238857873e-02 +125 -2.6444423774991316e-02 5.8363761148857831e-03 -4.2653900259494781e-02 +1003 -1.7280014348886241e-03 -1.6968807365575268e-03 5.7447123989492587e-04 +1358 -1.2935323249696380e-02 -3.5695462529890783e-03 8.4684543514244350e-04 +453 -1.4237472053535545e-02 1.0591070355998260e-02 -5.2301988414475372e-04 +2217 -6.1755078611350905e-03 3.3622849983113079e-03 -1.6648405897452971e-02 +1170 1.4040450782319953e-02 -1.3217327804710357e-02 -1.0963449842370625e-03 +1190 -1.6005482651981019e-02 1.1899304142423829e-02 -1.2756708202805939e-02 +1168 -2.3490054268317071e-03 1.0931061377959534e-02 -2.3683740950840677e-03 +774 2.1778930884986412e-02 -2.1011802128142375e-02 3.5334686915021278e-02 +772 5.2288988018347571e-04 -7.9037426366554300e-04 -4.5073472047100337e-03 +1357 -1.3222879056049729e-03 9.0090998710224150e-04 3.0805402869584380e-03 +574 -6.1870066332325524e-03 -3.2248794977674236e-03 2.6624654825133671e-03 +576 -1.6548722404012398e-02 -2.0150952319779192e-02 -7.5393426327858351e-03 +1561 -1.3035688505010271e-04 -3.6987295138750354e-03 9.8712025592508426e-04 +2707 2.2907594793453718e-03 3.6775226825130951e-04 5.0504350979180806e-03 +2709 -7.4608447567076292e-03 3.2415106497936774e-02 -1.8522648545470023e-03 +121 -2.4226309904280732e-03 2.7950236468987557e-03 2.8937150391604894e-03 +3 -8.7935839632102639e-03 2.5205020815012389e-02 7.0374432799304317e-04 +571 -2.0066795193489457e-03 1.5745457981200021e-03 8.0284056359274467e-03 +123 -1.4149913685839431e-04 -1.5340228407664258e-03 1.2306398751895542e-02 +2451 -4.0189288462526812e-02 1.1687872963255753e-02 6.1173907670995049e-03 +36 -3.3903335128073362e-03 -1.2047548807172494e-02 -2.2356713708071765e-02 +1420 2.4032486721098311e-03 -1.5496490852817991e-03 -1.8784309934144676e-03 +1418 1.3268129501171844e-02 -3.9763146993513363e-03 2.1433355043909957e-02 +1079 2.9925324510323235e-02 -3.7159692969197899e-03 -1.9282520963588996e-04 +77 1.1973181022114870e-02 2.0075624313924172e-02 -8.4766017890908971e-03 +103 4.5466768952596758e-03 -3.9327524800771563e-03 -1.4985837096843024e-03 +1422 2.6010114027766384e-02 5.9300014033613598e-03 2.4179230303660905e-02 +573 1.0917670822644460e-02 -2.5517487881924570e-02 1.6757451585231588e-02 +2439 8.8003125354960098e-03 7.6621017681493949e-03 -1.3879491357898772e-02 +2437 -3.7620428523116214e-04 -2.7891965358063376e-04 5.4232041043301002e-03 +2981 -1.4222193440866249e-02 -1.1584414080860575e-02 1.1001024985386135e-02 +76 -1.7460775642941140e-03 6.4915170644112893e-03 -1.2650432581688190e-03 +1417 2.9253008670513921e-04 -4.5279719912352792e-03 3.9602118405407940e-03 +2955 -1.8139822430676782e-02 -1.3533662994460752e-02 -1.1775047731720775e-02 +78 -1.3180720979957273e-02 -4.8402599703125613e-04 -7.9635679276483899e-03 +1419 -2.5231065599540242e-04 -7.6804315997449323e-04 -4.8267341967209079e-03 +2332 -7.4770496222992797e-04 1.4690428652803461e-03 5.0130235914608951e-03 +2334 2.4978404047072533e-02 6.2456429702194404e-03 6.2466223357725390e-04 +2953 -1.2901654219217636e-03 3.0431921092628506e-03 7.6215299143900597e-05 +907 1.9584162119364447e-03 6.2181289257168173e-06 2.0170673383330595e-03 +909 -1.4358699028626572e-02 -6.3038195837065922e-03 1.4362916544261044e-03 +908 9.4288312554076912e-04 1.8008631231252084e-02 -3.6670571917454225e-03 +2412 2.6042904289237750e-03 4.4923557482832140e-03 -7.6418779817327709e-04 +2411 1.4021434057511790e-02 4.3045476898242946e-03 4.6736400188404021e-03 +2410 -1.1439989963611340e-03 -3.3670813946117717e-03 -6.8243674508986201e-04 +2708 1.1422561453795334e-02 -1.3090236466849947e-02 5.5644165610706502e-04 +773 1.9047741837837655e-03 -2.8928002618978894e-02 1.4625781599186006e-02 +60 -4.4987812277287390e-03 1.8487791762251050e-02 -2.4835996048150552e-03 +2438 1.8472305295173391e-02 1.8127865326641693e-03 -3.1693479833601865e-02 +1913 -2.2064920402555459e-02 6.7428687105019402e-03 1.5934286995696798e-03 +105 3.6642777791986297e-02 1.5895942019245487e-02 -2.6523475258188711e-02 +34 -7.1211798680740632e-03 -2.5667113938204404e-03 1.0534742544501803e-03 +2918 1.0780925944386826e-03 3.0326059031803836e-03 -6.8574379084148148e-03 +1655 1.4603477081555728e-02 -3.0982883357175478e-03 1.2569485794800555e-02 +1064 7.5424352230186896e-03 -3.9218634358221607e-03 -1.3505025057767466e-03 +1065 -1.7483271105231166e-02 -2.5151531017309003e-02 -2.6541996081775994e-02 +818 -5.5917690969596130e-03 1.7723380411405545e-02 -5.7394693707250920e-04 +781 -5.6517789204601531e-03 3.0473680271560812e-03 -3.7946639151285886e-03 +783 -3.6486438840682804e-02 -7.2317943710369309e-03 3.7093428298784654e-02 +897 -1.2564216264233121e-03 1.1855054537356685e-02 -2.2034575245272118e-03 +896 8.0234878168118258e-03 -2.0325172562154992e-02 -1.1390290024747802e-02 +2978 -2.2296184590753112e-03 -1.0842404351349724e-02 -1.2858716013587454e-03 +782 -5.0973926602339683e-03 -2.2605601518542896e-02 -1.4067768167095509e-02 +2479 5.6466417442497009e-03 -2.9437714791391681e-04 -2.8573496224918089e-03 +2480 -1.6211447349473305e-02 -1.0995756783251889e-02 -7.3885350481513517e-03 +2481 -3.2869337485441762e-02 1.6740169729938626e-02 1.5013692866522113e-03 +902 -5.6632054147943652e-04 2.7863957820511258e-03 2.9387331146667726e-02 +903 4.8009344319589520e-04 5.1745647053178948e-03 -3.6757534583209003e-02 +1570 -3.0758563978991326e-03 -6.7128698106118864e-05 -3.1299385428831738e-03 +1571 1.9154906414597148e-02 2.7125685791306690e-02 2.8985534076982960e-03 +1572 3.9978152614654041e-03 1.3925288239864520e-02 -3.7388258681899512e-03 +170 -5.1197608115849357e-03 -7.5237581889125837e-03 -9.9285616623199374e-04 +169 4.9520288601518593e-03 1.8841157425664487e-03 -1.2738302146406260e-05 +1484 1.1954373191391643e-02 2.0944295322265988e-03 2.0640243379097010e-02 +2308 -8.8369927409863230e-04 -3.4456551540377493e-03 -1.7715818950968488e-03 +2309 6.3589518923438358e-03 1.4013219927036196e-02 -3.1146211742525444e-03 +2310 -9.8864287473213325e-03 2.3965617759407670e-02 -2.0101180498256013e-02 +917 -8.8482362685859538e-04 -7.2587627639630770e-03 1.2365677489618308e-02 +901 -1.4915925042914995e-03 2.8287200893383864e-03 -2.1486766761488133e-04 +2653 6.6353431761904435e-03 -1.1158754469467683e-03 -5.9503589444844852e-05 +1661 1.0402322792987195e-02 -5.4854514103544662e-03 -1.5264030241570806e-02 +2681 -5.7686997448593942e-03 -1.8509748683751614e-02 -1.3112449277373997e-03 +895 2.4465191744463140e-03 -1.0135901728539844e-03 -3.2121309859923365e-03 +972 5.0018755112059676e-03 5.8802995360698017e-03 1.5339053015051068e-02 +916 -7.9331891951286426e-03 -7.3115655807653567e-04 -1.3307883574226319e-03 +41 -5.0387354969530620e-03 -2.5610506859338963e-02 -1.1211592272779793e-03 +42 3.3958392243653428e-02 1.3045374856724263e-02 -1.7499085236114088e-02 +40 5.5850139936932238e-03 1.2887091374010930e-03 -3.0195085178056601e-03 +918 3.4848555974624058e-02 2.0763236902313086e-02 -2.9112832122002372e-03 +2817 -2.0582438657192507e-02 1.2003310735332420e-03 7.8082766053555177e-03 +2473 -1.4016462313452814e-03 -3.2554893302181418e-03 -4.6452634884071222e-04 +1394 9.1312525346722000e-03 2.6510690854646152e-02 -5.5079546393634301e-03 +182 -1.3105792739018976e-02 1.5676470685643967e-02 -1.6548378095178447e-02 +1929 -2.2456903724687394e-02 -6.7701217055254901e-03 2.1542392458064535e-02 +2735 -2.0553130431682352e-02 -6.8595844620875672e-03 -9.6506497754141347e-03 +693 -3.7016139512107991e-02 -2.0202697889371412e-02 -3.7756045132694700e-03 +81 2.6544847396232807e-02 2.9678598693344961e-03 2.2584746074881776e-04 +79 4.6140636337626776e-03 3.3507434196805613e-03 5.2356433849087289e-03 +1094 -6.3197813006128905e-03 -4.8991237987299312e-03 1.4026584701596321e-02 +2154 6.8253472826344010e-03 -1.2255587563593079e-03 1.0633106752305284e-02 +1362 4.7456762684485967e-02 6.6117862890253069e-03 -7.7445717470230506e-03 +1635 -1.6110141414043263e-02 9.0074499922563073e-03 2.1314795885553593e-02 +691 -9.9410578859240547e-04 6.5029992545840862e-03 -7.6648399699751166e-04 +1091 8.5209638291558545e-03 3.5344414271677857e-03 1.8002764074739115e-02 +1093 -2.6564534643442190e-04 -2.1982223971778033e-03 -6.1168636866860710e-04 +1092 -2.5227296647178528e-03 3.4134096282270225e-03 1.4834991899459197e-02 +1090 5.4055109637365650e-03 2.6141164681934255e-03 -6.9044151863165574e-03 +2297 -1.5766900040568552e-02 -1.9614757127812067e-02 -2.2348648620050589e-02 +2488 -2.1266462760411446e-03 1.0876431570908556e-03 2.0440778384759320e-03 +2489 4.4009326924329554e-03 9.8702065993167207e-03 -7.0419998135940812e-03 +2490 -3.8376127302814349e-03 -1.4502006340543326e-02 9.2532618368658254e-03 +177 -2.2820763380164175e-02 6.5468898966891120e-03 1.0679645592228591e-02 +2355 -2.1786941528858302e-02 2.9643333961245192e-02 6.2982110602195591e-03 +2344 2.3335486071039596e-04 2.1035011783042900e-03 2.4360615751725287e-03 +2346 7.1845650146767793e-03 -1.5019698038793943e-02 1.1969730086050515e-02 +1095 1.3019253804313175e-02 -2.2989598558731325e-03 -1.3012425379171605e-02 +2353 4.5521817526934950e-03 -3.1755762477985769e-05 -4.1143368987962394e-03 +329 2.3737315362726490e-02 -7.3841932966484808e-03 8.9711243360186838e-03 +328 -6.8834170776374429e-04 3.8950043328250382e-04 -6.7003862582881686e-03 +266 -1.3453442082328728e-03 -8.0556154297914285e-03 2.2313939657216054e-02 +180 -6.5806711621420677e-03 -1.2484112026222547e-02 1.7936003938095867e-02 +1230 -9.3806687490115524e-03 1.8878780425447727e-02 -1.1827199917849286e-02 +1248 -3.6779175105755421e-03 -1.3409302355789512e-02 -2.7731058406097336e-02 +1246 7.2040082936229762e-03 -1.8650568709639645e-03 8.0342826490339503e-05 +1247 -1.6500227397697145e-02 -2.0369603215762706e-02 1.8362099236712347e-02 +325 4.1004645887481143e-03 4.9497260511943047e-03 -4.1855934704944494e-03 +628 -1.5592000402074298e-03 1.4772987774151335e-03 8.3300129941476144e-03 +1228 5.9136525314104123e-03 -5.7322487868122288e-03 -1.8560300250735223e-03 +80 4.2892450209083876e-03 -6.0561809540493399e-03 1.0925051505660215e-02 +1763 8.3212229773795988e-03 -6.0867001315222900e-03 -1.5974845766779468e-02 +1762 6.7875665547368355e-04 -2.0850833653334381e-03 -1.8852843537410140e-03 +365 3.4763606747051949e-03 -4.8907184380076133e-03 8.5678622831761864e-03 +364 -5.5391416790819478e-03 -3.4115354810668047e-03 7.7339192888767208e-04 +483 2.1261999602266136e-02 -1.6032255960220989e-03 -2.3018158006238403e-02 +2774 1.8105025439830464e-02 -1.1065571994430944e-03 -5.7820365715129341e-03 +1865 1.3610989857924818e-02 -1.7333141819699999e-02 6.2655939965649363e-03 +1864 7.3776288749346887e-03 6.1145490845966903e-03 2.9701843441843298e-03 +366 -1.1855360479122157e-02 9.3021636920654939e-03 -1.3603640600122632e-02 +2045 4.5355733626543347e-03 -5.6884780105421577e-03 3.1440644078238877e-03 +1866 -1.6831603751205283e-02 -4.1167486121419534e-05 -1.0590857739740986e-02 +1048 -3.3891104489883811e-03 4.3851219638059132e-03 6.0038626808906212e-03 +2773 -3.8703554413339392e-03 5.2353004925434800e-03 4.1600010148787649e-03 +1293 -1.9618374765838865e-02 -1.9915987051042697e-02 1.9835581080230275e-02 +1775 1.9773291841864042e-02 5.9425227874859909e-03 -5.3194949469559660e-03 +1291 -2.2394938415184413e-03 -4.2349256180848572e-03 -4.5908838236188420e-03 +1292 1.8372800014619869e-02 2.4587214501891538e-03 -8.7337859237539839e-03 +2627 -9.5921835265773293e-03 2.6198474004930538e-02 3.2065471236011507e-02 +2626 1.6206783607944403e-03 -2.6781062369356115e-04 2.8278884457376787e-03 +482 2.3441914091362312e-03 3.5489326450828720e-03 -1.5591135210570687e-02 +2064 -7.7431243111717400e-03 -3.1282690495500878e-02 -1.3579736747771421e-02 +2636 -1.3104507010941310e-02 -6.3428129426489326e-03 -1.7218270742550397e-02 +2635 4.3584352885184377e-04 -4.4792460552725566e-03 -5.5318502238481861e-03 +2834 -3.9778603751131330e-03 1.3090711585853993e-02 -1.7646338810645109e-03 +2062 1.4240072461238013e-04 9.9375429352511579e-04 -5.1287055424133251e-03 +2628 -2.3376133251732387e-03 3.7932052966363414e-03 1.9592215901111820e-02 +246 4.9512401800326043e-03 1.7622005314356346e-02 2.0406410626426903e-02 +318 3.7617180513764064e-03 1.4548445208958790e-02 3.6012852518799189e-02 +1774 -2.9866074276964478e-03 3.7254276301090369e-03 1.1301463418951032e-03 +481 -4.5422122229898543e-03 -1.9267574283674280e-03 2.7372514652091468e-03 +2690 1.3172217950898249e-02 1.0756547331520695e-02 -1.4595603258503198e-02 +2571 3.0716786801088268e-02 -1.2780556246945605e-02 -5.4294590812289135e-03 +2345 1.1785732561545092e-02 7.4156014477565870e-03 -4.3004011574697878e-03 +1458 -1.7042749835588865e-02 -3.8393529707986776e-02 1.2486537661686867e-02 +274 -3.6747264097061516e-04 2.0107205854206934e-03 -1.0318128591436401e-03 +2930 5.7878407059103916e-03 2.1594838951011965e-02 1.5996566650477117e-02 +1456 8.2405313743661914e-03 3.3579815297821625e-03 -3.2633758541210606e-03 +528 1.4584847611510776e-02 4.9926996577814168e-03 -4.4839392856504817e-03 +1244 -2.1122402302931019e-02 4.8035394642096296e-04 -3.6186753557078145e-04 +181 4.7485460855018575e-03 4.1771896170918754e-03 -8.1059840728829220e-03 +1243 2.9811897522284210e-03 -1.0939612824123971e-03 3.3644889466710932e-03 +282 6.2144993253412332e-03 -1.8591881257060780e-02 -1.7564572235546767e-02 +1245 2.3321845019917891e-02 1.6908571556450088e-02 -8.6699252816110888e-03 +280 1.0088538196678005e-02 -4.5678203912178361e-03 -5.4206005137599905e-03 +281 1.0365284402494883e-04 -1.6162153527873587e-02 1.2196581569288566e-02 +2957 8.7243870303494730e-03 -1.1125069933926909e-02 2.5637482954422920e-03 +2655 -1.0582620543533771e-02 4.7265914367665470e-03 7.1782415796581775e-03 +1276 6.1810683728547738e-04 4.0083657014783405e-03 -7.4258943753589140e-04 +1278 6.0319342835973280e-03 -1.5472819659905617e-02 -4.2954970719131591e-03 +1277 -7.8627523099999864e-03 5.4656473579739896e-03 8.3512018311762744e-03 +1289 -1.3204483154587218e-02 1.1724057859609853e-02 -5.0003538830218170e-03 +1288 5.1502076187023077e-03 -3.5760342233563262e-04 -2.6283794799026208e-03 +1290 -4.0288133381478405e-03 -2.0200629637506448e-03 1.9195914069166448e-02 +764 -2.0793403743542278e-02 3.9105272161387900e-02 -6.0194426697274999e-03 +512 1.0398424208427052e-02 1.5272600270117901e-02 -1.2405845009345270e-03 +1914 -3.0672076916913951e-02 -1.8995134038416090e-02 9.5643431484348663e-03 +244 -3.6228070299702180e-04 4.4744876570948847e-03 5.0981962468493042e-03 +2742 -3.6243227476262192e-02 6.6626988977649621e-03 1.3049174449716204e-02 +2633 1.5482184402658045e-02 1.3759458514271223e-02 -1.0104224537439050e-02 +2632 -2.9722496076256956e-03 -1.1599663718670451e-03 8.8745580262412411e-05 +1179 4.3212234437489888e-03 -2.4094203999389070e-02 -3.0973968050631427e-02 +2781 -3.5197472384577086e-03 -9.8411427591244185e-03 -2.9588871225607206e-02 +2779 -1.7487475489395931e-03 -3.2485863220144576e-03 -2.1040391651854155e-03 +1434 7.2793925848826501e-03 -1.3278532508280379e-02 -1.4058024294274243e-02 +2741 -1.7730503415316134e-02 -6.4845227284837312e-03 1.1056430400084522e-02 +2740 -4.1323558058597538e-03 3.7471993229867672e-03 -4.2113298759717662e-03 +1433 -2.2184408524046160e-02 -1.5198070222113360e-02 1.3523461188955454e-02 +1432 3.6082767960686152e-03 2.8859535715247187e-03 2.9883755470872268e-03 +1205 -3.6472968663822776e-02 -1.2593670378915937e-03 -1.2618519740911906e-02 +1137 8.8604854329568834e-03 -7.4322775655583364e-03 -1.6005269726556515e-02 +1453 2.2258879428874757e-03 -4.8817052486459980e-03 1.4521041790436279e-03 +2637 -2.1441764843602232e-03 -6.7151416246432043e-03 1.0181215073901897e-02 +1468 1.9833127246066651e-03 -1.8530526075639484e-03 1.3764136198458135e-03 +861 8.3150477872439114e-03 -5.7517783679093349e-03 -1.9516059384382521e-02 +608 -1.6550522374275432e-02 -7.7436710493453444e-03 -5.9344029119515985e-03 +630 -3.6571044085894422e-03 -1.0810569692866411e-02 2.2232161691573605e-03 +1660 1.1870594627683422e-03 2.9046300852082329e-03 9.5608873239820991e-04 +1662 4.6920989237459691e-04 -1.4403595673585578e-02 2.0855754936864718e-02 +859 -6.7428808074274406e-03 1.0901329477516991e-03 3.0774425601554360e-03 +275 -7.0109303367550235e-03 4.6027571813972053e-03 -4.7089043818049634e-03 +786 3.2953644132776953e-02 9.1850931640584214e-03 7.7396729865015102e-03 +784 -2.6273846034343806e-03 4.7377759048176921e-04 6.8466517179395564e-03 +195 -3.2691881037184289e-02 -3.3084829689153675e-02 2.2698335687270231e-03 +953 -4.3125013291101747e-03 2.5382795129610149e-02 -3.8045962189891570e-02 +1189 -4.9911608242301829e-03 2.7860638155135439e-03 -6.1324853879771830e-04 +1733 -3.9162262427656767e-02 -5.2536784784647230e-03 5.7034120747613323e-03 +2847 -1.6228481674484607e-02 9.8878274308960967e-03 4.1032780668547866e-03 +547 -1.9908753806153830e-03 2.9414637340086972e-03 -7.5343237381033058e-03 +548 9.4665598855592800e-04 -2.0875051888847484e-02 -3.3946248410790807e-03 +1191 1.4772519432809226e-02 1.4327983163673084e-02 -8.5434362122295930e-03 +708 2.5514292885741158e-02 -8.2107877895767397e-03 -2.2032313520080641e-03 +2719 6.5805740520221380e-03 2.9723107254894993e-03 1.1371843687640285e-03 +449 1.7776588548990224e-02 5.4158328480670591e-03 -4.2666372246754920e-03 +2845 -4.4507894791881696e-04 -1.7148437062390112e-03 -7.1485653682634394e-04 +2846 -5.6245621676270056e-03 -2.3562312195170203e-03 -1.8919306851799572e-02 +1743 -2.1670773359247857e-03 -2.9747479945490415e-02 -1.0180491637582632e-02 +535 -1.7105135996892506e-03 -4.1112756953383088e-03 -4.4079102753324818e-03 +536 4.2358488637070257e-02 -2.1713606574098019e-02 1.3453543085569616e-02 +660 -2.7919313346541998e-02 -6.0896887447282411e-03 1.1976197641360570e-02 +659 3.6926006786093077e-02 1.4520209705490020e-02 -5.1070284587004843e-03 +658 3.7861213823364845e-03 1.1214536955885417e-03 3.8969510005251876e-03 +2721 5.6601891071281793e-04 4.0698784277937074e-03 -1.0496598593099959e-02 +2406 4.4122472366510054e-04 1.9791306583453690e-02 3.0033242010783105e-02 +2634 -1.2135404820805645e-02 -1.0499099571777755e-02 -1.0783336800353083e-02 +852 1.9035651806801241e-02 -1.5968558480495748e-02 1.2843304970506682e-02 +851 -4.4130798515086651e-03 2.6738125082214665e-03 5.0469928429191712e-03 +850 4.8767096593231194e-03 -1.6712883540005567e-03 5.8353786296241146e-03 +1465 1.2246423205591063e-03 -2.2602661426511460e-03 -2.8220533350207175e-03 +1470 3.7405011328932550e-02 1.2942563613887214e-02 7.4699155869768601e-03 +860 1.2856398089979182e-02 6.9315664479201984e-03 -9.2161864546223531e-03 +1970 -1.0699652049918833e-02 3.4910074734307496e-02 3.9872130546758741e-02 +679 -1.4232308127758327e-03 8.0121686473175607e-03 -4.1680369201252615e-03 +2138 -2.7747227398704447e-02 5.4286798764229234e-03 3.0272952809976832e-03 +2137 4.7268359810960850e-03 3.6065607740093522e-03 -3.7296474114164760e-03 +741 -1.5988628109430615e-02 -1.7606280843545971e-02 -2.1186141672947006e-02 +1445 -4.3211403950804547e-03 1.2284309069766203e-02 -1.3016023181815954e-02 +739 -2.9659420479111343e-03 -9.1792208212271883e-04 -2.0739152004819413e-03 +1689 6.8736882872264078e-03 -3.2131927299005200e-02 7.0097152723380468e-03 +2664 -9.5369105494283665e-03 2.1047903084073668e-02 -1.0646229663456941e-02 +740 9.3499478229664944e-03 1.4273649542414640e-02 1.6615357130172304e-02 +1586 -1.2454499628960137e-02 -9.6304519335860556e-03 -3.4825198014332190e-02 +681 5.8109295108133754e-03 -3.4847147094559487e-02 2.6263666439070416e-03 +1360 -5.7173434881351475e-03 2.0582996226949867e-03 2.4029761724853782e-03 +2491 2.5597548440275072e-03 -4.0991373317540332e-03 2.7693724591721916e-03 +1010 2.1147103156276083e-02 1.0470425145084965e-02 3.9030064715801054e-03 +1969 -6.2115791400940614e-04 2.2608472608228016e-03 -2.8256694487349978e-03 +1361 -8.6773257700883104e-03 -1.1034215391630353e-02 -1.1636267471814303e-02 +2663 2.5919877165524685e-02 3.5151600778196200e-02 -7.0170422778215880e-03 +2281 5.3787919743248976e-03 7.1315058885211601e-03 3.8496798091407713e-04 +111 2.6986658995267202e-02 1.0892489507614558e-02 8.3728126525228277e-03 +337 -3.2590810463984651e-04 -2.3175790452530471e-03 8.5280899773399772e-03 +338 -2.1156743380126030e-02 -5.0670814968726977e-03 3.2225636331252002e-03 +339 -1.5878367160878357e-02 -1.9323522677309708e-02 -8.2162664346967413e-04 +2283 1.9263478354209780e-02 2.4110275940885963e-02 -3.5048206918879715e-03 +2662 -4.6620944030323699e-03 7.2097796957105199e-03 -1.6669351587893988e-03 +109 -7.4055717567954836e-04 -6.8847158687677460e-05 -2.9487486317256477e-03 +110 -9.7777465986546332e-03 9.3638505416940038e-03 2.9585243380622930e-02 +2475 -2.5385488406471091e-02 2.0863009920618944e-02 -2.2977387644031955e-02 +2492 7.1448935127986475e-03 6.7160930795874089e-03 1.8443719891605839e-02 +2487 -1.4302498546024181e-02 -6.9869629881601843e-04 2.1272306688457646e-02 +2485 -5.4359200675684772e-03 -3.6098088712704459e-03 5.0564694505295842e-04 +912 -3.1218382085228071e-02 -2.8884419372494245e-02 5.9668447097345574e-03 +92 -1.7692732566193810e-02 -8.4937209500716721e-03 -8.7799966284961908e-03 +91 -7.3549242390854642e-04 -3.8001756512843750e-04 3.7201079096697114e-03 +575 1.7160678855141654e-02 -1.2729456026217587e-02 1.0045525545469997e-02 +1688 3.7226195281654679e-03 3.4943542395855766e-02 1.3135138850841232e-02 +2831 -6.4919570044533041e-04 -1.2541613420464138e-02 -8.8966568879003498e-03 +2152 -4.0955804743945667e-03 9.2473764366373563e-03 5.9478639061605581e-04 +2153 -8.4351499640862998e-03 -1.8917395200131672e-03 1.4627968073962912e-02 +2037 -1.2533040135478851e-02 2.8919821170870257e-02 1.7937333079534018e-02 +894 4.2028384937498921e-03 -5.2024452037806937e-03 -2.1140200652403733e-02 +188 1.2468570014242225e-02 5.9234917246290507e-03 -2.8443767327563339e-02 +1687 -3.0565683682590877e-03 1.8774488104826773e-04 -1.4262832122429105e-03 +1795 -4.1642394191722240e-03 -2.6271135230744765e-03 1.9566444676784826e-04 +1878 -2.7202799820773359e-02 -3.0460354043162737e-04 -1.0157293394663217e-02 +1242 1.7132243453834811e-03 -2.0499381526310669e-02 3.8433309384571950e-02 +172 -1.8497005959287056e-03 -4.1906993868647512e-03 1.0122456375422571e-04 +174 3.9908750823737836e-03 8.9408539709800346e-03 -1.0904454162368543e-02 +173 1.5550705453190913e-02 -3.6566808857738137e-02 -1.9344323784572078e-02 +2289 1.3796138726741850e-02 5.1709071542319129e-02 1.9596752194736975e-02 +1874 -1.8252420560206765e-02 2.4958942790714650e-03 1.4300352393005313e-02 +1875 1.3395571613568271e-02 -7.5245976276390970e-03 -8.0362257578097656e-03 +1873 -2.1797843338104868e-03 2.6466302594077024e-03 -1.2953133845526512e-03 +2944 -1.2352118591524236e-03 2.7413828950406229e-03 -1.9960749548988280e-03 +2287 5.6876605675407737e-03 2.1297644792604375e-03 2.0756412083650579e-03 +1796 1.6219776909372013e-03 5.4954237843159279e-04 5.3381150226979313e-03 +171 6.3337070774421318e-03 -8.6337086448586130e-03 9.4555728670897121e-04 +2830 -1.1077253893366236e-03 -8.7947176837225513e-03 1.5503466266213826e-03 +1274 -2.0735501825375055e-03 4.5132770520206946e-03 4.8740718619977915e-03 +2457 -7.9198152075172397e-03 7.4840540390230543e-03 8.6936196749915848e-03 +1017 6.9019608798032749e-03 -1.2243743533073803e-02 -2.3498350583642181e-02 +2455 6.1317307141924475e-03 -2.2452908517706953e-03 1.3026143380680687e-03 +2456 5.2065684189476266e-03 1.2122661901466407e-02 3.7360165682287822e-03 +1129 3.5921859909392598e-03 -2.2562191464444744e-03 -4.4006785675376303e-04 +1130 -2.3386509260704829e-02 6.4981568612600552e-03 2.5688025075895687e-03 +1108 -1.9315710739583138e-03 2.1305520948475998e-03 -1.7495866413599112e-03 +2486 -1.0209879088455903e-03 7.2796670014389671e-03 2.4717306707784367e-02 +1309 -6.8424283339068885e-03 8.7094219882249263e-04 7.6277044724718695e-04 +1080 -1.9838775656156847e-02 -4.9508199694707038e-03 -3.0844121672267695e-02 +1275 1.1231374092837769e-04 -5.7555303168643529e-04 9.6800547967696923e-03 +1273 8.6448958174475780e-03 6.5245286724652718e-04 5.5910992129781035e-03 +545 -1.7069039743626162e-02 -3.1570779207516060e-02 9.3158388899766097e-03 +1015 -1.0313592339597358e-03 2.4924553108604526e-03 -8.6587851783946450e-03 +1016 -1.4910775354335435e-02 -2.4033552299946087e-03 6.3563194419486782e-03 +2832 2.5269256623349523e-03 2.5765493273366682e-03 2.0476916013967429e-02 +227 -1.8791018525090756e-04 1.4087304832721761e-02 8.2802303194788596e-03 +2915 -7.7971600611935424e-03 3.8338746477102701e-03 2.3967459173737646e-02 +2639 2.5984930380557762e-02 1.6365338368687487e-02 -1.1234055187283529e-02 +1193 3.0830402529270821e-02 -8.2918076710815254e-03 -2.7796049642717837e-02 +1732 -7.7909965911530975e-03 1.6852479465048202e-03 -2.5871285603473759e-03 +1538 3.1844931350977451e-03 1.6080910793238562e-02 1.6172150296133739e-02 +1073 1.6611728179432600e-02 -2.0834405385035355e-02 -7.6252259690660646e-03 +1227 -1.0676688935112384e-02 2.9674750178107275e-02 -1.3620997819770893e-02 +1226 -2.5903879875978718e-02 -4.5118540814920388e-03 -2.9548936466070843e-02 +2063 1.0059257757346375e-02 -1.4996743272177968e-02 -5.5776319884876680e-03 +1172 6.0057715761240070e-03 -1.0551852044636129e-03 -3.6385882254489363e-03 +1317 1.1241713135627796e-02 9.7764544117071150e-03 1.0026643130741954e-02 +1315 1.2101568798494312e-03 9.8008503021897141e-03 -2.4862593683677510e-03 +1225 -4.7707157897010695e-05 -2.3357226945720647e-04 4.8362457561374689e-03 +2307 7.4570313918109711e-03 -2.0304188431099532e-02 4.1728157268162744e-02 +2305 3.6817229086607574e-04 -8.3702628554082638e-04 1.7650213215373767e-03 +1043 8.2219257268865229e-03 -2.4105314205083816e-03 -3.5734323921992918e-03 +1072 2.6838888659300084e-03 -6.4037002953845764e-04 3.6648709294521487e-03 +2354 2.4543093974888883e-02 1.9010075038894882e-02 1.6775434511505097e-02 +1042 -6.2376553883692568e-04 -2.4403989776372605e-03 -1.0948130434513103e-03 +2689 -4.7793842511057233e-03 9.9380823017571063e-03 -6.3300100934322173e-03 +1044 1.0428583261397621e-02 -3.6697387843465143e-02 -1.4453882225085791e-04 +2638 1.6968429351972556e-03 3.7888200820215953e-04 6.5397407298335751e-03 +2640 9.4066766040686346e-03 3.4622238212644645e-02 -1.2790274080175482e-02 +402 7.8372088168650444e-03 5.0826852634634481e-03 1.5458931631574991e-02 +2691 -3.8829935502878560e-03 1.7513440806065282e-02 -4.5521316143688614e-03 +456 5.1894751300049337e-03 -2.2260991347235835e-02 3.1676630882069546e-03 +454 8.7329510098408634e-03 2.5807042573140174e-03 -2.9314487225996604e-03 +1157 -2.3665398288814379e-02 7.9390435630888150e-03 2.7477092375628433e-02 +455 -1.6225023294376518e-02 -4.5016871650336993e-03 2.8326357490292265e-02 +1074 -1.3139099764107412e-02 1.0597313892498234e-02 -7.0851095902540939e-03 +1158 1.7733290101678088e-02 1.3636367770838147e-02 1.0183773306061617e-02 +1156 4.3617404654767485e-03 3.2655310139494717e-04 5.3632056493730920e-03 +494 7.1984936568245169e-03 5.0994032996131960e-03 4.6444526954874554e-02 +495 9.6243382933705150e-03 -7.5098436458031293e-03 -3.7376657398778741e-03 +493 -2.4681687167118424e-03 4.9650434863484950e-03 -3.2330453537326755e-03 +400 -2.1269732143962255e-03 -4.1996736714421719e-04 1.8320751152413003e-03 +2526 -1.7219487343115706e-03 1.2419283746464423e-02 -1.9758978305803528e-02 +1192 -2.1991685835114922e-03 -4.6998683433519010e-03 -5.7789667872228476e-03 +1741 8.9600308774273364e-03 6.7124612680319736e-03 -5.8432270996913900e-03 +1019 -4.7015122456818817e-03 2.4666808038983140e-03 1.4790997637403753e-02 +1457 3.0645263259670961e-02 1.5717500480514329e-02 3.0776494728704133e-02 +429 -7.3708823732975453e-03 1.1629422959798876e-02 -3.0090111168123214e-04 +245 4.6764128425368879e-03 1.4723977120318607e-02 -5.9393397613362849e-03 +2945 5.4660588436612574e-03 -1.1897254626288855e-02 -1.5319325420092315e-02 +1110 -2.6152655358642075e-02 1.3421484089997578e-02 -2.2711936709524743e-02 +1946 1.0589515268966579e-02 2.9314041762207626e-02 -1.7276506130581397e-02 +2035 2.5031843990441943e-03 -3.1959643804389225e-03 -2.5648886678862276e-03 +2 -2.2541461653205072e-02 -1.9931670317505434e-04 2.4457929664887790e-02 +1486 -1.7975290338514255e-03 6.5088773911721473e-03 -3.2715180597781331e-03 +2084 -1.9435861206448261e-03 1.0156954449025456e-03 -5.5640494031990321e-03 +1885 -5.5125359791166704e-03 -7.4310918259498510e-03 -1.9766883620285524e-03 +1886 -4.9234983040949828e-03 -5.6968013770040014e-03 8.2227570091734784e-04 +2264 5.6818209823686072e-03 1.2449421423831555e-02 -2.3173612977829806e-02 +1359 3.2770455948251044e-02 -2.1984202045289704e-02 -2.3995426656725563e-02 +1014 6.0476048407866155e-03 2.1803356536307727e-02 -1.3663536596663346e-02 +2736 5.6030536805088136e-03 -4.7634706148503786e-03 6.2168948418780809e-03 +2263 3.1239859791876638e-03 2.0119486619341962e-03 -2.6389926975626658e-03 +1012 -2.2401096024199759e-04 5.3668046730026130e-03 -3.7424181738218527e-03 +2265 8.3706743277698302e-03 -1.3102182060807042e-02 -4.0946583240959516e-03 +1013 1.9636683864338645e-03 1.8819177057876120e-02 1.1149854979260914e-02 +2954 -3.9793965186145745e-03 1.2673740079580307e-02 3.1355154698869824e-03 +2755 -6.0709942125580976e-03 -2.6354190361422797e-03 -6.1273133412653481e-03 +1184 -8.9191001893144783e-03 1.5661250785874669e-02 3.9822711575505248e-04 +2757 2.0042076281554484e-02 8.2155191754247885e-03 -1.9363675911554606e-02 +1185 -1.8498277544906178e-03 -3.2048124953010012e-03 -1.1927287534294300e-02 +2076 1.9203357744412123e-02 4.7726348907917004e-03 -1.6935495766678245e-03 +1183 2.9144596159067912e-03 -3.6216328891372188e-03 1.8739815459242796e-03 +2074 -3.0622056635480001e-03 8.7410067846253429e-03 6.0729208570981102e-03 +2075 1.5182108295800401e-02 -6.9493498055133753e-03 -4.5902082844991997e-02 +2882 -8.6287180637458979e-03 -3.0399286863781686e-02 -4.3317307905553198e-03 +683 -1.1659222169577778e-02 1.2092028039310811e-03 9.1376064245027901e-03 +684 -3.5030775664169685e-02 -4.2079098222707698e-03 8.8053216879931673e-03 +682 5.7240847272792706e-03 -1.3482071349595664e-03 2.9158962575968933e-03 +2883 1.3264266278369210e-03 -1.0773912859900856e-03 -8.6292634549107010e-03 +2881 -4.4575240048984365e-04 -6.5752354605349769e-03 -4.2333937241803860e-03 +1206 3.0974997256097987e-02 1.5913720278779561e-02 -8.8473631754881019e-03 +1204 3.0261899409225711e-03 -1.8414204697449667e-03 1.0268315731249017e-03 +572 -9.1881161542274967e-03 -4.8972210344086151e-03 1.1209395975377269e-02 +427 -2.1136849032086812e-03 4.3457777864064389e-04 -6.8316452246992652e-03 +911 3.8653615245513870e-03 1.2439545641168594e-04 8.2810712472063622e-03 +428 2.0194217187565911e-03 -8.9711760042613629e-03 -9.0145296553360149e-03 +2331 -2.6662825963070604e-02 -1.6173321524288489e-02 6.9140973756637312e-03 +289 -4.9209277322048613e-03 1.7645727180702267e-04 5.7463236962354081e-03 +2143 5.1313311015788333e-03 5.0027675893803084e-03 -1.6406964647072307e-03 +2139 -2.0103754751060747e-03 1.7421250735465504e-02 1.0658967152585394e-02 +2337 -2.1693169069774976e-02 9.8827350986434026e-03 6.0878344735229030e-04 +1467 -1.5446683437512624e-02 -2.2514156287727571e-03 -4.8826219625951869e-03 +1455 -1.6958330987555101e-02 1.0063680906435557e-02 5.5675401344947436e-03 +183 -1.7915200299992336e-02 -1.6832215010178019e-02 -7.1550762241165272e-03 +677 7.6208451805176705e-03 9.6731082200218858e-03 2.1735565658314616e-02 +1106 5.6063892873372385e-04 -8.3482846555474593e-03 1.7102592962536627e-02 +1304 1.9010841452963907e-02 1.9794725907155846e-02 -2.2623520137560724e-02 +1912 2.4944632020693965e-03 -7.6106438210752142e-03 3.1116276020879663e-03 +678 2.0543958222665124e-02 -2.9935507588919565e-04 1.8637600585598126e-02 +910 2.9328432182515674e-04 7.0985143788137150e-03 7.1131159304581009e-05 +676 -2.6138342881227013e-03 -3.6246889221837049e-03 1.5097074493939217e-03 +1303 2.5845942956603148e-03 -1.8080777693746488e-03 3.3548004368044674e-03 +290 -1.2343278068771507e-02 6.3270368301294360e-03 1.6649863494831118e-02 +2171 9.0501543891393556e-03 3.2219605181495143e-04 -1.1374308730265646e-02 +2145 2.3426267727972253e-02 1.6263658350451750e-03 1.3796740253793537e-02 +1945 -3.0120349419439374e-04 6.3642551353807510e-03 -6.8251678100533508e-03 +93 -1.0682953007507216e-02 3.4568226534861524e-02 3.6024095471688132e-02 +1947 2.3944335487766466e-03 1.6142508086658316e-04 7.7113267332186864e-03 +2282 -1.2290481121428546e-04 1.0831980543239673e-02 -1.0032053361617735e-02 +291 1.3539730378919064e-02 1.6217020516237749e-02 1.2411059984293553e-02 +2144 2.1916501833217111e-02 2.8215134297284894e-02 1.3164267564203963e-02 +1305 -3.1751220776281820e-02 1.7929062860954456e-02 -1.8699317398496076e-02 +1466 -2.9145965054391235e-03 -1.4442560584436670e-04 3.0966568432621341e-02 +2734 -4.4008469063099411e-04 2.0952697164297318e-03 -5.0953079929101789e-03 +1238 -3.8432357091853248e-02 1.2652064672464493e-02 -3.4496708755015347e-03 +2569 -2.8903363198509438e-03 1.9459541730722685e-03 -1.0497971365934164e-03 +1488 2.1745469500136172e-02 -2.3786724600357370e-02 1.5848539815969027e-02 +1967 2.4265040047830273e-02 9.4997500447541964e-03 3.6699434602122157e-03 +178 3.4628601726411968e-03 6.6109783342707239e-03 -6.6190814282860791e-03 +2216 -1.1360758894701274e-03 1.0371556405460539e-02 2.5915904446357056e-02 +107 9.8501854312711065e-03 3.0344017025214572e-03 -6.5464575543236576e-03 +1596 5.5524713177720793e-03 -8.1425862073603254e-03 -8.6594687164341308e-03 +2812 -3.0218539276471753e-03 3.4031130755130842e-03 -3.8834944303976142e-03 +942 -2.4918750255709960e-02 -4.0518415359834933e-03 -9.7225202016915282e-03 +2476 -3.9639727293720832e-03 1.6575475227265728e-03 -7.1893133703351073e-03 +602 -4.6697297109374678e-03 2.8909462133286698e-02 -2.2801299937214390e-02 +2829 -5.2153907672944106e-04 3.0247220539290444e-02 7.2129097536260140e-03 +2841 2.2011106131999882e-03 -1.1998252940406575e-02 2.3398900877726399e-02 +2565 -1.1298231754483646e-02 1.3255436931967119e-02 1.1057758919723229e-02 +2563 -3.7536118072487449e-03 -5.7753644652896498e-04 3.8790058398922439e-03 +2564 -1.1536208937334166e-02 -3.2719364262032507e-03 2.2942735356924721e-02 +2874 5.5538306127043344e-03 1.6162950965242357e-03 4.0435748169840205e-02 +1062 -4.4374919431088219e-03 5.0895197629639410e-03 1.1817550921795874e-03 +2453 -1.8409742815820755e-04 2.4159699648991168e-03 -2.6294927049556899e-02 +2452 1.0525013702009573e-02 -1.3223168877647966e-03 -6.3954762316291436e-04 +810 3.4421731292534319e-03 2.2445420864932640e-02 -1.2801449351982927e-02 +2467 2.7712221609908039e-03 8.2749714618479122e-04 2.9177182524161107e-03 +2374 -1.8715143010404388e-05 1.9524879448162562e-03 -2.2009884521578802e-03 +2376 -9.1482596881742543e-03 5.0350685677488819e-03 1.4075479255874696e-03 +809 -2.5452456743826814e-02 -2.7145605117797438e-02 -1.8792648736644872e-02 +957 -1.3564945393910092e-02 2.9363585305713304e-03 -4.9935914966251172e-03 +955 5.6345308235848587e-03 3.6917467945155923e-03 4.4827266703900675e-03 +956 8.4040882461682460e-03 8.3029618991525885e-03 3.5227548053130095e-02 +2880 -6.1038531307743334e-03 1.1163993347740365e-02 3.3669452366996540e-02 +2448 2.2367904771704836e-02 -9.6144167290218834e-03 -1.1407799629876609e-02 +581 4.7228601223219188e-03 1.1654210441129131e-02 6.5300373631030830e-03 +2872 -1.4036740380388873e-04 2.0607311907072452e-03 -4.3074336097224152e-03 +2583 -1.4933306692696045e-02 -1.3639375820914405e-02 -1.5733097506159182e-02 +2276 -2.6409854762685044e-03 -3.5893387396427495e-04 2.6649165402750086e-02 +1711 2.1408969441129131e-03 -3.1339175146590996e-03 3.5428574260574753e-03 +570 -3.3660652119362968e-03 1.1340511271610178e-02 3.6433084770570814e-03 +1712 8.5504269673022035e-03 3.1686365463731402e-02 1.3019741571301029e-02 +2997 -1.9355244463149273e-02 -4.3727937244498327e-04 3.3277055344217023e-02 +2995 -2.6088017476474701e-04 1.1073724340014280e-03 -2.3690358018129440e-04 +2996 -2.1446277278479274e-02 -5.3622756680811578e-03 -2.8418665989337580e-02 +868 -1.1579713850515109e-05 3.1226708052674149e-03 5.5142021033024943e-03 +2878 2.2598132618457632e-03 -6.7465862376596113e-03 -5.2501347016793510e-03 +635 4.1982515583153567e-03 2.1231000240383600e-03 4.4387359328201407e-03 +634 8.4181719948079074e-04 -2.0299122811541425e-03 -2.3482916941551185e-03 +2115 -8.0252175063283866e-03 1.0497283767581734e-02 4.6403063155131472e-03 +808 7.7694933787367500e-03 -4.3453770924741699e-03 7.5459709934664835e-03 +869 -3.7301560744977869e-03 -2.2243490599213164e-07 -4.2066462396948869e-03 +2879 1.0104921082149774e-02 -3.7504857871530989e-04 -1.6717005730418487e-03 +2929 -8.1978042107770644e-04 7.6534672749384598e-03 -4.4567574461409302e-04 +2931 -1.5099297315495178e-02 -1.1911807091050216e-02 6.6714137498748993e-03 +636 4.2654226094344860e-03 -1.3565080263813062e-02 1.7352583286432591e-02 +870 -1.7354905404511872e-02 5.5626399734435734e-03 -1.7732137287893954e-02 +90 -1.0041349979738660e-02 -4.0525883135453797e-04 -1.0372904009798426e-02 +2113 1.1557706679533446e-02 -4.7673981667668477e-03 -4.6681612459848908e-04 +84 -4.6743911084050245e-03 -1.0509176284888665e-02 -3.8538931490153831e-03 +2446 4.3205226841644634e-04 -3.7467773649893774e-03 -1.4369282562946685e-03 +2442 -4.4865744934751442e-02 -2.0414265445052919e-02 -2.5229830363743551e-02 +2447 -8.2747772214440609e-04 3.5171240425336120e-02 2.7207721456410872e-02 +1800 6.0226214776922830e-03 -1.1705831472055525e-02 1.3118156665111191e-02 +135 -1.2007308619984549e-02 1.8081603187925701e-02 -9.7800543526656465e-03 +2260 -6.1547836485571971e-03 4.3151185661838903e-03 3.1051445228506792e-03 +2459 -3.1040407242818521e-03 -2.2135695291469960e-02 -1.2369143914324462e-02 +1672 1.6331699651040801e-03 1.2594245487822309e-03 5.5297600788422191e-03 +1674 2.1384340417808430e-04 1.0205285705859877e-02 2.6954869367315434e-03 +1673 -3.4130771796332081e-02 7.8485828086203300e-04 1.6989699792017577e-02 +2440 -4.4948120966989006e-03 -2.7245658364231399e-03 3.8728822491152994e-03 +2441 1.5871675526080153e-02 -7.7780521787880908e-03 8.4654964916445058e-03 +979 1.1918131943022732e-03 4.5271539874061923e-03 -7.6921571182437896e-03 +981 -2.1735404163897862e-03 2.3841811146939748e-03 -3.4592373837079521e-03 +2509 9.7150961678218811e-04 -9.0690235000902876e-03 3.2840282359832308e-03 +2494 -8.3744894391398865e-03 -6.1826808034405089e-03 1.5158601883140639e-03 +1972 -1.8764220233563301e-03 -1.9545183041779803e-03 4.7536117895544214e-03 +1097 -4.5042576544368712e-03 -6.0415537372679982e-03 5.9244387172510534e-03 +1096 8.3283161750877070e-04 -1.5504726939260674e-03 3.3001876650279875e-03 +1098 3.7034869904081905e-02 1.9228160676038147e-02 1.8032753935818546e-03 +980 1.4979712016169109e-02 1.8771493569785653e-02 1.9212151390059010e-02 +2511 -6.5513565863279961e-03 7.0048719095163635e-03 1.6956628788341518e-02 +2652 1.9028962692073575e-02 -2.3078345602912203e-02 1.8515156911772832e-02 +2650 -1.6327549397807187e-03 -5.0748401650521037e-03 -1.7224309483745044e-03 +276 4.3492180830020807e-02 -6.3806792408291459e-03 -3.1283761300262285e-03 +1883 1.8045360593466609e-02 7.4388946994768329e-03 1.7570298050333152e-02 +2468 2.2558847816087087e-02 2.9370513052713611e-03 2.7742962543554205e-02 +47 1.5503496951120490e-02 -4.2129896223422086e-02 -2.5976299452287145e-03 +82 1.0267776372528658e-02 3.0105958745117261e-03 5.3981639476138200e-03 +83 6.1192076616590381e-03 -2.6176977887461976e-02 1.1084439293956144e-02 +1799 6.9291809450661192e-03 1.5375264796153492e-02 6.3229218132496920e-03 +2496 6.8183401934192667e-03 -2.8085483997084665e-03 2.0005168718426475e-02 +1083 1.6525492504455029e-02 -1.7768818246554445e-03 1.2089158949396932e-02 +2259 4.2712369011350488e-03 -3.5916548738208045e-03 9.1800633762245225e-03 +605 5.5591188496569143e-03 1.2152326182518201e-03 -6.8443014126315128e-03 +1798 -3.8100707157711368e-03 -2.0192692136820479e-03 -6.5706663314465700e-03 +1973 3.2573067839904811e-05 2.9469295898156573e-03 6.3024237000663102e-03 +2682 -8.4033717397378870e-03 2.0491528623293603e-02 8.7333927489727133e-03 +2177 1.7802326976918411e-02 -1.1616902283463827e-02 -1.7731430110620321e-02 +1861 -5.7282538894495062e-03 -4.7559047561561013e-03 7.7347695558939687e-03 +2498 1.9460339667587596e-03 1.6778551793852460e-03 1.1994789812285333e-02 +2510 2.2392958645140237e-02 -1.6443872506198099e-02 7.1727049222996735e-03 +1200 2.4816972137083143e-02 -2.0263218733266503e-03 3.9398776697799433e-02 +2558 -4.6286293231560235e-02 -5.7531913465684809e-03 2.3345515859508715e-02 +2753 5.0096434707820542e-03 1.1596738031971360e-02 3.7878496611791782e-02 +2752 5.4340904261416618e-03 -2.0243339222722305e-03 -8.4021475595123676e-04 +1198 1.1031632086386260e-03 -6.6284988348713682e-04 -5.0629424056531005e-03 +2754 2.6204183430068268e-02 -3.4079135238347311e-02 1.3721000058427834e-02 +2501 6.4684879187665101e-03 6.2465572452132080e-03 5.9792598772356173e-03 +2500 -1.7109065514564446e-04 1.1460096009424303e-03 8.2376553898428021e-03 +627 8.5538209732368854e-03 -1.4767531018920138e-02 9.7015040350912907e-03 +949 -2.3365186709189537e-03 3.4707773752304795e-04 -5.6385665857690698e-03 +950 7.7441200454656130e-04 -2.6956139556872393e-03 -2.7612373765497785e-03 +951 5.2029444549962812e-03 -2.0565784500655788e-02 -4.4965116805389758e-03 +2502 -2.6046970644990015e-02 6.8968253093394227e-04 1.3374976860606612e-03 +2856 -1.8754504525180887e-02 -1.8059418159097795e-02 -6.7585045212829372e-03 +1896 -5.2212321792131488e-03 -1.8552158385584293e-02 6.9043170183850392e-03 +1894 2.5479414787969762e-03 -6.6986859354188069e-03 -3.2419446118170489e-03 +1153 5.4203046425034258e-04 4.0030769978356077e-04 -6.2453859536055513e-03 +1155 5.2867294868279742e-03 -7.9556123372144152e-03 1.1005959600172706e-02 +1594 1.2683177461211828e-03 -2.4311368193638645e-03 -1.3565790517228453e-03 +1813 -4.0924825895688665e-03 -3.9381830993441246e-03 -1.9592356373734250e-03 +2849 -1.1362750538618085e-02 -1.2171876986730498e-02 1.4409435886513028e-02 +1863 -6.3864621842001550e-03 6.7735358323452056e-03 3.1719599132016057e-03 +2746 -1.5469425405131782e-03 2.7363996734022862e-03 5.1398616888283719e-03 +2670 -1.3812864362881367e-02 2.1705535354043872e-02 1.3509027925839443e-02 +2747 1.1974414150024660e-02 -1.1969197143667895e-03 2.2629408875996047e-03 +1386 6.2671623183169238e-03 2.4823914988914196e-02 6.5677823047085443e-04 +653 -5.1599573752387443e-03 -2.5493478546624680e-02 -6.5434448413505038e-03 +926 7.2669998577159162e-03 1.1446462082948267e-02 -2.1255557636207765e-02 +2965 -6.9717412272180326e-04 -1.5368196713071822e-03 -4.3560463796663363e-03 +2559 -5.9996820377555375e-03 1.0522945102561269e-02 -1.8210455002597035e-03 +2557 -1.3106592683408856e-03 5.1658193362862266e-03 1.1587316076454362e-03 +568 -2.3608167565354280e-03 -5.2891448811488641e-04 4.4025337252297046e-03 +2748 8.2119798044088636e-03 -1.3059140903982263e-02 -6.6157756836727928e-03 +2193 9.7989066353472995e-04 -1.7457755249689455e-03 4.2140914094622346e-03 +2855 -1.8113109673810319e-02 8.0300149462006979e-03 -7.1238616914684558e-04 +1148 2.6451299519906542e-03 -1.8956974803580984e-02 1.7202121014611712e-02 +2835 -2.1664020609240115e-03 -3.7618378045891604e-02 1.1606139127262736e-02 +2854 -5.2915164672356115e-04 4.2915813221700830e-04 -7.5013314811170332e-05 +1895 -1.1479718292546390e-02 9.9463855459351030e-03 1.0601862516128443e-03 +1811 -1.8511299900154887e-02 3.3244944758598631e-03 -3.3711726593162739e-02 +701 1.5346043080904532e-02 2.3562039497479318e-02 3.3422187716060384e-02 +702 -1.4022093162415972e-02 -7.6166831318805759e-03 -1.0644566458015300e-02 +1199 -2.4052163011099952e-02 -6.7151932404091157e-03 -8.0741611036268929e-04 +2922 1.0405846370253661e-02 1.1586910639070554e-02 -2.1674633280361704e-03 +1951 -8.4343392013454049e-04 -4.7799410025748485e-03 -3.1879787442645586e-03 +1953 -3.0491765182806108e-02 -4.2130665850787820e-03 -1.6714681590483338e-02 +1471 -5.4470112012293282e-03 2.0032216409475397e-03 -4.7889757388173482e-04 +1473 1.9042045839505518e-02 2.4700418287907804e-02 1.4933854117461074e-02 +1472 -2.0083231353600047e-03 -1.1545034424755319e-02 -5.2798487075402956e-03 +2848 2.3890484902998653e-03 3.3175821137516482e-03 6.5327339718523696e-04 +2823 6.2875642236274332e-03 -3.5187101840121770e-03 6.3327171050380198e-03 +729 2.0840388706297258e-02 -1.5180749229182331e-02 -1.9362824520812810e-02 +727 4.8850686303507113e-04 5.3985817997914826e-03 -2.4574835335361149e-03 +700 1.3397691204924892e-03 2.2719336711681179e-03 -4.1923598971101844e-03 +1598 1.7061025530195183e-02 3.2222793877908461e-02 -1.0283921833569964e-02 +1597 -3.6497232316577378e-03 -3.1269149254987642e-03 -1.1029988864271244e-03 +2895 1.3514161725960401e-03 2.6090965453763645e-02 9.7900966149702395e-03 +728 -3.9598907649491796e-02 -2.7189973581232887e-02 4.3738079386143238e-03 +812 1.1046023324337564e-02 -1.5971502464727092e-02 1.3310767468809659e-02 +1262 -1.5374242010029232e-03 -1.4763338086030424e-03 2.7304112720278599e-02 +2893 -5.4948038397422601e-05 -3.1230716259123144e-03 -1.8280388127044243e-03 +687 1.1133644362356041e-02 1.4884444941389885e-02 1.8131008183894237e-02 +1261 1.5886816390263596e-03 1.4529604172914599e-04 -6.0133323025452160e-03 +1599 1.5549299797864066e-02 -1.9942922602794243e-02 -4.1801360972183619e-03 +2894 1.8427617353611756e-03 7.6344855353184691e-03 5.3077184126877949e-03 +2920 -1.8255942177424142e-03 -5.0166236414160635e-04 -8.0998813872550069e-04 +1300 2.1068028706022505e-03 -3.4279307890623641e-03 2.0485299054017986e-03 +1302 -4.3217708117377742e-03 -8.9748573564506322e-03 2.9920705703221414e-03 +1149 -2.6583197256627215e-03 1.4660647838653913e-02 -1.1191967427990600e-02 +1916 1.6188153560370774e-02 -1.6659346144415527e-02 -4.9039728423040238e-03 +1915 2.5431057728170572e-03 7.0924300541493571e-03 3.2769957751829387e-03 +1964 8.9409735506434246e-03 -1.9951108263702791e-02 7.1203742374692980e-04 +1909 -1.5786094510882407e-03 -1.0163593447824527e-03 1.4566949236926767e-03 +1923 -1.7572379894547650e-02 -5.6737027189433572e-03 1.5771285922736539e-02 +2939 -4.8117369612183415e-03 1.7125803692995760e-02 2.4777195824699835e-02 +2484 7.3840188390934883e-03 -5.6176473123056153e-03 8.2202001263530465e-03 +1652 -1.7707485788751275e-02 -2.5772373806989914e-02 -2.1162574911061053e-02 +2174 1.3843353726400765e-02 5.0189199014080404e-03 -1.3905398913004168e-03 +1391 -1.7976892064541724e-02 -8.2164763151726106e-03 -3.1155327372177754e-03 +2358 1.1962389517431130e-02 -9.7271836499997939e-03 1.9363457235311177e-02 +2833 3.3048215188704521e-03 7.6705961270973014e-03 3.5948080591960440e-04 +2552 -5.5544587407584728e-03 7.4122175527886521e-03 -1.8313577158800800e-02 +2551 4.3408217803329544e-03 7.8200534552903009e-04 -5.3350187765316426e-04 +2671 2.6790167214135489e-03 -2.0248975073625321e-03 -5.0151848159576224e-03 +2553 1.9007600181814376e-02 -4.3600306151209784e-03 2.0901269161671416e-02 +2673 2.4015000235925170e-02 6.4278791086091573e-03 -7.7374903490316739e-03 +1339 4.8524467350900850e-03 2.8722994673092898e-03 7.0777696063644693e-04 +1340 1.8456660392412456e-02 1.5549482298136640e-02 -2.0103841732711292e-02 +1341 2.0104579822004514e-02 -3.5520744334359717e-03 -2.7578314136694877e-02 +133 -3.7601056411361712e-03 -5.3748495605671180e-03 2.9239870134701576e-03 +2288 -9.2972144649410926e-04 5.5180074157998799e-03 -2.3328951262108110e-02 +88 1.5682732986040844e-03 3.4388152718994899e-03 1.5981450983016733e-03 +2147 -2.9905487444098919e-02 1.0728812982508352e-03 -2.8650000235533036e-02 +2148 1.5464696167331300e-02 5.5414910916817715e-03 -6.5546931084799805e-04 +2146 -1.8230678416775749e-03 3.3091821081515298e-03 1.3568461825002137e-04 +654 -7.0384284164320488e-03 7.4231172912066256e-03 1.2263992988172196e-02 +1877 -3.0189855795430938e-02 1.1319730392311909e-02 5.2039456023995255e-02 +651 1.2026980906214166e-02 -1.8184435088736469e-03 6.6623644688027141e-03 +134 -1.0489711303413531e-02 1.2459192226358927e-02 -2.3887395358859172e-03 +2275 7.5864908123545713e-05 -7.2816572565102535e-03 -3.0071220118254530e-03 +2173 -2.2699626277190034e-03 -3.7104368157424711e-03 9.5110028364115264e-04 +89 1.2952534832102671e-02 -9.1357989414003714e-03 -7.6678860707874857e-03 +1392 -2.4023431454191543e-02 1.8684899429111227e-02 -2.4651396025691094e-02 +1974 9.1978048668495370e-03 5.1342609952406137e-03 3.8199554563246125e-03 +1766 8.6131175608173769e-03 -9.9931969473018144e-03 -1.8797475558107728e-02 +1390 6.1676214943951323e-03 -1.3163812664336548e-03 7.2769081339383009e-03 +14 1.3026928640914759e-02 -7.9246773232783986e-03 6.0494467999000125e-03 +13 -3.9835047316365687e-03 2.9251201719530735e-03 -1.0081952523075890e-03 +15 -1.1822559972985029e-02 1.7196540578607637e-02 3.5016015120775228e-02 +2946 3.2031810406276764e-03 2.2330375203324041e-02 1.9992521552579065e-02 +609 -5.6442614408524633e-03 -1.8295695870441765e-02 -5.7083914178542184e-03 +2114 1.6908393769684432e-03 -7.0012056213084699e-03 -2.3651258613386641e-02 +2175 1.8381909211270355e-03 -1.3868222426637884e-02 7.6081624390162564e-03 +2277 -1.7441681959977837e-03 -5.4675378293450047e-03 3.2505147678361167e-03 +607 1.0739819862379005e-04 -2.3638877570891820e-03 1.9795598522192866e-03 +1742 1.2633562364312777e-02 2.5741832023228849e-02 -4.7312365975859553e-03 +1330 7.5562476774450977e-03 4.0144115980008197e-03 5.6560647464565204e-03 +887 2.6114983004236543e-02 -3.1318367078470343e-03 -1.2081364393974751e-02 +737 -2.3309512449577355e-02 -5.3606209722661079e-03 -2.3879337765724398e-02 +835 -9.6357394082609066e-04 3.6994827230038755e-03 -2.6810490496308437e-03 +1482 -7.2801867877707077e-04 2.4225133583745818e-02 3.9651103070229739e-03 +2379 -5.1827649205566408e-03 -3.5126295115431361e-02 -1.9569675228800824e-02 +1658 6.3690880184586064e-03 -1.2977577828632772e-02 1.3896195834272668e-02 +1448 3.1206320773045505e-02 -1.4445557749052217e-02 -8.3124438857111790e-03 +1816 2.2448557394657812e-03 -5.2884912669046297e-03 1.8166688355684044e-04 +1608 4.9226919322663907e-03 -2.6451426905897558e-02 7.8749370243974531e-03 +1480 -6.1431591331264166e-03 -3.3924603235552511e-03 -2.6289784620391245e-03 +1657 2.8868254970058778e-03 2.9750208823237645e-03 -3.8682064416397208e-03 +1607 4.1081218867835091e-02 -1.6698456077938257e-02 1.3299589574638825e-02 +168 -1.6827519820442102e-02 1.5990937465839589e-02 -4.7847063284773674e-03 +890 -7.1757767064181011e-03 2.0077597733959749e-03 6.1921524535247605e-03 +2218 -8.7212137286817276e-04 7.6141030472162198e-04 -6.1874167248991852e-03 +2220 -7.6344673485804039e-03 2.8279619464767832e-03 -1.6792052462921484e-02 +1659 1.1142081125200343e-02 8.2558053236283322e-03 3.1075886422745599e-02 +891 -5.7076416844745043e-03 -2.5032367546580413e-02 -1.2083138126318770e-02 +889 -1.4028864433905406e-05 -7.3568046564499105e-04 -7.1405685859665243e-03 +2389 1.8484462270001918e-03 -1.0685866786847022e-03 1.4965562459658191e-03 +2391 1.0567130006195712e-03 9.6923368494847215e-03 1.1804070081242573e-02 +2219 -5.4041931425878416e-03 1.8065485414727887e-02 2.7700290782498603e-02 +2390 4.5789787680260968e-03 -2.8402063976887158e-03 7.0281556870322726e-03 +1606 8.3396654840339375e-03 -3.5030068268838582e-03 5.2314662496132664e-03 +824 -9.9670984808425574e-03 6.4001513331387863e-03 -1.1236214923352937e-02 +1447 1.4495492638224355e-03 -2.5435316397636929e-03 3.6685807465574168e-04 +886 3.0360613840284822e-03 -5.8238531581665835e-04 -3.3983570475139670e-03 +1449 5.3110590869433344e-03 -1.4162524518216042e-02 -1.5302302990971264e-02 +1817 1.9101591876363320e-02 5.9443753709904146e-03 9.7885750673456211e-03 +1818 -6.1139642453675730e-03 -1.6895833809356438e-02 -2.5602652471123762e-02 +836 3.8014595195686972e-03 2.7094439319730223e-02 9.2684851351664717e-03 +1619 -2.1179763776886108e-02 -1.1997011124107799e-02 -8.9522889952225650e-03 +1553 1.3470178521459373e-02 -4.1271321869352064e-03 3.1631746072947912e-03 +2888 7.3429315808743751e-03 3.0807837373089300e-02 -1.5699599641182892e-03 +1618 -1.5126857619326769e-04 -1.4541609347642383e-04 3.7041975125469643e-03 +166 -2.9711942674865246e-03 -4.7242118315528770e-04 1.2014974058077270e-03 +1481 2.3361850202435032e-03 -4.4706597699912870e-03 8.8727575767697867e-03 +1622 1.4564951687392790e-03 1.6866311793051036e-02 -1.8717583031081612e-02 +2658 -2.3277680943928885e-02 -3.8264703647800831e-02 -1.1333614387147372e-02 +2967 2.9626953243533150e-02 5.4140766839802495e-03 -7.6687857198176916e-03 +1536 1.5765348437856326e-02 1.6703381852424604e-03 -8.3856359142604302e-03 +1521 5.4527727675275405e-03 3.8690362820649131e-02 -8.2725696570238299e-03 +1581 5.1106065529625752e-03 -1.8110026453781586e-03 1.0883818751379131e-02 +1579 2.0623991107023179e-03 1.0056713944889206e-03 4.0761070632739050e-03 +1710 1.1437479822743080e-03 -1.0154292280679454e-02 3.2713436846339650e-02 +1186 -4.4492923668652132e-03 -2.4978099447640157e-04 5.9112623376066193e-03 +2543 -3.7920339455953180e-03 -1.1278866443057020e-02 -6.7693936881769072e-03 +2542 4.5684624412809099e-03 -5.6252288507880688e-03 -3.9475166201104039e-03 +1580 3.1278702068878748e-02 -6.5306513654330442e-03 -4.5551115856984910e-02 +905 -2.1610706113562247e-02 -1.7641023454758879e-02 -5.4676106399084998e-03 +904 5.4870596073826172e-03 3.8334340267238355e-03 -2.5869761477674853e-03 +2028 2.9065629897574812e-02 -5.9439719935494529e-03 1.6292367927732126e-02 +189 9.3455050144888724e-03 1.6223011900241620e-02 1.1803023150635491e-02 +1683 -1.5588761251305755e-02 1.7349800048787285e-02 -1.4155112863802298e-02 +2544 -1.1484725706440532e-02 -6.0213406621520971e-03 -1.1587995550406587e-03 +2026 -6.7174177693729467e-04 -6.8274639917647968e-03 -3.2873235538377833e-03 +167 -1.1899736032956609e-02 -3.3813559159993629e-02 8.9399937120015500e-03 +2387 -2.0498951015763805e-02 3.3070147324670028e-02 -1.1536069561105847e-02 +99 -3.6422574582121330e-03 1.4410587002252751e-02 -2.3169665791118517e-02 +2700 -9.8698076580403943e-03 1.1669578561339206e-02 -2.4075068295725546e-02 +97 -1.4259165313439340e-04 1.9864840344682605e-04 -6.3361191010914758e-03 +800 1.5061612237736164e-02 -9.3639123126403861e-03 2.6973830024849036e-03 +98 -1.4043943277813459e-02 -9.0233893106779692e-03 -1.6266721167136802e-02 +1682 3.3186116026496952e-02 1.6873428612490880e-02 -1.4751852747390663e-02 +1746 1.9370748354841344e-02 1.0693060217845799e-02 -1.4022120992820183e-02 +1681 7.4804799448721627e-04 1.2684448023950934e-03 -1.7982536208747332e-03 +1745 -9.8449829181270821e-04 1.2047647672748579e-02 -1.5135790876533807e-02 +1744 2.8565473494863648e-03 -3.4354100272685783e-03 -3.2757673554232240e-03 +2656 -1.5803407598866236e-03 -2.6226238111290907e-03 5.0147401161574452e-04 +2657 -2.3773271768188779e-03 1.4851273097540009e-02 2.4945189384359200e-02 +1708 -1.7454933959636367e-03 2.7230579478355757e-03 2.7681578215379963e-03 +1769 -2.2150434325185213e-04 1.2800346054513372e-02 -4.0997035634553453e-02 +1814 2.5497426143630212e-02 -4.8379934368294464e-03 -8.5211316838654464e-03 +1704 2.0611114420260802e-02 -2.4094672410232030e-02 -2.9428329010090194e-03 +1026 1.0393414551170047e-02 1.7204066873845788e-02 2.2321970886898850e-02 +1815 -1.1623604680088741e-03 -2.4502695455224200e-02 -1.0166107032548071e-03 +1532 -1.8589180206606121e-02 -3.7683767982198014e-03 7.3408523469477996e-03 +941 -8.3825494768812684e-03 9.9999303876464728e-03 -6.9499019071926123e-03 +1960 -7.4980777992030168e-03 1.8218392156243172e-03 1.0305119054155908e-03 +1187 -2.3207213824781643e-02 1.8324303642024357e-02 -1.9512725562694424e-02 +1263 9.0095679256390910e-04 2.1113231544984578e-02 5.0741815917023864e-03 +1025 -2.2685204600766559e-02 -5.9409436351966194e-04 2.5400427094079803e-02 +1887 -7.1682012560271907e-03 7.4540113685597157e-04 1.4793695785930188e-02 +1024 -3.4909289285892884e-04 -1.3744843554525108e-03 7.5840286467743993e-04 +530 6.5610172805093115e-05 7.7921971566953952e-03 1.2723326909335976e-03 +2668 2.0093851164334213e-03 1.3473227859328711e-03 -6.1841440271114328e-03 +1154 2.9017277025639544e-02 -1.8424705722040128e-03 1.0253748715918411e-02 +2027 -1.4101026826825130e-02 1.3318100599771896e-03 -1.7879809522154132e-02 +1140 1.7952081732834982e-02 -2.6578429355565449e-02 -3.3163820913784761e-03 +964 -6.2637932763444691e-03 2.2697828982891049e-04 3.1960778652555255e-03 +1625 -6.7962566664625940e-03 2.3143046254819220e-03 -7.8118615485094373e-03 +2620 3.3514384494377808e-03 -8.0082387486889097e-04 -1.8026791008197982e-04 +2622 2.1265500524111507e-02 -2.9223037508775643e-02 3.1429656434015813e-03 +965 -2.4555711287906757e-03 1.3166039011577190e-02 -1.5683609226585273e-02 +966 -5.2507666805404109e-03 5.3647720979581748e-03 -3.9133241781422164e-03 +2621 2.5206089477555807e-03 -9.1487089172616895e-04 1.6795997177734194e-03 +546 -1.8878533086607845e-02 2.0284769431783214e-02 5.4454986423508513e-03 +1109 2.5991504133722872e-02 1.1459035917877004e-03 -4.5513567366134138e-03 +544 -8.9185457072545413e-03 3.9545568535896583e-04 -5.9386787890071630e-04 +2521 -1.8748184898586418e-03 -4.9628261331029410e-03 3.8564656912990123e-03 +529 2.3017454297977816e-03 4.3384343762957285e-03 1.2943506674875115e-03 +531 1.7737180080370896e-02 -2.9707971184129785e-03 2.3616173972178221e-02 +2570 -8.3164784385752911e-03 2.2589664102287348e-02 -5.8302546347285414e-03 +2021 -1.6052517939689249e-02 8.3126478698856456e-03 4.5506003660358684e-03 +2523 -1.5427539924853094e-02 -6.9991637567759632e-04 4.4854991416398201e-03 +1256 1.6252594354645551e-02 2.6279680211593277e-02 1.6975445098858125e-02 +1454 -6.0120340233957813e-03 8.2897290874828378e-03 -1.1604999728104280e-02 +1255 4.0033737888359334e-03 -1.1865658780993548e-03 4.1961828660972318e-03 +2083 -4.0605675827162105e-03 -2.2160671866707248e-03 1.2179370646058260e-03 +1624 -1.2288900492367137e-03 8.8366401501007927e-03 -4.1496489117759860e-03 +1138 -2.8390875001824268e-03 -4.7205309489500068e-03 3.8194383310805446e-03 +2474 -1.0465297105351256e-02 1.1827291972687719e-02 -1.8680767327970357e-02 +1626 4.4713884252401094e-03 -2.0348484951513493e-02 -1.4920295898928956e-02 +2669 -7.5033221511527125e-03 -1.2115458517024684e-02 -2.4870059375358668e-02 +1901 1.5507212203683984e-03 1.7944925069605721e-02 -1.6020299233706063e-02 +1136 2.9659716361680757e-03 -8.9958232917538121e-03 1.1148170313409630e-02 +1176 -1.9115449879438900e-02 -2.6566205884449547e-04 -5.3905805849683601e-03 +1174 2.3097779537460182e-03 2.1605933086635029e-03 -2.7526896589443518e-03 +1286 -1.1987489538586180e-02 -1.5157339873929313e-02 -1.1985104806533855e-02 +1175 2.0291712874048952e-03 1.9308077413153577e-03 1.6394991073711701e-03 +1651 -3.9660967028469253e-03 -4.0410690417234246e-03 -4.2575830185507587e-03 +626 9.8203145978388601e-03 1.2964043265818776e-02 -1.8117987902298975e-03 +1992 -3.2760255572068728e-02 -2.7833620839539238e-03 -1.4762448218411404e-02 +686 5.0411302128315983e-03 1.9290942334199306e-02 -6.3019151181231215e-03 +2079 -2.0906316934799853e-02 1.4169030627427808e-02 -4.1063926240393303e-02 +1932 2.8919413009722308e-02 -5.3975426858170680e-03 -8.1956889687488429e-03 +2094 7.4002525969647922e-03 -3.9630629609563499e-03 3.0645013654591480e-02 +2085 -5.9991905395898630e-03 9.9889086781168226e-03 3.7523079642248322e-03 +1930 4.4755273070923237e-04 -1.6801639558135175e-03 -1.7017419800244451e-04 +2861 6.2364969517422954e-03 -2.7587151886822319e-03 -1.5926190592981646e-02 +1493 3.5468013024929517e-03 -2.3123934854023045e-02 7.1190960913778412e-03 +2645 9.8106603432352012e-03 1.1153432316985852e-02 -1.5557888567599768e-02 +2646 -2.1747134292652341e-02 1.1392616622577458e-02 -7.8243538097423522e-03 +2644 2.7253443142858545e-03 7.5369652336583970e-04 3.7132727978373835e-04 +2000 2.0249815959291421e-02 -6.1775629292141780e-03 6.8312027941316803e-03 +2001 -4.2192856264672701e-03 5.1560208308850993e-03 1.3229412237777032e-03 +1999 -6.6173922921111622e-03 -5.3963946296385762e-03 4.9945327249833437e-05 +1501 4.0574460852904495e-04 3.6687828646074865e-03 -5.6002358004467127e-03 +1503 1.9992929393917069e-02 -2.0190728972733135e-02 -2.3446286352340868e-03 +87 -5.5805028220772181e-03 6.3376370605538988e-03 8.3548445481990644e-03 +714 -1.8892656166012912e-02 1.6340969775473398e-02 -1.4916860985876162e-02 +1494 1.4642280623333132e-02 5.8148157196664888e-03 -1.4222414671233875e-02 +1492 -5.9711398069812443e-03 2.8492232445737325e-03 -6.9933638102367057e-03 +712 -1.2154816970288568e-03 -5.4846227419674759e-03 4.2120761913251340e-03 +1502 1.1611771754558752e-02 1.5979389529503191e-02 7.5254213186472380e-03 +1979 6.4246773154461772e-03 3.0649054518736160e-02 1.1978009329909377e-02 +788 1.1404113579614685e-02 -1.5093205626450397e-02 2.1657219752338489e-02 +940 6.8097500831952200e-05 -3.8834596199981836e-03 -5.4053606940202090e-04 +1477 -5.4342400203765320e-03 -1.4927924219040936e-03 -1.2137235036763828e-03 +2092 -1.3333186908874998e-03 -8.5845315110784654e-03 5.6190673259629929e-03 +1884 -5.0404253826363491e-03 1.3651989175295426e-02 1.4742877533498752e-03 +2093 1.6184917345460108e-02 -2.4912547127474913e-02 -2.8503638202172586e-03 +2660 -6.1486348772794627e-03 8.6669691068985439e-03 -9.4095612089894424e-03 +1334 1.5051472985026155e-03 -1.0189389042827658e-02 2.7140398704626829e-02 +1487 3.2296772065214864e-03 -4.2364529959056825e-03 -8.6364428364256243e-03 +1764 1.5867142999034980e-02 6.9459907449376593e-03 2.5010169483545858e-02 +2251 -1.2576655749042566e-03 -2.2932448355914483e-03 -1.4155615348433750e-03 +1312 3.5211604522548978e-03 -2.1147848919840033e-03 4.1708311466285702e-03 +1313 1.2791362596996363e-02 -2.2647721200362819e-02 1.1667593266450442e-03 +1425 -1.1512703776168096e-02 5.4541634148625078e-03 9.8839281355888094e-03 +1423 3.9325689857588203e-05 -5.4500097748778004e-03 -2.4423909069249015e-03 +2859 -1.8072762596591466e-02 -8.7186634061604193e-03 -9.7993513907090584e-03 +1314 -2.1822341995167808e-02 -6.6883902681705064e-03 -1.1360226365352173e-02 +85 3.3177842798946902e-03 -3.5620695097239355e-03 -2.0965001881358782e-03 +86 -3.7451529106182265e-03 1.4109880052992105e-03 4.5955410142622466e-03 +2857 -2.9042313825193848e-04 3.4279782771837056e-04 -2.5790157162998138e-03 +2858 -1.0293332927166674e-02 -1.1949414352055796e-03 1.4892826846348361e-02 +2860 5.8918983395338251e-03 8.5621517095547169e-04 8.0009093193368023e-03 +2329 7.8503986371060051e-04 3.7651014696640671e-03 -8.8096921499679034e-04 +210 -3.8995278840220624e-02 -3.6988882840969218e-03 -1.7872861346306724e-03 +2959 -9.1493939665495700e-03 1.5778302813127794e-03 3.6777360127864568e-03 +2960 8.4888424995535963e-03 -4.2614688587300342e-03 -6.6517091829582662e-03 +1257 -8.1638675477717117e-03 1.7274112483939071e-02 -1.5405634046206176e-02 +2862 -1.8844381478340579e-02 4.0529387535081620e-03 -1.5852721234555996e-02 +1922 3.4671185015904556e-02 -5.0299850702608890e-03 1.8823106725760264e-02 +655 1.9971090755080247e-03 6.3647936705711720e-03 -2.5217320638763838e-03 +2961 -5.4661955660261956e-03 2.6164529856192682e-02 2.6949639525874786e-04 +1239 6.7497601078422556e-03 -1.7600895963764268e-02 -4.7563380338314344e-02 +1980 -1.0021813476428994e-02 -1.6463847757667179e-02 1.7711517140407074e-02 +2828 2.8488384474874121e-02 7.3664169068486109e-04 5.4129823631492054e-03 +1989 -3.4896411705386959e-03 -1.2982690741283295e-02 6.2993522183554364e-03 +1978 -3.0136635411696206e-03 3.8892575451199489e-03 -1.2570805054460494e-04 +2885 6.1526077450895882e-03 -6.5247482399896010e-04 -2.9049218685122478e-02 +656 -2.0028932203482959e-02 9.0947054061512960e-04 2.0661865614516127e-02 +657 1.6060660794104432e-03 -3.2278095255562134e-02 -1.3334324599306382e-02 +2884 4.3092314427858441e-04 5.6415576483911309e-03 2.8635212330520700e-04 +1948 4.4824140290747527e-03 -3.8878906752376494e-03 5.1929666041794524e-03 +1385 -8.0666022450985916e-03 2.4497427270559952e-02 -1.0775290059456549e-02 +1384 1.1874379634186506e-03 7.8859057506141183e-04 1.1495811420182116e-03 +2253 -1.8427937202867607e-02 -9.4231292630929751e-03 1.0062524433543749e-02 +1990 -3.9903611927717400e-03 1.5557490271412549e-03 -3.3903500804924494e-03 +504 8.6156939694731114e-04 -3.0019377258835842e-03 9.9608527880819878e-03 +2947 -2.2494451333655695e-03 3.9709346871107127e-03 -8.5077340404236153e-03 +1424 1.6467485867311081e-02 8.0289210623968165e-03 -1.3904620539186726e-02 +2886 -1.6151454303584677e-02 9.5483198136790352e-03 6.2468002834204107e-03 +1237 -2.1865509741698344e-03 1.9225590793508635e-03 -8.0694197202142888e-03 +1952 -1.2959767136412250e-02 -9.0031378297066224e-03 7.7075806026554909e-03 +2952 1.2072176510561134e-02 -1.6338803685475644e-02 -1.1807376917881328e-02 +2982 -8.4523843753564702e-03 2.2348935717295119e-02 -1.7683017960233208e-02 +738 -1.6217590131628842e-03 6.9829013036488985e-04 4.0342151071480229e-03 +2527 1.4193712931817532e-03 5.8974329471811627e-03 -2.9210716468840263e-05 +2385 -4.1482441316837374e-03 -1.3719230840093962e-02 -1.2993517996470607e-02 +2425 -1.4465098352066167e-03 -3.1111907730388493e-03 -4.4047216814153871e-03 +2044 -5.7620546817443250e-03 6.8306432892621090e-03 2.0609598912435388e-03 +2349 1.9391258899283982e-02 -3.4769271219619994e-03 -3.9315195617987972e-03 +1670 -4.3529296927155223e-03 2.7433286891155182e-02 2.7134500326757575e-02 +2993 -1.2075783965207920e-02 -2.2649466541515145e-03 9.3294725571147208e-03 +2185 -2.0419679927965060e-03 -3.5288042892134197e-03 -5.1013473002737356e-03 +2427 1.1439697242711081e-02 -1.1523784404420387e-02 1.9680980494661219e-02 +2186 1.1554440818858569e-02 6.1275728438624855e-03 -3.0221221616227156e-03 +662 1.1498970714949603e-04 1.3669531507158210e-02 -1.5061526632790191e-03 +1669 -4.3143104222277597e-03 -4.1587383444198975e-03 1.4332476284705830e-03 +661 3.3232007319750095e-04 -3.7415135949772025e-04 -1.3010094397358839e-03 +1671 -3.2024124338063654e-03 4.9430186346865919e-03 -1.3697346108782662e-04 +639 5.5142690702038363e-03 2.5047034398931734e-02 4.6617380314428105e-03 +638 7.7259018467292677e-04 2.6375378689120845e-02 -3.7873988779694319e-03 +2609 7.3288922141688615e-03 -8.8635387548343780e-03 3.3564440493432136e-03 +637 6.0843122870206552e-03 3.1852778301610183e-03 1.3331449205977917e-03 +1781 -3.1848323909691868e-02 1.9591745223898005e-02 4.7192171753129564e-03 +1782 -5.8085873793759417e-03 6.7043702103595174e-03 1.4191463765063115e-02 +1780 5.6803632960420198e-03 -3.4922124025565888e-04 -2.0135285504820550e-03 +8 -6.1347785391437501e-03 -3.7957117580024661e-03 4.8700267800762783e-03 +2373 -1.9186788710903412e-02 -7.9872897010848966e-03 1.6353218680276321e-02 +2347 -1.8167617521787737e-05 1.0740160861728773e-03 6.1572600381359253e-03 +663 2.1866261249891241e-02 3.2394559805505492e-03 -1.9113436719187738e-02 +2985 2.0256862894007206e-02 -1.7619128904851982e-03 1.2796833451606707e-02 +2980 2.7157904987847780e-04 5.1409374670719167e-03 1.5853018615600022e-04 +2348 -9.4360817863006069e-03 1.2711446469767910e-03 1.3760560863694152e-02 +1332 2.9447240959921449e-03 -1.1292287006881077e-03 -1.8476615933539699e-02 +2970 -1.3360332783387011e-02 3.4366592390317321e-02 2.6989461221024223e-02 +1164 -1.7970846674422138e-02 1.9607302049298165e-03 4.3865140682806747e-03 +877 7.0919619657580854e-03 -8.7498351349779672e-03 1.5382274440219575e-03 +1373 2.1565272995753670e-02 3.1567455947589668e-02 -3.2216997860528812e-02 +878 -1.9905936947146468e-02 -1.3793035566378394e-02 1.6713196570238804e-02 +1855 -3.0137567913753453e-03 5.9184630584518680e-03 4.0209079046145324e-03 +789 -1.5651113485634353e-02 -1.3640026184329393e-02 1.2693829599915550e-02 +1008 3.4324003785802578e-03 -6.4961232398511601e-03 2.3068944142486260e-02 +1007 1.7843139638216463e-02 -1.9702300228568882e-03 -9.2852864941197176e-03 +2046 -9.8380559799232520e-03 4.4123362420771223e-02 2.0147384335746639e-03 +1368 7.5567381408305834e-04 3.6388250261282243e-02 7.1282592503638074e-03 +854 -3.2591894507711560e-04 1.4235217034221087e-02 -1.5835883486857383e-02 +2580 -1.5000539907721221e-02 -1.2600499762412015e-02 -9.7000986694905263e-03 +2984 1.1292754701215268e-02 -2.0758090676613043e-02 1.2430059030797101e-02 +787 1.0930024748110486e-03 2.5662992388281909e-03 -2.7461001166114540e-03 +2372 1.4560256354344847e-02 8.4749083215523713e-03 8.5620936712883452e-04 +2933 1.9720022985934900e-02 -2.8403073815115993e-02 1.0642084229532167e-02 +2371 3.3630150442003496e-03 -1.2404841399544738e-03 -1.3413919276386919e-03 +2579 3.1538076664978992e-03 2.7128870448755997e-02 -2.6133312296309094e-02 +816 -2.1849721394838362e-02 -7.8352844763325442e-03 -1.2873139988035199e-03 +814 -4.9996682481093962e-04 3.1024422426413488e-03 -8.9656879466663720e-03 +1006 -9.6676326637389098e-04 3.7070764340178365e-03 9.8348373813139048e-04 +815 9.5340040708662126e-03 6.3949428423990210e-03 -1.4291591267641800e-02 +929 -8.6680851353929545e-03 -2.9685260697141181e-03 -3.3408832286985178e-02 +2517 3.9932933347445597e-02 6.9745513928402550e-03 -7.2776182542882845e-03 +2516 3.2654919396984748e-02 -2.5364355220571760e-02 -2.2458418405441289e-02 +2515 8.2064475014944683e-04 -5.5729357525570872e-03 -4.1298307539968148e-03 +928 1.1510809522234143e-03 -7.9041921509348154e-04 -5.6703367411747368e-03 +930 -2.8339679620701674e-02 1.3962001541633816e-02 3.3465698682638871e-02 +411 1.6867807451046241e-02 -2.6940235321116064e-02 1.8597126539226957e-02 +409 -2.2691097579089739e-03 3.4762052682971514e-03 -1.2268941204142942e-04 +270 -9.9298944248082058e-03 -3.1615812478606634e-02 -1.2836619194925313e-02 +268 -2.4245617153595580e-03 1.3291013869772285e-03 3.8502047601950756e-03 +269 1.6692589187694333e-02 3.8573991809424451e-03 8.2950159226812641e-03 +10 9.0612933356886631e-04 -9.8463242993221357e-04 -2.4680862165826585e-03 +2578 -7.7734375134742601e-04 -2.4284230431597586e-03 9.2934376874279495e-03 +277 1.8934085544837715e-03 5.7513774035594266e-03 -2.3881683458945322e-03 +1139 1.2809138481804195e-02 -1.8251801132982869e-02 3.7401989843629274e-02 +11 2.8724363087525833e-02 -1.7834107092794052e-02 2.1993714222431210e-02 +279 1.6872980563974221e-02 -1.6805168260860415e-02 3.7320365594069746e-02 +1845 2.8524718344366682e-02 -3.7008834894691235e-02 1.1659911340780241e-02 +969 -5.4182123964237596e-03 -8.2199892324610305e-04 -2.2999704489420337e-02 +967 -5.4214588183167263e-04 -5.4888104482941130e-03 -9.3140711060519512e-04 +2020 -7.2266209586910575e-03 7.6899910305559588e-04 6.0015374794730094e-03 +2330 1.9136191325610327e-02 -1.6361245051474141e-02 -3.2029244767997130e-02 +1562 -6.4482368188386440e-03 -1.2643906628160957e-02 5.5154197669909479e-03 +2340 -4.9109023308153846e-03 -1.4020027166438864e-02 3.1874235166669325e-02 +2333 -3.8982260371771896e-02 -4.8079067430752782e-03 -2.6778514642756897e-03 +1838 3.2077792284754325e-02 -2.2831856695098178e-02 1.1503099919450818e-03 +2921 2.3238675163168138e-03 6.9563381416115535e-03 -2.4966566900033845e-02 +736 -5.3153745372996296e-03 -1.2836279494514600e-03 -3.6420696900000926e-03 +410 -4.8250850319841755e-02 -9.6571801000597604e-03 -1.2095578027595658e-02 +2249 1.3071523225811836e-02 -1.8875430172716565e-02 6.5603065747398930e-03 +2248 7.3939674558973221e-03 2.9466238637292723e-03 1.9118319389903650e-03 +2804 2.1991886496899003e-03 2.6185844049351190e-03 8.8829016635032978e-03 +2803 -8.5678288705396695e-05 4.3325732666871317e-03 -3.4358076074122194e-03 +2250 1.4469636142586508e-02 -1.0413624697433021e-02 -2.2895659583799945e-02 +2582 3.3418775894465554e-03 -1.7216981618870450e-03 1.8487778776423717e-02 +563 1.2838135026371621e-02 -2.1342224406820223e-02 -6.5109637408445591e-03 +580 -3.3885710913063561e-03 5.1680156244581844e-04 3.8159960244635652e-03 +2581 -2.1830483542267421e-03 -3.6413211898174438e-03 4.4544801708353366e-03 +2606 -7.0804046259589672e-03 -2.5463931427355986e-02 -1.4843268587595982e-02 +2629 4.0691137386173444e-03 -3.3410996058390956e-03 -5.7556837710989019e-03 +2630 5.3612894307405188e-03 -2.2900170283005113e-02 7.1654641405391661e-03 +2607 7.2058683912499264e-03 1.2611808393992710e-02 -1.4808160912954442e-02 +2631 1.1946625686041917e-02 2.0111051732118402e-02 -1.2371637623552664e-02 +2763 -3.0371108751025971e-03 -7.9818449533606405e-03 1.2188117370479394e-02 +2610 -5.7918873671352154e-03 -3.8070163735703343e-03 -5.3459800601686081e-03 +564 2.5115435148730665e-02 -1.5222915712716140e-02 1.6862632566245345e-03 +562 2.9142735945118848e-03 1.6336073177392437e-04 -7.9331313637702790e-03 +1993 4.3107942625370873e-03 -1.0602818839349142e-02 -6.5076832897758468e-03 +1995 6.9464726858280527e-03 2.2964107478605920e-02 1.6110121075777098e-02 +1994 2.7267613104023279e-02 5.7487492449424223e-03 -1.2833589936111476e-02 +2608 4.5350240301549646e-04 -4.5280988686103559e-03 3.2097523142796554e-03 +2605 1.1384866735229414e-03 -9.2930426705337837e-04 -7.7765295588909985e-03 +470 9.0385036803437915e-03 -2.7533686383845450e-02 -2.2000612561629641e-02 +471 1.1683449369562761e-02 -1.0065940171042734e-02 -2.0603958145657776e-02 +469 -4.7479075372404917e-03 -3.5811449664499835e-03 -4.7011522085444292e-03 +1810 -3.2301869074242252e-04 4.8806352173278982e-03 1.3244380920423820e-03 +2771 -1.5975496817132714e-02 2.2111081620992502e-02 1.1440266598432124e-03 +204 2.2360533651612891e-02 -4.9913338931064791e-03 -1.3825289578193933e-02 +208 1.7072444315805308e-03 3.4054188495883939e-03 -2.3300243837884906e-03 +1366 -1.5058648531858622e-03 -1.7697465724066234e-03 6.8702779232516955e-04 +1147 -2.8913675402419861e-04 7.4280930351912778e-04 4.7631981076713724e-03 +2964 -1.8411843430628273e-02 -6.1225774765224592e-03 1.1361386370459395e-02 +2770 1.2388495873088979e-03 -1.0210605615763245e-02 -5.1970047940930403e-03 +2772 1.6170434372797183e-02 -1.4913630146991031e-02 6.8407410728204780e-03 +2692 1.1651459384681804e-03 -6.9183178350298489e-04 2.8001080973745853e-03 +424 9.5071031249549726e-04 -9.0416087264291950e-04 3.2613854394293942e-03 +426 1.5718393985823798e-02 8.7583116411654987e-03 1.3252310808321092e-02 +1301 6.5511122897037085e-03 -9.6225218655165163e-03 -8.5590746110072585e-03 +447 4.5058917333780750e-03 1.4105116534213286e-02 1.1892266793055221e-02 +1169 2.1829324618720516e-02 1.6251183463013752e-03 1.8183779607924937e-02 +421 2.4965091081930449e-03 8.0561541440047442e-04 2.2236407685158346e-03 +423 -1.5504667355875251e-02 -1.7634558890793227e-03 2.2782500770622188e-02 +2765 -3.7020441849798728e-03 -2.6162351347355690e-02 -5.3327621369894857e-04 +2764 2.2588223846894272e-03 -2.2521982516756881e-03 -8.1700176159493667e-04 +2766 -1.6773501955152158e-02 1.5571502849405032e-02 -2.1743366189503045e-02 +2739 -2.6061996849790943e-03 -3.3588970896403282e-03 8.7895419673679823e-03 +2737 -4.4825540188301325e-03 1.2183738406612375e-03 6.5535126431508503e-03 +2800 4.7017938120378288e-04 -2.4389648471343043e-04 -1.4908552764234166e-03 +2962 5.9889532700939723e-03 -5.2206116773141058e-03 8.1290313841076648e-04 +2963 -3.7460751637183543e-02 -1.5560668828841957e-03 1.3392245844087040e-02 +2200 3.4050892596975612e-03 -4.0223786894752960e-04 -2.0380115811644839e-03 +2202 -1.2324496667837904e-02 -1.5546505836672438e-02 9.9659607139363417e-03 +1345 -3.5843929233694448e-03 6.4932649343001192e-06 -5.2191575384143987e-04 +2738 -2.0999699837564379e-02 1.2045466540876086e-02 -4.9485816779459742e-03 +1347 2.6024046453634670e-02 5.0331418399389939e-03 1.7741477410857177e-02 +2890 -4.4121939842204300e-03 -1.7922029390286846e-03 3.5277185647007549e-03 +2194 3.9838317989455144e-04 2.6982390527567172e-03 -1.2228864154298468e-03 +2801 -1.1944498216669349e-02 6.8321034766679212e-03 7.2145825574330223e-03 +2802 4.3146818185890315e-03 1.1122097745280618e-02 9.7359805428463338e-03 +1931 -8.5514392526363104e-03 -3.4044233987424670e-02 2.2572612710152181e-03 +425 -7.8179640715121974e-03 -2.7850056512957983e-02 -2.9690536685132544e-02 +1520 -1.8507703212507096e-02 1.4182202319117782e-02 -2.1671308183254800e-02 +1163 -3.5810626176932370e-02 2.9845897733127443e-03 5.1982596346611910e-03 +2195 -2.4901830585169439e-03 -9.4962722501223153e-03 -2.0694367929935072e-03 +2787 2.7911857019605735e-02 -2.7253622539065808e-02 3.2681798087218620e-03 +1162 -7.5396517125967571e-04 -2.6076408178686924e-04 -1.9782554683549771e-03 +777 -4.6672017250899206e-03 -1.0439066508036277e-02 -3.5926487013434407e-03 +2948 -3.3320005773768255e-03 -1.1168545337848140e-02 -5.4576842302159819e-04 +1519 1.0325169886796281e-02 3.3369449409217347e-03 -9.6193420910545822e-04 +2892 -2.3440964013712599e-02 -9.6692947695777281e-03 1.7517181045731946e-02 +2891 -2.2407547031772889e-04 -2.1517850759168480e-02 -8.1197895294856780e-03 +445 1.7552100843874281e-03 -2.3645386390009140e-03 -7.0847546528061481e-03 +1346 3.3052377470249195e-02 1.3417081159682103e-02 -4.3734618231601498e-03 +1959 -7.0103311191382616e-03 1.1848256852676145e-02 -4.6074818323526834e-03 +2778 -1.3043903678797120e-02 -2.7149885111984067e-03 -4.8525158857161878e-03 +2969 -1.3552616038570300e-02 1.6765081098099838e-02 2.6123563589523578e-02 +1759 1.6041001804206075e-03 4.6941395007217366e-03 -5.4401307057699473e-03 +1761 -6.2061393794657508e-03 -9.9601048472564707e-03 1.7740182274934163e-03 +2201 -3.6951437039343545e-03 1.0547336104230934e-02 1.3854062013933530e-02 +2852 -2.7490421307640499e-03 2.5013863779119456e-03 -2.1104548472771368e-02 +2851 6.3281478835401118e-03 -5.8312731416755234e-03 1.5130448385502213e-03 +2853 -5.0724286138320749e-03 -1.4469422816908140e-03 2.4725519493617124e-02 +1760 -4.6653700456444056e-05 3.7562442147841867e-03 -1.0341116066125127e-02 +2873 1.7731770424473641e-02 1.9235455704023626e-02 -6.9846511122646851e-03 +2377 3.8250123423562116e-03 -1.7923957498220341e-03 4.6579063897563356e-03 +2368 2.9673945253503148e-03 -3.8146091771678130e-03 -5.0543170861667014e-03 +1411 -7.9466591118981529e-04 2.9485996397156573e-03 1.3168280509006110e-04 +2378 1.0878930484777592e-02 1.8000479987493299e-02 2.4901094565144007e-02 +1413 -1.7504218521966004e-03 9.1520370863042173e-03 1.8966508755408392e-02 +2366 6.2591268917139061e-03 -1.6520513397960818e-02 6.3746553810155413e-04 +1412 -1.6097189176691881e-02 -4.4473757155228675e-03 -3.1971782845782046e-02 +1333 -3.0448964133308800e-03 1.9116258112807148e-03 -1.4352134012127562e-03 +2370 -5.8754364760993764e-03 8.0175161768224808e-03 -2.6002942613139214e-03 +2365 -8.7570182172664966e-03 -2.4673396157644484e-03 -4.2235872557192652e-03 +2367 -1.8877434143938960e-02 -1.0164427036353764e-02 -2.3049569992932714e-02 +1081 8.3369045772153038e-04 -1.7515088856957834e-03 2.3362313393041679e-03 +2369 1.9795243577468820e-02 -1.4038338554434716e-02 -2.6262602949832806e-02 +2151 -1.8655588609371571e-03 -2.0041742072907914e-02 -9.5562274396900331e-03 +2968 1.3165446246534941e-03 -2.7126909264067560e-04 -7.2779655174325705e-04 +2252 4.7208267980197267e-03 -1.3613684662096238e-02 6.3828383054147396e-03 +775 1.4970174559127689e-03 6.7705913873773822e-03 -2.5343977818469013e-03 +1882 5.6052452069827955e-03 1.2237271550263792e-04 -2.8987366001939989e-03 +2363 1.1241687664282254e-02 -2.0785660121899072e-02 -2.0366916069194382e-02 +1988 -2.5049928484499238e-02 2.4129526158746914e-03 1.0562547961873102e-02 +1554 -1.4974182912209841e-02 -3.6893322071681674e-02 -1.4157780764349705e-03 +1552 3.0292258614224416e-03 -2.6138661686229119e-03 -5.8784157118391064e-03 +2617 -5.3019789076966788e-03 -5.4407651702230008e-03 -2.6537597743714705e-04 +1383 8.3924471797262572e-03 -3.5875439197127789e-03 1.8369596128440007e-02 +1483 2.6973542198317148e-03 5.4322210797668078e-03 -2.2879805732633567e-03 +1611 -1.3126377159250500e-02 -1.0586767855787872e-02 7.7721947941535802e-03 +7 -3.9462524404265988e-03 2.2353879918969310e-03 1.7325682760994613e-03 +992 1.8652873131538909e-02 2.0600623322933307e-02 1.8848644557443287e-02 +1381 7.5789670517051376e-04 -1.4901369305839625e-03 4.1388594486968314e-03 +9 2.2962301705872559e-02 2.2675018805422813e-03 3.3096194662907891e-02 +2988 1.7148724752328190e-02 -1.0771997387293133e-02 -1.0772504346944770e-02 +888 -7.4611140642857334e-04 -1.8332295705089721e-02 -1.7155707211437759e-02 +1648 -1.2334592093741264e-03 -7.5910949114879470e-04 9.1363249918808634e-03 +1650 1.9152853355494882e-03 -1.6963040661859368e-02 3.3231490606119775e-02 +1485 -1.9817235208264498e-02 -2.9946270767553906e-02 1.5717682744085153e-03 +2986 -9.5329906622012451e-03 3.3275786311113965e-03 4.1594860724443001e-03 +2529 1.6456165411418887e-02 -3.0608142522009119e-03 -1.3822325329921737e-02 +1649 1.5490468264228788e-02 9.5941695528828901e-03 2.5536854743478346e-02 +794 2.4622612409343783e-02 -6.2700744850881091e-03 -2.1648926143089147e-02 +2528 9.8874713149619542e-03 1.9112707115508604e-03 -3.9227800532555243e-02 +94 -1.5340175054824453e-03 3.1544060429976230e-04 3.0468523226393988e-03 +1961 5.9932643529161823e-03 -3.4098810171492473e-02 1.3357128665251685e-02 +96 1.1017107680624841e-02 -4.3324853280338360e-02 4.1872744874460010e-04 +1389 5.4917136612222806e-03 3.0005539683944501e-04 1.2780681162922057e-04 +2942 1.9265385547866055e-03 -1.2477711785047628e-02 -3.3350102256917867e-03 +1387 -1.8449763768039564e-03 2.2452241838271914e-03 -5.3429233037424065e-03 +2386 1.3952489443814962e-03 -4.7741223341620909e-05 2.8204388613589509e-03 +793 -2.4429548317398157e-03 -1.5414342492577338e-03 -2.9926275300676021e-03 +795 5.0939699845519671e-03 4.1575513950507731e-03 1.0121642382143374e-02 +1388 -2.1242109091115422e-03 -1.7500571257582066e-02 -2.8637515006562303e-03 +2618 2.3465494183293412e-02 -5.2908749332822840e-03 -1.1296125309016750e-02 +1382 -2.0118119947318519e-02 1.1096230625942905e-03 -7.3755679873690316e-03 +106 -7.8679384083967831e-04 -7.3218140881580462e-03 2.4602773931502371e-03 +2191 -1.8786771972690930e-03 -5.7794728270408541e-03 1.5881375143974312e-03 +2694 1.2542851250588447e-02 5.3990059598280236e-03 2.4605167794770021e-04 +2176 3.6478655331211095e-03 5.3576302066209759e-03 1.7308044895281034e-03 +925 3.9400114196699891e-03 -1.1887293538267642e-04 6.4523284474723313e-04 +927 -1.3332335111627244e-03 -1.6057957786678328e-02 -1.0887389822139182e-02 +779 -4.4146504248877977e-03 3.8476702181246773e-03 1.2100165362390249e-02 +1535 -1.6053146673404628e-02 -2.3108254886200925e-04 -1.8295670079867252e-02 +2178 -6.5841523904319752e-03 1.0501801174238034e-02 1.3233650190151157e-02 +1534 1.0342068885512889e-03 1.0106622094394899e-03 -3.0595928918705313e-03 +209 6.5958616933411637e-03 -1.1924584265599298e-02 1.5991675169803678e-02 +1694 1.3297654050877640e-02 4.0891943480136405e-03 2.2359303021562537e-03 +1693 4.0034542543752865e-03 -3.4607140427329822e-03 3.4024297628323875e-04 +2483 -1.2617739598372233e-02 -1.8679103710602121e-02 -2.0754371056067727e-02 +2983 3.3348674220437767e-03 3.7403985443298401e-03 7.4381903352609951e-03 +2590 -7.3836711851277426e-03 -2.5013946425825931e-03 6.1146919424161505e-03 +2022 -6.7972664146717073e-03 3.1892973514032084e-03 -7.6546005519813306e-03 +2388 2.7464379258621396e-02 1.4698754271014105e-02 -4.9285288563667481e-03 +778 -3.5830172133683867e-05 -7.9538615974868957e-04 9.8867540303048122e-04 +95 -4.9244591394505119e-03 9.1858527837452644e-03 1.8520715594552015e-02 +780 1.5987290799793923e-02 -6.8684541999867307e-03 2.4038956636244248e-02 +2351 -1.7681456708942785e-02 -1.1209430948786830e-02 2.0097984276120955e-02 +1900 8.4254652485697581e-04 -7.9466610413633928e-04 5.9612933832963490e-03 +1902 -3.2763090471474576e-02 -1.1419193172219538e-02 5.2957685539969978e-03 +2436 3.5515984814456676e-02 -2.3337978950653128e-02 6.8660948703957473e-03 +2434 1.0018350685939222e-03 1.2992657135898749e-03 -2.0787790782108612e-03 +2435 -1.9240076779256481e-02 -6.5561884359150785e-03 2.7585092516232710e-03 +1713 8.8465467949978456e-03 8.7499659715707112e-03 3.9684379669563058e-03 +2482 5.7918633706877075e-03 -9.5099880886616896e-03 -1.2026600408314601e-03 +1768 -1.6675142252819569e-03 -3.2415059381542188e-03 3.2661163330644479e-03 +2352 -1.1556309669852096e-02 1.8493613208948271e-02 -2.2811835234065391e-02 +986 3.1729112010405579e-03 7.1297403216896600e-03 -2.3323293873632727e-02 +985 4.7846668034116305e-03 -5.6112324877821522e-03 -3.4203424837258669e-03 +987 5.9965567307550408e-03 -2.2368450610655413e-02 2.9001651271861072e-02 +1316 5.3312703474307915e-03 -1.4050735520321652e-02 5.6626257567271359e-03 +2350 2.2636182381125473e-03 3.5328287089458174e-03 -3.5984998855100709e-04 +2592 8.4003168262585734e-03 1.1098829401264042e-02 -8.3310943881760580e-03 +1770 -3.3088477024367301e-03 5.2687560734128542e-03 -1.4324661941474220e-02 +606 -4.6512839157724318e-03 1.1803145984882340e-02 7.8536228601803473e-04 +2591 1.8346490509336195e-02 5.7408655982441352e-03 8.1352437498239307e-03 +1620 7.5434143732206402e-03 -2.1693377626218905e-03 -2.4814874675807789e-03 +2687 1.3263807977451348e-02 5.6464649796371755e-03 -3.2530823080081310e-02 +1647 -9.5998489983168695e-03 3.1441263270676699e-03 -2.8015535192626562e-02 +1727 -1.0281602966818489e-02 5.5423788705790044e-03 -6.3303253695683121e-03 +582 -1.1452246149666043e-02 -3.6409710770574028e-03 -9.8972750292667614e-03 +823 -8.1723791643975238e-03 5.8217462938464177e-03 1.3782764462518521e-02 +2805 -9.8339775280714969e-03 -2.5384686770735271e-02 8.6847828125276236e-03 +2810 -4.5331603125449227e-03 -3.8312826382910564e-03 2.1001738866005735e-02 +2809 1.8234545653570309e-03 -1.0818361437048889e-02 1.8624106989270856e-03 +2190 8.9568409030958227e-03 -7.1379992028638151e-03 -1.5029988213199830e-02 +2070 6.7200890557705126e-03 -1.7311215036986047e-02 -4.5283630407876680e-03 +2002 1.4893411104266922e-03 -5.8601364842106925e-03 -8.8973336049360434e-04 +2003 2.0235610184328172e-02 4.2716215889692204e-02 4.1884506806649253e-03 +2068 -5.4827499669727374e-03 2.3410154587474013e-03 2.6665373192884421e-03 +1478 -1.0123744386463516e-02 -2.8565443159634569e-02 -5.1402123287391036e-03 +2905 4.1688753587409699e-03 3.1191574324119262e-03 6.6461375347606150e-03 +2906 9.8248035429995169e-03 1.5154776666844337e-02 1.0598550139488034e-02 +2572 -1.7625671319695228e-03 5.2700912078128270e-03 2.1151865756130297e-03 +384 -1.6245380710955212e-03 -1.8657030631146997e-02 -1.4918633023680223e-02 +1285 5.1048283249084904e-03 7.5213799709658268e-03 -4.2152592889484501e-03 +1287 -1.8924815907765857e-02 -1.5436939592750594e-02 -1.9283336611656925e-02 +382 -1.0432983444236979e-03 4.8480843124547047e-04 2.4330287483555124e-03 +2313 -2.2307943133006835e-03 2.6768243359833018e-02 1.2253047799774012e-02 +1843 -3.7345040417349233e-03 4.9492801611032648e-03 -2.3669929297025377e-03 +1844 -1.0284747756927198e-02 -3.6070719390267271e-02 -9.7730720530250781e-03 +2057 5.4701922999387531e-03 8.7090784242338914e-03 -1.8790516638911312e-03 +2058 9.0672145680872219e-03 -1.0447912477102746e-02 -9.4697673840828441e-03 +2056 7.0638079750638162e-03 1.1753744772353262e-03 4.6758925113052038e-04 +387 1.0590566342351582e-02 -8.6111520013002953e-03 1.4512768012615734e-02 +2524 1.4062873559601387e-03 2.8886375550715871e-03 6.2338686960615132e-03 +2525 1.2735793989414858e-02 2.2710219522354514e-02 2.3936942108730448e-02 +2573 -1.7654522653047150e-02 -1.5881836920768992e-02 2.8594827720776570e-03 +2688 2.1167805064394207e-02 -9.8474333530697618e-03 -3.4898415403639984e-03 +1748 9.0543983345311510e-03 1.6845122377084538e-03 1.8625661856371593e-02 +2686 3.0865826403173010e-03 3.5145407491327467e-03 5.6635539304914569e-04 +2726 3.4202426333268120e-03 -3.6509381629255730e-03 4.0913582194690478e-04 +1911 5.8980712735181131e-03 -2.0382893102108928e-02 -5.7479576471118577e-03 +1856 -1.1571050853789833e-02 -2.1771322200843241e-02 2.1937654745202467e-02 +2089 -2.1928077319657915e-03 3.3109360528119748e-03 3.7386783801203108e-04 +1446 2.5173161675383016e-02 -1.4667758069494176e-02 3.7795746188780204e-03 +20 1.1273050608215760e-02 -1.3568571453264584e-02 2.9096413751964786e-03 +1645 -6.2274889726352690e-03 -1.0805270493717167e-02 -3.0534789136016818e-03 +1479 -7.2966314695926083e-03 -9.9348201726441668e-03 -1.8926812329880249e-04 +21 7.9073830973045277e-03 1.4754748531581650e-02 1.1006922287851790e-02 +19 -3.4237918839828282e-03 2.7809218192081900e-03 1.3853101260706026e-03 +2919 1.7433719444464300e-03 1.4778500671300539e-02 -5.9347733404396660e-03 +2994 1.4085714449149885e-02 -8.0280403274516805e-03 8.7030152580008808e-03 +2811 2.7185667144321971e-02 9.1282575271397319e-03 -4.2083857056650711e-04 +2950 2.3986927474144251e-03 4.9091199025676959e-03 6.2936359132393432e-03 +2725 6.5061253191386406e-03 1.4749487150760908e-03 1.1957958474925888e-03 +2727 9.9321193578098231e-03 -1.7808180098086001e-02 -1.4663159637145873e-02 +2706 5.4009058519759755e-02 -3.6303029251524206e-03 3.2029094184612243e-02 +2992 3.4761701415881351e-03 -1.0324183182760792e-04 -2.5206530873104903e-03 +385 1.1219223666300226e-03 -4.3152747514284412e-03 -1.8861910633963532e-03 +584 9.6841896710046591e-03 -4.8148599599224188e-03 -2.4676166467902803e-02 +386 9.1867603092034061e-04 -1.2535145148597692e-03 -6.6544327787191812e-03 +1646 -4.2560033853740091e-03 1.6262829681830196e-02 1.5820108351526287e-02 +2704 -1.8186603986143340e-03 -5.3826963958432698e-03 7.6347369563631935e-04 +2705 6.0897994323571856e-03 -4.1086744861450423e-03 1.1989351016388537e-02 +799 -2.3118216786526557e-03 -3.3107243216467201e-04 -1.0092202769570210e-03 +1268 3.9823718623217229e-03 -1.3743200197728211e-02 -1.6695343521262080e-02 +1986 2.1376762695962171e-03 -4.7693629140322562e-04 -9.0715571098080924e-03 +1985 -1.3236053267443955e-03 2.0626900661730112e-02 -2.8010697150860651e-02 +1984 -3.0338931048674743e-03 3.6027419679632599e-03 1.2978255434279528e-02 +1267 -2.9317324903904316e-03 1.7098609294979993e-03 -5.6068955123058392e-04 +2785 -2.2591373142622374e-03 8.5409648657612828e-04 8.3576030833949176e-03 +2786 -2.6806970679325162e-02 4.1277371658416488e-03 -9.3965703205955535e-03 +1269 3.0610505613625928e-03 -9.0602372869880883e-03 3.8728572861263339e-03 +2827 6.3441586311444866e-04 -5.2529170327444175e-06 1.6739809309584404e-03 +2951 -1.7438090660565803e-02 1.1580237938313552e-02 2.2932866169090800e-02 +1830 -1.9428037410018299e-02 2.0043152415169484e-02 -2.2537489865626228e-02 +2949 -1.2313255065673151e-02 1.9330980201016285e-02 -1.0501065762158578e-02 +2693 -3.0327667198016162e-04 -7.6804525838496916e-03 1.2882954774925444e-02 +2192 1.1367078430934449e-03 1.0310215764314924e-03 2.4716631656128280e-03 +1837 -1.5695756952759544e-03 -4.1236232269697241e-03 -1.8862802426753281e-03 +1331 -3.0266088040518890e-02 1.0556134186828202e-02 1.6110525051973600e-02 +1621 2.2007269125250040e-03 5.2601045921156532e-03 -5.5273253251765866e-03 +1367 -1.0541933302075946e-02 -6.2931494558418415e-04 -1.5802375220048497e-02 +1987 -7.8467919130005680e-03 9.0992807061206031e-04 1.6898028755791125e-03 +2938 2.2821761158522331e-03 2.5481044506645732e-03 -4.2863347083958673e-03 +1839 1.2333011365517428e-02 7.3568305506181123e-04 1.6768597352909195e-02 +1876 -2.6668690242900202e-03 5.0831166342991951e-03 3.5452495867161740e-04 +1188 1.4322255135484498e-02 -1.8013537201340836e-03 1.8653060949248117e-02 +625 -5.7279045137221521e-04 1.9741990660241391e-03 -1.9261781849669942e-03 +2324 -2.9408864881908425e-02 1.4548970317235935e-02 1.5663481245818112e-02 +2966 8.1428785528543982e-04 -4.0754092404650302e-03 5.1025126855777821e-03 +685 9.9877862064503414e-04 -3.5711466148328256e-03 -7.5074916283614397e-04 +1812 -7.7485958279774362e-03 -1.6250486748139850e-02 1.4403281259388730e-02 +2449 -6.7271224680158818e-04 -2.6675248508395140e-03 -2.0011991955542130e-03 +1609 1.7000423650560400e-03 4.0112895132058853e-03 1.9097603392632953e-03 +71 1.9145658473857477e-02 -7.4988806380283796e-03 -1.0831473894232623e-02 +811 8.3166826297705152e-04 -7.7494943810788187e-03 -5.6396005637418083e-03 +2405 -7.1769296572635945e-03 -1.5441082222525946e-02 6.3649057226098068e-03 +1253 -5.1055898619646132e-03 -1.6938509221759268e-02 -4.1901514923335090e-04 +252 -1.5132767024598899e-02 1.1167414285230676e-02 3.0568921106489684e-02 +1862 1.5694999198779848e-02 -1.0371396809043211e-03 1.5557808240791504e-02 +813 -1.9252238726656335e-03 -6.6311258167506210e-03 -1.3352624437547872e-02 diff --git a/examples/reaxff/water/in.water.acks2 b/examples/reaxff/water/in.water.acks2 new file mode 100755 index 0000000000..e75b0e2814 --- /dev/null +++ b/examples/reaxff/water/in.water.acks2 @@ -0,0 +1,25 @@ +# ACKS2 Water, CITE: Achtyl et al., Nat. Comm., 6 6539 (2015) + +boundary p p p +units real +atom_style full + +read_data data.water + +replicate $x $y $z + +pair_style reaxff NULL safezone 3.0 mincap 150 +pair_coeff * * acks2_ff.water O H +neighbor 0.5 bin +neigh_modify every 1 delay 0 check yes + +velocity all create 300.0 4928459 rot yes dist gaussian + +fix 1 all acks2/reaxff 1 0.0 10.0 1.0e-6 reaxff maxiter 400 +fix 2 all nvt temp 300 300 50.0 + +timestep 0.5 +thermo 100 +thermo_style custom step temp press density vol + +run ${t} diff --git a/examples/reaxff/water/in.water.qeq b/examples/reaxff/water/in.water.qeq new file mode 100755 index 0000000000..6480ca240f --- /dev/null +++ b/examples/reaxff/water/in.water.qeq @@ -0,0 +1,25 @@ +# QEq Water, CITE: Achtyl et al., Nat. Comm., 6 6539 (2015) + +boundary p p p +units real +atom_style full + +read_data data.water + +replicate $x $y $z + +pair_style reaxff NULL safezone 3.0 mincap 150 +pair_coeff * * qeq_ff.water O H +neighbor 0.5 bin +neigh_modify every 1 delay 0 check yes + +velocity all create 300.0 4928459 rot yes dist gaussian + +fix 1 all qeq/reaxff 1 0.0 10.0 1.0e-6 reaxff maxiter 400 +fix 2 all nvt temp 300 300 50.0 + +timestep 0.5 +thermo 100 +thermo_style custom step temp press density vol + +run ${t} diff --git a/examples/reaxff/water/qeq_ff.water b/examples/reaxff/water/qeq_ff.water new file mode 100644 index 0000000000..5d71e747b7 --- /dev/null +++ b/examples/reaxff/water/qeq_ff.water @@ -0,0 +1,83 @@ +Reactive MD-force field: QEq Water [CITE: Achtyl et al., Nat. Comm., 6 6539 (2015)] + 39 ! Number of general parameters + 50.0000 !Overcoordination parameter + 9.5469 !Overcoordination parameter + 26.5405 !Valency angle conjugation parameter + 1.7224 !Triple bond stabilisation parameter + 6.8702 !Triple bond stabilisation parameter + 60.4850 !C2-correction + 1.0588 !Undercoordination parameter + 4.6000 !Triple bond stabilisation parameter + 12.1176 !Undercoordination parameter + 13.3056 !Undercoordination parameter + -70.5044 !Triple bond stabilization energy + 0.0000 !Lower Taper-radius + 10.0000 !Upper Taper-radius + 2.8793 !Not used + 33.8667 !Valency undercoordination + 6.0891 !Valency angle/lone pair parameter + 1.0563 !Valency angle + 2.0384 !Valency angle parameter + 6.1431 !Not used + 6.9290 !Double bond/angle parameter + 0.3989 !Double bond/angle parameter: overcoord + 3.9954 !Double bond/angle parameter: overcoord + -2.4837 !Not used + 5.7796 !Torsion/BO parameter + 10.0000 !Torsion overcoordination + 1.9487 !Torsion overcoordination + -1.2327 !Conjugation 0 (not used) + 2.1645 !Conjugation + 1.5591 !vdWaals shielding + 0.1000 !Cutoff for bond order (*100) + 2.1365 !Valency angle conjugation parameter + 0.6991 !Overcoordination parameter + 50.0000 !Overcoordination parameter + 1.8512 !Valency/lone pair parameter + 0.5000 !Not used + 20.0000 !Not used + 5.0000 !Molecular energy (not used) + 0.0000 !Molecular energy (not used) + 2.6962 !Valency angle conjugation parameter + 3 ! Nr of atoms; cov.r; valency;a.m;Rvdw;Evdw;gammaEEM;cov.r2;# + alfa;gammavdW;valency;Eunder;Eover;chiEEM;etaEEM;n.u. + cov r3;Elp;Heat inc.;n.u.;n.u.;n.u.;n.u. + ov/un;val1;n.u.;val3,vval4 + H 0.8930 1.0000 1.0080 1.3550 0.0930 0.8203 -0.1000 1.0000 + 8.2230 33.2894 1.0000 0.0000 121.1250 3.7248 9.6093 1.0000 + -0.1000 0.0000 61.6606 3.0408 2.4197 0.0003 1.0698 0.0000 + -19.4571 4.2733 1.0338 1.0000 2.8793 0.0000 0.0000 0.0000 + O 1.2450 2.0000 15.9990 2.3890 0.1000 1.0898 1.0548 6.0000 + 9.7300 13.8449 4.0000 37.5000 116.0768 8.5000 8.3122 2.0000 + 0.9049 0.4056 59.0626 3.5027 0.7640 0.0021 0.9745 0.0000 + -3.5500 2.9000 1.0493 4.0000 2.9225 0.0000 0.0000 0.0000 + X -0.1000 2.0000 1.0080 2.0000 0.0000 1.0000 -0.1000 6.0000 + 10.0000 2.5000 4.0000 0.0000 0.0000 8.5000 1.5000 0.0000 + -0.1000 0.0000 -2.3700 8.7410 13.3640 0.6690 0.9745 0.0000 + -11.0000 2.7466 1.0338 2.0000 2.8793 0.0000 0.0000 0.0000 + 3 ! Nr of bonds; Edis1;LPpen;n.u.;pbe1;pbo5;13corr;pbo6 + pbe2;pbo3;pbo4;n.u.;pbo1;pbo2;ovcorr + 1 1 153.3934 0.0000 0.0000 -0.4600 0.0000 1.0000 6.0000 0.7300 + 6.2500 1.0000 0.0000 1.0000 -0.0790 6.0552 0.0000 0.0000 + 2 2 142.2858 145.0000 50.8293 0.2506 -0.1000 1.0000 29.7503 0.6051 + 0.3451 -0.1055 9.0000 1.0000 -0.1225 5.5000 1.0000 0.0000 + 1 2 160.0000 0.0000 0.0000 -0.5725 0.0000 1.0000 6.0000 0.5626 + 1.1150 1.0000 0.0000 0.0000 -0.0920 4.2790 0.0000 0.0000 + 1 ! Nr of off-diagonal terms; Ediss;Ro;gamma;rsigma;rpi;rpi2 + 1 2 0.0283 1.2885 10.9190 0.9215 -1.0000 -1.0000 + 6 ! Nr of angles;at1;at2;at3;Thetao,o;ka;kb;pv1;pv2 + 1 1 1 0.0000 27.9213 5.8635 0.0000 0.0000 0.0000 1.0400 + 2 2 2 80.7324 30.4554 0.9953 0.0000 1.6310 50.0000 1.0783 + 1 2 2 75.6935 50.0000 2.0000 0.0000 1.0000 0.0000 1.1680 + 1 2 1 85.8000 9.8453 2.2720 0.0000 2.8635 0.0000 1.5800 + 2 1 2 0.0000 15.0000 2.8900 0.0000 0.0000 0.0000 2.8774 + 1 1 2 0.0000 8.5744 3.0000 0.0000 0.0000 0.0000 1.0421 + 6 ! Nr of torsions;at1;at2;at3;at4;;V1;V2;V3;V2(BO);vconj;n.u;n + 1 2 2 1 2.5000 -4.0000 0.9000 -2.5000 -1.0000 0.0000 0.0000 + 1 2 2 2 0.8302 -4.0000 -0.7763 -2.5000 -1.0000 0.0000 0.0000 + 2 2 2 2 -2.5000 -4.0000 1.0000 -2.5000 -1.0000 0.0000 0.0000 + 0 1 1 0 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 + 0 1 2 0 0.0000 0.1000 0.0200 -2.5415 0.0000 0.0000 0.0000 + 0 2 2 0 0.5511 25.4150 1.1330 -5.1903 -1.0000 0.0000 0.0000 + 1 ! Nr of hydrogen bonds;at1;at2;at3;Rhb;Dehb;vhb1 + 2 1 2 2.1200 -3.5800 1.4500 19.5000 From d79b1b3145e507d375437d05af215cd04740c64c Mon Sep 17 00:00:00 2001 From: Stan Gerald Moore Date: Mon, 20 Sep 2021 13:01:57 -0600 Subject: [PATCH 035/372] Tweak example and add reference logs --- examples/reaxff/water/data.water | 9007 ++++++----------- examples/reaxff/water/in.water.acks2 | 10 +- examples/reaxff/water/in.water.qeq | 10 +- .../log.20Sep21.reaxff.water-acks2.g++.1 | 76 + .../log.20Sep21.reaxff.water-acks2.g++.4 | 76 + .../water/log.20Sep21.reaxff.water-qeq.g++.1 | 76 + .../water/log.20Sep21.reaxff.water-qeq.g++.4 | 76 + 7 files changed, 3320 insertions(+), 6011 deletions(-) mode change 100755 => 100644 examples/reaxff/water/in.water.acks2 mode change 100755 => 100644 examples/reaxff/water/in.water.qeq create mode 100644 examples/reaxff/water/log.20Sep21.reaxff.water-acks2.g++.1 create mode 100644 examples/reaxff/water/log.20Sep21.reaxff.water-acks2.g++.4 create mode 100644 examples/reaxff/water/log.20Sep21.reaxff.water-qeq.g++.1 create mode 100644 examples/reaxff/water/log.20Sep21.reaxff.water-qeq.g++.4 diff --git a/examples/reaxff/water/data.water b/examples/reaxff/water/data.water index e1ba3eac41..5da2c434eb 100644 --- a/examples/reaxff/water/data.water +++ b/examples/reaxff/water/data.water @@ -1,4 +1,4 @@ -LAMMPS data file via write_data, version 19 Mar 2020, timestep = 100000 +LAMMPS data file 3000 atoms 2 atom types @@ -12,6008 +12,3005 @@ Masses 1 15.9994 2 1.008 -Atoms # full +Atoms # charge -1497 499 2 3.8692754524846124e-01 4.4005135488793817e-01 6.8027067297961290e+00 5.5831272410063155e+00 1 1 0 -2401 801 1 -7.3547395604658661e-01 2.8088432936816430e+00 5.9999842940434611e+00 7.5341673350383074e+00 0 0 1 -498 166 2 3.0554141478230923e-01 3.1386470457186180e+00 2.2943733261485031e+00 5.1875440798585783e+00 0 0 0 -496 166 1 -7.5716565194584284e-01 3.8873560175490196e+00 2.3951000308343597e+00 4.5394769377363851e+00 0 0 0 -497 166 2 3.7474917326292168e-01 3.7024128468444144e+00 3.2217803242562795e+00 4.1929178141452947e+00 0 0 0 -141 47 2 3.2819006595815370e-01 2.5785003546035381e+00 5.9522998290113884e+00 5.8385480391059792e+00 0 0 0 -139 47 1 -7.7172999478983184e-01 2.0053458831978461e+00 5.9351684255357595e+00 4.9823207910634197e+00 0 0 0 -140 47 2 3.4612974959574128e-01 1.9901552204785218e+00 4.9986259421397863e+00 4.6918048080889641e+00 0 0 0 -1528 510 1 -7.5149674240312681e-01 1.2212058305113851e+00 3.1560995554557962e+00 5.1718212890067647e+00 0 0 1 -1530 510 2 3.7575023559399656e-01 1.0614876365158610e+00 2.8589915602608413e+00 4.2601977545295187e+00 0 0 1 -239 80 2 3.1918884951446297e-01 3.4548424578221191e+00 6.8686033008322411e+00 4.0968412335733095e+00 0 0 0 -1631 544 2 3.6861828487030079e-01 3.9941113970107973e+00 8.2656574262085822e+00 3.7036119701634340e+00 0 0 1 -238 80 1 -7.2526545622797589e-01 4.2937849132106294e+00 7.3521044049343605e+00 3.8476838702946998e+00 0 0 0 -1529 510 2 3.8946339762840293e-01 4.7692250699647681e-01 2.8107643958401316e+00 5.8055619177966395e+00 0 0 1 -803 268 2 3.6060640616141898e-01 5.1999339494958026e+00 7.1414015202400929e+00 5.2920488833458919e+00 0 0 0 -25 9 1 -6.8827487728119863e-01 3.0985740485415683e+01 2.1645132256403783e+00 7.1925310016229442e+00 -1 0 0 -27 9 2 3.9080868164496113e-01 3.1038026593265343e+01 1.2354407250465411e+00 6.7561483851304862e+00 -1 0 0 -2163 721 2 3.6472103780410930e-01 4.6878345557312040e-01 4.4573173444597218e+00 8.2821613647545185e+00 1 1 0 -1496 499 2 3.6063498463225496e-01 5.7206768577255742e+00 2.4384675008031360e+00 7.1873570706862715e+00 1 1 0 -115 39 1 -7.4965480601589229e-01 3.9517920662385966e+00 4.5447061663723476e+00 2.6662584102276901e+00 0 0 0 -1085 362 2 3.3764339144646993e-01 3.9978584926219818e+00 5.4230104078563821e+00 3.1053878503627486e+00 0 1 0 -314 105 2 3.5708750153667096e-01 1.0310030023560768e+00 6.7316041319369146e+00 3.3734266629564154e+00 0 0 0 -819 273 2 3.6128343578796446e-01 4.0463343017695772e+00 7.1003506727668608e-01 3.6622194337536271e+00 0 1 0 -2403 801 2 3.5806910955956361e-01 3.1226344268198925e+00 5.0377455961668165e+00 7.5171760439731976e+00 0 0 1 -1574 525 2 3.5863203818711292e-01 4.9947645983585964e+00 1.2493041620163177e+00 5.6377122255901835e+00 0 0 1 -116 39 2 3.4196008866457084e-01 4.7958254257633097e+00 4.5134813120446164e+00 2.1983078109383745e+00 0 0 0 -1636 546 1 -7.3478551595100094e-01 5.6121875121579743e+00 9.8694416382053440e-01 6.3597906501324371e+00 0 0 1 -2065 689 1 -6.8215047066870260e-01 1.6875908310066173e+01 1.1238310027866776e+01 5.4081336330899350e-02 0 0 1 -802 268 1 -7.2240461296520764e-01 6.0892988070798753e+00 7.3641709926087646e+00 5.7407764588525003e+00 0 0 0 -59 20 2 3.5081337980355071e-01 1.3604526173929814e+00 2.3513564015736548e+00 2.0377862637213977e+00 0 0 0 -33 11 2 3.6353567283317345e-01 3.0775061814683362e+01 6.5696256871609071e+00 2.6276539222916169e+00 -1 0 0 -2127 709 2 3.8311301768239048e-01 3.6974335831421676e+00 2.7027373781194757e+00 1.4961865571696141e+01 1 0 0 -550 184 1 -7.4281091881652961e-01 2.3465162274577466e+01 9.3744257059057343e+00 1.5241859744894187e+01 0 0 0 -309 103 2 3.7176965299895415e-01 1.4990887604490121e+01 2.5382454665563348e-01 2.1346503640246048e+00 0 0 0 -2232 744 2 3.4815014742283323e-01 8.5202267262527187e-01 5.3847185145336800e+00 4.3093648474523089e-01 1 0 1 -226 76 1 -7.4722095769484009e-01 6.0692884597532881e+00 2.3731132049765241e-01 1.3056780543916178e+00 0 0 0 -1637 546 2 3.6806353395792374e-01 6.5164572239659728e+00 8.5646744910183303e-01 5.9444090391217541e+00 0 0 1 -260 87 2 3.5228697506239837e-01 5.8972736974633246e+00 7.8289186664455324e+00 6.5863339763837985e+00 0 0 0 -1086 362 2 3.2722459596763726e-01 7.0330455928520674e+00 5.8850176611591190e+00 6.8095906828009625e+00 0 1 0 -1840 614 1 -6.9152209464673109e-01 7.3245865814791085e+00 7.9057953792723765e+00 1.2980778971057452e+00 0 0 1 -2612 871 2 4.1176928679744829e-01 7.0756137615931474e+00 8.4166252144604954e+00 2.1531585977535128e+00 0 1 1 -1842 614 2 3.6725157545857429e-01 8.3748740565416746e+00 7.8690080028348319e+00 1.3560226011424448e+00 0 0 1 -963 321 2 4.1022870020113211e-01 9.9106967870758638e+00 8.0146702338176699e+00 7.2466157795297530e+00 0 0 0 -1084 362 1 -7.4044322693270392e-01 7.6057467080876133e+00 5.0781976218288616e+00 6.7743760963270709e+00 0 1 0 -1663 555 1 -7.1834560936369407e-01 9.9879391215874271e+00 8.0388811719689492e+00 1.2917807541733919e+00 0 0 1 -821 274 2 3.5209674216131409e-01 6.9247313199235387e+00 4.3047612584180914e+00 6.9943975000286365e+00 0 1 0 -1791 597 2 4.0841331548659748e-01 7.7878722270508298e+00 5.3818187244858136e+00 5.1636842205127689e+00 0 0 1 -2023 675 1 -7.3605189371990465e-01 1.1063137080072600e+01 6.0098264472003251e+00 4.7345199683786516e+00 0 0 1 -1664 555 2 3.6238506868933806e-01 1.0108354841357976e+01 8.8072390044573137e+00 1.9305013188119438e+00 0 0 1 -1767 589 2 3.6100076072975557e-01 1.1741733648682450e+01 5.8658042545439084e+00 5.4513143091575005e+00 0 0 1 -2311 771 1 -7.3005291084991386e-01 8.3020764393069832e+00 5.1948566338776221e+00 4.3179489922325596e+00 0 1 1 -2312 771 2 3.9274744365696557e-01 9.1759366291491578e+00 5.5291322309174307e+00 4.3792866152146628e+00 0 1 1 -303 101 2 3.8608151180006473e-01 1.2482611497403401e+01 1.6658621953141555e+00 7.1576373240832911e+00 0 0 0 -1853 618 2 3.8557910794412215e-01 6.6913261295433673e+00 8.6875135976398994e+00 4.3705239171971151e+00 0 0 1 -1852 618 1 -7.6091540778352407e-01 6.8668361281846897e+00 9.2238953384065479e+00 3.5736208524521458e+00 0 0 1 -829 277 1 -7.3432390170804673e-01 1.2651767705075731e+01 2.5248313732060534e+00 7.4965512157935255e+00 0 1 0 -2875 959 1 -6.8813502015404293e-01 9.1874051384777449e+00 7.6860288086314632e-01 7.6608447591038757e+00 1 1 0 -2759 920 2 3.7682339456265845e-01 8.5249450804126656e+00 3.3731054837881027e+00 4.0641841504019780e+00 0 1 1 -249 83 2 3.6791165233171941e-01 7.2214553136648609e+00 4.7206182695467334e+00 2.3723286638248067e+00 0 0 0 -993 331 2 3.9800531948136814e-01 7.9893180393450729e+00 1.2276942134777038e+00 4.9666634620494534e+00 0 1 0 -401 134 2 3.6396631747563196e-01 7.2262707803170203e+00 5.8369412728614911e+00 1.3803763554044857e+00 0 0 0 -247 83 1 -7.0764043316735903e-01 7.0942828324841241e+00 4.9106461584568386e+00 1.4288882775766745e+00 0 0 0 -1103 368 2 3.7230345163383838e-01 1.1235962979488763e+01 5.4404357695885279e+00 3.9635214837262134e+00 0 1 1 -2876 959 2 3.9583804731902583e-01 9.0582611669642077e+00 1.2231093581437821e-01 8.4012470775560555e+00 1 1 0 -1011 337 2 3.1959728574581830e-01 1.2437946514638131e+01 1.8732979306873965e+00 3.6181266905009841e+00 0 1 0 -1893 631 2 3.7036844773404975e-01 1.1900156966658409e+01 7.4502596457796590e+00 3.8797921320454436e+00 0 0 0 -2877 959 2 3.7223487628956575e-01 1.0152687605106527e+01 7.0850125780251816e-01 7.3676117410643789e+00 1 1 0 -1841 614 2 3.9790957842087205e-01 9.8835907129974281e+00 8.4957358744048488e+00 4.8066780575509332e-01 0 0 1 -203 68 2 3.6407021234816317e-01 9.4391284270869331e+00 2.2161312855505408e+00 3.4466407008994877e+00 0 0 0 -2466 822 2 3.9557744289353053e-01 1.0478382294700539e+01 1.9034549670425855e+00 1.1912053570753032e+00 0 1 0 -1700 567 2 3.4174585658026774e-01 7.6681567751202886e+00 4.9737131302251258e+00 8.6429890150973634e+00 0 0 0 -218 73 2 3.9489709747944879e-01 1.0903840596118812e+01 5.9682168503065460e+00 7.8542237295695791e+00 0 0 0 -202 68 1 -6.9246227426584595e-01 8.5034914220925781e+00 2.4316557415608751e+00 3.8001377954723088e+00 0 0 0 -1104 368 2 4.1528548950455579e-01 8.3645436315872566e+00 3.1379844007295282e-01 6.1604329151249164e+00 0 1 1 -991 331 1 -7.6182583273993854e-01 8.0263667515679185e+00 3.4744605461058575e-01 5.2922470899230607e+00 0 1 0 -102 34 2 3.6492516758405213e-01 8.0013989365832714e+00 1.4028078508187747e+00 1.5379165763135083e+01 0 0 0 -2029 677 1 -7.8283617067763300e-01 1.2424136860279537e+01 5.4791209410548314e+00 7.1612535440534977e+00 0 0 1 -2025 675 2 3.5494230815894440e-01 1.2591724131934392e+01 4.5209311627752200e+00 7.2145026163518384e+00 0 0 1 -2031 677 2 3.9304550594436322e-01 1.3267174250891356e+01 5.8828315339307844e+00 7.3758229847280052e+00 0 0 1 -1111 371 1 -7.5194924903800975e-01 1.1789258909767749e+01 4.2473893606497439e+00 2.7973156311830794e+00 0 1 0 -1112 371 2 3.8149161266254628e-01 1.1325719951844707e+01 3.5140850737691274e+00 2.4518247585030761e+00 0 1 0 -1009 337 1 -6.7933790730634036e-01 1.2973399971679061e+01 1.2394482882933624e+00 4.1644406722513532e+00 0 1 0 -1113 371 2 3.2793652825314779e-01 1.2508853849264057e+01 3.8651741180754389e+00 3.4664525276051128e+00 0 1 0 -983 328 2 3.8034871224020939e-01 1.6372200409886108e+01 3.2828243758410647e+00 5.8612475722303015e-01 0 1 0 -982 328 1 -7.3826897087316046e-01 1.6538672856583677e+01 2.3344314174687226e+00 3.5593412007078301e-01 0 1 0 -196 66 1 -7.4549107934801362e-01 1.2855296474912164e+01 5.4732616414580368e+00 3.3990948313494568e-01 0 0 0 -379 127 1 -7.5307613958567499e-01 1.7194559173341730e+01 6.4295472504929743e+00 3.1166682064054481e+00 0 0 0 -954 318 2 3.2002351836232878e-01 1.5888333805783443e+01 5.3623905112413706e+00 1.6366381459492292e+00 0 0 0 -197 66 2 3.9353316471972760e-01 1.2366235949554447e+01 5.2689950079443948e+00 1.0819343253779545e+00 0 0 0 -308 103 2 3.8053566932308219e-01 1.5827400649134340e+01 1.5102383139749007e+00 1.6944312751168922e+00 0 0 0 -2674 892 1 -7.5251563708889002e-01 1.6616504346881126e+01 3.8056411956327221e+00 3.9613426800009357e+00 0 1 0 -2675 892 2 3.6376048259316174e-01 1.5794339487607786e+01 4.0211703398579264e+00 4.4872213323852286e+00 0 1 0 -381 127 2 3.7093646473040048e-01 1.6989489495356811e+01 5.5370106263854231e+00 3.4535566149823853e+00 0 0 0 -2676 892 2 3.5623982090771111e-01 1.6485199958957558e+01 2.9341789231643403e+00 3.5795848239229255e+00 0 1 0 -221 74 2 3.1224109180106219e-01 1.3507875971913872e+01 5.1731003897988455e+00 4.2683251224427101e+00 0 0 0 -220 74 1 -7.3383156196182264e-01 1.3725487235521911e+01 4.3585589872930308e+00 4.6808284626942935e+00 0 0 0 -222 74 2 3.2778663941490466e-01 1.3273816959634512e+01 4.4026137329898694e+00 5.5445678182165032e+00 0 0 0 -958 320 1 -7.4610017930944261e-01 1.5663290274330219e+01 4.9796893426559716e+00 7.5150390905448938e-01 0 0 0 -960 320 2 3.7551283813146968e-01 1.4736666783744411e+01 5.3254716418768213e+00 7.1438023451097432e-01 0 0 0 -320 107 2 3.4147571367646573e-01 1.4548277543914198e+01 7.7726612206472465e+00 8.6200265130584590e+00 0 0 0 -380 127 2 3.8288888396260523e-01 1.8086680823606102e+01 6.6958699296408941e+00 3.4346868318853470e+00 0 0 0 -319 107 1 -7.5289236146249161e-01 1.4504190487958663e+01 6.8302827431032336e+00 8.3585598210513634e+00 0 0 0 -2078 693 2 3.6896467802253480e-01 1.9837126505526836e+01 9.4872638994601708e+00 1.4545504814288625e+01 0 0 0 -2042 681 2 3.8133266548460326e-01 1.8632936926135795e+01 1.8847209418642434e+00 1.0661866182918509e+00 0 0 1 -525 175 2 3.5767804986002788e-01 1.6044729651565728e+01 7.7152962602539885e+00 4.9279045177504499e-01 0 0 0 -526 176 1 -7.1675182179051944e-01 1.7338617473894164e+01 3.9073780698890020e-01 4.3862477545242067e+00 0 0 0 -527 176 2 3.7606096783862469e-01 1.6471133582835396e+01 6.4871802983856663e-01 3.9292007431044085e+00 0 0 0 -534 178 2 3.5687435904323250e-01 1.8050783975465485e+01 3.7181143555290390e+00 5.1537709798264908e+00 0 0 0 -119 40 2 3.7458680445139569e-01 2.0487263421233615e+00 5.4481575893417078e-01 1.3498519365226000e+01 0 0 0 -307 103 1 -7.5313456861153183e-01 1.5516325859493993e+01 1.0041223608999403e+00 2.5148439529207085e+00 0 0 0 -434 145 2 3.6060382443901440e-01 2.8318372247716162e+01 6.0000350790735746e-01 1.3039033487948334e+01 0 0 0 -2538 846 2 3.7038237727101675e-01 1.5873081510603580e+01 7.3431633253088568e+00 4.2151889384124237e+00 0 1 0 -362 121 2 3.5138788653950254e-01 1.3822311947328766e+01 1.2399332735227380e+00 3.7058472510950380e+00 0 1 0 -1773 591 2 3.7574693015917909e-01 2.4710555149281316e+01 1.1915637515904558e+01 8.9573752514615723e+00 0 0 0 -1441 481 1 -7.3263272810282853e-01 2.6976878393661949e+01 3.0627092401548633e-01 6.9616920124764707e+00 0 0 0 -2049 683 2 3.5088136504355405e-01 2.7431266984046175e+01 1.4851721772360399e+01 4.7815946067125177e+00 0 0 1 -1311 437 2 3.5918535518609329e-01 1.1906016994206430e+01 1.4181562861585023e-01 5.7126228122925715e+00 0 1 0 -1194 398 2 3.4995179923095754e-01 1.7833416122412100e+01 1.5436461184933348e-01 9.0760596623794463e+00 0 1 0 -1144 382 1 -7.2894009311541352e-01 2.1625386814021507e+01 5.4650300718290135e+00 6.7230254595329866e+00 0 0 0 -2043 681 2 3.8805213934516697e-01 1.9877585541745020e+01 1.0369100917515413e+00 9.1741760286022211e-01 0 0 1 -532 178 1 -7.0517978497245426e-01 1.8491368955069976e+01 3.5217019209699156e+00 6.0490036778759615e+00 0 0 0 -533 178 2 3.9142658940071773e-01 1.8144895666077264e+01 4.3371633326148933e+00 6.6153233851801607e+00 0 0 0 -2041 681 1 -7.1168345284775480e-01 1.9352240103205951e+01 1.5571033521169870e+00 1.5405407560902771e+00 0 0 1 -1905 635 2 3.6418908688370261e-01 2.1605773287702167e+01 4.2765165277270425e+00 5.1106621918495518e+00 0 0 1 -1903 635 1 -6.9792797977161336e-01 2.1748551405429989e+01 4.0998926315357895e+00 4.1658099232003689e+00 0 0 1 -1217 406 2 3.7913386240549446e-01 2.2836463194848776e+01 5.2406299294258698e+00 2.9961168585826239e+00 0 1 0 -1904 635 2 3.6724890029640833e-01 2.1010627209303685e+01 3.3761847111544125e+00 4.0045156441401977e+00 0 0 1 -1216 406 1 -7.2604871901178580e-01 2.3447202645475159e+01 5.5920326273056826e+00 2.2944876098746829e+00 0 1 0 -248 83 2 3.3978223300435040e-01 2.3198037218540914e+01 7.6326540121433748e+00 2.6633349332777576e+00 0 0 0 -1146 382 2 3.4792706746670926e-01 2.1431062769332790e+01 6.3968311439957963e+00 6.5873809264560750e+00 0 0 0 -515 172 2 3.7066235504587541e-01 2.3336985121668135e+01 4.9569713602477519e+00 1.5211960503752682e+00 0 0 0 -1116 372 2 3.5646923248294565e-01 2.0298081690348930e+01 5.4854204901743469e+00 3.5506637971694550e+00 0 1 0 -1114 372 1 -7.0395571779608335e-01 1.9907703230303699e+01 6.1513486169178977e+00 3.0110646253217355e+00 0 1 0 -1115 372 2 3.8069079044468124e-01 1.9945826625468705e+01 5.9246211790915924e+00 2.0351856889836997e+00 0 1 0 -579 193 2 3.9547297628369682e-01 2.3996070039116375e+01 1.0529411602750995e+00 1.1165198143647250e+00 0 0 0 -585 195 2 3.7096507480798313e-01 2.3767754484183236e+01 2.6411712385066539e+00 1.1225288846698618e+00 0 0 0 -1196 399 2 3.5072559348999632e-01 1.9373676533195667e+01 2.4530216578494639e+00 4.7668697348213600e+00 0 1 0 -1714 572 1 -7.0802398477202177e-01 1.9900350884093399e+01 5.2222678995018956e+00 3.7497577490663969e-01 0 0 0 -2814 938 2 3.9150922204105332e-01 1.6699795914991270e+01 9.4769974678379248e-02 5.7930995252327664e+00 0 1 1 -2819 940 2 3.3914466909902691e-01 2.3808226622202906e+01 1.4027657188514016e+01 1.5194174847249243e+01 0 0 0 -583 195 1 -7.3812607951190867e-01 2.4143811703288495e+01 1.9114222006859189e+00 1.6122127404924802e+00 0 0 0 -624 208 2 3.5387842445422352e-01 2.4421069009592568e+01 6.6814349771311372e+00 7.2476246528316957e-01 0 0 0 -1195 399 1 -7.0634180393460455e-01 1.9969889729479270e+01 1.9322909693732215e+00 4.0979444083531487e+00 0 1 0 -1197 399 2 4.0772620806047699e-01 1.9396653865507815e+01 1.5237357262145894e+00 3.3353295837171375e+00 0 1 0 -418 140 1 -7.0399715143996378e-01 2.4418330292019323e+01 1.7532752213027898e+00 4.5070628850662953e+00 0 0 0 -420 140 2 3.8368844685430692e-01 2.4262150970924750e+01 7.7767358985760937e-01 4.5882878553516822e+00 0 0 0 -419 140 2 4.1155198449350688e-01 2.4460738669155493e+01 2.0224169088874415e+00 3.6037300525953690e+00 0 0 0 -1145 382 2 3.3232971594426863e-01 2.4543873230681669e+01 6.5476103457458166e+00 6.4993358688362211e+00 0 0 0 -1171 391 1 -6.8843097609044668e-01 1.3127471808587817e+01 1.5430342606026111e+01 5.2162038862750935e+00 0 0 0 -503 168 2 3.5852519131886351e-01 2.3431171518107213e+01 5.6038697706205145e+00 5.8644913703225265e+00 0 0 0 -1280 427 2 3.5376168279638437e-01 2.1067713619991196e+01 1.5516513195141689e+01 3.1292364926754366e+00 0 0 0 -502 168 1 -7.3571741856961170e-01 2.4383876101821894e+01 5.6246216646123770e+00 6.2255871204360247e+00 0 0 0 -884 295 2 3.3705342906758395e-01 2.0831958439525298e+01 8.4319099928220318e+00 1.4983513705461160e+01 -1 1 0 -2161 721 1 -7.2741868531417841e-01 3.1002324428745287e-01 5.3902843230030770e+00 8.4582030730450217e+00 1 1 0 -32 11 2 3.7224714013611548e-01 2.8969088068039767e+01 5.8853613725276244e-01 1.3415063196894363e+00 -1 0 0 -31 11 1 -7.0701682996664361e-01 2.8861481885382837e+01 1.6305346253392183e+00 1.2125555964014341e+00 -1 0 0 -1397 466 2 3.7287783474065178e-01 2.9021060975786416e+01 5.8230468622467777e+00 1.1493524979364806e+00 0 1 0 -615 205 2 3.8565372047805646e-01 2.4926495528292843e+01 2.4681537292063078e+00 6.2171953534894255e+00 0 0 0 -302 101 2 3.6922138072184107e-01 3.0448744544102141e+01 6.4864682511493870e+00 6.6729371988181709e+00 -1 0 0 -2901 967 2 4.2376035006718926e-01 3.0021935022741616e+01 2.3328327033627505e+00 7.4094868457492877e+00 0 1 1 -301 101 1 -7.8432242912457006e-01 3.0600037180261197e+01 6.9519317345137130e+00 5.8723762844978475e+00 -1 0 0 -58 20 1 -6.9908992171353024e-01 6.3748292073836732e-01 2.0463572721280681e+00 2.6294907465286599e+00 0 0 0 -240 80 2 3.3485166879456130e-01 3.0843398181986625e+01 2.1919511746150593e+00 2.1074553862407970e+00 -1 0 0 -2007 669 2 3.6413535825084464e-01 2.7884518960634296e+01 6.6614101874550382e+00 2.9471974124708211e+00 0 0 1 -622 208 1 -7.5750477464126409e-01 2.5145684392649883e+01 7.1849543661857584e+00 3.5392257365769353e-01 0 0 0 -1298 433 2 3.3441853145114819e-01 2.7818478639726820e+01 3.3144672824362722e+00 4.0335774579265600e+00 0 1 0 -448 150 1 -7.0318713721338333e-01 2.8097674324043851e+01 2.4598468287538888e+00 4.1297936159472464e+00 0 0 0 -2004 668 2 3.7851807512870878e-01 2.8277280394440744e+01 2.1676827663847433e+00 3.2511065976651894e+00 0 0 0 -1415 472 2 3.5501881145054931e-01 2.7398178513195557e+01 4.8176197476632554e+00 8.1955155867095399e+00 0 0 0 -935 312 2 3.7926192283897481e-01 2.7867354921700084e+01 2.3163446476640237e+00 7.1464374500543952e+00 -1 1 0 -934 312 1 -7.0550798053293162e-01 2.8514066684769428e+01 3.0309372866169420e+00 6.9865725072981961e+00 -1 1 0 -936 312 2 3.5802385594781078e-01 2.8350968993500395e+01 3.1826801669888085e+00 6.0233873348596116e+00 -1 1 0 -1654 552 1 -7.2778148499228823e-01 2.6000151339640546e+01 6.2984732742535758e+00 3.9240473831981197e+00 -1 0 1 -1656 552 2 3.8027277584560176e-01 2.5187286537297961e+01 6.1459731664565673e+00 3.3539954771306548e+00 -1 0 1 -1416 472 2 3.7533076508460606e-01 2.7486061051601464e+01 6.1751659468413065e+00 7.6778011869943370e+00 0 0 0 -1284 428 2 3.7296810722231194e-01 2.5695725667684769e+01 6.1010097723828309e+00 4.7757707803728042e+00 -1 1 0 -1282 428 1 -7.2633138156117139e-01 2.6533195522991019e+01 3.0430789772738978e+00 9.4074079366307362e-01 -1 1 0 -395 132 2 3.7194150494052364e-01 2.0721686406351484e+01 1.4825699905520535e+01 6.7864002498783798e+00 0 -1 0 -315 105 2 3.9182710238531726e-01 2.7194063305354611e+01 2.3585563875597009e+00 7.3548938961926469e-01 -1 0 0 -2005 669 1 -7.3670581211206421e-01 2.8797406268766185e+01 6.8426764115822305e+00 2.7028840681739510e+00 0 0 1 -1283 428 2 3.8989794328252242e-01 2.5720251978925841e+01 2.5003236123211270e+00 1.1432158812361251e+00 -1 1 0 -2454 818 2 3.5521705336813136e-01 5.1507876412977160e-01 1.3637905550535947e+01 1.3746168208106381e+01 0 0 0 -143 48 2 3.6506930274778204e-01 2.8548886820557613e+01 7.1302593790984945e+00 5.5261781302066835e+00 -1 0 0 -322 108 1 -7.1522081979271412e-01 2.7851815251966961e+01 1.1251230139737199e+01 1.0598254784622664e+01 0 0 0 -2006 669 2 3.8260586691915549e-01 2.8793657450713877e+01 7.7546719844509173e+00 2.2997713633332033e+00 0 0 1 -144 48 2 3.6242795555462648e-01 2.7062070631452631e+01 7.2243739405285794e+00 5.1544861901002568e+00 -1 0 0 -142 48 1 -7.4158746208401738e-01 2.7655742999010020e+01 7.0029279966475046e+00 5.9266458450432316e+00 -1 0 0 -128 43 2 3.6493793175219513e-01 2.9251866054560224e+01 1.8128122219449998e+00 2.9835519613040862e-01 -1 0 0 -893 298 2 3.7946920482746471e-01 2.0789415683959433e+01 5.0171134231841330e-01 4.9622184914003116e+00 -1 1 0 -613 205 1 -7.2930970719515864e-01 2.5354487785368573e+01 2.9206965939664045e+00 7.0171052428807306e+00 0 0 0 -1854 618 2 3.6046538469487516e-01 6.0186383954012292e+00 9.6181536881972463e+00 3.3021872686892668e+00 0 0 1 -313 105 1 -7.2860828500242214e-01 6.6309818808902365e-01 6.8670236808095488e+00 2.5073334000482266e+00 0 0 0 -489 163 2 3.8242671450949917e-01 3.2789655077764341e+00 1.0335182590066815e+01 3.1661711981267127e+00 1 0 0 -1582 528 1 -6.9633133541634928e-01 3.9175816189525694e+00 8.8798388320891473e+00 6.6440531322343496e-02 0 0 1 -1583 528 2 3.8330519894733267e-01 3.7157303505667616e+00 9.3075520118682071e+00 9.5043849871585739e-01 0 0 1 -1545 515 2 3.3547912585773454e-01 1.7513554097617570e+00 1.4264802299774038e+01 1.3255855811745821e+01 0 0 0 -487 163 1 -7.5962823214403985e-01 4.0623364446220558e+00 1.0069168258611036e+01 2.6871955226819590e+00 1 0 0 -488 163 2 3.3513510512049199e-01 4.4047292342860924e+00 1.0884175221904872e+01 2.3609347733608774e+00 1 0 0 -236 79 2 3.3992074273664707e-01 5.8140865525284569e-01 1.0447318523122952e+01 4.6983525142782989e+00 0 0 0 -1087 363 1 -7.7121238428502759e-01 2.2878236686215194e+00 1.0794053515937286e+01 4.6705075461661476e+00 0 0 0 -876 292 2 3.7577555404776669e-01 2.6906293270298849e+00 1.0167016969107877e+01 5.3443139055192077e+00 0 0 0 -1089 363 2 3.5301346996899213e-01 2.4523046410709441e+00 1.1721309434211925e+01 5.0512172834935525e+00 0 0 0 -988 330 1 -7.3980602252790906e-01 3.0605477789577495e+00 8.6425406263411908e+00 6.3050430950897791e+00 0 0 0 -989 330 2 3.5221983851749666e-01 2.7372684251186699e+00 7.7380758558943352e+00 6.3162320630704851e+00 0 0 0 -351 117 2 3.5476259391158621e-01 4.9008643683721811e+00 1.3370829450075949e+01 1.4978719937142511e+00 0 0 0 -349 117 1 -7.2438225240095444e-01 3.9668742629788083e+00 1.3106368663758122e+01 1.3619716573037230e+00 0 0 0 -2204 735 2 3.3502436980086803e-01 1.3133732729193814e+00 1.1046095576944669e+01 7.3879940582274928e-01 1 0 1 -2090 697 2 3.1416504629569597e-01 3.5713442770377184e+00 1.3601010630849697e+01 2.1393200249164996e+00 1 0 0 -2165 722 2 3.6187320847216919e-01 3.0809439330817803e+01 1.3842330112549433e+01 4.6223282175213347e+00 0 -1 1 -2822 941 2 3.8410087331911397e-01 7.0484164184591402e-01 8.6201759024897981e+00 2.2996257689948187e+00 1 0 1 -2821 941 1 -6.9317519523929871e-01 1.0510035515236795e+00 9.5837781336614452e+00 2.2453884041254644e+00 1 0 1 -2838 946 2 3.4514550685245993e-01 9.6234805605568241e-01 9.9084729669537506e+00 3.1471571998744992e+00 1 0 1 -2164 722 1 -7.5352117053148004e-01 3.0047419170952306e+01 1.3303786185264741e+01 4.3623085402350235e+00 0 -1 1 -975 325 2 3.7682730648664148e-01 4.1159794867671584e+00 1.3015015958314439e+01 5.9005683034394236e+00 0 0 0 -2066 689 2 3.8742997998029072e-01 1.6019479085528225e+01 1.1685737415708365e+01 2.1333527031933200e-01 0 0 1 -2935 979 1 -7.3059112897193779e-01 1.3639244652625697e+00 1.1859835077454461e+01 1.5196214658237747e-01 1 0 1 -2244 748 2 3.5548258327564458e-01 2.1573034557559936e+00 1.2211891396818533e+01 4.2478770601766352e-01 1 0 1 -990 330 2 3.5068291930645673e-01 4.0201368215177693e+00 8.5826932481606466e+00 6.5452969738789379e+00 0 0 0 -2149 717 1 -7.4148447957628705e-01 1.2019739267070590e+00 1.4672260592254840e+01 5.5630992204181284e+00 1 0 1 -973 325 1 -7.8775790214207508e-01 3.2808598996908067e+00 1.2848526359195688e+01 6.2732967928043202e+00 0 0 0 -762 254 2 3.6025664654146405e-01 1.9056954910051354e+00 1.4057376445312965e+01 5.5313206816203708e+00 0 0 0 -2795 932 2 3.9224283641486529e-01 2.6521176460952926e+01 4.6186126865153296e+00 2.5126444848059759e-01 0 1 1 -122 41 2 3.6819491116834224e-01 2.3324552592077765e+01 3.5796379652413099e-02 7.4527908359156143e+00 -1 0 0 -358 120 1 -7.4765682452255755e-01 5.4380659569255423e+00 1.3878425473942585e+01 4.4473440250118168e+00 0 0 0 -417 139 2 3.7382189272773941e-01 1.7560447634827046e+01 1.5143597939000566e+01 8.1699992837828930e+00 0 0 0 -961 321 1 -7.6642246769839772e-01 1.0042308679106254e+01 8.9584766183836724e+00 7.1840235780789001e+00 0 0 0 -962 321 2 3.6857664079591451e-01 9.1568370079591368e+00 9.4753221975802866e+00 7.3013392451650754e+00 0 0 0 -2030 677 2 3.8077556991114592e-01 1.1274953341341806e+01 9.1756604772778196e+00 8.2615689499298348e+00 0 0 1 -296 99 2 3.8390767271087611e-01 8.3870652149458866e+00 1.0498040232468407e+01 4.1447572130468879e+00 0 0 0 -1684 562 1 -7.2814409094719501e-01 7.3903507455065967e+00 1.1071556853951039e+01 1.2250354825262861e+00 0 0 1 -295 99 1 -7.5867788325900443e-01 8.3606792224635225e+00 1.1198565313529352e+01 4.7578819239418824e+00 0 0 0 -297 99 2 3.8050488962837858e-01 8.1992673935332281e+00 1.0810184886840672e+01 5.5982050466612767e+00 0 0 0 -752 251 2 3.7058099998233940e-01 6.9641895936893086e+00 1.2308111468798824e+01 6.9658155757407219e+00 0 0 0 -751 251 1 -7.4278412639228442e-01 6.8317676886338417e+00 1.3225459031894374e+01 6.7438315667638911e+00 0 0 0 -333 111 2 3.2594448957973510e-01 1.0940086812021329e+01 1.0907622350149609e+01 2.3696570893195164e+00 0 0 0 -1721 574 2 3.6555965852011851e-01 1.0108207122612409e+01 1.2939405571008342e+01 1.8138351188170265e+00 0 0 1 -1720 574 1 -6.7979005435637685e-01 1.0139115176726332e+01 1.2619264235791288e+01 9.1494055886703352e-01 0 0 1 -1722 574 2 3.1408722434581637e-01 9.3407660548652700e+00 1.3012442918969811e+01 4.6724181254637065e-01 0 0 1 -513 171 2 3.5331149898951131e-01 6.1258136386977373e+00 1.3650690886881765e+01 5.1785295600723549e+00 0 0 0 -359 120 2 3.3369997701578780e-01 5.9767384049249790e+00 1.3598746260467328e+01 3.6815405445583935e+00 0 0 0 -1686 562 2 3.5240375771748844e-01 6.9460097646681369e+00 1.1918500061515987e+01 1.4366910383412708e+00 0 0 1 -2280 760 2 3.7119825856449817e-01 7.2401035636003090e+00 1.4224140737357329e+01 1.1984115186101394e+00 0 0 1 -332 111 2 3.4834558761665085e-01 1.0853174350853518e+01 1.0627732179932620e+01 6.3333012192419424e+00 0 0 0 -994 332 1 -7.1059773710688490e-01 1.1083273692355830e+01 1.1613748775864417e+01 6.4686656234184738e+00 0 0 0 -341 114 2 3.3735279609069491e-01 7.0764838609572767e+00 9.4518567379441283e+00 7.8554150256115385e+00 0 0 0 -340 114 1 -7.5518289903745917e-01 7.6864902765107814e+00 1.0199138450529055e+01 7.5550827779115322e+00 0 0 0 -2278 760 1 -7.8009249592433916e-01 6.8004361878348911e+00 1.3720896671082105e+01 1.9284680084598940e+00 0 0 1 -331 111 1 -7.3418890315657181e-01 1.0267332256594415e+01 1.0457999131588730e+01 2.9030361238710336e+00 0 0 0 -1272 424 2 3.1651297923855615e-01 1.0320620493004430e+01 1.1044707571318979e+01 3.6633258241542537e+00 0 0 0 -2279 760 2 3.0287135476369220e-01 7.5119692850690356e+00 1.3642877563459185e+01 2.5709230452345122e+00 0 0 1 -552 184 2 3.1157287016550422e-01 2.2611381264759519e+01 9.5628153947696610e+00 1.4801127234723051e+01 0 0 0 -1071 357 2 3.6370197009760108e-01 9.2109793110600613e+00 1.2678296857439486e+01 4.1086137374479605e+00 0 0 0 -753 251 2 3.8398429683529961e-01 7.6805428689642357e+00 1.3657573344140784e+01 6.9011137950325541e+00 0 0 0 -996 332 2 3.7894194562482475e-01 1.2011414776837247e+01 1.1748453532754196e+01 6.1451088221579040e+00 0 0 0 -649 217 1 -7.3435592382189663e-01 1.3706413328780920e+00 1.3953920709658846e+01 1.4118039306937186e+01 1 0 0 -1069 357 1 -7.7126130153104555e-01 9.6710350248297203e+00 1.3461439256148447e+01 3.6996363509544015e+00 0 0 0 -698 233 2 3.8485248110641607e-01 1.0125965419176254e+01 1.2973195546590683e+01 7.2780509680289356e+00 1 0 0 -2720 907 2 3.5902734372621675e-01 2.5263573307082972e+01 1.4868669781495987e+01 9.8064356926907124e+00 0 1 0 -806 269 2 3.6058437088561074e-01 1.0569862483970079e+01 1.3309830973784278e+01 3.9004031613580823e+00 0 0 0 -524 175 2 3.7925251782370911e-01 1.7318664733722265e+01 7.6410073785404355e+00 1.4165581848616602e+00 0 0 0 -523 175 1 -7.2080194552706012e-01 1.6846011175578873e+01 8.1855784635332398e+00 8.6426136208733129e-01 0 0 0 -1892 631 2 3.3559177520446359e-01 1.2031997034331688e+01 8.9284412640576942e+00 3.4755052150328223e+00 0 0 0 -977 326 2 3.5661278293438609e-01 1.2923340356870726e+01 1.3924500954723241e+01 2.8572605709043160e+00 0 0 0 -1270 424 1 -7.6167366620956856e-01 1.3625015813317914e+01 1.1635889254372275e+01 5.3936156072980204e+00 0 0 0 -1271 424 2 3.2283997763176686e-01 1.3363419589478919e+01 1.2055222357868308e+01 4.5025536195181903e+00 0 0 0 -1891 631 1 -7.1511451722943142e-01 1.2546260930801695e+01 8.1678258594311988e+00 3.7054756391045220e+00 0 0 0 -374 125 2 3.7100735648407795e-01 1.4671305077239150e+01 8.4693641702357034e+00 6.5010617381468663e+00 0 0 0 -999 333 2 3.7673389148422226e-01 1.6858188839617025e+01 1.3260840101787142e+01 3.6536277097279157e+00 0 0 0 -976 326 1 -7.6500251118257601e-01 1.2495194270294981e+01 1.3064141836183607e+01 2.9073867924432082e+00 0 0 0 -2537 846 2 3.4154322829704103e-01 1.4449902508342412e+01 8.1164653714006967e+00 4.4858453812232160e+00 0 1 0 -945 315 2 3.5756763237003220e-01 1.2874768239465711e+01 1.2619148926920694e+01 2.2110146519842866e+00 0 0 0 -1925 642 2 3.4095981919838175e-01 1.5692511942686176e+01 9.6147015634048660e+00 3.3486570916909053e+00 0 0 0 -1924 642 1 -7.2404266196428380e-01 1.5221695559658110e+01 1.0459664212803514e+01 3.1680209738104517e+00 0 0 0 -1926 642 2 3.1717212270082579e-01 1.4608794019453144e+01 1.0494730065994817e+01 3.9453561254685292e+00 0 0 0 -1128 376 2 3.7402235582157090e-01 1.5045005346193431e+01 1.3260823429527811e+01 1.1281503733802314e+00 0 0 0 -1126 376 1 -7.7268408356808438e-01 1.4601781128230201e+01 1.2432780275579875e+01 1.0212338110373231e+00 0 0 0 -1127 376 2 3.4268230352755635e-01 1.4871898918240923e+01 1.1922153454176515e+01 1.8370952174557196e+00 0 0 0 -997 333 1 -7.5019155484829303e-01 1.6185721333585239e+01 1.2897821630729570e+01 4.2814784430507942e+00 0 0 0 -1962 654 2 3.3676684637680410e-01 1.5928223210051311e+01 1.2042646060180729e+01 3.8470288527138665e+00 0 0 1 -373 125 1 -7.3021666868400825e-01 1.4189227303820456e+01 9.1725985459417014e+00 7.0508923828249097e+00 0 0 0 -558 186 2 3.4524258190978491e-01 1.7275618272182506e+01 1.1647239440605443e+01 5.1520170782588597e+00 0 0 0 -2536 846 1 -7.3118747489834701e-01 1.5339710978302147e+01 7.8541542818862613e+00 4.8443859035052554e+00 0 1 0 -1758 586 2 3.6338525820394019e-01 1.4247358999328338e+01 1.2307757516201359e+01 5.7088167338458087e+00 0 0 0 -2450 817 2 3.8953285002764459e-01 1.5772388334175179e+01 1.3474992876695412e+01 6.0753715007786573e+00 0 0 0 -1060 354 1 -7.7834296710778439e-01 1.5161746436035390e+01 1.3765190928991137e+01 6.7030838997542705e+00 0 0 0 -1052 351 2 3.7091095558428605e-01 1.8874535562468576e+01 1.0112325706223350e+01 4.9605214777657274e+00 0 0 0 -952 318 1 -7.4211657418473165e-01 1.5899211349038151e+01 1.4813070298548183e+01 3.5141057336039394e-01 0 0 0 -1160 387 2 3.5794340822123361e-01 1.2922128370188350e+01 1.5070432297648827e+01 4.3865123063701645e+00 0 0 0 -1061 354 2 3.9340394586448718e-01 1.4686691678917770e+01 1.4503427917135310e+01 6.3605934765078400e+00 0 0 0 -2157 719 2 3.4733707346504189e-01 1.2826235656375388e+01 1.5424466508002052e+01 1.4236822660756496e+00 0 0 1 -271 91 1 -7.3284933903259986e-01 1.9797012417861556e+01 1.0198648564118789e+01 2.1808724178878028e-01 0 0 0 -2843 948 2 3.6286479239287156e-01 2.5028410449812743e+01 1.3224309494639456e+01 1.5379719493730903e+00 0 0 1 -2865 955 2 3.8321205054164886e-01 2.4981110364415954e+01 1.1787790131490294e+01 1.0665015240334432e+00 0 0 1 -2336 779 2 3.4760543734255200e-01 2.6794298776418618e+01 4.7204019993334845e-02 1.1493774722804988e+01 -1 1 1 -560 187 2 4.1327771374331596e-01 2.4698030269425669e+01 1.4859157153438852e+01 6.4557658311544310e+00 0 0 0 -1002 334 2 3.6831536018504235e-01 9.0709264057027355e+00 1.5175519125043248e+01 4.0706270566276270e+00 0 0 0 -556 186 1 -7.1120261122680717e-01 1.8023493016279513e+01 1.1324096084893167e+01 5.7339965207913473e+00 0 0 0 -557 186 2 3.7278171676663396e-01 1.8744556612773923e+01 1.1998961480393996e+01 5.7709015871253806e+00 0 0 0 -1051 351 1 -7.5106068386773239e-01 1.9463097868557114e+01 9.4375597435248260e+00 4.4429166969099612e+00 0 0 0 -1141 381 1 -7.0865497417696000e-01 2.3622330297184394e+01 8.0976140201513047e+00 3.4823814250952703e+00 0 0 0 -1143 381 2 3.5276029334045467e-01 2.3877297116691985e+01 8.4869227450750060e+00 5.9959241109173318e+00 0 0 0 -1142 381 2 3.8480780230000083e-01 2.4009491806606366e+01 8.8987499849634037e+00 3.1807848067586919e+00 0 0 0 -1344 448 2 3.4431754370412976e-01 2.2031646719938472e+01 8.3703161142980598e+00 4.7295540868584167e+00 0 0 0 -1342 448 1 -6.8308981538894631e-01 2.4624194584247398e+01 8.6718279784660304e+00 6.4315465104822378e+00 0 0 0 -1279 427 1 -7.2047636044830288e-01 2.1194438088659144e+01 1.4655113145176898e+01 3.5599068905706899e+00 0 0 0 -1323 441 2 3.2231289034768323e-01 2.4319336433573465e+01 1.2486041030298008e+01 3.4344236859922881e+00 0 0 0 -749 250 2 3.4257377797706601e-01 1.8165041987963619e+01 1.4215742191736197e+01 2.0663913242721450e+00 0 0 0 -750 250 2 3.4918107205585291e-01 1.9293946610269717e+01 1.3944062873668372e+01 3.0360673982438584e+00 0 0 0 -1053 351 2 3.7355122674223473e-01 1.9981613596945731e+01 1.0142044406269951e+01 3.6721064556180352e+00 0 0 0 -1364 455 2 3.6485201855729510e-01 1.9318564114233528e+01 1.1646004194054118e+01 2.7559119559059511e+00 0 0 0 -1343 448 2 3.7323439077733678e-01 2.5272702753623754e+01 8.8444474476632546e+00 5.6789401336957352e+00 0 0 0 -1363 455 1 -7.2813137446444254e-01 2.0174853811185752e+01 1.1180685316542265e+01 2.6899483744839250e+00 0 0 0 -1365 455 2 3.9713794882029002e-01 2.0227614540723657e+01 1.0639849292957415e+01 1.8135908162679584e+00 0 0 0 -1294 432 1 -7.5872247108158186e-01 2.1586974012361846e+01 8.5220006770698973e+00 5.6332414905894312e+00 0 1 0 -1229 410 2 3.6559621130358355e-01 2.5796342575252574e+01 1.0434659060781394e+01 3.9758072329309679e+00 0 0 0 -1296 432 2 3.6607457751404843e-01 2.0366112239366135e+01 9.1572924816627204e+00 5.1228506915628627e+00 0 1 0 -2934 978 2 4.0311508896507325e-01 2.3942267593843457e+01 1.4796025914797434e+01 1.3442222386508997e+00 0 0 1 -2850 950 2 3.8315464193520832e-01 2.4620142727404136e+01 1.4909320955578064e+01 2.7131452306888910e+00 0 0 1 -2932 978 1 -7.8039979922039138e-01 2.4013594742696309e+01 1.4359470428390750e+01 2.2266960707494654e+00 0 0 1 -748 250 1 -7.3018650304512345e-01 1.8427046215860823e+01 1.3583293653000359e+01 2.7271658023086571e+00 0 0 0 -1321 441 1 -6.5864153984116669e-01 2.4268201200445308e+01 1.1986392490174696e+01 4.2974713873037711e+00 0 0 0 -1281 427 2 3.5433692469751338e-01 2.2077395306594351e+01 1.4348392712373405e+01 3.1790452010726651e+00 0 0 0 -2780 927 2 3.6847894214086452e-01 2.0657071677182085e+01 1.3437978308603224e+01 5.0024740459382340e+00 0 0 1 -1295 432 2 3.8008842647280749e-01 2.2075169149491696e+01 9.3884094689527533e+00 6.0161724973545869e+00 0 1 0 -1177 393 1 -7.2133807426964403e-01 2.0445471297606030e+01 1.3020624667663823e+01 5.9033396771857563e+00 0 0 0 -1178 393 2 3.8760922709331613e-01 2.1123036439837861e+01 1.2364993781325525e+01 6.1885183465221001e+00 0 0 0 -2228 743 2 3.4804715633184741e-01 2.4810796102968023e+01 9.2674126213427019e+00 1.1286540554542459e+00 0 0 1 -1322 441 2 3.3033554877197840e-01 2.4605511059419875e+01 1.2673089397605336e+01 4.8771040732884554e+00 0 0 0 -224 75 2 3.5080382579655595e-01 1.9820240129964642e+01 7.6595505302338704e+00 6.4471005405667841e+00 0 0 0 -2227 743 1 -7.2929343957952986e-01 2.4726632068728112e+01 9.9745764484836581e+00 1.7381256100416549e+00 0 0 1 -2229 743 2 3.2258576344761747e-01 2.5640140643847204e+01 9.9550075705358392e+00 2.1361854473283866e+00 0 0 1 -507 169 2 3.4073756485913104e-01 2.2660158628013029e+01 1.4128931869446916e+01 1.4168782827577042e+01 0 0 0 -2080 694 1 -7.1497924938304980e-01 2.1835153667262524e+01 1.0736491192306897e+01 6.9156177707814352e+00 0 0 0 -2082 694 2 3.6731570280412973e-01 2.2588381513180167e+01 1.0893927333057611e+01 7.5772875029759232e+00 0 0 0 -431 144 2 3.6489346980624221e-01 3.0534173399577149e+01 8.3380848420287279e+00 6.5163502149762520e+00 0 0 0 -1632 544 2 3.8167188596816054e-01 3.0422394593164292e+01 1.1494413603359128e+01 4.6230591406290511e+00 -1 0 1 -1630 544 1 -7.2546998377165361e-01 3.0594866062596974e+01 1.0538283577190228e+01 4.6956648343540257e+00 -1 0 1 -2166 722 2 3.6335358282092878e-01 2.9345361139250041e+01 1.3735034155610570e+01 4.8968147581269275e+00 0 -1 1 -1917 639 2 3.2831460205591412e-01 1.9266198291343610e+01 1.5112588328716638e+01 2.2304837569120856e-01 0 0 1 -2203 735 1 -7.5258231877874160e-01 2.9176683859194647e+01 1.3163150997103514e+01 8.3128994673950860e+00 0 0 1 -1180 394 1 -7.0673420754785987e-01 2.6303583275596061e+01 9.8250799245261149e+00 4.5254814934012977e+00 0 0 0 -127 43 1 -7.1578102381674791e-01 2.7732456825143593e+01 9.2933380246859176e+00 7.6714896220953657e+00 -1 0 0 -12 4 2 3.6193354459566540e-01 2.7540038293111024e+01 8.4959479214118510e+00 7.0545459217828670e+00 -1 0 0 -2095 699 1 -7.0831593411319604e-01 3.0349609271392325e+01 9.2925902847310340e+00 7.0978653600088935e+00 0 0 1 -2096 699 2 3.5281360484553997e-01 3.0398418861229050e+01 1.0051212924202549e+01 6.2213252553154827e+00 0 0 1 -623 208 2 3.5880766260311747e-01 2.9201482049435800e+01 9.2244346653423044e+00 7.4358684922306608e+00 0 0 0 -2159 720 2 3.3823564268491546e-01 3.0803202576366676e+01 1.1920531603542944e+01 1.3415442326919869e+00 0 0 1 -2158 720 1 -7.6119678411316760e-01 2.9918961599720525e+01 1.2338436941275864e+01 1.5832925508022093e+00 0 0 1 -2130 710 2 3.2749563037318280e-01 2.7349919815107906e+01 8.4101723016108476e+00 5.8452461182870985e-01 0 0 1 -1182 394 2 3.6320659557072082e-01 2.6759606122075066e+01 1.0434746236492805e+01 5.1603883516707372e+00 0 0 0 -2128 710 1 -7.4887991140858612e-01 2.8193494970906894e+01 8.7573589475964475e+00 9.2231447524737176e-01 0 0 1 -2129 710 2 3.4655998913080804e-01 2.7963380512288413e+01 9.6628989688977480e+00 1.3165453879185831e+00 0 0 1 -2870 957 2 3.8236049531283289e-01 2.8378756069119923e+01 1.1602593554863265e+01 2.0292751474858477e+00 0 0 1 -1328 443 2 3.8257873680038068e-01 2.8970511947163111e+01 1.4437357976968004e+01 7.0268108477778783e+00 0 0 0 -2869 957 1 -7.2788703577564851e-01 2.7464457162804660e+01 1.1234554557070336e+01 2.0922560348112369e+00 0 0 1 -610 204 1 -7.5670187498919206e-01 2.7428196957311773e+01 1.1811720209771533e+01 6.5291027444831045e+00 0 0 0 -611 204 2 3.8633155299559213e-01 2.7984044401595391e+01 1.2201081873390617e+01 7.1949645419678045e+00 0 0 0 -2160 720 2 3.5874055738087113e-01 3.0072740007557556e+01 1.2736754349937966e+01 2.4906916468330875e+00 0 0 1 -612 204 2 3.4738415209155832e-01 2.6702794741356012e+01 1.2389274641474589e+01 6.3231656173156452e+00 0 0 0 -759 253 2 3.9616694464984792e-01 2.7539456960359395e+01 1.0156517527325532e+01 7.2848106393189465e+00 -1 0 0 -559 187 1 -7.6802716399825677e-01 2.5314039050599870e+01 1.4074321651001933e+01 6.4730245007519622e+00 0 0 0 -561 187 2 3.7947197609714545e-01 2.5773924435289068e+01 1.4104908221359842e+01 7.3426255188206442e+00 0 0 0 -2048 683 2 3.3591653857891007e-01 2.6130737768723165e+01 1.3963141533124302e+01 4.6591233878349740e+00 0 0 1 -1623 541 2 3.3553535013638147e-01 2.3138636559317027e+00 8.9397229842037773e-01 1.2855145624292841e-01 0 0 1 -2047 683 1 -7.0776349214812362e-01 2.6594343953738139e+01 1.4706967508049495e+01 4.1879832928810821e+00 0 0 1 -2871 957 2 3.5675816071708077e-01 2.6911060654405620e+01 1.1711113956614183e+01 1.4175830917304237e+00 0 0 1 -1379 460 2 3.7241022699859389e-01 2.9281223062034392e+00 3.6528369544011947e+00 1.5515745498743394e+00 1 1 0 -2863 955 1 -7.2210570654265871e-01 2.5501068128887301e+01 1.2537161650963242e+01 8.9119591835198164e-01 0 0 1 -1327 443 1 -7.9225778065681240e-01 2.8811271119403859e+01 1.4901043031405694e+01 6.2030426088140684e+00 0 0 0 -228 76 2 4.0263595287173426e-01 5.9708137404961015e+00 1.0298900434273990e+00 7.7292692797755957e-01 0 0 0 -1495 499 1 -7.4698069194326755e-01 5.7133136422425741e+00 3.3509113292494890e+00 7.7236616434180014e+00 1 1 0 -1706 569 2 3.5283818767689318e-01 2.3690454189175880e+00 3.2404197638510954e+00 6.8417722693677980e+00 0 0 0 -1707 569 2 3.4478117026980820e-01 3.6857667798295326e+00 3.0473906768742740e+00 7.4777849585167786e+00 0 0 0 -1100 367 2 3.7628027277296727e-01 6.1575532700915261e+00 3.1089099103660129e+00 8.5453585887206884e+00 0 1 0 -117 39 2 3.9455890049263220e-01 1.8833110884786941e+00 5.9475010730976550e+00 7.8668284206495871e+00 0 0 0 -6 2 2 3.4014153576746908e-01 6.6653646394599662e+00 1.7006186811850021e+00 1.0874927030134137e+01 0 0 0 -4 2 1 -7.2571111880246442e-01 6.7333840652394521e+00 2.3787727470738345e+00 1.0219750954424841e+01 0 0 0 -1527 509 2 4.0100653288494820e-01 5.4528014673772898e+00 1.3956758948560801e+00 1.5307386648498444e+01 0 0 0 -151 51 1 -7.2910801690274551e-01 2.7262298784151353e+00 4.2955663940398221e+00 1.0510748319366119e+01 0 0 0 -153 51 2 3.7237597048485871e-01 2.6371530330396142e+00 4.0278556956960045e+00 9.5908798943605404e+00 0 0 0 -1119 373 2 3.8835260883331613e-01 4.4268410355053716e+00 4.7329718288267433e+00 1.0728787081880176e+01 0 1 0 -147 49 2 3.7708792650528411e-01 7.5267048627925659e-01 2.3059348787375873e+00 1.3112627078656976e+01 0 0 0 -1117 373 1 -7.5142747813406152e-01 5.1387664257184182e+00 4.9803723392331127e+00 1.1342304349160040e+01 0 1 0 -1118 373 2 3.6271966363746028e-01 5.4984890411492540e+00 5.8908091924721653e+00 1.1127059252087154e+01 0 1 0 -1123 375 1 -7.4006805555028954e-01 6.3042443441123792e+00 7.2148468774146242e+00 1.0319917218624509e+01 0 1 0 -5 2 2 3.0950048252677159e-01 6.1984768332792770e+00 3.0689625281473445e+00 1.0689680908331225e+01 0 0 0 -2433 811 2 3.6790902828033573e-01 4.1653063962835608e+00 6.3273345186813721e+00 1.3999319382857966e+01 0 1 0 -2431 811 1 -7.3438271689388468e-01 4.7187226779524876e+00 5.4769634480967486e+00 1.3945376600475882e+01 0 1 0 -2432 811 2 3.9084393881077384e-01 4.7398138108415253e+00 5.1990830606188325e+00 1.2995460855747162e+01 0 1 0 -152 51 2 3.3992824104581582e-01 2.4155991985277527e+00 3.5382690774085708e+00 1.0987691593868808e+01 0 0 0 -857 286 2 3.8124271137402527e-01 2.4747479270569568e+00 6.6203061567186445e+00 1.0887159393930956e+01 0 0 0 -923 308 2 3.2869068578915284e-01 6.3697320057901470e+00 6.6784125010570463e+00 1.3501034206207150e+01 0 1 0 -1525 509 1 -7.5992241024094487e-01 4.5103057463138860e+00 1.1475765232913371e+00 1.5133305617863787e+01 0 0 0 -856 286 1 -7.2800469554517955e-01 2.2942863580243062e+00 7.5346055017169800e+00 1.0829874489228526e+01 0 0 0 -858 286 2 3.4450384066690903e-01 2.7729168460391116e+00 7.8972231176541925e+00 1.1679026265479433e+01 0 0 0 -120 40 2 3.5154660324048509e-01 2.3446515644617008e+00 1.6742848679669022e+00 1.4471381758370747e+01 0 0 0 -118 40 1 -7.1973118402817282e-01 1.6337449119010632e+00 1.1435179646868354e+00 1.4125673846681433e+01 0 0 0 -1705 569 1 -7.4619529430445708e-01 2.8020966808238748e+00 3.3596387585687006e+00 7.6862162452808773e+00 0 0 0 -792 264 2 3.8162134395491909e-01 4.7476299851296516e-01 7.5080694733013980e+00 1.1117422277791169e+01 0 1 0 -145 49 1 -7.2456733119125016e-01 9.7035303704488512e-02 2.8037480815284308e+00 1.2502648753185213e+01 0 0 0 -146 49 2 3.6960101144384100e-01 3.3213958954874911e-01 3.7881333174906344e+00 1.2651781996324514e+01 0 0 0 -885 295 2 3.6343115339204518e-01 3.9216228535512293e-01 5.7211140002981447e+00 1.2421215920920250e+01 0 1 0 -733 245 1 -7.2939243403239429e-01 1.0591558935808338e+00 5.2316792952360576e+00 1.3040137299130430e+01 1 0 0 -734 245 2 3.7885173336262007e-01 7.7356250970958040e-01 5.2155320245704964e+00 1.3943828663846643e+01 1 0 0 -2326 776 1 -7.5959298392515695e-01 3.4747639361285931e+00 7.7758768787384263e+00 1.3523957449850817e+01 0 1 0 -2118 706 2 3.7032656930185393e-01 7.7843948181891809e-01 6.7423516357047797e+00 1.4849541735561921e+01 1 0 0 -1871 624 2 3.7742868774015342e-01 1.2907370063895211e+01 4.4263912919383808e+00 1.5492392870088166e+01 0 0 0 -2205 735 2 3.5816460566448205e-01 2.8946845771120604e+01 1.2627751108813840e+01 9.1250146354086610e+00 0 0 1 -1641 547 2 3.4073380398166719e-01 7.1111993645099947e+00 1.1366622304192653e+01 1.5359188902057735e+01 0 0 0 -1208 403 2 3.6388529937889968e-01 2.5056081596788722e+01 1.4584530002965888e+00 1.1020268642399330e+01 0 1 0 -1125 375 2 3.5950591727482978e-01 6.8748449510385647e+00 6.4533818108221057e+00 9.8958183731961320e+00 0 1 0 -1124 375 2 3.6079497036949704e-01 6.8670303828595243e+00 7.5817382274248049e+00 1.1016727356105484e+01 0 1 0 -75 25 2 3.8204465030924051e-01 7.1142711055162033e+00 7.4286205407604458e+00 1.4657265748022505e+01 0 0 0 -1699 567 1 -7.2931258945533617e-01 8.0658743106840500e+00 5.4073124961907117e+00 9.4539036839712871e+00 0 0 0 -1701 567 2 3.7159147156970163e-01 8.2335210912987247e+00 4.7266377202255532e+00 1.0177642672103413e+01 0 0 0 -830 277 2 3.5956669984241846e-01 1.3400883293480890e+01 2.3588279160837056e+00 8.0615325900692927e+00 0 1 0 -73 25 1 -7.5694911019102484e-01 7.2938075580930937e+00 6.8554873823714217e+00 1.3873973895860502e+01 0 0 0 -848 283 2 3.5315011637445082e-01 7.6614448452830199e+00 8.0302126081544554e+00 1.2642514058156374e+01 0 0 0 -101 34 2 3.6642454244934813e-01 7.2517605405166901e+00 1.2005813022855081e+00 1.3975943969519834e+01 0 0 0 -217 73 1 -7.0702430479286171e-01 1.0085707824014888e+01 6.5561230328896141e+00 8.0915255535996220e+00 0 0 0 -219 73 2 3.7622741341933796e-01 9.2985003663325791e+00 6.0191502568826607e+00 7.8377760739129236e+00 0 0 0 -820 274 1 -7.2553446153842394e-01 1.1880570912905165e+01 3.4432634914317197e+00 1.0382975998786526e+01 0 1 0 -822 274 2 3.4320117180500115e-01 1.2011507734689886e+01 3.1042560325459547e+00 9.4523576660266677e+00 0 1 0 -2937 979 2 3.2429534466538423e-01 2.9647128738089414e+01 1.5235459388641615e+01 5.9945384093753304e+00 0 0 1 -2293 765 1 -7.2726234223499353e-01 8.0404399513760083e+00 4.3439217238147378e+00 1.3755030513215200e+01 0 1 0 -2585 862 2 3.7659831892793261e-01 9.7960146545419313e+00 4.6050109223523279e+00 1.3951856085888535e+01 0 1 0 -2586 862 2 3.5592816744559364e-01 1.1356255901199329e+01 4.4804001893060894e+00 1.4228130964569861e+01 0 1 0 -2295 765 2 3.5623744243767957e-01 7.6461122285125604e+00 3.7650915357505688e+00 1.4455339332419513e+01 0 1 0 -567 189 2 4.0714735396839730e-01 2.1459914129644218e+01 9.0359099877329443e-02 1.1951506949480251e+01 0 0 0 -100 34 1 -7.1917012813285031e-01 7.1710414426954534e+00 1.5952229176299946e+00 1.4910248227520436e+01 0 0 0 -2300 767 2 3.7659586689290209e-01 1.0875148664424408e+01 3.5493398962347711e+00 1.0616015335094025e+01 0 1 0 -1559 520 2 3.5039867302626498e-01 1.0884136499129305e+01 7.0708785770579992e+00 1.3919477973256607e+01 0 0 0 -1522 508 1 -7.5891955514033194e-01 1.0306342379913511e+01 8.2620202951080319e+00 1.0775546187730539e+01 0 0 0 -1524 508 2 3.7292101546655892e-01 1.1131579343509493e+01 8.4596096396323102e+00 1.0284470239703452e+01 0 0 0 -53 18 2 3.6921541695409194e-01 8.8009057386326699e+00 3.9237712801575633e+00 1.1939014204161996e+01 0 0 0 -54 18 2 3.9677587277412490e-01 8.2006061888405046e+00 2.9551428942942040e+00 1.0984331249647768e+01 0 0 0 -52 18 1 -7.5399507143701594e-01 8.9736740142172291e+00 3.4644949499441897e+00 1.1129417096795120e+01 0 0 0 -1558 520 1 -7.0982689216245853e-01 1.0736636700935271e+01 8.0392435980254859e+00 1.3677296770396085e+01 0 0 0 -1523 508 2 3.5617246436127509e-01 9.8246901650007672e+00 7.7074572213170116e+00 1.0195397330490612e+01 0 0 0 -1560 520 2 3.7060906657481996e-01 1.0622419309330631e+01 7.9885487528953618e+00 1.2739077872884986e+01 0 0 0 -1035 345 2 3.5430395266288411e-01 1.1755990067763298e+01 1.5531919009169568e+00 1.4699794161400284e+01 0 1 0 -1033 345 1 -7.4239732885452370e-01 1.1462755227583308e+01 6.4250326314457440e-01 1.4811198729257669e+01 0 1 0 -849 283 2 3.2588457826761136e-01 8.4494469543540944e+00 8.7386137534629054e+00 1.1506531414782774e+01 0 0 0 -2584 862 1 -7.5666937390064370e-01 1.0587786945850189e+01 5.0905357888490519e+00 1.4303284175726585e+01 0 1 0 -193 65 1 -7.1287083432825538e-01 7.8382265342042690e+00 2.3779209227304340e-01 1.2514005498705270e+01 0 0 0 -1692 564 2 3.6522500943951181e-01 1.3534655771838898e+01 7.4176192148884805e+00 1.6295776923088712e-01 0 0 1 -1547 516 2 3.9166368478328889e-01 7.8127611458585022e+00 5.2785968207496676e+00 1.4085507762735677e+01 0 0 0 -1443 481 2 3.8374231033145811e-01 2.5998019544678456e+01 2.8394336364644585e-01 7.0548265690801184e+00 0 0 0 -832 278 1 -6.9673257579541992e-01 1.2840610249101658e+01 1.3841791945474853e+00 1.2181402975252579e+01 0 1 0 -833 278 2 3.5884040781426424e-01 1.2376086065692428e+01 1.8667618491299727e+00 1.1456946786471265e+01 0 1 0 -2642 881 2 3.6981504723344494e-01 2.7071245340385886e+01 1.2004734280878186e+01 1.3941196865662315e+01 0 0 0 -603 201 2 3.5243032749698672e-01 2.1323013615519361e+01 3.1366377295372072e-01 6.9373111750742895e+00 0 0 0 -1949 650 2 3.5927253244587376e-01 1.7627695566807684e+01 6.7390027859976085e+00 1.5169383768081236e+01 0 0 1 -56 19 2 3.5460786295729047e-01 1.5430802090070969e+01 6.6069356227314815e+00 8.0459831895907676e+00 0 0 0 -1998 666 2 3.8092999858822763e-01 1.3629256348678762e+01 6.2081487222913481e+00 9.7558929481132246e+00 0 0 0 -1996 666 1 -7.2640888473934240e-01 1.3165107561590442e+01 6.0337852110526731e+00 1.0569893871710724e+01 0 0 0 -2394 798 2 3.7955176869700491e-01 1.6528327719850296e+01 1.1576886767317813e+00 1.1896604473667898e+01 0 1 0 -2392 798 1 -7.6881336977051029e-01 1.5632143431262186e+01 9.0429830282334211e-01 1.2183148993929432e+01 0 1 0 -1997 666 2 3.6663644849215593e-01 1.2759100558626701e+01 5.0750909933917931e+00 1.0464243508742552e+01 0 0 0 -2393 798 2 3.8419389942242832e-01 1.5542558701553912e+01 1.1696011527051366e+00 1.3102245564015671e+01 0 1 0 -831 277 2 3.2987354907166927e-01 1.3756734760099002e+01 1.4251576584910015e+00 1.1767007872056187e+01 0 1 0 -343 115 1 -6.7059247534451183e-01 1.5178509152001014e+01 2.0862989205225126e+00 9.1205032185698958e+00 0 0 0 -345 115 2 3.3546865276217364e-01 1.5593169009727291e+01 1.8614151463305353e+00 9.9543209648358513e+00 0 0 0 -492 164 2 3.2163642474231885e-01 1.5072739477871830e+01 2.9379796849983619e+00 1.4599114764632004e+01 0 0 0 -490 164 1 -6.8923155762771027e-01 1.5870664080705264e+01 2.2946748312771486e+00 1.4622540169784720e+01 0 0 0 -344 115 2 3.2709224677898363e-01 1.5260077170758947e+01 1.1881908703163702e+00 8.7864480986886573e+00 0 0 0 -520 174 1 -7.1909122473513598e-01 1.7196179393454212e+01 5.3160814081286532e+00 7.4190619249913814e+00 0 0 0 -521 174 2 3.9324981174881513e-01 1.7515121661074613e+01 5.2364937919488321e+00 8.3752986681744126e+00 0 0 0 -522 174 2 3.7366943836384536e-01 1.7659531806788582e+01 6.1391560605467985e+00 7.1304365771098972e+00 0 0 0 -1756 586 1 -7.5920068941129171e-01 1.4658426527003499e+01 5.4131185264803490e+00 1.3029751411629096e+01 0 0 0 -1747 583 1 -7.6977085098305553e-01 1.2951722182284975e+01 3.4261101982938764e+00 1.3951502709799188e+01 0 0 0 -1749 583 2 3.8069646076011232e-01 1.3031148144009412e+01 2.5934113104381828e+00 1.3420560270630570e+01 0 0 0 -267 89 2 3.6472195954212816e-01 1.3423192309218713e+01 4.1516343738345025e+00 1.3468895058772269e+01 0 0 0 -356 119 2 3.4386349506320291e-01 1.6552260029851563e+01 4.3293187167755542e+00 1.2745163994997455e+01 0 0 0 -2478 826 2 3.3570330258088549e-01 1.5751225260829186e+01 1.5326252644421219e+01 1.3452394066409243e+01 0 0 0 -292 98 1 -7.6930786348559488e-01 1.7498856879713266e+01 4.4234803340157081e+00 1.2821595326717844e+01 0 0 0 -293 98 2 3.7740954655498354e-01 1.7626170157134943e+01 5.0554943057059312e+00 1.3559100941008857e+01 0 0 0 -1107 369 2 3.7509855283061289e-01 1.8344004032485415e+01 9.7556653751391431e-01 1.5364596329616360e+01 0 1 0 -1105 369 1 -6.7518709531011267e-01 1.8723242139432877e+01 4.3558395874367029e-01 1.4634747326163616e+01 0 1 0 -2125 709 1 -7.2564151296795454e-01 3.2825009797657576e+00 3.5620178750378977e+00 1.5105453773350597e+01 1 0 0 -43 15 1 -7.6895660931875232e-01 1.4525041166807853e+01 7.6337968708818593e+00 1.5062981791735449e+01 0 0 0 -1757 586 2 3.3649682619480270e-01 1.4240228224212217e+01 5.6841728368902089e+00 1.2158828663489908e+01 0 0 0 -509 170 2 3.5271511808719580e-01 1.4800378720215621e+01 6.2276266425671079e+00 1.3420897004972213e+01 0 0 0 -1380 460 2 3.5419580005962442e-01 1.8629586546026868e+00 3.5734243636620358e+00 4.3615791560615447e-01 1 1 0 -578 193 2 3.9713960387532932e-01 1.9423597927993939e+01 2.9087318733399328e+00 7.5262129406817797e+00 0 0 0 -367 123 1 -7.2710051161364753e-01 1.2416579314956541e+01 1.3715613318069197e+01 1.4282946030400939e+01 0 0 0 -511 171 1 -7.4512171403837524e-01 2.4803930176844077e+01 1.5302413347388612e+01 1.1822671179344709e+01 0 0 0 -2011 671 1 -7.4709735292318813e-01 1.8293031422855183e+01 5.9346095513880632e+00 1.5000140911255304e+01 0 0 1 -1475 492 2 3.7317206201114816e-01 1.8722213765556745e+01 1.6548596530678135e+00 1.1537800875257661e+01 0 1 0 -601 201 1 -7.3361955356670383e-01 2.1503320401422290e+01 5.9271631056304008e-01 7.9231840338727277e+00 0 0 0 -2187 729 2 3.9199351910503838e-01 2.0383710913812656e+01 1.8097855837437467e+00 8.0543115564475762e+00 0 0 1 -577 193 1 -7.1127677377745213e-01 1.9771472487393350e+01 2.5487891083800212e+00 8.3316328506980515e+00 0 0 0 -614 205 2 3.7407505471021024e-01 2.5086527208419309e+01 3.8100320200869837e+00 6.9347479762894189e+00 0 0 0 -2866 956 1 -7.1838721784639314e-01 2.2238867143818478e+01 6.6206143565943476e-01 1.4928980901267295e+01 0 1 0 -1474 492 1 -7.3385455535695043e-01 1.7918285931244117e+01 1.8130464925742915e+00 1.0997306604195431e+01 0 1 0 -1476 492 2 3.4120536749794717e-01 1.7757211567132394e+01 2.7166985286889385e+00 1.1133431815624004e+01 0 1 0 -1218 406 2 3.8295664823557690e-01 2.1369664604147701e+01 5.2399459239212680e+00 7.6448964751219899e+00 0 1 0 -688 230 1 -7.2755518245297979e-01 2.4293169407784752e+01 3.9273309354706862e+00 1.0643415684716048e+01 0 0 0 -1499 500 2 3.8499485474923101e-01 1.9764920848695187e+01 2.0728330953581264e+00 1.3749685454709892e+01 0 1 0 -1498 500 1 -7.2744822404421194e-01 1.9745330612381039e+01 2.5562014222464264e+00 1.2927390608295685e+01 0 1 0 -1258 420 1 -7.5280235702916753e-01 2.1617875467307812e+01 4.7266631525898264e+00 1.2180684242899421e+01 0 1 0 -1259 420 2 3.6065897597166990e-01 2.2531985320522988e+01 4.5834971460310134e+00 1.1847305831217536e+01 0 1 0 -1260 420 2 3.7948299592490964e-01 2.1251128340378809e+01 3.9240324328407725e+00 1.2406167656940005e+01 0 1 0 -516 172 2 3.6355959192629644e-01 1.8963523036386565e+01 4.9644183039953784e+00 9.8160073701109241e+00 0 0 0 -450 150 2 3.6319861548005317e-01 1.7848789498040787e+01 4.7885244433410792e+00 1.0916461708628269e+01 0 0 0 -514 172 1 -7.5075433757592747e-01 1.7987631123439659e+01 5.1223746744036243e+00 1.0033030945088347e+01 0 0 0 -543 181 2 3.4132266198773081e-01 2.3867112800622952e+01 1.6422617546848621e+00 1.5138059691781502e+01 0 0 0 -477 159 2 3.6838885712128094e-01 2.1428327513080283e+01 6.0937984323510017e+00 1.3625290474690019e+01 0 0 0 -1500 500 2 3.5740794308851537e-01 1.8960890627387890e+01 3.1658381752513125e+00 1.3002813973944345e+01 0 1 0 -540 180 2 3.8842943715533584e-01 1.9969925118498818e+01 6.1533798695849091e+00 1.4036472502277128e+01 0 0 0 -475 159 1 -7.2524608520236422e-01 2.0721609429132087e+01 6.7240774213857311e+00 1.3843706035189133e+01 0 0 0 -519 173 2 3.6530567454443974e-01 2.0367391722149197e+01 3.7827098785259343e+00 9.4710867505824847e+00 0 0 0 -518 173 2 3.8659561321700209e-01 2.0835639071694882e+01 4.8767936584255667e+00 1.0505604454054886e+01 0 0 0 -517 173 1 -7.2066827505495823e-01 2.0646024547525908e+01 4.7807012491235161e+00 9.5878601215390802e+00 0 0 0 -1463 488 2 3.7001165460315288e-01 2.5059579336733343e+01 4.2763792425139195e+00 1.2290755791753025e+01 0 0 0 -690 230 2 3.6693302663680660e-01 2.4310976815310109e+01 4.7688926171791550e+00 1.0023589800306729e+01 0 0 0 -305 102 2 3.7494168538359440e-01 1.8241266517473772e+01 7.0521986669749470e+00 1.0514820728488631e+01 0 0 0 -1427 476 2 3.6857040212391262e-01 2.3981080670517841e+01 7.8018909703968005e+00 1.4881169962592374e+01 0 0 0 -705 235 2 3.8425099015734254e-01 2.2158210635817589e+01 1.0129117115909334e+00 1.2994618483866436e+01 0 0 0 -541 181 1 -7.2403593484458073e-01 2.4818789731263312e+01 1.9865041075917433e+00 1.5121754790064486e+01 0 0 0 -1899 633 2 3.5006908968893219e-01 2.4629951035817367e+01 5.8571271246248955e+00 8.3141505342192570e+00 0 0 0 -1426 476 1 -7.3252070929554536e-01 2.4364470171787243e+01 7.0626678839497599e+00 1.4261751884869325e+01 0 0 0 -1428 476 2 3.8811277937038174e-01 2.5314987960777852e+01 7.3058943500301545e+00 1.4178682086942812e+01 0 0 0 -1414 472 1 -7.3360064589594565e-01 2.7550993312303770e+01 5.6656193425421897e+00 8.5318781731843671e+00 0 0 0 -1927 643 1 -7.1226092232480398e-01 1.9729614667682423e+01 1.5424098996174450e+01 1.4474084736050346e+01 0 -1 0 -689 230 2 3.5766754950756602e-01 2.5048967802606384e+01 3.5056094159587645e+00 1.0381098217008788e+01 0 0 0 -435 145 2 3.7931327983461433e-01 2.9446989394442696e+01 1.6218432754743712e+00 1.3276518359438416e+01 0 0 0 -2162 721 2 3.4970524972792255e-01 3.0881876535836799e+01 5.3481350682064557e+00 9.3333566602071443e+00 0 1 0 -542 181 2 3.5429491755211329e-01 2.4853376276356393e+01 2.6291827450099525e+00 1.4360183767796540e+01 0 0 0 -1462 488 1 -7.5273842885691056e-01 2.4961405255763978e+01 4.3820559262979417e+00 1.3252482556716789e+01 0 0 0 -1464 488 2 3.6588036398348228e-01 2.4675418213377018e+01 5.2665533818946253e+00 1.3521796518492849e+01 0 0 0 -433 145 1 -7.4496846761722701e-01 2.8815112296954197e+01 1.1197361386327909e+00 1.3787799256087547e+01 0 0 0 -790 264 1 -7.5639345045353734e-01 3.0908502199854400e+01 7.2335211641266817e+00 1.1809308959148076e+01 -1 1 0 -791 264 2 3.6378133514370009e-01 3.0163753828671656e+01 6.7203935794026775e+00 1.1419903438246410e+01 -1 1 0 -1898 633 2 3.5604854841982447e-01 2.5893725848115270e+01 5.6819508484033321e+00 9.2472145514554978e+00 0 0 0 -932 311 2 3.8928443975686011e-01 2.8884150973543537e+01 5.1476857725271996e+00 1.1737063860324186e+01 -1 1 0 -1897 633 1 -7.4283557466891181e-01 2.4963791994829780e+01 6.0131427661728312e+00 9.2015076259513453e+00 0 0 0 -65 22 2 3.6082840563451934e-01 2.6885396675267820e+01 4.6028681473046484e+00 1.3481959750039932e+01 -1 0 0 -931 311 1 -8.1088513364181436e-01 2.9255858784630693e+01 5.3273925909343962e+00 1.0897493567716483e+01 -1 1 0 -619 207 1 -7.1897738960383728e-01 2.6129680901438498e+01 1.9080919771772891e+00 9.4393291344901300e+00 0 0 0 -621 207 2 3.4805877891152026e-01 2.6709713348679507e+01 1.1306369025534946e+00 9.4562024416560426e+00 0 0 0 -149 50 2 3.9863672181096071e-01 2.9710227484758057e+01 3.7273264779773094e+00 1.0386017198568913e+01 -1 0 0 -620 207 2 4.0245852268132121e-01 2.5757537478202931e+01 2.0588464877755692e+00 8.5413076989905914e+00 0 0 0 -64 22 1 -7.1031165311971567e-01 2.7835584228745912e+01 4.5979208713487276e+00 1.3304429629555900e+01 -1 0 0 -933 311 2 3.7767524248048312e-01 2.8529341729640390e+01 5.6097797335513393e+00 1.0327938664820277e+01 -1 1 0 -66 22 2 3.8410634538348182e-01 2.8208691812263652e+01 4.3345433020500499e+00 1.4146818622807317e+01 -1 0 0 -150 50 2 4.0268078220208936e-01 3.0587651121091721e+01 2.4562019655713105e+00 1.0913608954452620e+01 -1 0 0 -148 50 1 -6.3523680236714652e-01 3.0014261231985849e+01 2.8296976555733773e+00 1.0158711234295309e+01 -1 0 0 -1410 470 2 3.6647851066022674e-01 2.7488614868809975e+01 7.1557091370555070e-01 1.5224526324660104e+01 0 1 0 -565 189 1 -7.0889569352593951e-01 2.2228996263999704e+01 6.0238629867093429e-01 1.2108798677536178e+01 0 0 0 -632 211 2 3.6323187105566485e-01 2.5144041786703801e+00 9.4766086883921563e+00 8.2812127516801031e+00 1 0 0 -2361 787 2 3.4036869030220601e-01 2.9674900959485498e+01 1.4554021886093295e+01 1.2414896945940716e-01 -1 0 1 -175 59 1 -7.1256654098368699e-01 5.0510690378808478e+00 1.4054240563036581e+01 1.5192545137924117e+01 0 0 0 -2328 776 2 3.7945131769037721e-01 3.9755357360033243e+00 8.3278810059172610e+00 1.4157480598329165e+01 0 1 0 -176 59 2 3.9534833332635477e-01 5.3966204843848313e+00 1.3142753310221739e+01 1.5262334948571340e+01 0 0 0 -330 110 2 3.8113145336997034e-01 5.8265739962506391e+00 1.4525990156178503e+01 1.4974835903439269e+01 0 0 0 -2327 776 2 3.3778404717192428e-01 2.6210714833892559e+00 7.6150242495597000e+00 1.4009654743941478e+01 0 1 0 -62 21 2 3.9022171798512079e-01 2.4270912233213426e+00 1.4619355445812479e+01 1.0945158420731445e+01 0 0 0 -1041 347 2 3.9381067712012852e-01 4.1247444702289715e-01 1.5282437437760446e+01 1.0247937301268676e+01 0 0 0 -1351 451 1 -7.1844759922879664e-01 3.2647902595068965e+00 1.5019216694508511e+01 1.1275636723095214e+01 1 0 0 -2198 733 2 3.8695732532320609e-01 9.3302114669402680e-01 1.1426457102712940e+01 8.4224985261841550e+00 1 0 1 -974 325 2 3.6570859822813900e-01 3.4743395439333682e+00 1.2715522170313381e+01 7.1995715196440289e+00 0 0 0 -631 211 1 -7.3454660884554557e-01 2.3473583134333067e+00 9.9816407567125189e+00 9.0883602162905728e+00 1 0 0 -1088 363 2 3.4986801754381086e-01 2.3658031539947602e+00 9.2965667631731783e+00 9.7881976239072763e+00 0 0 0 -2199 733 2 3.3300954549302841e-01 1.4942537249128416e+00 1.2277814561966592e+01 7.3708249797022791e+00 1 0 1 -235 79 1 -6.9185039046371155e-01 2.7858714028179783e+00 1.1373552859314389e+01 1.1473971760379191e+01 0 0 0 -898 300 1 -7.1546013722357327e-01 4.5728877373402117e+00 9.7356503938037537e+00 1.5228266034106058e+01 0 0 0 -900 300 2 3.8551458325678650e-01 4.0662714882203721e+00 1.0534941764101706e+01 1.4941000064104637e+01 0 0 0 -600 200 2 3.7616842927993599e-01 3.8592090106160084e+00 1.1258886749178458e+01 8.8955421940629442e+00 1 0 0 -69 23 2 3.5437298951555540e-01 3.0175793727847826e+00 1.1344702898904723e+01 1.3249419028151904e+01 0 0 0 -1353 451 2 3.6261572656089902e-01 3.8907736665690482e+00 1.4969924434423264e+01 1.0517398272303460e+01 1 0 0 -67 23 1 -7.5721933547325304e-01 2.7977829457583492e+00 1.1595097936647573e+01 1.4202652389008371e+01 0 0 0 -598 200 1 -7.4548411408638593e-01 4.6085102326547531e+00 1.1671350202005954e+01 8.5945596401325108e+00 1 0 0 -2097 699 2 3.2616634809562145e-01 5.1932452087937717e+00 1.1628802911703145e+01 9.4141628986432853e+00 1 0 1 -2402 801 2 3.3232902575633561e-01 2.9203238072282449e+00 1.0537214466214817e+01 1.0955919204746792e+01 0 0 1 -237 79 2 3.6117813687213041e-01 3.7306249546188499e+00 1.1674842950233487e+01 1.1600395594646823e+01 0 0 0 -68 23 2 3.7369642806847442e-01 2.3291316493498266e+00 1.2501622035907316e+01 1.4144076842591076e+01 0 0 0 -2116 706 1 -7.7467702004768768e-01 8.2509460147234337e-01 7.7332871707655277e+00 1.4708910945969693e+01 1 0 0 -1040 347 2 3.6824975972104207e-01 6.7726099912866222e-01 1.3934154697437014e+01 9.4292664487016502e+00 0 0 0 -1039 347 1 -7.1915875524611683e-01 7.7061219812285620e-01 1.4407170423297879e+01 1.0281047320349066e+01 0 0 0 -2117 706 2 3.4165987529066466e-01 6.8809203875384128e-01 7.7099421116350584e+00 1.3707451004693933e+01 1 0 0 -2825 942 2 3.3634351290587594e-01 4.5731908619027911e-01 1.0013474287264552e+01 1.3886569726088378e+01 1 0 0 -706 236 1 -7.7577799668990832e-01 5.3402842681625984e+00 8.8242451468595107e+00 8.0314052894323549e+00 1 0 0 -707 236 2 3.6197410070447383e-01 5.4133691767784029e+00 8.1890158701469744e+00 8.7881009544477156e+00 1 0 0 -416 139 2 4.0897508337024036e-01 1.8938881161337186e+01 1.5423961340711873e+01 7.4916310555025651e+00 0 0 0 -1515 505 2 3.4854657550425927e-01 5.2407497151329068e+00 9.7038874935259685e+00 8.3966252068746865e+00 0 0 0 -2197 733 1 -7.3270182105120618e-01 8.3638097207326800e-01 1.2301219737199974e+01 8.1123058565547019e+00 1 0 1 -342 114 2 3.6869306631487608e-01 7.9752491031405643e+00 1.0593815814522161e+01 8.4267344213652517e+00 0 0 0 -1820 607 2 3.4835300792302981e-01 7.9080190360120870e+00 1.3742529101460926e+01 1.4836547168486410e+01 0 0 0 -1396 466 1 -6.8160967262519656e-01 2.9199425610566159e+01 5.1557316302804956e+00 4.6058973490166810e-01 0 1 0 -1971 657 2 3.4378221006170773e-01 4.2691464692347942e+00 4.2911180777030433e-01 1.3541214377972180e+01 1 1 0 -864 288 2 3.6221396727336957e-01 5.4011107038344548e+00 1.3622666988440319e+01 8.6630142516521040e+00 0 0 0 -862 288 1 -7.2312990450742654e-01 5.3164288643742870e+00 1.4508037162843033e+01 9.1832503475579799e+00 0 0 0 -179 60 2 3.6983465043738645e-01 8.3681498642717074e+00 1.5287477348211810e+01 1.0932559507091939e+01 0 0 0 -368 123 2 3.7384765574432249e-01 1.2113975015615358e+01 1.4373441936166605e+01 1.3613044619767901e+01 0 0 0 -847 283 1 -7.4625410459184238e-01 7.6114411201264192e+00 8.8345758186914498e+00 1.2031997872207691e+01 0 0 0 -1556 519 2 3.4607933991430101e-01 8.4894321682405600e+00 1.3260036097534050e+01 1.3453906753586784e+01 0 0 0 -1849 617 1 -7.5826327946819061e-01 8.2219713509954904e+00 1.0534883720263394e+01 1.4261587656728096e+01 0 0 0 -875 292 2 3.4628831556292750e-01 6.2036199822241187e+00 1.0816092574783342e+01 1.1756085309391285e+01 0 0 0 -874 292 1 -7.6721271103192745e-01 5.5006746482693147e+00 1.1429298196254583e+01 1.1461487068386344e+01 0 0 0 -1850 617 2 3.4368576799360379e-01 8.5532727468126719e+00 1.1371405936897432e+01 1.3878305151510423e+01 0 0 0 -1352 451 2 3.6099020013418986e-01 5.8634257921349411e+00 1.2273479037391111e+01 1.1527736381924981e+01 1 0 0 -697 233 1 -6.7372755743035562e-01 9.5368907373516105e+00 1.3728358780387213e+01 7.5879373029887853e+00 1 0 0 -1819 607 1 -7.2384686721009794e-01 7.7749767883787735e+00 1.3744469529055349e+01 1.3854457093015277e+01 0 0 0 -863 288 2 3.7101867574652236e-01 6.0616787569562973e+00 1.4440997872349303e+01 9.8370058480532414e+00 0 0 0 -1889 630 2 3.7154349698977801e-01 1.0569027162466815e+01 1.2225452339569722e+01 1.2187159933206958e+01 0 0 0 -259 87 1 -7.3907422426271996e-01 9.2212299334563479e+00 1.1011001983258442e+01 9.5277153321190706e+00 0 0 0 -261 87 2 3.3123664523105278e-01 1.0019057265055931e+01 1.0799423178478612e+01 8.9854322204571613e+00 0 0 0 -995 332 2 3.1441156819427241e-01 9.2962010878406485e+00 1.0252617092324030e+01 1.0084691998616259e+01 0 0 0 -1034 345 2 3.8202031942421089e-01 1.2236019915196165e+01 2.0685842576854424e-01 1.5127120751213184e+01 0 1 0 -699 233 2 3.9128160412870866e-01 1.0226361816213313e+01 1.4417677632816389e+01 7.8262147116734138e+00 1 0 0 -2623 875 1 -7.8518436937249569e-01 7.3251743975931358e+00 1.3703751981950591e+01 1.1060579822248586e+01 0 1 0 -1888 630 1 -7.5230914550575378e-01 9.5714256225588858e+00 1.2192901377913387e+01 1.2098450530410913e+01 0 0 0 -1890 630 2 3.7826304768593366e-01 9.4246157725069910e+00 1.1844281426848662e+01 1.1243283609994752e+01 0 0 0 -2624 875 2 3.6799455844006079e-01 7.2220783572003864e+00 1.3822915732590209e+01 1.1987387143676774e+01 0 1 0 -2625 875 2 3.7047237374636399e-01 8.2147933065206811e+00 1.3487682189002763e+01 1.1022853040391489e+01 0 1 0 -1851 617 2 3.7557884113773271e-01 8.0098905038594843e+00 9.9884053512695825e+00 1.3496647955433131e+01 0 0 0 -2299 767 1 -7.4935019161293304e-01 1.2108997577930463e+01 9.3578992994288690e+00 8.8624506400222973e+00 0 1 0 -1703 568 2 3.5213714684172709e-01 1.2600364127449541e+01 1.2378754731062484e+01 1.3174034048480326e+01 0 0 0 -1702 568 1 -7.3445128669028947e-01 1.2352568694707379e+01 1.1536266125690561e+01 1.2635485852958809e+01 0 0 0 -1797 599 2 3.9086193618279358e-01 1.2929499620837738e+01 1.0904275148930514e+01 1.3028315991352713e+01 0 0 0 -335 112 2 3.8436601110728097e-01 1.2790915079262431e+01 1.0950884681179991e+01 9.3226942830891133e+00 0 0 0 -336 112 2 3.7749356398398981e-01 1.2994880735222880e+01 1.1519746584911347e+01 1.0834419198523271e+01 0 0 0 -334 112 1 -6.9194193699388473e-01 1.3070709353243952e+01 1.1736784095631251e+01 9.8966579973736319e+00 0 0 0 -1685 562 2 3.6794997010952657e-01 7.7724225295432223e+00 1.0794020274007613e+01 1.9980259744134663e+00 0 0 1 -537 179 2 3.7617949555891889e-01 3.0352608007898755e+01 1.5292762429650033e+01 1.3611914768050639e+01 0 0 0 -375 125 2 3.5985771637074726e-01 1.4050934342318588e+01 9.8507658621470711e+00 6.3699004785784918e+00 0 0 0 -436 146 1 -6.9628992781636767e-01 1.7861427948118685e+01 1.4005275285175220e+01 1.0087469238618057e+01 0 0 0 -2465 822 2 4.1049144451903985e-01 1.1053064864600064e+01 7.9770982711656047e-01 2.2060582074997805e+00 0 1 0 -2477 826 2 3.5334407817839336e-01 1.6983953987250555e+01 1.4789005891330811e+01 1.4000184816240790e+01 0 0 0 -1207 403 1 -7.2685808496485005e-01 2.5068993021377405e+01 7.1517949332431752e-01 1.1646346191865806e+01 0 1 0 -2301 767 2 3.5587697542778574e-01 1.2899300625474321e+01 9.0347428312602815e+00 8.2532099987662626e+00 0 1 0 -2464 822 1 -7.6547446209804382e-01 1.0803626904458927e+01 1.7415316898854185e+00 2.1278171410067301e+00 0 1 0 -1049 350 2 3.7618877708325776e-01 5.6525939448965365e+00 1.5470483925689594e+01 4.3424559501640170e+00 0 0 0 -2508 836 2 3.6626666131299679e-01 1.2419309659202666e+01 8.9877037724421296e+00 1.3186787138226194e+01 0 1 0 -347 116 2 3.8832070273161101e-01 1.7536610563872866e+01 8.6584416778594342e+00 1.4864686067386366e+01 0 0 0 -1378 460 1 -7.2407938002267280e-01 2.5198976932286881e+00 3.0459831679154385e+00 8.4447489177580748e-01 1 1 0 -2507 836 2 3.4796346709787190e-01 1.3415241860187432e+01 8.9266991728841596e+00 1.2056842476039316e+01 0 1 0 -491 164 2 3.6802830129143027e-01 1.6546261003130770e+01 2.8622352328216270e+00 1.4957035963695160e+01 0 0 0 -44 15 2 3.5170765723501285e-01 1.4233628718958199e+01 8.2605359337797601e+00 1.4352839044873956e+01 0 0 0 -2506 836 1 -7.6317509688909824e-01 1.3307926903842354e+01 9.2412988590119980e+00 1.2980159702996358e+01 0 1 0 -2445 815 2 3.8910472272986035e-01 1.4150829933315288e+01 1.4082554114346150e+01 8.3164131937419423e+00 0 0 0 -2444 815 2 3.7597674789307645e-01 1.3410647645922783e+01 1.3800511309957566e+01 9.5912670583587065e+00 0 0 0 -2443 815 1 -7.0695820898623263e-01 1.3591216817836305e+01 1.4508245843689529e+01 8.9772679054738855e+00 0 0 0 -1679 560 2 3.9415597946906744e-01 1.7002627673007073e+01 1.2643479626950681e+01 9.1738436528182632e+00 0 0 0 -294 98 2 3.7677434630057410e-01 1.7499630436375082e+01 1.0050748771611607e+01 1.2911418550692350e+01 0 0 0 -2322 774 2 3.2454267056843245e-01 1.4418146245027749e+01 7.7528064629374400e+00 1.0603328670803052e+01 0 1 0 -1236 412 2 4.1591465031405017e-01 1.7038090739215136e+01 1.0212083559286407e+01 8.8210327502874826e+00 0 0 0 -1234 412 1 -7.0181594927675783e-01 1.6910844522357635e+01 9.3334833730111821e+00 9.0614270710616918e+00 0 0 0 -2320 774 1 -7.7995955009736828e-01 1.4564659966903978e+01 8.7119669984032271e+00 1.0394426096987834e+01 0 1 0 -2321 774 2 3.2706515324009028e-01 1.3914541178163393e+01 8.9283197438642361e+00 9.7040632582504482e+00 0 1 0 -1235 412 2 3.6000161630653205e-01 1.5922382217166840e+01 9.2636062839886115e+00 9.4017718976185218e+00 0 0 0 -192 64 2 3.7863753918516846e-01 1.5795994234107379e+01 1.0013697455798233e+01 1.1414632202568395e+01 0 0 0 -225 75 2 3.5900476150387772e-01 1.8424084703550506e+01 8.1329111016575091e+00 6.1039447215342895e+00 0 0 0 -190 64 1 -7.6440824714737277e-01 1.6212701087864936e+01 1.0753573118072811e+01 1.1800204804492413e+01 0 0 0 -191 64 2 3.6426841542444666e-01 1.6096934002153485e+01 1.1390818153436520e+01 1.1117083763735293e+01 0 0 0 -464 155 2 3.3345857964535902e-01 1.6533493286225973e+01 1.2100672942793659e+01 1.3391494518708470e+01 0 0 0 -1678 560 1 -7.4542523415333728e-01 1.6340555987389582e+01 1.1993857169746310e+01 8.9562111676013973e+00 0 0 0 -1680 560 2 3.7797532836806036e-01 1.5890575282685097e+01 1.2281921236486545e+01 8.2100808005516992e+00 0 0 0 -265 89 1 -7.2792815830226498e-01 1.8053227773245663e+01 9.3399328369175585e+00 1.3341691701114369e+01 0 0 0 -1629 543 2 4.0207408133331468e-01 3.7525524134059589e+00 4.1945307319817848e+00 1.4528339249235058e+01 0 0 0 -463 155 1 -7.1928622889755167e-01 1.7248864875875505e+01 1.2664574242922360e+01 1.3819109714817531e+01 0 0 0 -1821 607 2 3.5318199884344503e-01 1.7987912599434498e+01 8.5728177173768749e+00 1.2695167140692295e+01 0 0 0 -465 155 2 3.9282018413119174e-01 1.8038071129362386e+01 1.2682127503630825e+01 1.3205666115817445e+01 0 0 0 -438 146 2 3.6262695588460714e-01 1.8639554917877131e+01 1.3557804478367318e+01 1.0588356249900754e+01 0 0 0 -437 146 2 3.8069747748786925e-01 1.7632612931389684e+01 1.4850547478971897e+01 1.0657604169213638e+01 0 0 0 -348 116 2 3.5849033921804402e-01 1.6076875177668288e+01 8.1604527645670508e+00 1.5325095379922852e+01 0 0 0 -2684 895 2 3.8165231504517405e-01 2.0370591487101755e+01 1.3046331621233044e+01 1.2442167957333156e+01 0 0 0 -2685 895 2 3.6716241882986833e-01 1.9444306985277990e+01 1.4237067004688502e+01 1.2986582256910832e+01 0 0 0 -2683 895 1 -7.2729365554285530e-01 1.9407295761853856e+01 1.3405376665675909e+01 1.2416062788389333e+01 0 0 0 -1299 433 2 3.5662067612573489e-01 2.1511128828889710e+01 8.3664829944472050e+00 1.2878807838265264e+01 0 1 0 -1297 433 1 -7.8038793636572479e-01 2.2133032912490517e+01 9.0628496499327920e+00 1.2664604505005762e+01 0 1 0 -369 123 2 3.7700999843324917e-01 1.1680050854260362e+01 1.3674395632821453e+01 1.4869813829585434e+01 0 0 0 -223 75 1 -7.0432946310929068e-01 1.8854239159834265e+01 7.4548083806965701e+00 6.5982823053108541e+00 0 0 0 -306 102 2 3.9116104018299891e-01 1.8137828835965667e+01 8.5378840045810875e+00 1.0171322109686470e+01 0 0 0 -216 72 2 3.7407262888710491e-01 2.1851238764469500e+01 1.3498802481852247e+01 1.0073563374735084e+01 0 0 -1 -2903 968 2 3.6697304517318297e-01 2.4754134515445305e+01 7.5329058594875944e+00 1.0809023206215731e+01 0 1 1 -2818 940 1 -7.5464418300264435e-01 2.3178456689671755e+01 1.4653008311281141e+01 1.4783164273894650e+01 0 0 0 -304 102 1 -7.4900016640674760e-01 1.8546635977164048e+01 7.9079602000544309e+00 1.0824929005761328e+01 0 0 0 -215 72 2 3.6461639849292388e-01 2.2384672803760374e+01 1.2353447380936000e+01 9.3456918184227487e+00 0 0 -1 -1771 591 1 -6.9945300201792360e-01 2.4046967718602335e+01 1.2121887617509843e+01 8.2376687707388125e+00 0 0 0 -2091 697 2 3.5092494554714743e-01 3.8290290067108770e+00 1.4667353589554441e+01 4.7654658315901333e-01 1 0 0 -357 119 2 4.0003205593279401e-01 2.4928996728156832e+01 9.8558011994321664e+00 1.0980002832701787e+01 0 0 0 -2060 687 2 3.8162999792195684e-01 2.2000437013527819e+01 1.1863156510915559e+01 1.5190051362214954e+01 0 0 0 -476 159 2 3.6931796488627072e-01 2.2944145117267688e+01 8.8501336859294213e+00 1.3082555903369343e+01 0 0 0 -539 180 2 3.9721062311427563e-01 2.0116610008006489e+01 8.2230001853087984e+00 1.0482880295579346e+01 0 0 0 -2081 694 2 3.7162549465230527e-01 2.1033819751188460e+01 1.0438444646746214e+01 7.5940513801972971e+00 0 0 0 -566 189 2 3.2754303058235495e-01 2.1625340373215931e+01 8.4916514376649364e+00 1.0841286836116350e+01 0 0 0 -2661 887 2 3.6520916481788801e-01 2.1794398977913627e+01 1.1205390879030327e+01 1.2742696462033910e+01 0 0 0 -2659 887 1 -7.3199643929306590e-01 2.1766278273622181e+01 1.2062785442966065e+01 1.3228902446727293e+01 0 0 0 -538 180 1 -6.8738599585666416e-01 2.1051957186109437e+01 8.2330807363867518e+00 1.0062721727541366e+01 0 0 0 -2679 893 2 3.4337609102700573e-01 2.2697596936349349e+01 1.2351395432047699e+01 1.3024946648562894e+01 0 0 0 -743 248 2 3.6321216341445989e-01 2.0637042975477872e+01 1.1283999243175000e+01 9.2446869920364598e+00 0 0 0 -744 248 2 3.6492990438233003e-01 2.0790529728540090e+01 9.6768202240555077e+00 9.4545415539637307e+00 0 0 0 -742 248 1 -6.9910926044188471e-01 2.0249225932928244e+01 1.0460038352663576e+01 8.9427573607720099e+00 0 0 0 -214 72 1 -7.3819453976054428e-01 2.1833412337973130e+01 1.2574418146008139e+01 1.0066659124827012e+01 0 0 -1 -2904 968 2 3.3747869463845837e-01 2.3456844808901081e+01 8.4346530516689331e+00 1.1340364575618912e+01 0 1 1 -2902 968 1 -6.9652996043492099e-01 2.4444775969407988e+01 8.2713960771545221e+00 1.1410153869487301e+01 0 1 1 -2150 717 2 3.6355431465394411e-01 1.5401705396129437e+00 1.5483672391355634e+01 6.0537436598866821e+00 1 0 1 -599 200 2 3.8656076985198329e-01 2.9626195230369184e+01 9.6166167997728706e+00 1.2407232060777559e+01 0 0 0 -508 170 1 -7.2566005372054387e-01 2.7060530829894191e+01 1.2321907068767443e+01 1.2980927125187613e+01 0 0 0 -633 211 2 3.7572529492007356e-01 3.0110266392792226e+01 1.2993961531209360e+01 8.1571098017301349e+00 0 0 0 -2545 849 1 -7.6549095752588614e-01 2.4501785395416483e+01 1.2539484283209120e+01 1.2322059640204825e+01 0 0 0 -2547 849 2 3.8334195697522183e-01 2.4458562167604533e+01 1.3459791514414610e+01 1.2019234351476994e+01 0 0 0 -360 120 2 3.6567013913170665e-01 2.6034319251757939e+01 1.0866260586438253e+01 1.0615698441911004e+01 0 0 0 -2546 849 2 3.8204766713781108e-01 2.4448820912791941e+01 1.1928747533378550e+01 1.1509976079495136e+01 0 0 0 -1371 457 2 3.7922816854004460e-01 2.8892033986313628e+01 1.3296748843700371e+01 1.3139676194859646e+01 0 0 0 -324 108 2 3.7804058289877623e-01 2.8045388837938837e+01 1.0362956781269546e+01 1.0966335639341752e+01 0 0 0 -1513 505 1 -7.2430023342488414e-01 2.8881320118970088e+01 9.1041277390575210e+00 1.1994439370381899e+01 -1 0 0 -1209 403 2 3.6441290231988888e-01 2.4074791303539190e+01 8.2571344459664209e-01 1.1862709696153372e+01 0 1 0 -2867 956 2 3.3367087750989155e-01 2.1933261226144282e+01 1.4430897465590604e+00 1.5337873311969894e+01 0 1 0 -726 242 2 3.6686138816262709e-01 2.6720980896046598e+01 1.4626232759462358e+01 9.2802711162368201e+00 0 0 0 -2842 948 1 -7.8624468131457681e-01 2.7232480962626724e+01 1.0845559515884709e+01 1.5373328913467384e+01 0 0 0 -696 232 2 3.6054808539297123e-01 2.7793969361930291e+01 7.6259855775402254e+00 1.4944171960632884e+01 0 0 0 -1369 457 1 -7.4256077125336828e-01 2.9803870731787580e+01 1.3305936847377534e+01 1.3411588260019409e+01 0 0 0 -694 232 1 -7.1706463366983519e-01 2.7156586492888376e+01 7.9883996773441774e+00 1.4295256096137743e+01 0 0 0 -323 108 2 3.7195855152570956e-01 2.7748777322164095e+01 1.1830503224226787e+01 1.1382950676740167e+01 0 0 0 -695 232 2 3.7124602497091064e-01 2.7719706022336297e+01 8.4919202452640921e+00 1.3681935636205370e+01 0 0 0 -1514 505 2 3.3933637568221964e-01 2.9244700970521720e+01 8.5963009096932481e+00 1.1263828767558987e+01 -1 0 0 -510 170 2 3.8828823839584120e-01 2.6075368031705707e+01 1.2310988791367421e+01 1.2640872847247850e+01 0 0 0 -724 242 1 -7.4511947281101720e-01 2.5808929774370789e+01 1.4484311885958050e+01 9.0710492431024345e+00 0 0 0 -2826 942 2 3.4887634552912389e-01 5.9193304107028055e-01 1.1066701119073434e+01 1.2820465662405345e+01 1 0 0 -2824 942 1 -7.5927476105466352e-01 3.1028903563827427e+01 1.0527702429881463e+01 1.3263943547969522e+01 0 0 0 -2820 940 2 3.7680495638587247e-01 2.7198103327062668e+01 1.0007304625255401e+01 1.5022055025560837e+01 0 0 0 -355 119 1 -7.4087532910863818e-01 2.5065694721935749e+01 1.0732818529069602e+01 1.0531887179220396e+01 0 0 0 -1370 457 2 3.4983799635826440e-01 3.0024031504195523e+01 1.2365774545705298e+01 1.3552683999184932e+01 0 0 0 -1772 591 2 3.6575589708809214e-01 2.4452498441039850e+01 1.2881998712136237e+01 7.7199011432608176e+00 0 0 0 -770 257 2 3.0514881990206211e-01 2.7043323742653396e+00 1.5385836115352269e+01 3.7684308975494005e+00 0 0 0 -1928 643 2 3.6744256412349430e-01 1.9015268991040973e+01 1.5328149726063067e+01 1.5092092926297921e+01 0 -1 0 -618 206 2 3.8371631137463069e-01 1.7283132603655634e+01 1.1639274473160445e+01 1.5411448380872919e+01 0 0 -1 -1398 466 2 3.6170274436740163e-01 2.8344713847646990e+01 4.6570878052941138e+00 4.1436624389794313e-01 0 1 0 -2077 693 1 -6.9112585706452034e-01 2.0332731357558455e+01 9.1701180155735926e+00 1.5371016053672376e+01 0 0 0 -2760 920 2 3.5269778250415618e-01 1.3919531869932301e+01 3.9832781067599221e-01 3.3263240469941745e-02 0 1 1 -2360 787 2 3.4047980808683631e-01 3.0925661301778430e+01 1.3754547587631775e+01 2.4433814371848030e-02 -1 0 1 -1716 572 2 3.4898581950663687e-01 2.0414648143923635e+01 6.0070979551118855e+00 2.2458159776908376e-02 0 0 0 -2495 832 2 3.8380415923813643e-01 1.2140772796270996e+01 1.5044179570579624e+01 1.9111398600325018e+01 0 0 0 -1510 504 1 -7.5087682457039318e-01 3.0366012304851388e+01 6.1425731923167015e-01 2.2613501028601558e+01 -1 0 0 -1399 467 1 -7.3768371946575073e-01 1.6036239048419159e+00 4.0672114579694050e+00 1.7352383834671262e+01 1 1 0 -1400 467 2 3.9908454065479759e-01 2.2469667070937702e+00 3.8278551127389129e+00 1.6637850643092481e+01 1 1 0 -1512 504 2 3.7789271319007245e-01 1.1188339514775696e+00 3.1944434011273817e+00 1.7370035174685299e+01 0 0 0 -721 241 1 -7.5018429578768908e-01 1.8031644249929522e+00 1.6133111032942060e-01 2.0247364996942810e+01 1 0 0 -667 223 1 -7.3286889311415315e-01 5.3080738250166161e-02 5.2318713355838966e+00 1.5585876800557909e+01 1 0 0 -1489 497 1 -7.3908919336096490e-01 1.9485635399818588e-01 4.3228418464458418e+00 2.0155165992122306e+01 1 1 0 -1491 497 2 3.4964605628851708e-01 4.6497595408908804e-01 4.0032993099037570e+00 1.9282687909750742e+01 1 1 0 -2182 728 1 -7.5543509374757967e-01 2.3278267931767402e+00 5.2002967180338544e+00 2.2910361225889229e+01 1 0 0 -1490 497 2 3.1827242776042053e-01 7.3452297627354446e-01 5.1186662985752998e+00 2.0350056541337807e+01 1 1 0 -1731 577 2 3.5388933782086229e-01 5.5843392737237787e+00 6.0418140928456792e+00 1.8155919825881185e+01 0 0 0 -1076 359 2 3.5925501011934230e-01 3.1067739134570624e+00 4.4736987664420358e+00 1.9385540613216282e+01 0 1 0 -1628 543 2 3.5683532717327937e-01 3.5001120784175699e+00 2.7890180412728469e+00 2.1700652288420351e+01 0 0 0 -1627 543 1 -7.2273125880781386e-01 3.9835327298466581e+00 2.3352342284873102e+00 2.0971434826072894e+01 0 0 0 -2302 768 1 -7.0671176857821183e-01 4.5156038197760315e+00 7.2556119695501851e+00 1.7102214893634791e+01 0 0 0 -2304 768 2 3.5902776632376993e-01 5.2375754720243934e+00 7.8796653845499849e+00 1.7042413429928562e+01 0 0 0 -1730 577 2 3.9122348771072701e-01 1.6159253099446187e+00 8.9409708084989450e-02 2.1191345524475746e+01 0 0 0 -2123 708 2 3.3328495684696835e-01 4.5959361664854512e+00 1.7706380801194286e+00 2.1455895706505316e+01 1 0 0 -18 6 2 3.8131770931075393e-01 5.1566534214106134e+00 5.9981878488765989e+00 2.2151131964849540e+01 0 0 -1 -1576 526 1 -6.6410084264859059e-01 4.9727258709300983e+00 1.8421900885191604e+00 1.8310105025334661e+01 0 1 0 -834 278 2 3.7529924274621479e-01 3.1009809600866177e+01 1.0638446673244799e+00 1.7570565363985121e+01 -1 1 0 -1077 359 2 3.4357885518072762e-01 2.7970410402511705e+00 4.9459460775930140e+00 2.0859845990047440e+01 0 1 0 -2768 923 2 3.6062790576513026e-01 2.2580455379630944e+01 1.5438392406888545e+01 2.3954633004980806e+01 0 0 0 -1075 359 1 -6.5499093433895306e-01 3.3425664832525501e+00 5.1337538522957633e+00 2.0064116071962964e+01 0 1 0 -1737 579 2 3.2572362065507643e-01 1.3956370612838672e+01 1.1413512973612010e+01 1.5719743085265273e+01 0 0 0 -74 25 2 4.0732383282033274e-01 2.4941039528789433e+00 7.1950484067293354e+00 1.7528595974246507e+01 0 0 0 -723 241 2 3.4337683920961237e-01 2.5369430889723623e+00 8.0466266280131649e-01 2.0218306108728594e+01 1 0 0 -1557 519 2 3.8836367816662498e-01 5.9625076694271373e+00 5.5946436522259386e+00 2.0021845571050747e+01 0 0 0 -2012 671 2 3.9584671272080552e-01 1.8504646269966113e+01 5.5234091503868079e+00 1.5831704470793509e+01 0 0 1 -1548 516 2 4.0123598128015719e-01 3.0197131138107711e+01 3.4014120288545215e+00 2.1337687711589620e+01 -1 0 0 -1526 509 2 3.9376431680434920e-01 6.2004220365499518e-01 5.0247897242583619e+00 1.6469455493334944e+01 0 0 0 -1736 579 2 3.7869480886154222e-01 1.4153874689421853e+01 1.0455895969520149e+01 1.6859976886356076e+01 0 0 0 -199 67 1 -6.7259345207262222e-01 2.9625432202375613e+01 3.1774571783918465e-01 2.5277794518370417e+01 -1 0 -1 -2183 728 2 3.6123631159819070e-01 1.6309647867153443e+00 5.4154992990929900e+00 2.3558477513813042e+01 1 0 0 -2184 728 2 3.8107882408386001e-01 3.0588474354809465e+00 5.8777943718182781e+00 2.2862340992754000e+01 1 0 0 -2119 707 1 -7.4899778242209114e-01 4.7974041303109329e+00 6.4643051584335076e+00 2.2932352779587710e+01 1 0 0 -1029 343 2 3.6357343930949232e-01 1.0078126475917001e+01 8.7976628401234347e+00 1.5612421301471080e+01 0 1 0 -1578 526 2 3.8019150424600251e-01 4.5729134334226602e+00 1.9775568967392523e+00 1.9183033038538440e+01 0 1 0 -922 308 1 -7.6797331029097093e-01 1.0613199336801812e-01 1.8392220094765086e+00 1.6955856193145575e+01 0 1 0 -350 117 2 3.9969535736414824e-01 4.2232535021455782e+00 9.6529713555406857e+00 3.0589992691307742e+01 0 0 -1 -1642 548 1 -7.7104691105573120e-01 7.1216189276687381e+00 8.5579228135051810e+00 1.6037020459541761e+01 0 0 0 -1729 577 1 -6.6244722620080421e-01 6.1710446796733072e+00 5.2596730581611482e+00 1.8140015691845608e+01 0 0 0 -2126 709 2 3.5311034071653336e-01 7.0485537923870947e+00 5.6017835615675446e+00 1.7967951239720950e+01 1 0 0 -1577 526 2 3.9541432552641215e-01 5.9262676715720231e+00 1.5610599273080601e+00 1.8455505913264496e+01 0 1 0 -1555 519 1 -7.3418059770973620e-01 6.4224173297836087e+00 6.0320937360710563e+00 2.0795048533013787e+01 0 0 0 -2314 772 1 -7.9322023620712423e-01 1.0212451950467653e+01 5.8943355257454169e+00 1.6846163435672906e+01 0 1 0 -2316 772 2 3.8255374431915579e-01 1.0435619686776985e+01 6.7699402674077769e+00 1.6634658656641051e+01 0 1 0 -2339 780 2 3.1113846851151389e-01 2.6091183348311787e+01 4.9385471341871062e-01 2.9379533922411643e+01 -1 1 0 -1717 573 1 -7.1024551195204777e-01 9.2922541148218230e+00 3.8731526996218681e+00 1.8644298699628731e+01 0 0 0 -1718 573 2 3.5988581904060296e-01 9.7409871077917689e+00 4.6725087736830675e+00 1.8356994294703249e+01 0 0 0 -2535 845 2 3.5412795516933754e-01 1.2501075646043335e+01 1.2303266899416381e+00 2.1214372309792267e+01 0 1 0 -2533 845 1 -7.4481726688147765e-01 1.2729300494112945e+01 8.7889801182680549e-01 2.0342171106077370e+01 0 1 0 -1719 573 2 4.1339726876671729e-01 9.1805256363796293e+00 3.3409469153405462e+00 1.7842810847455642e+01 0 0 0 -461 154 2 3.7726726364868329e-01 8.3678538140723067e+00 7.2070804720138582e-01 1.9084968957537004e+01 0 1 0 -880 294 1 -7.0455425675989003e-01 9.0706567727846608e+00 7.5666569765700542e-01 2.1495416000911337e+01 0 1 0 -837 279 2 3.7100411902490354e-01 7.3307541717727309e+00 5.7493044868988967e+00 2.0771777886484315e+01 0 1 0 -1858 620 1 -7.1356101893345791e-01 1.8882085367805807e+01 1.9447505818290339e-01 2.9729080610363102e+01 0 0 0 -1846 616 1 -7.6289544618688920e-01 9.1645125578645530e+00 5.0563505558921547e+00 2.0942052309907574e+01 0 0 0 -1847 616 2 3.5549954169923575e-01 9.7280416466814685e+00 5.8085850743355287e+00 2.0675028731634548e+01 0 0 0 -1848 616 2 4.0206265312287748e-01 9.3577279611524169e+00 4.3049481912625627e+00 2.0324157244908037e+01 0 0 0 -2291 764 2 3.3105650807375864e-01 7.5104327653658300e+00 4.7204814139978444e+00 2.2338331590732952e+01 0 1 0 -257 86 2 3.9862677946627079e-01 9.6857126567886525e+00 2.2661911053678696e+00 2.2317133889285383e+01 0 0 -1 -1600 534 1 -7.7841198332143224e-01 1.0978388164408370e+01 7.2062613921027374e+00 2.0334591348240288e+01 0 0 0 -1408 470 1 -7.8153555295219479e-01 2.7185838954793191e+01 4.7608085410496626e-01 1.6110115042871087e+01 0 1 0 -2667 889 2 3.4731250093441185e-01 1.1969979438032301e+01 3.2406400264920188e+00 2.2709076063911297e+01 0 1 0 -1643 548 2 3.4577566703734625e-01 7.6991171113266104e+00 8.5537351952302174e+00 1.6767266852350037e+01 0 0 0 -112 38 1 -7.3610922477869090e-01 8.4272358017205349e+00 7.1874247759227625e+00 1.8618264431273410e+01 0 0 0 -113 38 2 3.4931817850272084e-01 8.7785893529198038e+00 6.9264238927739203e+00 1.7788660050224067e+01 0 0 0 -114 38 2 3.5828579006050776e-01 9.2406203148625465e+00 7.3636187921657461e+00 1.9081630997881891e+01 0 0 0 -460 154 1 -7.3306959425209728e-01 7.6627785111790834e+00 9.2440600318877042e-01 1.8509786915145462e+01 0 1 0 -258 86 2 3.6302959621720760e-01 9.3931026087409464e+00 3.6926457562881869e+00 2.2942698180548238e+01 0 0 -1 -256 86 1 -7.5529004157831792e-01 9.9800909169102798e+00 2.8944128097040145e+00 2.2977757183128457e+01 0 0 -1 -1602 534 2 3.5748374023611279e-01 1.1280991547179148e+01 7.1947121243517644e+00 2.1216792306881498e+01 0 0 0 -2274 758 2 4.0329908767829520e-01 1.0109249958114512e+01 1.3266344584526082e+00 1.6492584063196652e+01 0 1 0 -2273 758 2 3.6199572830753601e-01 8.6868378772880988e+00 1.3846988131221662e+00 1.7122059713194172e+01 0 1 0 -2534 845 2 3.7698533762185865e-01 1.3096741541861098e+01 1.5668244608297690e+00 1.9858419662881357e+01 0 1 0 -2723 908 2 3.2966014241342950e-01 1.2865507327929111e+01 5.7657970636332880e+00 2.0284696859934535e+01 0 0 0 -2429 810 2 3.9890142939534395e-01 1.3235520029327782e+01 3.2610660365757540e+00 1.7720558094505961e+01 0 1 0 -2722 908 1 -7.5583929838210839e-01 1.3495328152854746e+01 5.0761740639646380e+00 2.0358024376679783e+01 0 0 0 -2428 810 1 -7.6321343601412650e-01 1.3533255260984459e+01 3.0064324184348932e+00 1.8594329457124999e+01 0 1 0 -2430 810 2 3.8238974683830995e-01 1.3348108069065720e+01 3.7717196700134994e+00 1.9169076795662715e+01 0 1 0 -2724 908 2 3.7014591264750768e-01 1.4334658657550106e+01 5.5309074417988855e+00 2.0165644432206360e+01 0 0 0 -212 71 2 3.7507533078296590e-01 1.0233641220443133e+01 3.1196638769055820e+00 3.0299391052978574e+01 0 0 -1 -2666 889 2 3.3253925871032169e-01 1.2922329552277349e+01 3.3585087518611449e+00 2.1577677162873119e+01 0 1 0 -311 104 2 3.9680860625847059e-01 1.5196069416190609e+01 2.4210270875749567e+00 1.8369710823338629e+01 0 0 0 -310 104 1 -7.4297434057977974e-01 1.6061178007015329e+01 1.9236080127837125e+00 1.8463774077714241e+01 0 0 0 -312 104 2 3.6296563152846356e-01 1.6698036888593922e+01 2.0918846528450246e+00 1.7695322844206643e+01 0 0 0 -2512 838 1 -7.1447877135425020e-01 1.5524816726500596e+01 5.5154840880220801e+00 1.6820872483234677e+01 0 1 0 -1726 576 1 -7.2647410965505543e-01 1.7930496079099601e+01 1.1801658182298256e+00 2.2675462098797091e+01 0 0 0 -2807 936 2 3.9615037625287181e-01 1.5827065749399567e+01 5.9932610940907418e+00 1.8317301659279494e+01 0 1 0 -2806 936 1 -7.8077159178042066e-01 1.5937665797146234e+01 6.4601060475095720e+00 1.9216312302800269e+01 0 1 0 -2808 936 2 3.8432282399363588e-01 1.6407095299361821e+01 7.3023239614847881e+00 1.9138853514357827e+01 0 1 0 -1450 484 1 -7.4552673337158848e-01 1.8015211860067204e+01 2.5793663608097672e+00 1.6536654630651896e+01 0 1 0 -2522 841 2 3.7573333389898150e-01 1.7008007562356166e+01 8.3125790408370193e-01 2.2682063203603214e+01 0 1 0 -1728 576 2 3.5557836099406387e-01 1.7873561001581070e+01 1.8783684370156675e+00 2.1924094861675691e+01 0 0 0 -2514 838 2 3.5704297687646563e-01 1.4538382969196579e+01 5.6581887698343438e+00 1.6731770621130298e+01 0 1 0 -597 199 2 3.6838808546295970e-01 1.6892303638410976e+01 2.4377488271971202e+00 1.9823131554774847e+01 0 0 0 -596 199 2 4.0008098263286890e-01 1.7742449623088444e+01 3.7497354081613237e+00 2.0074349183211687e+01 0 0 0 -2531 844 2 3.4504061612994036e-01 1.4704173681135734e+01 1.5898811908156958e+00 2.2475550075454489e+01 0 1 0 -2665 889 1 -7.6326543782505774e-01 1.2865065253930233e+01 2.8924017149285000e+00 2.2427091762386485e+01 0 1 0 -1452 484 2 3.7139220650702942e-01 1.8355035776373093e+01 2.0120135709890774e+00 1.7232858667620217e+01 0 1 0 -595 199 1 -7.5682276478538346e-01 1.7713875025393552e+01 2.8242178713402324e+00 2.0273752811152491e+01 0 0 0 -1906 636 1 -7.6790724115151865e-01 1.8341767584286075e+01 5.3612836502727008e+00 2.0360793250683866e+01 0 0 0 -1907 636 2 3.3404104676695939e-01 1.8861098063299817e+01 5.7846346208771955e+00 1.9777399107098045e+01 0 0 0 -1908 636 2 3.4389498527733947e-01 1.7405974075624133e+01 5.7316539539647691e+00 2.0086768232486353e+01 0 0 0 -2568 856 2 3.4334428892311453e-01 1.4215814597672862e+01 3.6419862833665153e+00 2.3353777878700900e+01 0 0 0 -2696 899 2 3.5191086878952516e-01 1.8628729439088247e+01 1.6129994331342259e+00 1.9167948805470086e+01 0 1 0 -1870 624 1 -7.4807001377895854e-01 1.2794565283042013e+01 4.5672901877578393e+00 1.6439936121378878e+01 0 0 0 -1451 484 2 3.7505732443904505e-01 1.8483153648502871e+01 3.4552827083940656e+00 1.6699691043118662e+01 0 1 0 -1807 603 1 -7.1708389979514675e-01 1.1987311595652530e+01 7.8876023479661930e+00 2.2974062537851768e+01 0 0 0 -1809 603 2 3.7001576738569475e-01 1.2779299470376676e+01 8.3474837865414813e+00 2.2651068126240350e+01 0 0 0 -1872 624 2 3.6143177469791959e-01 1.1913393176631594e+01 4.9047426120171140e+00 1.6548088241326184e+01 0 0 0 -2513 838 2 3.3544440426149241e-01 1.5874352219267594e+01 6.1609623454137710e+00 1.6158974870228228e+01 0 1 0 -2750 917 2 3.4844332937132061e-01 1.8939834789518464e+01 5.3548506879791899e+00 2.2370157376858458e+01 0 0 0 -2751 917 2 3.9710958952960085e-01 1.8684430037259045e+01 4.6166519135821122e+00 2.3720840532831094e+01 0 0 0 -2548 850 1 -7.2500975173994919e-01 2.4398141217717630e+01 1.5066201235548282e+00 2.0648397575609916e+01 0 0 0 -2549 850 2 3.5942198542886616e-01 2.4686865774467350e+01 5.4185048008071712e-01 2.0416649887435781e+01 0 0 0 -704 235 2 3.4397990125970002e-01 2.3961476301029190e+01 4.6775175986420106e+00 1.6620366843348158e+01 0 0 0 -703 235 1 -7.3657177238484384e-01 2.3387012202217360e+01 5.5971433300209910e+00 1.6307873022207598e+01 0 0 0 -2104 702 1 -7.2165781836774701e-01 2.1070590376772099e+01 4.1265734082450702e+00 2.0151961866413032e+01 0 0 0 -2106 702 2 3.8891137084512883e-01 2.1047646402560087e+01 3.3271412204592914e+00 2.0651031825938972e+01 0 0 0 -1933 645 1 -7.5489489567222001e-01 2.1875744765757279e+01 2.1549335059777008e+00 2.1804583009605864e+01 0 0 0 -1935 645 2 3.6546947997464563e-01 2.2641662767210502e+01 1.9008251074049098e+00 2.1285876124251484e+01 0 0 0 -1934 645 2 3.5167752337170388e-01 2.1399382466953121e+01 1.3372657622763970e+00 2.1935226252481069e+01 0 0 0 -2105 702 2 3.4956828454256972e-01 2.0169494826853967e+01 4.5086360521536966e+00 2.0164080891958633e+01 0 0 0 -2703 901 2 3.6169134714827844e-01 2.0208159180265085e+01 4.6500351603551247e+00 1.6949289521344458e+01 0 1 0 -1977 659 2 3.6227389483556977e-01 2.2183570585073195e+01 6.1160173341246171e+00 2.2732505571545655e+01 0 0 0 -2897 966 2 3.9101094604738995e-01 2.2569417337313467e+01 5.1153011905446846e+00 2.0674231920968779e+01 0 1 0 -1214 405 2 3.5605487665142194e-01 2.2972347386857596e+01 1.9764508001142294e+00 1.9183797150727944e+01 0 1 0 -2701 901 1 -7.5285041152992094e-01 1.9355181725869073e+01 5.0502109475701635e+00 1.7318465661457108e+01 0 1 0 -2898 966 2 3.5698439783817099e-01 2.4078240794210586e+01 5.4371706745556576e+00 2.0403872106911571e+01 0 1 0 -1215 405 2 3.6300774567522309e-01 2.2846492228884660e+01 1.1444733804903375e+00 1.7838640945562048e+01 0 1 0 -1213 405 1 -7.4232847802753166e-01 2.2801287712195730e+01 2.0652893763025508e+00 1.8239584983223260e+01 0 1 0 -1539 513 2 3.8153948636053286e-01 2.4246725550188323e+01 2.9062001202492209e+00 1.7819079045324681e+01 -1 0 0 -2212 738 1 -6.8484229727562052e-01 2.6950220419873258e+01 1.5337925523512927e+01 3.0036170495158427e+01 0 -1 0 -2695 899 1 -7.3148367832924932e-01 1.9017859654628392e+01 9.3497112919308378e-01 1.8553987369009768e+01 0 1 0 -1806 602 2 3.4073944927022032e-01 2.1967495412854674e+01 4.2722321976073747e+00 1.5870916188327204e+01 0 0 0 -1805 602 2 3.7311057201484432e-01 2.1692745419053487e+01 3.3331048050995826e+00 1.6978789820814846e+01 0 0 0 -2697 899 2 3.8948678557809024e-01 1.9737028295240538e+01 5.2044300784260122e-01 1.9013732817730865e+01 0 1 0 -2896 966 1 -7.4113625020590856e-01 2.3264285650263719e+01 5.7579241525589371e+00 2.0744568373963073e+01 0 1 0 -1804 602 1 -7.3710896232291279e-01 2.1341741017368161e+01 3.5531996306732743e+00 1.6157283372022793e+01 0 0 0 -2749 917 1 -7.3934220363961434e-01 1.9180677327347432e+01 5.3621157473836289e+00 2.3337307400779466e+01 0 0 0 -2702 901 2 3.6865003712290911e-01 1.9644798397915739e+01 5.8729888340691696e+00 1.7698178978855907e+01 0 1 0 -1976 659 2 3.5068974077975706e-01 2.1047799730702469e+01 5.8336483315295267e+00 2.3633413249403770e+01 0 0 0 -1752 584 2 3.8216632993801475e-01 2.3509631005766302e+01 6.6028333833886999e+00 1.7646409570393065e+01 0 0 0 -1750 584 1 -7.6521898331383797e-01 2.3204144681456928e+01 7.2658169328883657e+00 1.8338490258449397e+01 0 0 0 -2110 704 1 -7.2712249954507657e-01 2.0446505703884430e+01 7.6793514021836842e+00 1.7914955076678705e+01 0 0 0 -2844 948 2 3.7070022365367028e-01 2.1392755482132475e+01 7.6314899521161124e+00 1.7776830958570969e+01 0 0 0 -1751 584 2 3.6520478085553282e-01 2.3363740043900894e+01 6.8549653838828606e+00 1.9198634912467842e+01 0 0 0 -1511 504 2 3.9674404770742960e-01 2.9848200302601587e+01 3.1208543954542306e-01 2.3360153157430634e+01 -1 0 0 -883 295 1 -7.7564575432904614e-01 2.4804116676098811e+01 3.6079442952052045e+00 1.7333517725433307e+01 -1 1 0 -2231 744 2 3.9317639957322165e-01 3.1022236881941787e+01 5.1339060816356730e+00 3.0358312375049980e+01 0 0 0 -2294 765 2 4.0147134126849410e-01 2.9655604965329509e+01 2.1048628903381141e+00 2.2044797311289138e+01 -1 1 0 -2550 850 2 3.9377724350660276e-01 2.5251613938761700e+01 1.9507494572765729e+00 2.0507750845162786e+01 0 0 0 -1404 468 2 3.6701323517805917e-01 2.6548106773200796e+01 3.2730252276319405e+00 2.2331832672943985e+01 0 1 0 -840 280 2 3.8477945967648181e-01 2.8179795711856599e+01 3.8997593520209257e+00 1.6598188317460181e+01 -1 1 0 -2532 844 2 3.4193596019526312e-01 1.4647043611781461e+01 1.7112687857158618e-01 2.2996742722587530e+01 0 1 0 -1546 516 1 -7.3697581911800814e-01 2.9407543317472097e+01 3.0108394092492485e+00 2.1648362692686568e+01 -1 0 0 -1921 641 1 -7.0795569268367298e-01 2.8564919201177538e+01 2.5314864439847811e+00 1.7537579598910398e+01 0 0 0 -555 185 2 3.3248409601433471e-01 2.6744569832249603e+01 5.4427023589553167e+00 1.8716092392999588e+01 0 0 0 -2913 971 2 3.7305112269939156e-01 2.8117182390276444e+01 1.1023792109791506e+01 1.5678664589960315e+01 0 1 0 -919 307 1 -7.5312632732781148e-01 2.7435504978866611e+01 6.9693469538572668e+00 1.7082550528432016e+01 -1 1 0 -2317 773 1 -7.7753729142573613e-01 2.6755851186055377e+01 3.1192083142036604e+00 2.0751177018989626e+01 -1 1 0 -650 217 2 3.8278606702436219e-01 2.6594103028328075e+01 1.5235512573629876e+01 1.6332700020294890e+01 0 0 0 -2103 701 2 3.7175421364097755e-01 2.7442110799564006e+01 7.4066067766033852e+00 2.0304558513852822e+01 0 0 0 -735 245 2 3.4788674624738092e-01 2.9801781278393399e+01 6.6569554526966952e+00 2.0872480829592039e+01 0 0 0 -553 185 1 -7.4782725985236120e-01 2.5956786594272085e+01 5.2975849808341522e+00 1.9293645257456657e+01 0 0 0 -2319 773 2 3.9489058500456531e-01 2.6554217595761138e+01 3.9746118866937090e+00 2.0361220289471241e+01 -1 1 0 -2318 773 2 4.2090532594699959e-01 2.7663195235437865e+01 3.0520259558939564e+00 2.0950808479327208e+01 -1 1 0 -2069 690 2 3.8520960585906278e-01 2.9492776324890073e+01 2.3249704609938795e+00 1.7309738064352466e+01 0 0 0 -2419 807 1 -7.3422594626442594e-01 2.9166648949061670e+01 6.3295584508809082e+00 2.0326894663149726e+01 -1 1 0 -2234 745 2 3.6200217424902098e-01 2.9620827851563043e+01 5.6241594721068067e+00 1.9889138605458310e+01 0 0 0 -1910 637 2 3.7325564203044420e-01 2.8029843119160535e+01 1.8398773393439074e+00 1.7109689773618754e+01 0 0 0 -554 185 2 3.6177414155192317e-01 2.5403050813272564e+01 4.8638310169205461e+00 1.8661833567443907e+01 0 0 0 -2101 701 1 -7.4354647583889499e-01 2.7049435147623811e+01 8.2649551915291948e+00 2.0456272993052767e+01 0 0 0 -3000 1000 2 3.4785770740465199e-01 2.6210375496757404e+01 6.7848535079359031e+00 2.1685381552879406e+01 0 1 0 -2998 1000 1 -7.3773180866674382e-01 2.6145236639145288e+01 6.3639748409843007e+00 2.2595101808948755e+01 0 1 0 -2799 933 2 3.7811775266067665e-01 2.4541392918600117e+01 8.5129640455712625e+00 1.8461787021149501e+01 0 1 0 -1920 640 2 3.5570745040804447e-01 2.5378429261221580e+01 1.5300887016718237e+01 1.9431652897793192e+01 0 0 0 -2338 780 1 -7.1501232389933123e-01 2.6256861330951718e+01 3.2990508597986612e-01 3.0302262984548694e+01 -1 1 0 -2196 732 2 3.8258434810517011e-01 2.6064007265534816e+01 8.4756018837624509e+00 1.9017440862832462e+01 0 0 0 -2562 854 2 4.0191351957169247e-01 1.6809195589802684e+01 1.4839059328887014e+01 3.1029300751958736e+01 0 0 0 -2086 696 1 -7.0559567942719459e-01 2.7198142309122478e+01 8.9600562750331358e-01 2.3297509165240378e+01 0 0 0 -920 307 2 3.7154519453671969e-01 2.6561931439292728e+01 7.2884432772868220e+00 1.7452219151581595e+01 -1 1 0 -2102 701 2 3.7410167064637262e-01 2.7839258537780733e+01 8.8715341427024317e+00 2.0475072649422199e+01 0 0 0 -2088 696 2 3.7972293168842208e-01 2.6840489778526059e+01 1.7359779465611900e+00 2.3492552448470118e+01 0 0 0 -2375 792 2 3.5605642667339016e-01 4.7553421563886396e+00 1.4945748775937680e+01 1.7959394986209002e+01 0 0 0 -30 10 2 3.7313644596893036e-01 4.2771687146128468e+00 1.4050519690115335e+01 2.1557218113291022e+01 0 0 0 -131 44 2 3.7244563299825334e-01 3.8402269884191518e+00 1.4014381408215009e+01 1.6545257947265270e+01 0 0 0 -722 241 2 3.8550484114095246e-01 1.0438902264090224e+00 7.2769105915557564e+00 1.9538693570107075e+01 1 0 0 -2071 691 1 -7.4691105578504957e-01 9.9468678528572518e-01 7.7473030574023767e+00 2.0386510264149848e+01 1 0 0 -1566 522 2 3.7786243872903308e-01 3.0685101118112281e+00 1.0480663574424261e+01 1.8908756792250706e+01 0 0 0 -164 55 2 3.7792787876025169e-01 3.5406694169400783e+00 1.0520195357463011e+01 2.1264898369459136e+01 0 0 0 -165 55 2 3.7301593364406482e-01 2.1602686002361025e+00 1.0949361589932771e+01 2.1607132517587605e+01 0 0 0 -163 55 1 -7.4278167096018366e-01 2.6183894521599580e+00 1.0226351915179732e+01 2.1119894608589568e+01 0 0 0 -2073 691 2 3.9523756184886205e-01 1.5856240291663786e+00 8.4210206141675084e+00 2.0534899210785877e+01 1 0 0 -1564 522 1 -6.8777965339655978e-01 3.7286159460637016e+00 1.0573973436499173e+01 1.8271110370858004e+01 0 0 0 -1565 522 2 3.6122715307603448e-01 3.6653418311743171e+00 1.1534373972218873e+01 1.8050695846568338e+01 0 0 0 -28 10 1 -6.5552817048155709e-01 4.8640724442328418e+00 1.3599606162402642e+01 2.0901920218534155e+01 0 0 0 -843 281 2 3.7183929016315392e-01 2.0932244124097892e+00 1.0722102311402404e+01 1.5613065539209638e+01 0 1 0 -841 281 1 -7.4100986848281925e-01 1.4860346424824933e+00 1.0124927516662728e+01 1.6161875387129459e+01 0 1 0 -136 46 1 -7.1055350980855814e-01 1.6305260131994366e+00 7.5049545131389452e+00 1.7704559019254795e+01 0 0 0 -29 10 2 3.8035511303910141e-01 4.9500953483716792e+00 1.2710906172512630e+01 2.1331309043466288e+01 0 0 0 -138 46 2 3.7747680868513417e-01 1.5667395929956487e+00 8.3358720892168101e+00 1.7221829972434470e+01 0 0 0 -161 54 2 3.7199682962507802e-01 6.8264417361419110e+00 9.5788332517440296e+00 1.9064913935596906e+01 0 0 0 -1543 515 1 -7.6039189059221568e-01 6.6284958159658460e+00 1.0356187588597551e+01 1.8422421673149088e+01 0 0 0 -1544 515 2 3.7261321575622547e-01 5.7041060006714996e+00 1.0202409702968264e+01 1.8185324009578295e+01 0 0 0 -2989 997 1 -7.3744979863482263e-01 5.2002482597871955e+00 1.1050179517214810e+01 2.1900544583151135e+01 1 1 0 -132 44 2 3.3749949997674528e-01 2.4392963953691109e+00 1.3600652152954888e+01 1.7022357287869010e+01 0 0 0 -130 44 1 -7.0935056090895865e-01 3.3857884751847749e+00 1.3631600125067159e+01 1.7332633598652475e+01 0 0 0 -2460 820 2 3.5030606816395526e-01 5.2120122006547154e-01 1.2096326668225956e+01 2.2373234552819920e+01 0 0 0 -2458 820 1 -6.9003921263218182e-01 1.2088702059821916e+00 1.2377476885679373e+01 2.1676674104669765e+01 0 0 0 -2261 754 2 3.4529986508138705e-01 1.8628227882398931e+00 1.2725199218329593e+01 2.2315669124116550e+01 0 0 0 -2990 997 2 3.7725943655815275e-01 5.9585430320242487e+00 1.0425576974017529e+01 2.1758287172653681e+01 1 1 0 -2836 946 1 -7.2338594604304973e-01 3.0881772568642623e+00 1.4036975629414393e+01 2.3162135742500073e+01 1 0 0 -2991 997 2 3.0982451582420384e-01 5.2280013586330387e+00 1.1203024874281757e+01 2.2920463007595512e+01 1 1 0 -1785 595 2 3.8281471486206287e-01 6.6167742260554228e+00 1.3612536459776695e+01 1.9313609737248520e+01 0 0 0 -2121 707 2 3.8585698851848321e-01 4.4807308426661656e+00 7.3066901447446870e+00 2.2606766608759379e+01 1 0 0 -2837 946 2 3.7013465404632945e-01 3.5954162742032376e+00 1.3873516136223056e+01 2.3965882799467401e+01 1 0 0 -937 313 1 -7.3314223531008127e-01 2.9009549042530489e+00 8.4066590110596824e+00 2.3065122293270981e+01 0 1 0 -938 313 2 3.7193465068244991e-01 2.5191766273619289e+00 8.9434038738914126e+00 2.2299129294937106e+01 0 1 0 -2900 967 2 3.7818319167858133e-01 2.7415196699207897e+01 8.5499633253260967e+00 2.7845323239798631e+01 0 1 0 -405 135 2 4.0057701173858695e-01 1.2084678057047451e+01 8.9585126757363334e+00 1.6877323855921205e+01 0 0 0 -2794 932 1 -7.1956077419890807e-01 2.6712684139134382e+01 5.2906405574568689e+00 3.0610308369025347e+01 0 1 0 -2407 803 1 -7.2798611750345976e-01 7.3061596056138445e+00 9.1177404986389856e+00 2.0833418652341557e+01 0 1 0 -2408 803 2 3.6041671248831952e-01 7.3585132166454654e+00 8.2126653276617905e+00 2.0557345700254629e+01 0 1 0 -2409 803 2 3.6349064748110360e-01 8.2029129887498033e+00 9.3373021614919374e+00 2.1047308869552040e+01 0 1 0 -1640 547 2 3.5413656085315520e-01 6.7125397866169587e+00 1.1556501214790561e+01 1.6890357199937188e+01 0 0 0 -207 69 2 3.5322247205880647e-01 1.0524607756799654e+01 9.3693843752394290e+00 2.0792799719310164e+01 0 0 -1 -551 184 2 3.1596334670470599e-01 2.3139540645992245e+01 9.1643025932865942e+00 1.6085846237278776e+01 0 0 0 -1028 343 2 3.6283021390048514e-01 9.9820280890318642e+00 9.4050140382677920e+00 1.6941434255403038e+01 0 1 0 -1573 525 1 -7.2522851749844286e-01 9.3058726890929240e+00 1.1238508275232054e+01 1.7770799164061348e+01 0 0 0 -129 43 2 3.5259057163977803e-01 8.3037113370707765e+00 1.1287229704106414e+01 1.7808208870495932e+01 0 0 -1 -1575 525 2 3.6052169880570617e-01 9.4943013114788730e+00 1.1281399552467397e+01 1.8757265704033799e+01 0 0 0 -2423 808 2 4.1237379394554557e-01 1.0186267108735564e+01 1.2482543054700727e+01 1.6924064738290593e+01 0 1 0 -2422 808 1 -7.5528864189308997e-01 1.0617722992488041e+01 1.3201662366329364e+01 1.6503243095375066e+01 0 1 0 -1233 411 2 3.8200896233481607e-01 2.9020145946440103e+01 9.4345824693544422e+00 3.0586678472936867e+01 0 0 -1 -1533 511 2 3.9295894415255977e-01 1.0589356890099278e+01 1.1009283924992937e+01 2.0983954036008033e+01 0 0 0 -1531 511 1 -7.0374484297774720e-01 1.0106263090408950e+01 1.0226083225003583e+01 2.0595863319388489e+01 0 0 0 -2357 786 2 3.8210603736161919e-01 9.3430479690853403e+00 1.4443269291071177e+01 1.6225834414127757e+01 0 0 0 -2567 856 2 3.8669808384358728e-01 1.1333563966860329e+01 1.3333851376525297e+01 1.7201856579169146e+01 0 0 0 -1784 595 2 3.6121546867068344e-01 6.6624094012602990e+00 1.2176837629813919e+01 1.8723857648926369e+01 0 0 0 -2923 975 1 -7.3571394649167221e-01 1.1882439002847120e+01 1.2312812451221372e+01 2.1406602358155876e+01 1 0 0 -2561 854 2 3.9705462740753311e-01 9.4233693390889908e+00 1.4297828641073684e+01 2.1471400197495001e+01 0 0 0 -2560 854 1 -7.1032641792680462e-01 8.6943397986103594e+00 1.3755425443541210e+01 2.1178575676550675e+01 0 0 0 -1869 623 2 4.0682694563708804e-01 8.3710478606434258e+00 1.4164576937614921e+01 2.0375780486508098e+01 0 0 0 -206 69 2 3.3829609616742795e-01 8.7602454773378078e+00 5.9344065142883000e+00 2.2942854230873522e+01 0 0 -1 -2181 727 2 3.6130387415390852e-01 8.0414942997850325e+00 1.3458170888224247e+01 2.2923758503112353e+01 1 0 0 -2924 975 2 3.3776533563465239e-01 1.1654790831468008e+01 1.3105746318028583e+01 2.1920772281945446e+01 1 0 0 -2053 685 1 -7.3766684215097889e-01 2.5145602703224867e+01 8.6541961282170412e+00 2.3799760133041396e+01 0 0 0 -1644 548 2 3.5429954575230982e-01 7.3141820210076478e+00 9.3631445469736505e+00 1.5554808430099202e+01 0 0 0 -1027 343 1 -7.7401990553758282e-01 1.0388384085254383e+01 8.6584800868084262e+00 1.6539136615228763e+01 0 1 0 -278 93 2 4.0489742409491369e-01 6.9938898484793306e+00 1.5173297331096748e+01 2.4008993477712167e+01 0 0 0 -1783 595 1 -6.7335777806983732e-01 7.0430888152495594e+00 1.3106370436589541e+01 1.8618614099721668e+01 0 0 0 -2230 744 1 -7.5263543177058245e-01 8.5774186803729857e-01 5.1195093617962808e+00 3.0600357686081662e+01 1 0 0 -2018 673 2 3.6679909686347079e-01 1.6956245911637073e+01 8.9418921168532250e+00 1.7658439969659675e+01 0 0 0 -403 135 1 -7.4516078083489978e-01 1.2992692192882428e+01 9.0005766882634362e+00 1.7173322065859242e+01 0 0 0 -1401 467 2 3.8626833829586898e-01 4.4637530188548071e+00 2.7502724249676175e-01 1.5697870538564095e+01 1 1 0 -1754 585 2 3.8391964633410047e-01 1.1764550375668628e+01 1.3032705248164630e+01 1.9772788204968641e+01 0 0 0 -1665 555 2 3.4798518694100483e-01 1.1773395057063254e+01 7.0581714244376617e+00 1.9806056777995511e+01 0 0 0 -2925 975 2 3.7387206093991754e-01 1.2787584030668560e+01 1.2116691670547677e+01 2.1790460177572896e+01 1 0 0 -1753 585 1 -7.5022387562627957e-01 1.2039905378946813e+01 1.3351891586988085e+01 1.8873350966911072e+01 0 0 0 -2017 673 1 -7.3492391394875911e-01 1.6665501964712966e+01 8.9550052987174027e+00 1.8602274889064965e+01 0 0 0 -404 135 2 3.8301311901100599e-01 1.3055490172705039e+01 8.6872601889770351e+00 1.8165908713344329e+01 0 0 0 -1755 585 2 3.8871816627699718e-01 1.3049313906018305e+01 1.3321481532767583e+01 1.8928877974205388e+01 0 0 0 -2019 673 2 4.1561876716004592e-01 1.7365685743876266e+01 9.3759140561039285e+00 1.9039778589444754e+01 0 0 0 -1739 580 2 3.8801784154160446e-01 1.3642089513094440e+01 8.3609359204199958e+00 2.0178747887490413e+01 0 0 0 -1738 580 1 -7.8914970851668176e-01 1.3572069606153219e+01 7.7633324407689921e+00 1.9475132354984773e+01 0 0 0 -2730 910 2 4.0251827972944865e-01 1.7263138369980986e+01 1.3637637118825557e+01 2.0534207733959761e+01 0 0 0 -1740 580 2 3.8191172211745650e-01 1.4495710456273171e+01 7.4828978210185149e+00 1.9191910649208896e+01 0 0 0 -1210 404 1 -7.3635400562140607e-01 1.4286356936194165e+01 9.2377315162547564e+00 2.1969271672374305e+01 0 1 0 -2519 840 2 3.9450616331243338e-01 1.5532727974393639e+01 1.2716095898468238e+01 1.9005980741709461e+01 0 1 0 -2518 840 1 -7.0020767951093255e-01 1.4748998304438500e+01 1.2980336604099989e+01 1.8479994559915177e+01 0 1 0 -2520 840 2 3.8806503026240069e-01 1.4704854582895956e+01 1.2369733460036672e+01 1.7698543367203715e+01 0 1 0 -2728 910 1 -6.9651091995638481e-01 1.7074355541895120e+01 1.2813235371684920e+01 2.0142623733808158e+01 0 0 0 -2672 891 2 3.7300178188927147e-01 1.7804755750171203e+01 1.2681357261096485e+01 1.9532548952210597e+01 0 0 0 -616 206 1 -6.9174492598625059e-01 1.7435581503971978e+01 1.1433822824662480e+01 1.6367465338872680e+01 0 0 -1 -1212 404 2 3.8335884669842629e-01 1.4147485685425524e+01 1.0050674626063481e+01 2.2532174256149407e+01 0 1 0 -1211 404 2 4.0778944741854067e-01 1.4969405215963242e+01 8.7025602838862657e+00 2.2381354008202933e+01 0 1 0 -1037 346 2 3.9083726566379051e-01 1.3766844118198629e+01 1.4210140240142200e+01 2.2786501057899198e+01 0 1 -1 -1836 612 2 3.9187442257055055e-01 1.8979423247115456e+01 1.2009427785390942e+01 1.7407244710259985e+01 0 0 0 -2940 980 2 3.4632860432638313e-01 1.8451600439801506e+01 1.4839552720185747e+01 1.7368561537060227e+01 0 0 0 -842 281 2 3.4119337800122618e-01 1.3170436151882294e+00 9.4108747050476378e+00 1.5543224130927058e+01 0 1 0 -1516 506 1 -6.7068126500296144e-01 1.1425229800113051e+01 2.6455517175375637e-01 1.7762034538861357e+01 0 0 0 -1639 547 1 -7.2373086427851052e-01 6.3764181916873843e+00 1.1759659047129542e+01 1.5981229637569374e+01 0 0 0 -1038 346 2 3.7926588337572753e-01 1.5156959038847516e+01 1.3698403096322609e+01 2.2897074520829197e+01 0 1 -1 -388 130 1 -7.5510394342290132e-01 1.4111550559310265e+01 1.1560434211278997e+01 2.3443295473973926e+01 0 0 -1 -390 130 2 4.0655347049402102e-01 1.5039516853489459e+01 1.1720980918698904e+01 2.3307150086746127e+01 0 0 -1 -2595 865 2 4.1713439738631469e-01 1.7555658074944745e+01 1.2046788493534205e+01 2.3228099335612924e+01 0 0 0 -1036 346 1 -6.7551293206049901e-01 1.4561103067342792e+01 1.4032165389974502e+01 2.2296849078877067e+01 0 1 -1 -617 206 2 3.7623215020866863e-01 1.6543106285011845e+01 1.1407863625327440e+01 1.6695487415549007e+01 0 0 -1 -1735 579 1 -7.5113409137827258e-01 1.4590044443041155e+01 1.1218354811374031e+01 1.6427683357216281e+01 0 0 0 -1991 664 2 3.8459332332863760e-01 1.9497277727423661e+01 1.0578887237316250e-02 2.2458156727385099e+01 0 0 0 -899 300 2 3.8127010516342885e-01 5.3391559075200679e+00 9.9804570387332223e+00 1.5720359735406319e+01 0 0 0 -398 133 2 3.2004491336324487e-01 2.1495986442264993e+01 7.6050513166391003e+00 2.2363098294672028e+01 0 0 -1 -2680 894 1 -7.3202861077267689e-01 2.2066768893607218e+01 1.5375730708080813e+01 1.9415608440359819e+01 0 0 0 -2170 724 1 -7.6349686183636911e-01 1.8865824155187205e+01 9.4916039563870118e+00 1.9805581370270467e+01 0 0 0 -716 239 2 3.5632299047840366e-01 1.9357449724098466e+01 9.0020272700128974e+00 1.9135097158884438e+01 0 0 0 -2678 893 2 3.4951967851345100e-01 1.9495817439363719e+01 1.0952223438296004e+01 2.2143519070705047e+01 0 0 0 -354 118 2 3.5916029308246983e-01 2.0956698347810864e+01 1.1783208277501810e+01 1.9587783079463009e+01 0 0 0 -352 118 1 -6.8878961535675709e-01 2.0550706516505961e+01 1.1663387875887267e+01 2.0534690899852240e+01 0 0 0 -353 118 2 3.5776060615036392e-01 1.9734667085056032e+01 1.1066395062612594e+01 2.0358463217175814e+01 0 0 0 -2172 724 2 3.2563405921591260e-01 1.8971789304714186e+01 8.9767862096464004e+00 2.0605374764272497e+01 0 0 0 -506 169 2 3.7336604353172415e-01 2.1243934859328998e+01 1.3067633517947597e+01 2.1722114689046712e+01 0 0 0 -397 133 1 -7.0203789006736461e-01 2.1272215741460059e+01 8.4190413649576481e+00 2.1923024798635119e+01 0 0 -1 -2112 704 2 3.5749643675307025e-01 2.3277342972110947e+01 1.0273506654345852e+01 1.9746190274072337e+01 0 0 0 -399 133 2 3.8529248043220982e-01 2.2095981443530921e+01 8.9608436992017477e+00 2.1882225118690091e+01 0 0 -1 -669 223 2 3.5241719615984168e-01 2.3835092940756191e+01 1.1028890441661733e+01 2.1590790738013276e+01 0 0 0 -1939 647 1 -7.2135771505377078e-01 2.2966671549940813e+01 1.0008086922405964e+01 1.8897908893064958e+01 0 0 0 -715 239 1 -7.2997705047380057e-01 2.3653015785898301e+01 1.0098747871485116e+01 2.1824770265916694e+01 0 0 0 -1940 647 2 3.5160598280934757e-01 2.2669112888586351e+01 9.0908235054689985e+00 1.9073113742305335e+01 0 0 0 -717 239 2 3.8320793146871557e-01 2.4311519990824511e+01 9.7755906645591999e+00 2.2462924941857636e+01 0 0 0 -459 153 2 3.8416886073134027e-01 2.3070896264022778e+01 1.2452390151392521e+01 1.9315406632261965e+01 0 0 0 -1834 612 1 -7.2161997489727125e-01 1.9381599658981891e+01 1.2659658978319085e+01 1.8015457035261701e+01 0 0 0 -505 169 1 -6.9860310377840651e-01 2.1642858799412103e+01 1.3937964923486071e+01 2.1816452323103469e+01 0 0 0 -1835 612 2 3.7207914288685157e-01 2.0278979344207215e+01 1.2638224531969829e+01 1.7854801478038407e+01 0 0 0 -458 153 2 3.8212115507743072e-01 2.2372624989832556e+01 1.2229091079374045e+01 1.7903894019546094e+01 0 0 0 -457 153 1 -7.6499416451080382e-01 2.2343098067345160e+01 1.2805355870533806e+01 1.8699219400743679e+01 0 0 0 -1956 652 2 3.4339814167844712e-01 2.4186106360868280e+01 1.2969190144837924e+01 2.2301851785400849e+01 0 0 0 -2729 910 2 3.7703957361105783e-01 2.2081585098562567e+01 1.4464589638277989e+01 1.8968631374295192e+01 0 0 0 -1941 647 2 3.8549314621537878e-01 2.1944326659494948e+01 1.4125339370548296e+01 2.0896046712774201e+01 0 0 0 -2111 704 2 3.5065550630186537e-01 2.0214586295971163e+01 8.2482085452366718e+00 1.7099343233387046e+01 0 0 0 -2303 768 2 3.3566251428324961e-01 4.7982086445837524e+00 6.5562331072971682e+00 1.6506782621679776e+01 0 0 0 -882 294 2 3.5386422755678792e-01 9.7165959201112670e+00 1.5169399558564750e-01 2.1823152404527185e+01 0 1 0 -185 62 2 3.4046379682562783e-01 4.3305035655275319e-02 1.2912647970572984e+01 1.7031286717738347e+01 0 0 0 -2384 795 2 3.7660846054579272e-01 2.9465405847905281e+01 9.2655430068648865e+00 2.2725072426645035e+01 -1 1 0 -1068 356 2 3.8476208951181273e-01 1.3329215191795530e+01 1.1354157060663415e+01 3.1042205074704174e+01 0 0 -1 -2987 996 2 3.6560553509206023e-01 2.7464957672870540e+01 1.1248565497139367e+01 2.3809506566471352e+01 0 1 0 -346 116 1 -7.3391986676753573e-01 1.7056858454851412e+01 8.2180755585903089e+00 1.5626796727305591e+01 0 0 0 -184 62 1 -7.2609578154427024e-01 4.9464161798220929e-01 1.3770931023181264e+01 1.6871790013461275e+01 0 0 0 -2469 823 2 3.9352264166164758e-01 1.4823853627918639e+00 1.5415517317916478e+01 1.7290114940775041e+01 0 0 0 -921 307 2 3.9567342613304785e-01 2.7976820586123839e+01 7.6241864611821573e+00 1.6669910450292988e+01 -1 1 0 -730 244 1 -7.5440831141625975e-01 2.9940507767907427e+01 1.1024414260594568e+01 1.6465650387139668e+01 0 0 0 -732 244 2 3.6608217473124127e-01 3.0900323309008844e+01 1.0756077083335166e+01 1.6365877614743567e+01 0 0 0 -2132 711 2 4.0049444066124251e-01 2.4976244607438534e+01 1.3260747334438147e+01 2.0221675044683380e+01 0 0 0 -2131 711 1 -7.7945494920877012e-01 2.4472214704824960e+01 1.2409196296592279e+01 2.0203897211372077e+01 0 0 0 -2133 711 2 3.8570991198323573e-01 2.4943570048139250e+01 1.1853053597824776e+01 1.9524475894365100e+01 0 0 0 -640 214 1 -7.4773484071651031e-01 2.5532342776021249e+01 8.6043278685170712e+00 1.8213454212182754e+01 0 0 0 -2225 742 2 3.7750922652840646e-01 2.6069108746220927e+01 1.0262117383019357e+01 1.8267611041747067e+01 0 0 0 -2226 742 2 3.4778060237024450e-01 2.6239382865318579e+01 1.1685965248509371e+01 1.7749768533991165e+01 0 0 0 -2246 749 2 3.7627811404600109e-01 3.0297260992956371e+01 8.6714161509651131e+00 2.0389554356097957e+01 0 0 0 -160 54 1 -7.3033074976895529e-01 2.9624109555854151e+01 9.2807951844092678e+00 2.0695257535476276e+01 -1 0 0 -162 54 2 3.6796053651740235e-01 2.9490886980093705e+01 1.0053299858495222e+01 1.9995802359191931e+01 -1 0 0 -731 244 2 3.6711482998338107e-01 2.9715292499906422e+01 1.1173930209302149e+01 1.7425157563527797e+01 0 0 0 -2136 712 2 3.7353312060824306e-01 3.0456462227425714e+01 1.3397929850443866e+01 2.0727463330593576e+01 0 0 0 -2135 712 2 3.7707725039739515e-01 2.9083332776355398e+01 1.3250228537723050e+01 2.1409642910163022e+01 0 0 0 -2134 712 1 -7.2738501400538580e-01 2.9500436262165433e+01 1.3543525387246625e+01 2.0629409301244063e+01 0 0 0 -2072 691 2 3.8891740371251265e-01 2.8010580003273464e+01 1.1290754689919872e+01 1.8919865387757891e+01 0 0 0 -2122 708 1 -7.6644048790081043e-01 2.8976243521620926e+01 1.1401425816808537e+01 1.9049523031513747e+01 0 0 0 -2224 742 1 -7.6287182875028514e-01 2.6302186259578878e+01 1.1200627055575357e+01 1.8558007066340860e+01 0 0 0 -2124 708 2 3.8177232409347289e-01 2.9162220178382157e+01 1.2281700072770796e+01 1.9590310578059650e+01 0 0 0 -2247 749 2 3.7278880601710385e-01 2.6732418424088859e+01 1.3375916691502859e+01 2.2948704244468736e+01 0 0 0 -2912 971 2 3.5654891863482036e-01 2.8478781872414316e+01 1.4628254342701968e+01 1.8070471132846095e+01 0 1 0 -2911 971 1 -7.3296770724997251e-01 2.7562138940867662e+01 1.4686028519329875e+01 1.7771090994399270e+01 0 1 0 -2245 749 1 -7.3198965470550681e-01 2.7613387979096714e+01 1.3034627827881975e+01 2.3073332631836262e+01 0 0 0 -2732 911 2 3.6399052841284724e-01 2.8474495064115239e+01 1.0035090529339035e+01 2.4089533533768773e+01 0 0 0 -1405 469 1 -7.1712130024312082e-01 2.4909497949203029e+01 1.2417893636624896e+01 1.6247143313584463e+01 0 1 0 -1919 640 2 3.8535487605174684e-01 2.7056171148481642e+01 1.4437251107957492e+01 1.8535957281679362e+01 0 0 0 -137 46 2 3.6010823860519475e-01 2.8070308191720184e+01 1.3668673401282824e+01 2.3632800567763915e+01 -1 0 0 -2797 933 1 -7.4053306465865087e-01 2.7531406994413494e+01 1.0337524702304648e+01 2.4187314942978201e+01 0 1 0 -1407 469 2 3.3584572053128925e-01 2.4134739719232172e+01 1.1828768930389478e+01 1.6211473199796917e+01 0 1 0 -2887 963 1 -6.6686361361738655e-01 1.7366594829490911e+00 3.8184872265588798e-01 3.0534326547643687e+01 1 1 0 -2356 786 1 -7.3218856391362297e-01 8.7508872956418760e+00 1.5223406319860592e+01 1.5987431167238142e+01 0 0 0 -1135 379 1 -7.1096791971419460e-01 2.6483728833226294e+01 1.5402925392905622e+01 2.7411168513907231e+01 0 0 -1 -45 15 2 3.6392287941140833e-01 1.4006717062920890e+01 7.9881129827318178e+00 1.5817203648188739e+01 0 0 0 -652 218 1 -7.1326045703175078e-01 1.7940745850141756e+01 1.5517649835166518e+01 2.0664114896539090e+01 0 0 0 -1605 535 2 3.5111781404263770e-01 2.6299486851682459e+00 1.9084394243801095e+00 2.6702910352040490e+01 0 0 0 -156 52 2 3.7815022812234889e-01 2.8944617535136126e+00 3.7000780234493660e+00 2.3375635489162701e+01 0 0 0 -2576 859 2 3.6944053787329784e-01 4.5306460799063819e+00 6.8045844706988023e-01 2.3882858342485843e+01 0 1 0 -1603 535 1 -7.2352326684273671e-01 2.0925608534674192e+00 1.4994002789243699e+00 2.6053898871459438e+01 0 0 0 -1604 535 2 3.5784239543508978e-01 2.6558924493573683e+00 1.6491644984747833e+00 2.5285569030322147e+01 0 0 0 -768 256 2 3.5889503483555663e-01 2.6155775692569061e+00 6.2952737954860494e+00 3.0069361965627756e+01 0 0 -1 -959 320 2 3.4847682532600549e-01 3.3896562876093910e+00 5.3534311883952777e+00 2.8301965994702510e+01 0 0 -1 -154 52 1 -7.1845298746042896e-01 3.0060271800735214e+00 2.6906180589790232e+00 2.3485835681460074e+01 0 0 0 -155 52 2 3.6310940125395524e-01 3.9564133801821355e+00 2.4997700481529299e+00 2.3608032808913929e+01 0 0 0 -746 249 2 3.3452565110090060e-01 4.6091031750912199e+00 2.0564926734150242e+00 2.8598566794230077e+01 1 0 -1 -745 249 1 -7.4957206719184666e-01 4.6446472830542271e+00 2.0601499171929896e+00 2.7656284147156228e+01 1 0 -1 -747 249 2 3.3876187850410905e-01 5.5986980737654228e+00 2.2173410774498237e+00 2.7463488941283973e+01 1 0 -1 -2140 714 1 -7.5910771445322278e-01 4.6072371158375891e-01 5.6894736955241223e+00 2.7002676169462639e+01 1 0 0 -760 254 1 -7.2383900700149562e-01 3.0124918542978749e+00 4.9031052564718873e+00 2.7509888261364623e+01 0 0 -1 -761 254 2 3.3007493639865093e-01 3.3127594365808206e+00 4.0046170422366432e+00 2.7669968488879821e+01 0 0 -1 -766 256 1 -7.8191702293143428e-01 3.4450228601390331e+00 6.6501573073070226e+00 2.9746624243370210e+01 0 0 -1 -2142 714 2 3.8289699939760330e-01 1.3174004643759945e+00 5.1965945452085469e+00 2.7210580526167202e+01 1 0 0 -104 35 2 3.5380180318457871e-01 5.5198701162709645e+00 6.8752345186909745e+00 2.6249799741025491e+01 0 0 -1 -55 19 1 -6.9427182695468448e-01 5.9577817224673000e+00 6.4368574169994650e+00 2.5509779416469595e+01 0 0 -1 -2243 748 2 3.7410388442771397e-01 1.2034232408547305e+00 7.1972306827937826e+00 2.7274449960386374e+01 1 0 0 -57 19 2 3.7136024885638275e-01 5.2676968644264459e+00 6.2372575723454098e+00 2.4839309811753004e+01 0 0 -1 -1610 537 2 3.7631132379252363e-01 4.0437390210148987e+00 3.2407764692770552e-01 2.8154713224445732e+01 0 0 0 -231 77 2 3.7991147877901293e-01 6.1647893646658352e+00 5.0583850605738689e+00 3.0835566349958654e+01 0 0 -1 -2575 859 1 -7.3924682246274653e-01 5.6104836585269391e+00 2.2948051186240721e+00 2.4068361492403909e+01 0 1 0 -229 77 1 -7.3142249570417361e-01 5.6897214367236337e+00 5.0771683978045949e+00 2.9988809681094182e+01 0 0 -1 -2242 748 1 -7.5275488968526127e-01 1.6121977001859173e+00 8.0621852338332864e+00 2.6927327677845390e+01 1 0 0 -1709 570 2 3.7759477195007612e-01 2.3009551945892234e-01 2.9054335778181983e-01 2.2910480586009719e+01 0 0 0 -230 77 2 3.7105478337597031e-01 4.9008827539773936e+00 5.7163105546997963e+00 3.0041707584755315e+01 0 0 -1 -1437 479 2 3.4991221351340213e-01 2.9437131111781120e+01 9.2616161897067162e+00 1.6312167778586037e+01 0 0 0 -2257 753 1 -7.3155476328684443e-01 2.7783557954778793e+01 1.5400060019718380e+01 2.4781951177859217e+01 -1 0 0 -2141 714 2 3.4741712872681252e-01 3.8863220752417565e-01 5.7522035734289352e+00 2.6005208355033556e+01 1 0 0 -1506 502 2 3.7428710536178583e-01 3.4616250200203041e-01 2.2811146231229431e+00 2.5588369112161367e+01 0 0 0 -2341 781 1 -7.6276413519313246e-01 8.7773055780748210e-01 7.1913810433029584e+00 2.4444154580846838e+01 0 1 0 -604 202 1 -7.3234327216229211e-01 9.7533281522530437e+00 8.0503141526497166e-02 2.8715255588762510e+01 0 0 -1 -1668 556 2 3.8204713336037099e-01 7.0998155724257650e+00 7.6432442203046289e+00 3.0448364884145068e+01 0 0 0 -2470 824 1 -7.1006127391757046e-01 5.8392836050614196e+00 1.9472392741888216e+00 3.0045369550134733e+01 0 1 0 -1698 566 2 3.7835501800116833e-01 1.0620223823987079e+01 2.0039196363086931e+00 2.4380001590043584e+01 0 0 0 -2505 835 2 3.9505263210629882e-01 7.7472986644074577e+00 1.6450692330334811e+00 2.7092945216945559e+01 0 1 0 -1790 597 2 3.9959303180025546e-01 8.6149533170788413e+00 1.3639145340245475e+00 2.8480885121536478e+01 0 0 0 -1667 556 2 3.4316804129203538e-01 6.7094284903958750e+00 6.4608432582388646e+00 2.9436238510216565e+01 0 0 0 -2471 824 2 3.8693552030295769e-01 6.6157992859761992e+00 1.8301818197673485e+00 2.9397771245472452e+01 0 1 0 -828 276 2 3.6959373561806791e-01 7.9730749989243206e+00 5.3762975343585486e+00 2.6510240742923454e+01 0 1 -1 -827 276 2 3.8533812346834262e-01 9.1098967293564321e+00 5.7867348203768900e+00 2.5415050302772961e+01 0 1 -1 -2290 764 1 -7.2311861325806781e-01 7.1990819250561247e+00 4.4161739407096965e+00 2.3214107095139333e+01 0 1 0 -2292 764 2 3.5282785373504333e-01 6.6043512343042048e+00 5.1504590610166359e+00 2.3369187485954960e+01 0 1 0 -826 276 1 -7.7327279910532365e-01 8.8852591236397522e+00 5.3907166658805066e+00 2.6321780757862346e+01 0 1 -1 -2462 821 2 3.8127918981240727e-01 1.1106926559939263e+01 3.2142510335419128e+00 2.6313151503225818e+01 0 0 0 -2577 859 2 3.9111127420726477e-01 6.1737599263758964e+00 3.0920245359822180e+00 2.3754152255765142e+01 0 1 0 -1676 559 2 3.4671941264342054e-01 9.3309146799038558e+00 6.0605507641258232e+00 2.7918826665849195e+01 0 0 0 -2463 821 2 3.5797165668398834e-01 1.0529963878015691e+01 4.6798321049604681e+00 2.6604494471453545e+01 0 0 0 -2461 821 1 -7.6672260309278528e-01 1.1330983766945398e+01 4.1107424917779500e+00 2.6588347801866334e+01 0 0 0 -1675 559 1 -7.5495380454948657e-01 9.6517566920452396e+00 6.6463425202929249e+00 2.8643151899383643e+01 0 0 0 -1677 559 2 3.7929200748761688e-01 8.7702547003611944e+00 6.8687629380470234e+00 2.9126412959566544e+01 0 0 0 -1612 538 1 -7.3815051531118636e-01 1.1246395560967327e+01 4.4466625634810439e+00 2.9348903503134387e+01 0 0 0 -1695 565 2 3.5770006483896866e-01 8.2820740425731127e+00 1.5367669740626146e+00 2.5115092014407637e+01 0 0 0 -1613 538 2 3.6211581024232170e-01 1.0586182661907189e+01 5.1683886359094950e+00 2.9192950691679115e+01 0 0 0 -1614 538 2 3.6663082131535712e-01 1.1360675801485524e+01 4.1186753637637681e+00 2.8426967799714145e+01 0 0 0 -2504 835 2 3.9006410078894199e-01 6.1686030868556090e+00 1.8484193377472726e+00 2.4856211741934199e+01 0 1 0 -1666 556 1 -7.4804678719134265e-01 7.2295609345927812e+00 7.3725389976496345e+00 2.9498489434899135e+01 0 0 0 -1789 597 1 -7.0789100849723052e-01 7.8347032250510464e+00 1.8745090856575120e+00 2.8150593435894123e+01 0 0 0 -1102 368 1 -7.2484897577735463e-01 7.4954160196154804e+00 1.3475667352039538e+00 2.5622737359185873e+01 0 1 0 -1950 650 2 3.8211414353034612e-01 2.6318576396838196e+01 6.2005906232047820e+00 3.0926365845374470e+01 0 0 0 -201 67 2 3.8505026476286963e-01 2.8875311946310578e+01 1.0486113117526268e-01 2.5903813880384430e+01 -1 0 -1 -213 71 2 3.5331547354572462e-01 1.0094350323601551e+01 1.6355217338086478e+00 2.9902040913462724e+01 0 0 -1 -1697 566 2 3.5665869442543852e-01 1.1812417085794502e+01 1.4179132341840108e+00 2.5349575673031623e+01 0 0 0 -1696 566 1 -6.9906214495727226e-01 1.0816648011309034e+01 1.5732587734711427e+00 2.5266034404801520e+01 0 0 0 -2784 928 2 3.8284675805091112e-01 1.1800505099415970e+01 5.3980783829212857e+00 2.5506553022148633e+01 0 1 0 -200 67 2 3.5498199675316910e-01 2.9860072104936709e+01 1.2613231033752976e+00 2.5515978975457060e+01 -1 0 -1 -2087 696 2 3.8132925818039848e-01 2.7079357627333255e+01 3.9538809364147370e-01 2.4125426836104438e+01 0 0 0 -2055 685 2 3.9062362437675457e-01 2.6027125624982066e+01 9.0056621598958237e+00 2.3815178340636532e+01 0 0 0 -2715 905 2 3.8679293265460046e-01 1.7672954384457459e+01 2.4689610820071568e+00 2.3791118220408435e+01 0 1 0 -2530 844 1 -7.4476748089193567e-01 1.5164226625356950e+01 9.7577773171138671e-01 2.3001443303076130e+01 0 1 0 -2713 905 1 -7.7496637692445991e-01 1.7483805518372101e+01 3.3746191935728023e+00 2.4103637805231486e+01 0 1 0 -1879 627 1 -7.2581626411596223e-01 1.6079187392870164e+01 7.7491964483766420e+00 2.3322678776045596e+01 0 0 0 -198 66 2 4.0416597710417085e-01 1.2339982134060692e+01 5.2958185199224834e+00 3.0553713530058854e+01 0 0 -1 -383 128 2 3.6816002057937336e-01 1.3718608800421432e+01 2.2539414034241911e+00 2.4632719231922977e+01 0 0 -1 -2189 730 2 3.7184577153859505e-01 1.3697004879830212e+01 7.4745839213884258e-01 2.5202791018715246e+01 0 0 0 -1808 603 2 3.5707964716517671e-01 1.2164030559487436e+01 7.3814702824088050e+00 2.3810382629409432e+01 0 0 0 -412 138 1 -7.2247844298604080e-01 1.4280465766839763e+01 2.0154595068977179e+00 2.9596266300365343e+01 0 0 -1 -2188 730 1 -7.4594174866031282e-01 1.3533969980129937e+01 1.6527397343918953e+00 2.5395849873291269e+01 0 0 0 -1794 598 2 3.8659034471889031e-01 1.4463252385309664e+01 5.6746620476312488e+00 2.8245119598851449e+01 0 0 0 -1691 564 2 3.9863451050656573e-01 1.4288471439622102e+01 7.7356083129237740e+00 2.9938865219573312e+01 0 0 0 -2782 928 1 -7.4311594708760220e-01 1.2401050650869941e+01 5.7841873787684888e+00 2.4847262494224694e+01 0 1 0 -2714 905 2 3.8020034689892418e-01 1.6508369862393078e+01 3.4988704682037368e+00 2.4208899519999502e+01 0 1 0 -1867 623 1 -7.2703398778301620e-01 1.4320172044433900e+01 6.6061317379975737e+00 2.8590330500386656e+01 0 0 0 -1860 620 2 3.6259354613133710e-01 1.3682191928063379e+01 7.0944660188658855e+00 2.7989646814815874e+01 0 0 0 -1801 601 1 -7.4395001518338510e-01 1.4524362524969639e+01 3.9127560792567242e+00 2.7574044750927154e+01 0 0 0 -24 8 2 3.1572007617749354e-01 1.5629619413419856e+01 5.6405255910187329e+00 2.5727182980490600e+01 0 0 -1 -23 8 2 3.3802191421555616e-01 1.5125566437350948e+01 6.7160073750058054e+00 2.6620021779098007e+01 0 0 -1 -22 8 1 -7.3055579090838396e-01 1.5891352345289096e+01 6.5418138309028828e+00 2.6029168877611063e+01 0 0 -1 -2424 808 2 3.5056989389545112e-01 1.4175089634680990e+01 4.8223776090127233e+00 2.4370479728181770e+01 0 1 0 -1802 601 2 3.4706211476779852e-01 1.5261195821634548e+01 3.4496911264633634e+00 2.7077869109044276e+01 0 0 0 -1822 608 1 -7.3869738211977010e-01 1.6945727137725200e+01 2.3665741269187799e+00 2.6754995542136687e+01 0 0 0 -2566 856 1 -7.2238086286676650e-01 1.4732018505396947e+01 4.0616910904253132e+00 2.4184656701567210e+01 0 0 0 -1824 608 2 4.0099874000931812e-01 1.6361263160538176e+01 1.5433515087414060e+00 2.6681694995932268e+01 0 0 0 -1823 608 2 3.5259860836217050e-01 1.7004232190130114e+01 2.7659484071560354e+00 2.5864238730984031e+01 0 0 0 -413 138 2 3.8194871278859543e-01 1.4493083830094669e+01 2.6915599088621218e+00 2.8964653139671135e+01 0 0 -1 -1132 378 1 -7.8684514788307447e-01 1.8113618383064782e+01 6.6564105624918390e+00 2.7825846085913078e+01 0 0 -1 -1023 341 2 3.9654087966533347e-01 1.7443075465581735e+01 5.7488500582853614e+00 2.9150612393490185e+01 0 1 -1 -1803 601 2 3.5226628335139892e-01 1.3736252433620466e+01 3.4577806895413277e+00 2.7297176176563575e+01 0 0 0 -1881 627 2 3.7309282547796940e-01 1.5960450825911897e+01 7.1685773230358913e+00 2.4089572576216767e+01 0 0 0 -2783 928 2 3.4352357034503550e-01 1.2988656095323929e+01 6.3854497952466618e+00 2.5318059663795211e+01 0 1 0 -1021 341 1 -7.5456799263442131e-01 1.7525918910477358e+01 4.9951615398262001e+00 2.9759290956075663e+01 0 1 -1 -1134 378 2 3.6239482331144030e-01 1.7462744899850858e+01 6.5074837269233123e+00 2.7077778836775249e+01 0 0 -1 -1793 598 2 4.1572512658299882e-01 1.8073425223065041e+01 3.3575067534915588e+00 2.9207373212601954e+01 0 0 0 -2796 932 2 4.2213039093411159e-01 1.8179336613522949e+01 2.4919400463894288e+00 2.7864552441067762e+01 0 1 0 -1792 598 1 -7.3738376359606139e-01 1.8620994317729217e+01 2.7171006406247078e+00 2.8759393908495117e+01 0 0 0 -1880 627 2 3.6330696047818717e-01 1.6995808128896741e+01 8.1279433991093537e+00 2.3311703301759788e+01 0 0 0 -2061 687 2 3.2537907809503785e-01 2.2440273268792474e+01 1.0964887291422052e+01 1.6297516466307698e+01 0 0 0 -839 280 2 3.8027724849319211e-01 2.7759267097755888e+01 5.4301314090060684e+00 1.6279486475935325e+01 -1 1 0 -1308 436 2 3.4652344809115321e-01 2.7376399502770262e+01 1.2686836450099335e+01 3.0847557279745700e+01 0 1 -1 -414 138 2 3.5026080502107043e-01 1.3610820703506388e+01 1.3989815362903599e+00 2.9152424176363148e+01 0 0 -1 -838 280 1 -7.4661124037097937e-01 2.8336958586340820e+01 4.6545977211036629e+00 1.5985798359172170e+01 -1 1 0 -2040 680 2 3.4841893979641375e-01 2.3116508880722311e+01 2.2742405108769868e+00 2.3248279285215204e+01 0 0 0 -408 136 2 3.3615325000522034e-01 2.1886245219915821e+01 1.4620116047737040e+00 3.0305882116767531e+01 0 0 -1 -1319 440 2 3.6377511606203944e-01 2.2679173557773613e+01 3.8312650465522329e+00 3.0337714197555496e+01 0 0 -1 -1725 575 2 3.5999155580158826e-01 1.9396800376357625e+01 2.8517078784890120e+00 2.4770633049667293e+01 0 0 0 -1723 575 1 -7.0291368591368775e-01 2.0031609566505022e+01 2.3100487504592011e+00 2.5236743027128966e+01 0 0 0 -2039 680 2 3.8601830871155030e-01 2.4689986385242818e+01 2.7333703199245574e+00 2.3533497119533202e+01 0 0 0 -1975 659 1 -7.7479016530442568e-01 2.2035449930098789e+01 5.9817972726034707e+00 2.3596815989300730e+01 0 0 0 -1133 378 2 4.0552689273242359e-01 1.8982058003137158e+01 6.2605938973427699e+00 2.7616583004620413e+01 0 0 -1 -251 84 2 3.7998342573887978e-01 2.0934339493891319e+01 1.3052873225415755e+00 2.6503990225166806e+01 0 0 -1 -2013 671 2 3.9423272690181710e-01 1.8631629587743380e+01 1.1303446468208378e+00 2.9505706772310898e+01 0 0 0 -2221 741 1 -7.5996622342131370e-01 2.4433660816953392e+01 3.1920332351693292e-01 2.7233526334968218e+01 0 0 0 -2038 680 1 -7.2477816625334268e-01 2.3890510211906154e+01 2.1946548833974879e+00 2.3908604479720488e+01 0 0 0 -1918 640 1 -7.4155527600601256e-01 2.5926359835059351e+01 1.4698996019020885e+01 2.0016330192932870e+01 0 0 0 -2015 672 2 3.6363809299288735e-01 2.2778312640167730e+01 3.1461983364573145e+00 2.5033216009192092e+01 0 0 0 -2016 672 2 3.7478891531000047e-01 2.2657166473054961e+01 4.6844022674643870e+00 2.4869835982086411e+01 0 0 0 -2014 672 1 -7.1214110885986637e-01 2.2571366834895294e+01 3.9748534047102417e+00 2.5540547659930525e+01 0 0 0 -1724 575 2 3.4134589759837836e-01 2.0842203093187724e+01 2.8239487034057364e+00 2.5299412584682365e+01 0 0 0 -2615 872 2 3.8528317315514266e-01 2.1777207634367581e+01 2.5957189027018090e+00 2.8075641756680287e+01 0 1 0 -2616 872 2 3.5940547383941868e-01 2.0785643999831347e+01 3.1781194810922901e+00 2.9152301692711102e+01 0 1 0 -2614 872 1 -7.6820777209436375e-01 2.1692978096403248e+01 3.1748162583595714e+00 2.8848176403157424e+01 0 1 0 -250 84 1 -7.3931312868170040e-01 2.1673960370643645e+01 9.5121953101989898e-01 2.7056977704243231e+01 0 0 -1 -2223 741 2 3.7247416059367261e-01 2.3541408786793877e+01 6.6017054320870006e-01 2.7434862837779910e+01 0 0 0 -1938 646 2 3.6279674091145114e-01 2.1096445250826850e+01 4.8628377591166805e+00 2.8083029348299146e+01 0 0 0 -2975 992 2 3.8381030301725305e-01 2.3805159178106493e+01 5.0293373259224659e+00 2.6723716857786389e+01 0 1 0 -2974 992 1 -7.2344779356769162e-01 2.4633119241402110e+01 5.4403491464787317e+00 2.6950581463737869e+01 0 1 0 -1936 646 1 -7.0856542248055776e-01 2.0701215126028124e+01 5.7697851570504719e+00 2.7901223821110477e+01 0 0 0 -2208 736 2 3.9722107295347597e-01 2.1984122819343177e+01 6.9208006527616437e+00 2.5149997722782850e+01 0 0 0 -1944 648 2 3.7009164707375797e-01 2.1452746854380685e+01 6.4137866829722237e+00 2.7642214835097100e+01 0 0 0 -2222 741 2 3.7668046195695482e-01 2.5040740162029486e+01 1.0461749322270053e+00 2.6946065048380657e+01 0 0 0 -2767 923 1 -7.4337786974117792e-01 2.1742307820327344e+01 1.5134418643722100e+01 2.4366126454495504e+01 0 0 0 -371 124 2 3.6116972247229417e-01 2.0271230995454754e+01 7.1271787017209522e+00 2.9462320916362494e+01 0 0 -1 -2268 756 2 3.8457219349314065e-01 2.5980819952702472e+01 1.3714583291187926e+01 2.7282890283323162e+01 -1 0 0 -1232 411 2 3.4413758709031472e-01 2.9137567040215881e+01 1.0949202512858209e+01 3.0188781454335743e+01 0 0 -1 -1505 502 2 3.3551538791325869e-01 3.0317430235107839e+01 2.9847883207742885e+00 2.6452510489649907e+01 -1 0 0 -2272 758 1 -7.1071342598118648e-01 9.3835958734398410e+00 1.9561492285590161e+00 1.6622592390969427e+01 0 1 0 -1402 468 1 -6.9090595601270877e-01 2.6153445107788702e+01 3.6986035008505143e+00 2.3233331582584253e+01 0 1 0 -642 214 2 3.9542601294035035e-01 2.5957914270746148e+01 4.6662342532055536e+00 2.3026093473662279e+01 0 0 0 -406 136 1 -7.2490031864237825e-01 2.1528688902268865e+01 7.9429199794798822e-01 3.0885245286492957e+01 0 0 -1 -2258 753 2 3.9486945463227829e-01 2.7359054985104358e+01 1.5436089924173725e+01 2.5637251930300373e+01 -1 0 0 -1431 477 2 3.9006331304254127e-01 8.2659253456867976e+00 1.1522236767241642e+01 3.0860983968750393e+01 1 0 -1 -2976 992 2 3.9887145224155784e-01 2.4517444990185002e+01 6.3712412588653491e+00 2.6740258769931579e+01 0 1 0 -2100 700 2 3.6322920647257073e-01 2.9629275158220981e+01 4.5700023648180492e+00 2.2808902444718804e+01 0 0 0 -2999 1000 2 3.5082069769033863e-01 2.7040992222736573e+01 6.3552519615497500e+00 2.2920612554283686e+01 0 1 0 -1220 407 2 3.4087260111907031e-01 2.9682593014266931e+01 6.7623466501355862e+00 2.7401651354898359e+01 0 1 -1 -881 294 2 3.7611075813075673e-01 8.2941119941425061e+00 2.4507050696816179e-01 2.1775686689633140e+01 0 1 0 -2120 707 2 3.5975526793042684e-01 2.9234149746931653e+01 8.3374100951964962e+00 2.3985806198816153e+01 0 0 0 -2098 700 1 -7.1624302267277173e-01 2.9462080781502500e+01 4.7667433676649136e+00 2.3739855004374014e+01 0 0 0 -1943 648 2 3.2804604961872091e-01 2.6167227951336340e+01 2.7451899980758090e+00 2.7322560420098402e+01 0 0 0 -2910 970 2 3.7101859261354220e-01 2.8735247220914726e+01 6.3319590384294813e+00 2.4458525183914798e+01 0 1 0 -2908 970 1 -7.2716197609036148e-01 2.8378839276950643e+01 7.2498675408571609e+00 2.4719567635135576e+01 0 1 0 -1942 648 1 -6.8838152630748339e-01 2.6379132025647991e+01 2.0205581695014101e+00 2.6642795589277483e+01 0 0 0 -2420 807 2 3.3319989750073198e-01 2.7128680562758586e+01 1.5534418813685780e+00 2.7085445017186270e+01 -1 1 0 -1504 502 1 -7.3813947165875382e-01 3.0614709508732197e+01 2.8938895549518966e+00 2.5526870002667810e+01 -1 0 0 -2168 723 2 3.7507212316829724e-01 2.9040012568709660e+01 4.0195686600996305e+00 2.8053508071473072e+01 0 0 0 -1306 436 1 -7.3274483043115135e-01 2.8188220391426622e+01 1.2863624903147597e+01 3.0372057121312960e+01 0 1 -1 -2868 956 2 3.3936535350076769e-01 2.2235497459102703e+01 1.2320692327513624e-01 1.5742347904127183e+01 0 1 0 -2798 933 2 3.3851635523595636e-01 3.0527506010436827e+01 4.0585061296507003e+00 2.8051268696236018e+01 0 1 0 -2167 723 1 -7.4174741026786273e-01 2.9775876264620848e+01 3.5160377555752933e+00 2.8311356739956437e+01 0 0 0 -2909 970 2 3.7305397904399157e-01 2.8652845000281829e+01 7.5003064417264893e+00 2.5670730788252705e+01 0 1 0 -2889 963 2 3.9806029509204588e-01 2.9654465761888165e+01 3.9558254468869434e+00 2.4258640376803672e+01 0 1 0 -2733 911 2 3.7517338274961209e-01 2.7028842914118083e+01 4.6824780691510828e+00 2.8824592225694200e+01 0 0 0 -2731 911 1 -7.1900772137801938e-01 2.7122895792893566e+01 4.7338574122783506e+00 2.7849286889968994e+01 0 0 0 -671 224 2 3.8169834079412152e-01 2.9864196120943340e+01 1.7126153484504640e+00 2.9226896633769105e+01 0 0 -1 -1403 468 2 4.0132675187727163e-01 2.6224451088274588e+01 5.1348426597395056e+00 2.7597014274458878e+01 0 1 0 -670 224 1 -7.4002040050912421e-01 2.9874692231980340e+01 1.0162881596271729e+00 2.9897001642592940e+01 0 0 -1 -1221 407 2 3.7142453933153258e-01 2.8279180522399930e+01 6.3082051403849597e+00 2.7253072575456311e+01 0 1 -1 -1219 407 1 -7.4636223009135871e-01 2.8758138158755816e+01 7.1096213158585195e+00 2.7330644076947245e+01 0 1 -1 -672 224 2 3.6210127057263714e-01 3.0760197576931898e+01 1.0466490121463978e+00 3.0247980756380638e+01 0 0 -1 -1435 479 1 -7.2190580097339840e-01 2.9452542875187081e+01 8.3672546868835571e+00 1.5906688128526630e+01 0 0 0 -2059 687 1 -7.3637836147899527e-01 2.1998281203684527e+01 1.1770994523966618e+01 1.6128556252963122e+01 0 0 0 -1542 514 2 3.5572588517955095e-01 4.9678608395711095e+00 1.4496217192802565e+01 2.7229720314445228e+01 0 0 0 -1540 514 1 -6.9617458328670623e-01 5.6494376971442675e+00 1.4712315230056680e+01 2.7937831813085410e+01 0 0 0 -39 13 2 3.5861234707695044e-01 4.2242415429574915e+00 7.1689718685924051e+00 2.7971694427089329e+01 0 0 -1 -37 13 1 -6.8293218877967798e-01 4.2243836444752185e+00 7.8731720250773298e+00 2.7244136020901131e+01 0 0 -1 -38 13 2 4.0408897137400679e-01 3.2693517614548901e+00 8.0355786580291166e+00 2.6892708490084008e+01 0 0 -1 -2169 723 2 3.7283530489617012e-01 1.4461182609017900e+00 7.9806912796887701e+00 2.5962933797040051e+01 1 0 0 -2267 756 2 2.9668086831985852e-01 2.5218640424788600e+01 1.5265070169491409e+01 1.5671407808032143e+01 -1 0 0 -72 24 2 3.7026895866173609e-01 1.3867832616450693e+01 1.4159720159449840e+01 3.0646427607190635e+01 0 0 -1 -2864 955 2 3.2700706478367164e-01 2.2260451793554332e+00 1.4487314715567837e+01 2.3536880541097752e+01 1 0 0 -2359 787 1 -6.8370245709145028e-01 3.0582305117577373e+01 1.4674977867580935e+01 3.0856409602959928e+01 -1 0 0 -462 154 2 3.4300757633537127e-01 7.4140687869223365e+00 2.7094644349793407e-02 1.8276899988028021e+01 0 1 0 -2362 788 1 -7.2627827420049385e-01 5.1300680550884314e-01 1.4918816875037386e+01 2.5135838730051187e+01 0 0 0 -1592 531 2 3.7139105979830456e-01 2.9400588249469295e+00 1.4517999193433587e+01 2.9001036244968251e+01 0 0 0 -2941 981 1 -7.4462083103699006e-01 9.3610162932407676e-02 1.0181900578098317e+01 2.7565106823884161e+01 1 0 0 -1591 531 1 -7.2882083130276931e-01 2.5307453373854911e+00 1.4151414661377173e+01 2.8248997847423023e+01 0 0 0 -2396 799 2 3.6784498076161737e-01 3.0646037543374511e+01 1.0246317877433162e+01 2.8449760965429725e+01 -1 0 0 -2298 766 2 3.6457852508912042e-01 2.9919726624970487e+01 1.0961711742085427e+01 2.3895181447391430e+01 -1 0 0 -2284 762 1 -7.4986487750855080e-01 4.2221351932768503e+00 1.4512571687982078e+01 2.5577301509529715e+01 0 0 0 -906 302 2 3.5494463352187366e-01 5.0623581615972464e+00 1.4834750370470212e+01 2.5110075858927122e+01 0 0 0 -1593 531 2 3.6294671123359029e-01 2.6911123838420017e+00 1.4729274599255127e+01 2.7500072314648300e+01 0 0 0 -2286 762 2 3.4001321138576840e-01 3.6077027164224593e+00 1.5354396474631793e+01 2.5659230906477365e+01 0 0 0 -1588 530 1 -7.0224825924218082e-01 3.9396362933366968e+00 1.1180257810114183e+01 2.9672092199664018e+01 0 0 0 -1541 514 2 3.6634528701174501e-01 6.4232917626113029e+00 1.4045427369791419e+01 2.7798968297227240e+01 0 0 0 -1590 530 2 3.9299471288102078e-01 3.8439067244240359e+00 1.1182704270701278e+01 2.8725760042884541e+01 0 0 0 -939 313 2 3.7889554677963672e-01 3.1308990689371603e+00 9.0706579105645471e+00 2.3825276035668782e+01 0 1 0 -590 197 2 3.4099858381779224e-01 3.9079268612007989e+00 1.1023233719783413e+01 2.4416295019901721e+01 1 0 -1 -589 197 1 -7.3055710272660168e-01 3.1588868788990050e+00 1.0521774667455457e+01 2.4794251812079033e+01 1 0 -1 -591 197 2 3.9640569180812241e-01 3.0069035000148943e+00 1.0819166199861776e+01 2.5720713444941524e+01 1 0 -1 -2209 737 1 -7.4058726174786715e-01 2.4651844894301518e+00 1.1450756359328805e+01 2.7442975570571651e+01 1 0 0 -2210 737 2 3.9054443342471989e-01 2.4574421765046113e+00 1.2399789697648865e+01 2.7692287455894533e+01 1 0 0 -2342 781 2 3.8362119674916201e-01 1.5551610000962601e+00 7.4983921792818649e+00 2.3810325756597745e+01 0 1 0 -2211 737 2 3.9427357191716933e-01 1.5470960743010029e+00 1.1073827292825166e+01 2.7570238020110391e+01 1 0 0 -2943 981 2 3.9514820652904376e-01 5.5471627542911661e-01 9.3388406833634612e+00 2.7614604490374539e+01 1 0 0 -2296 766 1 -7.1236628613563036e-01 3.0288038992894748e+01 1.1891617541030371e+01 2.3785810801441983e+01 -1 0 0 -2285 762 2 3.8843422502513547e-01 3.0504430738562395e+01 1.2277686589018002e+01 2.4639067344550650e+01 -1 0 0 -2936 979 2 3.7592630022093781e-01 3.0495347353597253e+01 1.1796023505393366e+01 2.6730913591147498e+01 0 0 0 -1589 530 2 3.5585578732322409e-01 3.0769313060266446e+00 1.1401326177486144e+01 3.0019014162730830e+01 0 0 0 -1715 572 2 3.6592154707217900e-01 1.9119631631711794e+01 5.0957894691655037e+00 3.0856115566946080e+01 0 0 -1 -2179 727 1 -7.3576805836275816e-01 7.6428581120790291e+00 1.3649075742178995e+01 2.3868015950000178e+01 1 0 0 -1430 477 2 3.6962577028369970e-01 9.5114639211613827e+00 1.1146345127838069e+01 2.9896118744479889e+01 1 0 -1 -2099 700 2 3.5590240159484249e-01 2.5165549541140205e+01 3.2366734523813196e+00 1.6492967667691268e+01 0 0 0 -2400 800 2 3.6240394614890403e-01 7.8397507555831805e+00 1.0390370612433033e+01 2.8804495886785038e+01 0 0 0 -51 17 2 3.6426344024945895e-01 6.9484764865737683e+00 1.1903531431972809e+01 2.7865028600320933e+01 0 0 -1 -49 17 1 -7.3441038539718639e-01 7.4046816950252339e+00 1.2688289530083246e+01 2.7514386835899902e+01 0 0 -1 -50 17 2 3.7680649087463575e-01 8.0628416188075249e+00 1.2839291690922069e+01 2.8189651996597505e+01 0 0 -1 -1223 408 2 3.7553084906304313e-01 1.0410741065457357e+01 9.2462147121461822e+00 2.9222646529105592e+01 0 0 -1 -1222 408 1 -7.5752147116263280e-01 1.0437140477975637e+01 9.5239762304402991e+00 3.0109463093526308e+01 0 0 -1 -2613 871 2 3.9209503293121073e-01 1.1379096832794138e+01 1.4210732760283307e+01 2.3982189963442210e+01 0 1 0 -2399 800 2 3.9151086462139789e-01 7.2864631937944306e+00 9.0003713345648766e+00 2.8539637167125836e+01 0 0 0 -2421 807 2 3.4816273159019728e-01 5.4747690850977886e+00 1.2595299279229106e+01 2.5700338326658262e+01 0 1 0 -2398 800 1 -7.2570165141514331e-01 7.1952936871103788e+00 9.8829171701046032e+00 2.8215888078479619e+01 0 0 0 -1568 523 2 3.6834063502975911e-01 6.1560165127909396e+00 8.6181010067783088e+00 2.5506608774633765e+01 0 0 0 -1601 534 2 3.2358122622373536e-01 1.0116384061065309e+01 6.4982652262942358e+00 2.3451422880453226e+01 0 0 0 -2233 745 1 -7.6861675710023625e-01 5.6161524871326440e+00 1.1981694313675961e+01 2.4969285341615876e+01 1 0 0 -2235 745 2 3.9836520947625603e-01 5.9696953497278322e+00 1.1198915402289865e+01 2.5328621473404599e+01 1 0 0 -205 69 1 -7.3186253672978274e-01 9.1783924588759973e+00 6.4329403599104618e+00 2.3715969238286270e+01 0 0 -1 -807 269 2 3.5677813942826919e-01 9.9407577011290922e+00 1.4762319948506670e+01 2.7529406079765664e+01 0 0 -1 -1567 523 1 -7.4318531449877401e-01 6.5885014905525283e+00 9.4150600556692012e+00 2.5476266167280151e+01 0 0 0 -1569 523 2 3.6287698509635291e-01 6.7669684753976611e+00 9.4857954369291981e+00 2.6478231281362799e+01 0 0 0 -2589 863 2 3.5864712440984275e-01 1.0246386261049768e+01 7.8905920035178907e+00 2.7693668999369891e+01 0 0 0 -1963 655 1 -7.2978146437310099e-01 9.6480234711128237e+00 1.4230304675408638e+01 2.9304354275696895e+01 0 0 0 -2588 863 2 3.6545566104495525e-01 1.0189190853122922e+01 8.8750228438218208e+00 2.6352546802691119e+01 0 0 0 -2587 863 1 -7.5162454275216706e-01 1.0621484814575963e+01 8.8277177881974023e+00 2.7310532994428019e+01 0 0 0 -1616 539 2 3.6508060642397017e-01 9.3888884268851331e+00 8.1908006786719412e+00 2.4337339212077602e+01 0 0 0 -2180 727 2 3.7049505703944913e-01 6.8335782900938487e+00 1.3124442268860719e+01 2.3943252330511189e+01 1 0 0 -1615 539 1 -7.0195211258738544e-01 9.3235833086111803e+00 9.0148562976188611e+00 2.4907497399279741e+01 0 0 0 -1617 539 2 3.7299194053441515e-01 8.3115161854827040e+00 9.0772445471886716e+00 2.5030182288118073e+01 0 0 0 -243 81 2 3.6943960457661101e-01 9.4431053783938257e+00 1.3073690124272256e+01 2.4435309877965214e+01 0 0 -1 -241 81 1 -7.3550207460185191e-01 1.0290879811508914e+01 1.3246509965238314e+01 2.4894754291299218e+01 0 0 -1 -242 81 2 3.6986133431240209e-01 1.0029662483541564e+01 1.3570438681856572e+01 2.5776338519097621e+01 0 0 -1 -845 282 2 3.6759904222954809e-01 1.1049604233757004e+01 1.0679185969056464e+01 2.7182404461721596e+01 0 1 -1 -846 282 2 3.5444703164848623e-01 1.0943196758053141e+01 1.1821319200125513e+01 2.6187538408398886e+01 0 1 -1 -844 282 1 -7.4646953513523773e-01 1.1514640541826521e+01 1.1481770936844777e+01 2.6901606791767986e+01 0 1 -1 -2775 925 2 3.7189529593826987e-01 9.6988915608867696e+00 1.3351926321439610e+01 2.9685155487054431e+01 0 0 0 -1965 655 2 3.6027082664024102e-01 1.0314724453905713e+01 1.4828627074189509e+01 2.9724633244913335e+01 0 0 0 -1251 417 2 3.6390514371470745e-01 1.2230601788389780e+01 8.3549891292779392e+00 2.6763176312018071e+01 0 0 -1 -1429 477 1 -7.3755387147500051e-01 8.6603756157886309e+00 1.1672256841694081e+01 2.9893916338742375e+01 1 0 -1 -1320 440 2 3.3984712578852078e-01 2.3740494180871607e+01 4.9289179891238080e+00 3.0337682886309828e+01 0 0 -1 -2611 871 1 -7.5168904395737246e-01 1.2046618954313910e+01 1.4815922679415843e+01 2.3515391494775386e+01 0 1 0 -1031 344 2 3.5255696149622395e-01 1.7590652400127311e+01 8.6111658574123950e+00 3.0280038245601290e+01 0 1 -1 -1030 344 1 -7.2090796210714692e-01 1.7485945167936734e+01 9.0101215506177201e+00 2.9374939950931687e+01 0 1 -1 -1032 344 2 3.6059340406568469e-01 1.7487395933041739e+01 8.2511054003332962e+00 2.8731636288112234e+01 0 1 -1 -70 24 1 -7.1908880074910375e-01 1.3003035662536277e+01 1.4573046134768324e+01 3.0478907896603410e+01 0 0 -1 -1224 408 2 3.7002032248760303e-01 1.1387284486344816e+01 9.7508752883121659e+00 3.0176246699077293e+01 0 0 -1 -1584 528 2 3.7338278298850380e-01 1.3122218925873353e+01 1.2560458414712578e+01 2.7609016300242700e+01 0 0 0 -1690 564 1 -7.3261588728269289e-01 1.4154750551460582e+01 8.0613976631500730e+00 3.0842115453033625e+01 0 0 0 -254 85 2 3.5400767882879891e-01 1.2975355583524246e+01 1.4358504881096881e+01 2.9535505531545841e+01 0 0 -1 -1318 440 1 -7.3829241788275757e-01 2.3440934652973024e+01 4.2173310504361314e+00 3.0884664709329645e+01 0 0 -1 -2067 689 2 3.7086266746562369e-01 1.6722170400844732e+01 1.0332129788727764e+01 3.0773577145031442e+01 0 0 0 -1249 417 1 -7.7176614437156921e-01 1.3149845842827069e+01 7.9479961653192213e+00 2.6533201295297772e+01 0 0 -1 -924 308 2 3.5926130269895179e-01 2.9777519518003594e-02 1.4642647413850332e+00 1.6076274244652478e+01 0 1 0 -1067 356 2 3.7555348424999740e-01 1.3474248871970975e+01 9.7777321119930694e+00 3.0871291345861994e+01 0 0 -1 -943 315 1 -7.3885981148809010e-01 1.3863022926984286e+01 1.2933914663542650e+01 2.8029602427302923e+01 0 0 -1 -944 315 2 3.2645766721847108e-01 1.4443815595593499e+01 1.2100364985372689e+01 2.8041591777057892e+01 0 0 -1 -1066 356 1 -6.9308342418200730e-01 1.3135376072575207e+01 1.0617038722820512e+01 3.0444555921833498e+01 0 0 -1 -2927 976 2 3.7231504642579638e-01 1.5948584908909615e+01 1.4366848905157598e+01 2.6497351790989303e+01 0 0 0 -2594 865 2 4.0942350427212904e-01 1.6866727123626671e+01 1.2447822063546607e+01 2.4504944623641542e+01 0 0 0 -2254 752 1 -7.5741993894989923e-01 1.7095129243139990e+01 1.3053068219190285e+01 2.6276042650491018e+01 0 0 0 -2256 752 2 3.5747611263439277e-01 1.6693942847611886e+01 1.2495350543941456e+01 2.6964518466576436e+01 0 0 0 -1250 417 2 3.9928654224103322e-01 1.3695812340575733e+01 8.7092802031819048e+00 2.6316681143940126e+01 0 0 -1 -2712 904 2 3.6740706677397278e-01 1.7836994135747865e+01 8.2973909185965731e+00 2.6855371731050841e+01 0 1 0 -389 130 2 3.8863285554926197e-01 1.4013644500234198e+01 1.1318805993758266e+01 2.4364338635282653e+01 0 0 -1 -2926 976 1 -6.5518108624343618e-01 1.5139904684103225e+01 1.4944574250370017e+01 2.6750834006912438e+01 0 0 0 -321 107 2 3.8839805196292321e-01 1.6721185856088599e+01 1.0384302981084428e+01 2.6905157017976478e+01 0 0 -1 -2593 865 1 -7.5584351346392065e-01 1.6711446642201821e+01 1.2177172868582511e+01 2.3635182926111757e+01 0 0 0 -2540 847 2 3.4933343827043423e-01 1.4559659276007043e+01 1.0699755814390009e+01 2.6618881822839249e+01 0 0 0 -2539 847 1 -7.6176399300844888e-01 1.3904482413237840e+01 1.0382490274097279e+01 2.5944402258811312e+01 0 0 0 -2541 847 2 3.6100473826910701e-01 1.3035262101429341e+01 1.0780955213044482e+01 2.6195143018200525e+01 0 0 0 -1765 589 1 -7.6838144694002819e-01 1.6196733211797753e+01 1.0792165979655469e+01 2.7606348291129120e+01 0 0 0 -1868 623 2 3.8260134982473554e-01 1.6638121121890155e+01 1.0537277543388669e+01 2.8449834790504301e+01 0 0 0 -2710 904 1 -7.4938284365397201e-01 1.7957536039248932e+01 9.0813264746525473e+00 2.6314605390941097e+01 0 1 0 -2711 904 2 3.7844864974130921e-01 1.7833608760430423e+01 8.8493325068138926e+00 2.5338943437270476e+01 0 1 0 -2255 752 2 3.6204341783161703e-01 1.7953977765971938e+01 1.3350999568023578e+01 2.6603482321664856e+01 0 0 0 -1831 611 1 -7.2163466401533338e-01 1.9864072191461105e+01 1.3829159726081066e+01 2.7797560797020392e+01 0 0 0 -2928 976 2 3.7733032487063167e-01 1.4608448925878156e+01 1.4235562836990999e+01 2.7195367897781161e+01 0 0 0 -1252 418 1 -6.9337922552946130e-01 2.3505755663332447e+01 1.5479486650063775e+01 3.0861932010713211e+01 0 0 -1 -273 91 2 3.6615962090347254e-01 2.0184349969732065e+01 1.0907384134317995e+01 3.0720161079963741e+01 0 0 -1 -2677 893 1 -6.9606850966630252e-01 1.9150644739527728e+01 1.1067304574358163e+01 2.3043684317980041e+01 0 0 0 -1954 652 1 -7.4644189057264454e-01 2.4607064663740783e+01 1.3434072305963191e+01 2.3021391544329379e+01 0 0 0 -1955 652 2 3.2345829415543931e-01 2.3977466272082573e+01 1.4196279372107945e+01 2.3030159411875562e+01 0 0 0 -767 256 2 4.1803269378989694e-01 3.4008874571419883e+00 7.5149829030921094e+00 3.0161455750068082e+01 0 0 -1 -1326 442 2 3.8458355610183048e-01 2.2657037909937561e+01 7.6952793130615769e+00 2.9808736186645596e+01 0 0 -1 -2769 923 2 3.6816651155703489e-01 2.1552111681654665e+01 1.4328644005991656e+01 2.3808756107552878e+01 0 0 0 -2050 684 1 -7.3036464236562093e-01 1.8830612616867469e+01 8.2123081028284890e+00 2.3776564335254232e+01 0 0 0 -26 9 2 3.7663516946512482e-01 2.4817458855973054e+01 7.3213029642390079e+00 3.0418530560350298e+01 -1 0 -1 -2052 684 2 3.6415991144659277e-01 1.9219186731828366e+01 8.7662510600245618e+00 2.3129451374004418e+01 0 0 0 -372 124 2 3.8267756729165803e-01 2.0361196230764332e+01 8.3608907289740912e+00 3.0460856817817696e+01 0 0 -1 -2777 926 2 3.2745849681104400e-01 1.8908100590978659e+01 1.3938658983239886e+01 3.0327175040705690e+01 0 0 0 -2051 684 2 3.5322405173020199e-01 1.9063977438781244e+01 7.3429362850749094e+00 2.3399643835257663e+01 0 0 0 -1203 401 2 3.7315442065106896e-01 2.1086677563589795e+01 9.0475313492608436e+00 2.6567582880722401e+01 0 1 -1 -2717 906 2 3.4179291281142737e-01 2.4586366501334876e+01 1.2450697874123701e+01 2.5943500249323172e+01 0 1 0 -2716 906 1 -6.9790408596402775e-01 2.3764414856222807e+01 1.2402371316352536e+01 2.5274239075029751e+01 0 1 0 -1202 401 2 3.8767203412495160e-01 1.9570007757344687e+01 9.6544295887039659e+00 2.6438772204238230e+01 0 1 -1 -2554 852 1 -6.8587633698067185e-01 2.0779628128122603e+01 1.1863751647131176e+01 2.5075524504922058e+01 0 0 0 -2555 852 2 3.5006620922183168e-01 2.1670502603019280e+01 1.2225748680662123e+01 2.5372392535752759e+01 0 0 0 -1459 487 1 -7.6091546577333902e-01 2.4531265931752326e+01 8.1992126418417346e+00 2.6382772014022091e+01 0 1 -1 -2207 736 2 3.5787456165345188e-01 2.2789831114430680e+01 7.7197335845105206e+00 2.6196582206987429e+01 0 0 0 -1461 487 2 3.7987848336558844e-01 2.4270378568134412e+01 8.9804879511398408e+00 2.6871767299035508e+01 0 1 -1 -1460 487 2 4.1084175724619054e-01 2.4805603355334107e+01 8.4977119717592196e+00 2.5504322743398028e+01 0 1 -1 -1355 452 2 3.4231126247334248e-01 2.3242726330565116e+01 1.3762550164577764e+01 2.6881000678053365e+01 0 0 -1 -1354 452 1 -7.4744912752367210e-01 2.2612918195537944e+01 1.4476063968319004e+01 2.6985247795495919e+01 0 0 -1 -1201 401 1 -7.3438678231092258e-01 2.0526505684678551e+01 9.7863294327368511e+00 2.6871752271518481e+01 0 1 -1 -1833 611 2 3.5221933723432480e-01 1.9520488894503714e+01 1.4695159899882913e+01 2.8146904442089273e+01 0 0 0 -1832 611 2 3.5840937381944460e-01 2.0727904841758630e+01 1.4146571997584156e+01 2.7369774764842777e+01 0 0 0 -2556 852 2 3.7015980766861267e-01 2.0683038594399971e+01 1.1134619056060622e+01 2.5773062888891904e+01 0 0 0 -2718 906 2 3.7227306718111819e-01 2.4028020235307523e+01 1.2991715491341429e+01 2.4525292676997790e+01 0 1 0 -1937 646 2 3.9163086699743588e-01 1.9867652757001487e+01 1.1566317364903790e+01 2.3543602668840418e+01 0 0 0 -2206 736 1 -7.4319344325428016e-01 2.1930675435890773e+01 7.3225352759222107e+00 2.6024055205952003e+01 0 0 0 -2743 915 1 -7.1454330024061097e-01 2.3732929529155555e+01 1.0421216441480366e+01 2.8057495220151395e+01 0 0 0 -2744 915 2 3.5522423066547987e-01 2.3002132804534881e+01 1.0738322689970936e+01 2.8655016353926133e+01 0 0 0 -2032 678 1 -7.1670809265970581e-01 2.1126484323243023e+01 1.1618053907314316e+01 2.9094188912910383e+01 0 0 0 -2033 678 2 3.7232309926473756e-01 2.0649257627967469e+01 1.2323094889572433e+01 2.8618072444528572e+01 0 0 0 -2034 678 2 3.6058725589811036e-01 2.0936902186625044e+01 1.0893590056556416e+01 2.8474466449709357e+01 0 0 0 -370 124 1 -7.7486139711504487e-01 2.0772648527146977e+01 7.5909672370584884e+00 3.0118583147604571e+01 0 0 -1 -1324 442 1 -7.4575661471423416e-01 2.3502376638532120e+01 7.5262522508895060e+00 2.9415435351328117e+01 0 0 -1 -1325 442 2 3.5496586285518006e-01 2.3679337842730096e+01 8.2512296835829471e+00 2.8748497387054208e+01 0 0 -1 -668 223 2 3.9019269915085431e-01 3.0178195645804333e+01 4.8795282230790766e+00 1.5729127343218364e+01 0 0 0 -1356 452 2 3.4291885561066721e-01 2.2454776700784222e+01 1.4767791491579834e+01 2.6043658073713843e+01 0 0 -1 -1518 506 2 3.7297762471075507e-01 1.1827838269216288e+01 3.9958652087929397e-01 1.8592675856644892e+01 0 0 0 -805 269 1 -7.0222538880556751e-01 1.0121294060846285e+01 1.5336738420335568e+01 2.6735778368045619e+01 0 0 -1 -2054 685 2 3.7990930902103182e-01 2.5187909137143663e+01 7.7732309370045662e+00 2.3255653954477527e+01 0 0 0 -2397 799 2 3.6284896121242138e-01 2.9287473241487039e+01 1.2656625252638880e+01 2.6335525234599711e+01 -1 0 0 -2383 795 1 -7.7168804571121441e-01 2.9782473536317386e+01 9.1866963866927751e+00 2.3601641485033145e+01 -1 1 0 -2214 738 2 3.8436421972059215e-01 2.7476598450427190e+01 1.4493391223539671e+01 2.9896758921674625e+01 0 -1 0 -439 147 1 -7.3582490133829759e-01 2.7786009948387601e+01 1.1274913579352024e+01 2.6687825761059038e+01 0 0 -1 -2343 781 2 3.4907141645629958e-01 1.0064014998135919e-01 7.7754273915464154e+00 2.4326714624655818e+01 0 1 0 -440 147 2 3.7856671999853420e-01 2.7496780585523805e+01 1.0388428574885440e+01 2.7144276799038430e+01 0 0 -1 -211 71 1 -6.9206319141369588e-01 9.8551753558672086e+00 2.2881315888689069e+00 3.0620859466811371e+01 0 0 -1 -2745 915 2 3.7111900686371230e-01 2.4140008737882518e+01 1.1195112566037064e+01 2.7685767597761451e+01 0 0 0 -1517 506 2 3.5027749431956678e-01 1.2241154057467007e+01 5.4251939566346601e-02 1.7194415153076616e+01 0 0 0 -2266 756 1 -7.4837978412387107e-01 2.5666959854110619e+01 1.2764591897885040e+01 2.7289567559533129e+01 -1 0 0 -1231 411 1 -7.3512264787799930e-01 2.9224034939070627e+01 1.0032025404300111e+01 2.9819780031551147e+01 0 0 -1 -2364 788 2 3.7600045855482433e-01 3.8210510880160570e-01 1.4090075630453816e+01 2.5655632621486543e+01 0 0 0 -17 6 2 3.8404127316507997e-01 2.7814631527943114e+01 9.6136735024217916e+00 2.8908411182917405e+01 -1 0 -1 -441 147 2 3.6714781700274551e-01 2.7577606415934124e+01 1.1202264812631968e+01 2.5761554179009281e+01 0 0 -1 -1022 341 2 3.8051071504683176e-01 1.6979920708603281e+01 5.1095945580787729e+00 3.0567559173830919e+01 0 1 -1 -2899 967 1 -6.9839264007380397e-01 2.7047479511696213e+01 9.2972429530987988e+00 2.8330056852929889e+01 0 1 0 -1859 620 2 3.7662362325805243e-01 1.9790140790461642e+01 2.1025761371817378e-01 3.0018716010965100e+01 0 0 0 -2262 754 2 4.0773363764782983e-01 2.6457864585390475e+01 1.2222576178807852e+01 2.7284847068774752e+01 -1 0 0 -2395 799 1 -7.3262416296173027e-01 3.0281010264566000e+01 1.2678454819065420e+01 2.6308455438532384e+01 -1 0 0 -186 62 2 3.7105946236647086e-01 8.2641482539367761e-01 1.3813689264504916e+01 1.5989204090997502e+01 0 0 0 -2472 824 2 3.4740305439733304e-01 5.4596877340897256e+00 2.8511874469288285e+00 2.9914633676876164e+01 0 1 0 -801 267 2 3.9356148663602925e-01 2.4096965187295133e+01 4.3747877468416174e-01 2.4191366888096685e+01 -1 1 -1 -1406 469 2 3.5889338972649137e-01 2.5705908434356864e+01 1.1899739971576274e+01 1.5967572235992353e+01 0 1 0 -2776 926 1 -7.7032252786047339e-01 1.8546809640933855e+01 1.4709725997251729e+01 3.0780839661899606e+01 0 0 0 -984 328 2 3.7589816383438779e-01 1.5843834465814167e+01 2.1083921347527315e+00 3.0737484844494858e+01 0 1 -1 -549 183 2 3.8617949742343616e-01 2.6246523659256205e+01 1.5286360803191695e+01 2.0816859470888282e+01 0 0 0 -1409 470 2 3.5954437351334118e-01 2.6316954826345647e+01 8.3596162239170158e-01 1.6164716406264585e+01 0 1 0 -407 136 2 3.5737383026556502e-01 2.2283251894607368e+01 1.8988241314283669e-01 3.1037036210495021e+01 0 0 -1 -1436 479 2 3.8124932259699423e-01 3.0459601482399361e+01 8.1629619523180050e+00 1.5701157569868110e+01 0 0 0 -2315 772 2 3.7657760419023989e-01 1.0110963694832099e+01 5.5087374717922248e+00 1.5986441777362851e+01 0 1 0 -272 91 2 3.5697070015610638e-01 1.8870024361143980e+01 1.0270113656671143e+01 3.0934021587873112e+01 0 0 -1 -998 333 2 3.4041375882109109e-01 2.2529203339448873e+01 1.5424313822779025e+01 3.0948004844537024e+01 0 0 -1 -641 214 2 3.5967083873655054e-01 2.3950018178880701e+01 6.0083897031014279e+00 1.5646673375867737e+01 0 0 0 -2213 738 2 3.9905979850899792e-01 2.6919442322391607e+01 1.5391041971116845e+01 3.0992982197532420e+01 0 -1 0 -1307 436 2 3.4503419400871360e-01 2.8850456277268556e+01 1.2832572500657587e+01 3.1036208171232158e+01 0 1 -1 -1377 459 2 3.6145268451783769e-01 4.9813657775303808e+00 2.2320550475034722e+01 2.7099934555927128e+00 1 0 0 -853 285 1 -7.3520649994988041e-01 4.9170073315906828e+00 2.3257867726170538e+01 2.7834196547407686e+00 0 0 0 -855 285 2 3.3751920999950380e-01 4.0376106836924377e+00 2.3508728971170537e+01 2.3618171480494294e+00 0 0 0 -674 225 2 3.5579603600565934e-01 1.2556860214013086e+00 2.0526106150741324e+01 5.9429658258120099e+00 1 -1 0 -776 259 2 3.3687009472154289e-01 1.4706783248068886e+00 2.0558905786742393e+01 2.3812653251518192e+00 0 0 0 -673 225 1 -7.2362900272915021e-01 3.4837511994522152e-01 2.0906272801285638e+01 5.7322170314623753e+00 1 -1 0 -1372 458 1 -7.2271758732812852e-01 1.7912847373590091e+00 2.0853123244453275e+01 3.3024899636151592e+00 1 0 0 -1981 661 1 -6.9609525303561315e-01 4.6362217272477855e+00 2.1543939142993690e+01 5.9298228434220279e+00 1 -1 1 -1982 661 2 3.5423417005857399e-01 4.8233248494559646e+00 2.2400901876437732e+01 6.2940656316416410e+00 1 -1 1 -1983 661 2 3.3994529251158107e-01 4.4298911910204977e+00 2.1016966423129574e+01 6.7424697863375327e+00 1 -1 1 -675 225 2 3.7874381902779058e-01 2.8292422259293143e-01 2.1436800623913488e+01 6.5272433762437796e+00 1 -1 0 -1374 458 2 3.8437132747653374e-01 1.0324336606725366e+00 2.0806516582044765e+01 3.8319049933011691e+00 1 0 0 -757 253 1 -7.3616671509959819e-01 4.6874750191101455e+00 2.0354715515942466e+01 3.3835616648380520e+00 0 0 0 -646 216 1 -7.4144123425876218e-01 8.7025453204935133e-01 1.7154901642415687e+01 1.9943764351177937e+00 1 0 0 -159 53 2 3.8649674830675296e-01 4.9248439939546982e+00 1.8725331864425588e+01 2.6950179545756363e+00 0 0 0 -1829 610 2 3.5994180931204850e-01 6.9432792887059236e-01 1.8884142152934398e+01 1.1079080774231416e+00 0 0 1 -1638 546 2 3.8062230348106058e-01 4.9961027121403463e+00 2.0694425157453175e+01 4.2690737239142189e+00 0 0 1 -758 253 2 3.8396828309964637e-01 3.7331105958266262e+00 2.0398687796017889e+01 3.5267657453713932e+00 0 0 0 -2323 775 1 -7.6274852305224550e-01 2.3498026326552583e+00 2.3267361163564136e+01 1.5376879143867994e+00 0 0 1 -2325 775 2 3.4752431823370106e-01 2.3577192366623696e+00 2.2408261338078788e+01 1.8810826769061988e+00 0 0 1 -1828 610 1 -7.4848034676727737e-01 7.2509186761944100e-01 1.9820720269909170e+01 6.9635609507510898e-01 0 0 1 -647 216 2 3.7567515438289367e-01 7.7217212041441396e-01 1.6855307225520843e+01 1.0277670687743758e+00 1 0 0 -1063 355 1 -7.4972997294180699e-01 2.6155541595857885e+00 1.9652834438342506e+01 7.2351141013598470e+00 0 0 0 -648 216 2 3.9287251098806886e-01 1.5004423598965582e+00 1.6524111876337756e+01 2.4057361341437544e+00 1 0 0 -284 95 2 3.5571294393081432e-01 6.4723685388158412e+00 2.4046843767698931e+01 7.2967991662829155e+00 0 0 0 -1469 490 2 3.9157260047427511e-01 1.8261870932432822e+00 1.8105497356444744e+01 6.9670943039550810e+00 1 0 0 -1161 387 2 3.7109842714260582e-01 3.0372744217846197e+01 1.7310936015586805e+01 2.9052826757659362e+00 0 0 0 -61 21 1 -7.1915143019389238e-01 1.3363841992223695e+00 1.7256173542343735e+01 6.9219532237645982e+00 0 0 0 -629 210 2 3.6430377284430215e-01 2.7666966959922707e+01 1.6191976253238945e+01 1.1247802121718347e+01 0 0 0 -769 257 1 -7.2123717759963757e-01 3.0109812974123065e+00 1.5711230291228754e+01 2.9040336704797705e+00 0 0 0 -63 21 2 3.7142418395045473e-01 4.4983797778331253e-01 1.7472544962885404e+01 6.6776918650778168e+00 0 0 0 -1050 350 2 3.6714562210961105e-01 7.1388233943708697e+00 1.6112352566344853e+01 4.2313041986695437e+00 0 0 0 -771 257 2 3.7258146496478006e-01 3.7316712625305466e+00 1.6361190068378601e+01 3.0630773900297892e+00 0 0 0 -1563 521 2 4.1764023920004645e-01 5.6080931932543310e+00 1.7679970861929892e+01 9.2803632980923589e-01 0 0 1 -1376 459 2 3.6977779659685683e-01 5.7197066795083931e+00 2.3780967597645137e+01 1.2296966461755161e+00 1 0 0 -756 252 2 3.8410200377464593e-01 4.4558187871718351e+00 3.0902352253980968e+01 7.8893910456925500e+00 0 0 0 -1966 656 1 -7.0598282933888645e-01 5.3096400138651019e+00 1.6830081332719470e+01 7.3101300579635629e+00 0 0 1 -157 53 1 -7.1852766204986152e-01 4.9965924192637718e+00 1.7733210415195334e+01 2.5305017691771026e+00 0 0 0 -968 323 2 3.6864860655895504e-01 7.2260313769063620e+00 1.7160115849981331e+01 7.8612679593019088e+00 0 0 0 -978 326 2 3.4986502112660256e-01 7.9275384818267343e+00 1.7719364540471958e+01 4.9012074046812275e+00 0 0 0 -1395 465 2 3.8751010940669467e-01 8.2803290542441648e+00 2.2765814222040678e+01 6.8693729585362027e+00 1 1 0 -1393 465 1 -7.1667431449545782e-01 8.8268657696462469e+00 2.1900326918391897e+01 7.0214400681588991e+00 1 1 0 -710 237 2 3.8204186445849492e-01 1.0699059845911856e+01 1.7320806794375553e+01 1.1490876880746872e+00 1 0 0 -709 237 1 -7.5321336572864950e-01 1.0444807988191570e+01 1.7684165446842222e+01 1.9980504265104064e+00 1 0 0 -711 237 2 3.9573447825273195e-01 9.7634280482867908e+00 1.7198902060796360e+01 2.4525433116984074e+00 1 0 0 -914 305 2 3.6570555465416504e-01 9.4192667289396574e+00 2.1390780987711626e+01 4.3185523755436481e+00 0 0 0 -913 305 1 -7.1670755031685385e-01 8.7160834201292410e+00 2.0870860704238282e+01 3.9473108248769453e+00 0 0 0 -915 305 2 3.3325441535579370e-01 8.4587211579727430e+00 2.1483250627735611e+01 3.2518553923524829e+00 0 0 0 -1633 545 1 -7.2967170646070356e-01 8.0249309258073449e+00 1.7710066368264414e+01 8.0415827931283541e+00 0 0 1 -1634 545 2 3.6922227284171938e-01 8.3880104158869067e+00 1.7952667106814701e+01 7.2003370000277949e+00 0 0 1 -158 53 2 3.6212477811519911e-01 5.5624038279547827e+00 1.7342266159888847e+01 3.3244638776128386e+00 0 0 0 -255 85 2 3.9945035103287385e-01 8.3726833799828295e+00 1.9159780066566611e+01 4.6380088784972724e+00 0 0 0 -253 85 1 -7.3064485694220160e-01 8.4636628127450440e+00 1.8432518368979274e+01 5.2534317602531377e+00 0 0 0 -300 100 2 3.9278983387251859e-01 1.2211583075443677e+01 1.8308153178609142e+01 2.8481793951727798e+00 0 -1 0 -299 100 2 3.7112922158200323e-01 1.2390232669788634e+01 1.9683585280398020e+01 3.4887153261137840e+00 0 -1 0 -466 156 1 -7.1422478660756383e-01 1.1616077541404199e+01 2.1282199185173962e+01 4.4329056239141291e+00 0 0 0 -298 100 1 -7.2626548321767859e-01 1.2832446032106636e+01 1.9025129120453343e+01 2.9586214158007391e+00 0 -1 0 -467 156 2 3.6203011900252402e-01 1.1865914035605504e+01 2.0712154076544468e+01 5.1898747520501836e+00 0 0 0 -376 126 1 -7.1708573736543113e-01 8.6796789707301993e+00 2.3041581569487683e+01 1.5959958738004092e+00 0 -1 0 -468 156 2 3.7447843004189912e-01 1.1441213216390041e+01 2.2134915574767909e+01 4.7981128824413162e+00 0 0 0 -825 275 2 3.4630967272985691e-01 2.1197232843194344e-01 2.8713454432196624e+01 1.5483466792302057e+01 0 0 0 -377 126 2 3.7212022234201986e-01 9.0373040176840576e+00 2.3708963367673398e+01 2.2690007717434857e+00 0 -1 0 -1000 334 1 -7.3075902181300656e-01 8.8241006118171370e+00 1.5980038269830017e+01 3.5121983696177663e+00 0 0 0 -232 78 1 -7.1935170015693795e-01 1.1367553560120852e+01 1.7516519173910190e+01 5.6761280474775750e+00 0 0 0 -233 78 2 3.4226764711242119e-01 1.1898861494789887e+01 1.8274103967755945e+01 5.8575518320184585e+00 0 0 0 -1827 609 2 3.6739977489158565e-01 9.2695819534435913e+00 1.8947109939364175e+01 1.2313570492272501e+00 0 0 1 -378 126 2 3.5953680091615808e-01 7.7504438216404017e+00 2.3309109273166122e+01 1.4701159156616048e+00 0 -1 0 -2156 719 2 3.5288614482338343e-01 1.4195606824246877e+01 1.5748332130239204e+01 1.9522680503923120e+00 0 0 1 -2155 719 1 -7.2784982031232393e-01 1.3309945026149416e+01 1.5663186859160566e+01 2.2458465690781058e+00 0 0 1 -1070 357 2 4.0242104758192254e-01 1.0006055434826775e+01 2.2517434463010623e+01 3.1681549946571791e-01 0 0 0 -326 109 2 3.5832493697816448e-01 1.1127549304803788e+01 1.6543194716164390e+01 7.6372198514959058e+00 0 0 0 -1375 459 1 -7.4927306637055235e-01 6.3028905287973434e+00 2.3818550343574532e+01 4.8334017342298796e-01 1 0 0 -234 78 2 3.7825226719218280e-01 1.0479958888869660e+01 1.7831446085302030e+01 5.5878089957823871e+00 0 0 0 -2036 679 2 3.5369298257878984e-01 1.8681615045565923e+01 2.5975415925228504e+01 1.4251153185668935e+01 0 0 1 -1018 340 1 -7.2439776916941612e-01 1.5892501420849426e+01 1.7492846658111773e+01 1.7508411496471137e+00 0 1 0 -1001 334 2 3.3909750762120677e-01 8.5641147014040602e+00 1.5626323085028652e+01 2.5934128640939740e+00 0 0 0 -1734 578 2 3.9457443469475756e-01 7.5708272703449246e+00 1.6166234064061459e+01 2.1036261985416574e-01 0 0 1 -2654 885 2 4.0551930439273709e-01 2.1430068337843018e+01 1.5666862495041043e+01 9.1464694810108362e+00 0 0 1 -2108 703 2 3.9155488189778465e-01 1.2193729622687782e+01 2.1354313648387450e+01 1.3470153925190623e-01 0 0 1 -264 88 2 3.6564111674887212e-01 1.7673966571112715e+01 1.7627586751788339e+01 2.2440087393477479e+00 0 0 0 -2602 868 1 -6.8614742265344086e-01 1.4432720337189108e+01 1.7444494884489686e+01 7.1784998360576218e+00 0 0 1 -2603 868 2 3.5698512136306798e-01 1.4709102782461828e+01 1.7568248262367678e+01 6.2459637273994781e+00 0 0 1 -1779 593 2 3.3985153746115848e-01 1.5687134238333501e+01 1.9215619068629838e+01 4.7656307265499152e+00 0 0 1 -1777 593 1 -7.4066667392284058e-01 1.5378966614260536e+01 1.8295687903210123e+01 4.5755077699244522e+00 0 0 1 -1778 593 2 3.4014268234240580e-01 1.4675150959373795e+01 1.8459946822448480e+01 3.9176536532953761e+00 0 0 1 -287 96 2 3.5039465808115899e-01 1.8113691747200303e+01 2.0060417150142214e+01 4.0336772632706479e+00 0 0 0 -2699 900 2 3.5658869902554957e-01 1.7045221706542904e+01 2.1243239634684162e+01 5.6504909865542352e+00 0 0 1 -263 88 2 3.6438294586849768e-01 1.8758382578204067e+01 1.6931341260971163e+01 3.1798251567598235e+00 0 0 0 -286 96 1 -7.6165748766751817e-01 1.7222009916791567e+01 2.0396474110331589e+01 4.0313883751197555e+00 0 0 0 -262 88 1 -7.2823142892947978e-01 1.8663339692989990e+01 1.7318436972944184e+01 2.2481973037115304e+00 0 0 0 -472 158 1 -7.2246774265653502e-01 1.4859840152567269e+01 2.1703317100897223e+01 2.2646897112240119e+00 0 -1 0 -288 96 2 3.6969993895661685e-01 1.7096807551701581e+01 2.0612969563678334e+01 3.1348586740129982e+00 0 0 0 -473 158 2 3.5534630248855253e-01 1.4119522026342489e+01 2.1624548652242922e+01 1.5907673026202556e+00 0 -1 0 -1054 352 1 -7.1438246754363388e-01 1.8000415380923481e+01 1.6590534036017306e+01 4.7929580919444321e+00 0 0 0 -1047 349 2 3.6859773747118585e-01 1.9450792925014401e+01 1.8689814418698880e+01 2.9105364289327329e+00 0 0 0 -1056 352 2 3.7972920279152972e-01 1.8068273313537087e+01 1.6118909737492015e+01 5.6538388426608721e+00 0 0 0 -1055 352 2 3.5434411621069151e-01 1.7149159665531318e+01 1.7071601037677752e+01 4.8690919800673997e+00 0 0 0 -1045 349 1 -7.0293424130799842e-01 2.0021137538127160e+01 1.9417567576000515e+01 3.2798849706518540e+00 0 0 0 -2107 703 1 -7.6803008473882806e-01 1.2894033700069791e+01 2.0780694317680165e+01 4.4461162369517926e-01 0 0 1 -2109 703 2 3.6841735157903299e-01 1.2660882750074881e+01 2.0419982003297214e+01 1.2868677436593952e+00 0 0 1 -2008 670 1 -7.1318891054517020e-01 1.9292810974277945e+01 1.9680409529617517e+01 7.3021180621858344e+00 0 0 1 -2010 670 2 3.5334322178545902e-01 1.9187070899602020e+01 2.0589178624453609e+01 7.4972637017281363e+00 0 0 1 -2009 670 2 3.5536776640230716e-01 1.9823854152400973e+01 1.9739432156923204e+01 6.5219768413870769e+00 0 0 1 -1020 340 2 3.3127327304395382e-01 1.5574217964576853e+01 1.8026514498970883e+01 2.5181160795807540e+00 0 1 0 -316 106 1 -7.4815326075891353e-01 1.9875574708927214e+01 2.2652294952884365e+01 6.9949471767612046e+00 0 -1 0 -2762 921 2 3.6473029481672714e-01 1.8011403601994317e+01 2.2227818382757981e+01 6.4517076410616871e+00 0 0 1 -2761 921 1 -7.2161175182531923e-01 1.7108541332627954e+01 2.1814193989420232e+01 6.4863221826620752e+00 0 0 1 -2604 868 2 3.6235838320129088e-01 1.5199163409273311e+01 1.7793512563824805e+01 7.6803759701187477e+00 0 0 1 -1173 391 2 3.8368206485428941e-01 1.2943958626291606e+01 1.6369286720717454e+01 5.0782558942964409e+00 0 0 0 -1082 361 2 3.5725621479485065e-01 9.7386332081614473e+00 2.5847739683697721e+01 3.0199412287553579e-01 0 0 0 -2426 809 2 3.9014084542948613e-01 2.5495827285938022e+00 1.9879954791275928e+01 9.1683484210780722e-02 0 0 1 -415 139 1 -7.4273174337580183e-01 1.7984642542152642e+01 1.5662715761200037e+01 7.4796355027689359e+00 0 0 0 -817 273 1 -7.1145364412181644e-01 4.2354448228157642e+00 3.0848445715791712e+01 3.3839673941147135e+00 0 0 0 -2916 972 2 3.6399216254522349e-01 2.8527549939068741e+01 2.2982156707672967e+01 1.5125922027046085e+01 0 0 0 -474 158 2 3.5946108003884264e-01 1.5585386092548063e+01 2.1297359866573657e+01 1.7853527206108262e+00 0 -1 0 -1442 481 2 3.6679915682077535e-01 2.7221890162594967e+01 3.0853919684972876e+01 6.1243939656359307e+00 0 -1 0 -1254 418 2 3.7116456490628669e-01 1.9903998895337349e+01 1.6863986572931733e+01 6.9883015347164001e-01 0 0 0 -2698 900 1 -7.7545314652810560e-01 2.0751473797956866e+01 1.6577546390906658e+01 3.8264404035562399e-01 0 0 1 -1046 349 2 3.3090073244898099e-01 2.0682372662886369e+01 1.8912763850781221e+01 3.8454542391287196e+00 0 0 0 -1264 422 1 -7.2501064617946076e-01 2.1225916960923009e+01 1.7535298367536335e+01 5.5677304474970235e+00 0 0 0 -1265 422 2 3.8861293293972260e-01 2.1581212645253736e+01 1.7378937365868804e+01 4.7279840652965044e+00 0 0 0 -1337 446 2 3.9398402977175517e-01 2.1618854942506662e+01 1.6992289865591182e+01 1.9134674148175284e+00 0 0 0 -1336 446 1 -7.4809738809572190e-01 2.2030322781316251e+01 1.7124505222988510e+01 2.7901659756519441e+00 0 0 0 -1338 446 2 3.5523440927157107e-01 2.2918824229141876e+01 1.6810185363119171e+01 2.8803359625463010e+00 0 0 0 -2973 991 2 3.5662738462216725e-01 1.9750967425155022e+01 2.2071027511600928e+01 1.3468505637329373e+00 0 0 1 -1181 394 2 3.8669363153730546e-01 2.0497904262864228e+01 2.0855345671695488e+01 2.0295683681128875e+00 0 0 0 -1444 482 1 -6.7983985437307159e-01 2.0660403082660956e+01 2.1694479298420354e+01 1.4981017531780987e+00 0 0 0 -1266 422 2 3.3490672568000618e-01 2.1205180224436369e+01 1.8487007364140478e+01 5.7101158472741185e+00 0 0 0 -1152 384 2 3.3518450908748509e-01 2.4607771167812295e+01 1.9098215836157074e+01 4.1644282019576258e+00 0 0 0 -2792 931 2 3.5645632223712637e-01 2.3811596018003996e+01 2.1772904285268641e+01 3.5193565043609900e+00 0 0 1 -1150 384 1 -7.3448599933983960e-01 2.4174942243319673e+01 1.8472201560677753e+01 4.8064359269327177e+00 0 0 0 -1151 384 2 3.6173027062307733e-01 2.4631029813175591e+01 1.8777135583269391e+01 5.6171733288673451e+00 0 0 0 -2239 747 1 -7.2632553814212819e-01 2.3535212426259740e+01 1.9391810674588768e+01 5.6148807017238223e-01 0 0 1 -2815 939 1 -7.5921315886160734e-01 1.7322369678780067e+01 2.1176214739859290e+01 9.9251420043365424e-01 0 0 1 -2793 931 2 3.6814816264716388e-01 2.2827068686348145e+01 2.2270420408963805e+01 4.6038852890958992e+00 0 0 1 -2791 931 1 -7.3411323787394145e-01 2.3661302057971419e+01 2.1797114259170954e+01 4.4620874578380727e+00 0 0 1 -2958 986 2 3.9869887384734931e-01 2.2037354955409469e+01 2.3029625186168452e+01 1.6343787412115072e+00 0 0 1 -1776 592 2 3.6598667331034290e-01 2.3796208094450865e+01 1.6731675507024480e+01 5.7878693083929980e+00 0 0 1 -1329 443 2 3.3682459528125397e-01 2.5163739092720778e+01 2.0039229827629349e+01 1.9971688019433658e+00 0 0 0 -2643 881 2 3.7039716155372293e-01 2.4005426832710164e+01 1.6883467101414865e+01 7.2585554753636066e+00 0 0 0 -2641 881 1 -6.9686577930997284e-01 2.3682191509139411e+01 1.6204045066788964e+01 6.5846470466215825e+00 0 0 0 -396 132 2 4.1276130184906729e-01 2.0710935025950135e+01 1.6315062407657329e+01 6.8768805697910933e+00 0 -1 0 -394 132 1 -7.4723122441974044e-01 2.0553974271751926e+01 1.5531023924465099e+01 7.4352891013540221e+00 0 -1 0 -1549 517 1 -7.4392899159898218e-01 2.1672389607847645e+01 2.0809118504881202e+01 6.3541899075774024e+00 -1 0 0 -1550 517 2 3.5945013029116596e-01 2.2542571367412574e+01 2.1013787675957762e+01 5.9220420381194936e+00 -1 0 0 -1551 517 2 4.1060863188637420e-01 2.1330489734613465e+01 2.1626659968350339e+01 6.6775362251154462e+00 -1 0 0 -187 63 1 -7.7813433155291212e-01 3.0629567383459374e+01 2.2349531182527997e+01 1.3106795010648782e+00 -1 0 1 -2956 986 1 -7.1975927288017838e-01 2.2969793790523482e+01 2.3274776937938221e+01 1.7329227562475202e+00 0 0 1 -2816 939 2 3.4857152547439851e-01 1.7938857836385989e+01 2.1887289565757339e+01 7.8913321311638884e-01 0 0 1 -1826 609 2 3.5131187006748366e-01 8.4871140865779715e+00 1.9845720950741924e+01 2.0876645559329297e+00 0 0 1 -1099 367 1 -6.9245925144271170e-01 9.3002347019241700e+00 2.9470099295486769e+01 9.4771488928205834e+00 0 0 0 -1968 656 2 3.5002912170804579e-01 5.4424501973759787e+00 1.6419735534746611e+01 6.4468743340494390e+00 0 0 1 -1101 367 2 3.8034542462663312e-01 8.6966209881750913e+00 2.8780268425854455e+01 9.8509552114970287e+00 0 0 0 -796 266 1 -7.6356758328059560e-01 3.0215616057761050e+01 1.8391562042156171e+01 5.5932390542907511e+00 -1 0 0 -785 262 2 3.7719159679540409e-01 3.0050279273838523e+01 1.7871046061179989e+01 4.7605021226753914e+00 -1 0 0 -798 266 2 3.8060827618580106e-01 3.0576128526967441e+01 1.9235076886677490e+01 5.3247599533504140e+00 -1 0 0 -1585 529 1 -7.5609350866441949e-01 2.5145848426927081e+01 1.6619583364866354e+01 3.2512741471091666e+00 -1 0 1 -1335 445 2 3.6406464562030649e-01 2.6924950711764712e+01 2.2237393389778372e+01 1.0603876694350756e-01 0 0 0 -1348 450 1 -7.0635988222156298e-01 2.5159386132018302e+01 2.0392735171655779e+01 6.6450934451745853e+00 0 0 0 -444 148 2 3.3828325895694944e-01 2.7152581004088272e+01 1.8070604250208053e+01 6.1986010373904472e+00 0 0 0 -1587 529 2 3.8717230332882896e-01 2.4667244445900156e+01 1.7358649022974628e+01 3.5902595082440349e+00 -1 0 1 -1958 653 2 3.4750670392093480e-01 2.5975965102195794e+01 2.1277684110578061e+01 2.4206277869909694e+00 0 0 1 -873 291 2 3.1868802911634969e-01 2.8633462779342647e+01 2.0517570475789476e+01 3.3335919208908167e+00 -1 0 0 -1159 387 1 -7.7572408792043468e-01 2.9455854341629912e+01 1.7414096877590630e+01 3.2748314182030911e+00 0 0 0 -1957 653 1 -7.4849215787623302e-01 2.5755082132922745e+01 2.0397617040553790e+01 2.6539947284113619e+00 0 0 1 -871 291 1 -7.2491846090039058e-01 2.9303288630042982e+01 2.0273558593566285e+01 2.6924407197774194e+00 -1 0 0 -872 291 2 3.5136777056847912e-01 2.8909917813692108e+01 2.0494952099178477e+01 1.8973854517534583e+00 -1 0 0 -725 242 2 3.3914469235875599e-01 2.9159598682642795e+01 1.8214232649007428e+01 2.8065079374735773e+00 0 0 0 -2574 858 2 3.4201563348160202e-01 1.4032700329541004e+01 2.8549289790869707e+01 2.1474732824375395e-01 0 0 1 -2647 883 1 -7.2024053252758780e-01 2.8538682072227818e+01 2.1743916327673524e+01 5.8701307170169423e+00 0 0 0 -2649 883 2 3.4358497053525161e-01 2.8045385974852564e+01 2.0981637591051292e+01 5.4298704226482748e+00 0 0 0 -665 222 2 3.5305853508755336e-01 2.6979306174346227e+01 1.9352140153524548e+01 3.9292242612989323e+00 0 -1 0 -664 222 1 -7.8841843197891370e-01 2.7339837485437041e+01 1.9393692225357313e+01 4.8217610350826288e+00 0 -1 0 -666 222 2 3.1811072911639759e-01 2.8041975216625044e+01 1.8715353160840547e+01 4.7705137308304275e+00 0 -1 0 -2648 883 2 3.6605147746802935e-01 2.9020127084912680e+01 2.1270468194655194e+01 6.5272024221862948e+00 0 0 0 -2237 746 2 3.7220065703801902e-01 2.7812236339658551e+01 2.3147771180011524e+01 2.5697292726629897e+00 0 0 1 -443 148 2 3.4321107080293883e-01 2.7504681470452226e+01 1.6587348560493052e+01 6.4303691298121546e+00 0 0 0 -2236 746 1 -7.4880377933505970e-01 2.7061391083183960e+01 2.2953538180791025e+01 1.9584560473446697e+00 0 0 1 -2238 746 2 3.7461551146678662e-01 2.6276593836533486e+01 2.3473135113858529e+01 2.2487234772842988e+00 0 0 1 -804 268 2 3.3695247389241156e-01 2.9142729113998104e+01 1.8888349146889784e+01 7.4401440261450098e+00 -1 0 0 -1350 450 2 3.2500553590188297e-01 2.6005415593871284e+01 2.0251910327118924e+01 6.1428755909562414e+00 0 0 0 -763 255 1 -7.2747918331602002e-01 2.7642890874322660e+01 1.6132854156133028e+01 1.5556380831984231e+00 -1 0 0 -446 149 2 3.5165162287066154e-01 2.4438707841526330e+01 2.4093521045468258e+01 3.2996980383076164e+00 0 0 0 -2972 991 2 3.5247552467731330e-01 2.8352596590607352e+01 1.7838706440295422e+01 6.0488676938640140e-01 0 0 1 -442 148 1 -7.5114971124189256e-01 2.6778107822442283e+01 1.7219671343742117e+01 6.4628477112242662e+00 0 0 0 -1349 450 2 3.6114445952234586e-01 2.4698492598411597e+01 2.0984318466605792e+01 6.0422378284532252e+00 0 0 0 -765 255 2 3.6208454850760396e-01 2.8398811893585471e+01 1.6402717004884696e+01 2.1133989973714336e+00 -1 0 0 -2971 991 1 -7.3196870955371129e-01 2.8231612660602035e+01 1.8735577785299540e+01 1.9526986467594393e-01 0 0 1 -1421 474 2 3.9576670460776053e-01 2.9843760768094970e+01 2.2642998135001282e+01 2.7809764274651592e+00 0 0 0 -2813 938 2 3.9045064072069613e-01 1.6818862999193140e+01 3.0636748373919648e+01 7.4078079950149327e+00 0 0 1 -2756 919 2 3.8522715794908158e-01 2.6726131045149369e+01 1.7606633943005193e+01 8.0233800141051237e+00 0 0 1 -2493 831 2 3.9213588031692331e-01 1.0169793168637511e+01 2.9342042721051328e+01 9.8527422093009402e+00 0 0 0 -879 293 2 3.2785034107277450e-01 2.3348181239792245e+00 2.3904096531269140e+01 2.3367199282102691e+00 0 0 0 -2840 947 2 3.4798658194914389e-01 4.9818343995013414e+00 2.3980847604744433e+01 8.8539376179718499e+00 1 0 0 -2839 947 1 -7.2406655632900985e-01 4.7987895158893972e+00 2.4245798731400420e+01 7.9210270429145648e+00 1 0 0 -2270 757 2 3.5180632221951880e-01 1.2487564152629931e+01 1.6776588591782190e+01 1.4364622660177345e+01 0 0 0 -588 196 2 3.6382858618720820e-01 1.2481492240218066e-01 2.5567804657932296e+01 5.8748362921325308e+00 1 -1 0 -586 196 1 -6.8760572962081024e-01 4.6575643504128111e-01 2.4676195316062618e+01 5.7331297077847241e+00 1 -1 0 -587 196 2 3.2122886990444466e-01 3.0791763299208480e+01 2.4128552393353107e+01 5.3121763358150123e+00 0 -1 0 -2601 867 2 3.5315584237641190e-01 4.1827610340272390e+00 2.7260559638215234e+01 1.8526553638829770e+00 0 0 1 -692 231 2 3.7362055851118586e-01 4.4139458218055143e+00 2.5083851016904752e+01 8.1330493377444135e+00 1 -1 0 -1508 503 2 3.9599296208801193e-01 9.8041773896469875e-01 3.0734807974689989e+01 6.1378302216299980e+00 0 -1 0 -644 215 2 3.6427481137337370e-01 3.9749017453391904e+00 2.7561951457261120e+01 5.5955676542483062e+00 1 0 0 -643 215 1 -7.3790222776002778e-01 3.0097151535489699e+00 2.7451438691890679e+01 5.6724899440070162e+00 1 0 0 -645 215 2 3.6022422275627614e-01 2.7461488108542951e+00 2.7356497435064306e+01 6.6245942559451088e+00 1 0 0 -2790 930 2 3.6811668594800584e-01 1.6692992236350936e+00 2.4930875235632854e+01 4.5043410701156485e+00 1 0 1 -755 252 2 3.8339690242043317e-01 3.2639043585156537e+00 2.9996356350344904e+01 7.4858828427149966e+00 0 0 0 -754 252 1 -6.4682773214593459e-01 3.8305525219460512e+00 3.0293721502029669e+01 8.2417777190370050e+00 0 0 0 -2416 806 1 -7.5357092565344552e-01 2.5812219145837716e+00 3.0205564775295734e+01 5.8572418349209361e+00 0 0 1 -2417 806 2 3.8341513321457343e-01 2.7699560100156813e+00 2.9233052460452900e+01 5.7902141164142336e+00 0 0 1 -2418 806 2 3.4445164203891443e-01 2.8562295425717061e+00 3.0679757101358874e+01 5.0015581499621131e+00 0 0 1 -2788 930 1 -7.0321027099045230e-01 2.3442477061084475e+00 2.5317247752129028e+01 3.8363861884046484e+00 1 0 1 -2789 930 2 3.7914725817921408e-01 2.7763855350319124e+00 2.6075294597664179e+01 4.3788785634425063e+00 1 0 1 -680 227 2 4.0283841723983022e-01 5.8203615544809295e-01 2.6764007370292994e+01 7.8694081214223246e+00 1 -1 0 -1509 503 2 3.8770948720614790e-01 2.0034500066489502e-02 3.0034440585611247e+01 7.1254400770143738e+00 0 -1 0 -1507 503 1 -7.5437694527071142e-01 3.7022571074369785e-02 3.0666165280521902e+01 6.3857002569780912e+00 0 -1 0 -1653 551 2 3.5883296888623417e-01 2.8474263742866501e+00 2.9495322724824696e+01 2.4680526617736120e+00 0 -1 1 -16 6 1 -7.2949093288191802e-01 2.5958855517257855e+00 2.8592930499102319e+01 2.2199622917335491e+00 0 -1 0 -108 36 2 3.6168532880153298e-01 2.4820354224226322e+00 2.4655039907155640e+01 4.3932622392821898e-03 0 -1 0 -2596 866 1 -7.3884773905394074e-01 5.6845506450879366e+00 2.8179861155318306e+01 5.6133334243432298e+00 0 0 1 -2598 866 2 3.6510608759941843e-01 6.2632055888284510e+00 2.8826680396986436e+01 5.1770222846244129e+00 0 0 1 -2917 973 1 -7.3092209538063713e-01 2.9999889001514347e+01 2.6751046624975530e+01 7.1138141231407346e+00 0 0 1 -2619 873 2 3.4575735632172039e-01 2.3651954241411102e+00 2.8667144260223125e+01 1.2163286206696953e+00 0 0 1 -2599 867 1 -7.5488422254164322e-01 4.8841104236752351e+00 2.6925542396030586e+01 1.2838580867329015e+00 0 0 1 -2979 993 2 3.4397986483063014e-01 8.1965699631026423e-01 2.5376454781663146e+01 2.5295589716767419e+00 1 0 1 -2977 993 1 -7.4518508058038901e-01 3.1035985845318130e+01 2.5570830792796205e+01 2.0267725385352917e+00 0 0 1 -2240 747 2 3.5078401128980990e-01 2.4308205531827095e+01 1.8898609856773312e+01 1.4167813111160538e-01 0 0 1 -1537 513 1 -7.3777883422486357e-01 2.8183611068164300e+01 2.8021526755735568e+01 1.4909216079243803e+01 -1 -1 0 -1078 360 1 -7.1161377304581475e-01 1.0603164880436095e+01 3.0287962315273230e+01 1.2742050479495079e+01 0 0 0 -2381 794 2 3.5399757106050078e-01 6.1067728487761750e+00 2.4781064959124869e+01 3.6336376148565597e+00 0 0 1 -283 95 1 -7.5672796575542789e-01 7.3340276396581530e+00 2.4120587328236045e+01 6.7334638335770185e+00 0 0 0 -2382 794 2 3.4011467000542039e-01 5.6781126010134022e+00 2.6154821192660336e+01 3.3820129454259331e+00 0 0 1 -285 95 2 3.4574003908113682e-01 6.9889042977657487e+00 2.4462488098381062e+01 5.8661198873599929e+00 0 0 0 -2380 794 1 -7.0966788174009432e-01 6.1891249826381323e+00 2.5677801265080234e+01 4.0114929462837150e+00 0 0 1 -866 289 2 3.7974762058817363e-01 1.1437161451323156e+01 2.3935483643544291e+01 6.4844741141495179e+00 0 0 0 -865 289 1 -7.5045270964496991e-01 1.1684542206206830e+01 2.4034220174916079e+01 5.6087450809481565e+00 0 0 0 -713 238 2 3.8100618498572247e-01 2.2784688436261732e+01 2.8067384693091206e+01 1.5168157765466054e+01 0 -1 0 -2651 884 2 3.7134754646185764e-01 1.0564932711540903e+01 2.4417224439023801e+01 3.9821442280327397e+00 0 0 0 -2497 833 1 -7.8008249791842177e-01 1.0146781899866344e+01 2.4716450193775763e+01 3.1827349450385665e+00 0 0 0 -2499 833 2 3.9519385266339480e-01 9.8251259176630352e+00 2.5593636191229397e+01 3.3708764163336000e+00 0 0 0 -947 316 2 3.9253924940428797e-01 1.0263825030224725e+01 2.7852683659544994e+01 4.0455615741418205e+00 0 0 0 -948 316 2 3.9725362218035121e-01 9.1515364235489809e+00 2.8305362413977200e+01 3.1159321237190047e+00 0 0 0 -946 316 1 -7.0669887383965291e-01 9.6698379933881409e+00 2.7491147131501222e+01 3.3837868622275784e+00 0 0 0 -2415 805 2 3.9085663853667518e-01 7.8214692137169388e+00 3.0262367492327279e+01 3.6417069179902399e+00 0 0 1 -2413 805 1 -7.3042635851030735e-01 7.8611977585993138e+00 2.9503130536524999e+01 3.0631082528549514e+00 0 0 1 -2414 805 2 3.6257527513306098e-01 7.5130039510401589e+00 2.9877260365777943e+01 2.2557876138095705e+00 0 0 1 -2597 866 2 3.4847208100918808e-01 5.9287756755990690e+00 2.7333902335473979e+01 5.1899307770680885e+00 0 0 1 -1595 532 2 3.6244592889370902e-01 1.2433936904412802e+01 2.1934965053416544e+01 1.4992406370894184e+01 0 0 0 -2271 757 2 4.0909570526419575e-01 1.3522451860086692e+01 1.6951634432715593e+01 1.5508375253755103e+01 0 0 0 -327 109 2 3.8759023730211123e-01 1.2050978705537872e+01 1.5573452653055504e+01 8.2784716132267206e+00 0 0 0 -35 12 2 3.4845842899276164e-01 1.1812588280128036e+01 2.9385188020711290e+01 2.5041572044769072e+00 0 -1 0 -46 16 1 -7.1593692545468413e-01 1.1232403277271668e+01 3.0168149651200153e+01 2.3303314562343735e+00 0 -1 0 -1059 353 2 3.6824864110585426e-01 1.1638504469448538e+01 2.5099123254431568e+01 2.0648781431552830e+00 0 0 0 -48 16 2 3.1878107605473444e-01 1.0347514158940282e+01 2.9690768110446829e+01 2.1037573159972309e+00 0 -1 0 -2306 769 2 3.6730774642582426e-01 1.1677638270183767e+01 2.7832135131347837e+01 5.4673888184085717e+00 0 0 0 -867 289 2 3.1370858253756073e-01 1.2192252410484890e+01 2.4874949039818269e+01 5.6579771234908787e+00 0 0 0 -1240 414 1 -7.5180796299280950e-01 1.2327087450360994e+01 2.6722712144246813e+01 7.0555309702582889e+00 0 0 0 -970 324 1 -7.3146600161462005e-01 1.1248152038688696e+01 2.8611069856538506e+01 5.1499323635329528e+00 0 0 0 -797 266 2 4.0297523845729272e-01 4.7530543081548977e+00 1.5871585490732055e+01 2.8057350832087859e-02 0 0 0 -2907 969 2 3.3000121827207451e-01 1.4254911479743537e+01 2.5045975715533139e+01 2.5261004334418780e-01 0 0 1 -1310 437 2 3.6912627891884631e-01 1.1435715601608260e+01 3.0051416679416132e+01 6.5685756635319086e+00 0 0 0 -194 65 2 3.4139849350075085e-01 7.1415094141566895e+00 3.0604232298233732e+01 1.2211017372962626e+01 0 -1 0 -2404 802 1 -7.2918970427923557e-01 7.7443173631668092e+00 2.6595939568484972e+01 3.4140147144317651e-01 0 0 1 -2241 747 2 3.9659912662053765e-01 2.2799435060564139e+01 1.9066923564805702e+01 6.9285759649524839e-02 0 0 1 -2024 675 2 3.2328026818693090e-01 1.2934503583841352e+01 3.0969340188993392e+01 1.0085149821386086e+00 0 -1 1 -2600 867 2 3.7262301809038745e-01 7.8437230034604051e+00 2.8625302519356289e+01 3.6919372515878351e-01 0 0 1 -2503 835 1 -7.2267250532881955e-01 8.1079081356276106e+00 2.9515055246603296e+01 2.2072243477987505e-01 0 0 1 -892 298 1 -7.5148672502679792e-01 2.0888208841338542e+01 3.0715669616108823e+01 5.4691140517319417e+00 -1 0 0 -2914 972 1 -7.6421926990744804e-01 2.9510703840073099e+01 2.3060877292649728e+01 1.5053406826873461e+01 0 0 0 -422 141 2 3.9557308470781993e-01 1.4958599980011073e+01 2.3266598884233236e+01 2.7100072576749090e+00 0 -1 0 -1440 480 2 3.3666172492882906e-01 1.5566427432003387e+01 2.3299397669057697e+01 5.7236708951045312e+00 0 0 0 -971 324 2 3.2567165474977544e-01 1.1929566312924079e+01 2.8923647751821658e+01 4.4487948302918046e+00 0 0 0 -1438 480 1 -7.6400355645773477e-01 1.4805332823009291e+01 2.3937420344020648e+01 5.6136468707181102e+00 0 0 0 -1439 480 2 3.3814215799380470e-01 1.3976209769692970e+01 2.3456528366304326e+01 5.7527473356036429e+00 0 0 0 -1165 389 1 -7.7180149244132290e-01 1.6892018185723501e+01 2.5179950685440588e+01 1.9553738940112357e+00 0 0 0 -2758 920 1 -7.2968332908530154e-01 1.3875326099665889e+01 3.0808333193614605e+01 7.2626576973725365e-01 0 0 1 -1057 353 1 -7.3718390505409592e-01 1.2453032324606104e+01 2.5482972853962679e+01 1.6979261521525946e+00 0 0 0 -1058 353 2 3.7170747392897024e-01 1.3154453168675921e+01 2.4886115881196488e+01 2.1278488278569094e+00 0 0 0 -361 121 1 -7.2020473249304684e-01 1.5111938052273384e+01 2.6545935198238293e+01 6.5288380534713806e+00 0 0 0 -363 121 2 3.7710795587665641e-01 1.4130307401196781e+01 2.6895766235910095e+01 6.7011746282590110e+00 0 0 0 -1787 596 2 3.6506550621193440e-01 1.6437016935767591e+01 2.8270823428873410e+01 7.1889962650727446e-01 0 0 0 -500 167 2 3.9563439978420145e-01 1.3139570395859357e+01 2.7125366038007243e+01 2.4405650434562336e+00 0 -1 0 -499 167 1 -7.4192491401160543e-01 1.3246382458096035e+01 2.7884269656775327e+01 2.9621932171635712e+00 0 -1 0 -1786 596 1 -7.2694685533705328e-01 1.6124079983728649e+01 2.7701169952745143e+01 1.4707548318084380e+00 0 0 0 -501 167 2 3.4901563025656368e-01 1.4186706205235831e+01 2.8044701640144048e+01 2.9716726018831583e+00 0 -1 0 -1788 596 2 3.7300324528589590e-01 1.6565487798225700e+01 2.6743546285094954e+01 1.4172319899393557e+00 0 0 0 -485 162 2 3.8917163444130082e-01 1.7133153268846343e+01 2.8432448855102731e+01 2.5828995953958405e+00 0 -1 0 -484 162 1 -7.2478139607319303e-01 1.7771011581849773e+01 2.9090312988370790e+01 3.0195170845673602e+00 0 -1 0 -719 240 2 3.5973544565603732e-01 1.3210824358055650e+01 2.9980253058615219e+01 6.8901163302489712e+00 0 -1 0 -1131 377 2 3.7398792739649861e-01 1.4972565243952641e+01 2.5615051745422370e+01 6.2364669835306543e+00 0 0 0 -1120 374 1 -7.6437393633003570e-01 1.7188136437858049e+01 2.7620586692659064e+01 5.2313564427111094e+00 0 0 0 -478 160 1 -7.7153794208645088e-01 1.4556112571796843e+01 2.4170731992946010e+01 2.8571853183454174e+00 0 -1 0 -480 160 2 3.7039279087856108e-01 1.4659375689306321e+01 2.4377802333564819e+01 3.8306330776186162e+00 0 -1 0 -1166 389 2 3.6818913917165530e-01 1.5988849046281164e+01 2.4719250714218951e+01 2.0730647480009945e+00 0 0 0 -718 240 1 -7.0007226663817013e-01 1.4033321826486652e+01 2.9451312566205477e+01 7.1128216935617550e+00 0 -1 0 -1167 389 2 3.7923338543484714e-01 1.7372547670804369e+01 2.5141492059876267e+01 2.8388481697703978e+00 0 0 0 -486 162 2 3.4851896327417431e-01 1.7840015927983163e+01 2.8729788861126512e+01 3.9900023789032013e+00 0 -1 0 -1122 374 2 3.9950948061246394e-01 1.6283452598076114e+01 2.7493752546370004e+01 5.6820739550444701e+00 0 0 0 -1004 335 2 3.6922321685265796e-01 1.8067819858332463e+01 2.6103514753011648e+01 4.7800600944944955e+00 0 0 0 -1241 414 2 3.8317209833142313e-01 1.2631762626548294e+01 2.6617459281135197e+01 7.9366488579655634e+00 0 0 0 -720 240 2 3.8883256719159187e-01 1.4886218006873349e+01 3.0052887370892567e+01 7.0252477601468382e+00 0 -1 0 -317 106 2 3.7660963558257304e-01 2.0474708064777836e+01 2.3357459428841722e+01 7.2036772262635322e+00 0 -1 0 -569 190 2 3.8783285696535674e-01 2.2455722248379106e+00 2.2066220204576794e+01 1.5370151484013425e+01 1 -1 0 -2269 757 1 -7.1752401459424253e-01 1.2711347438041340e+01 1.7352224147378934e+01 1.5155041314866999e+01 0 0 0 -1825 609 1 -6.9402006245137993e-01 8.4972674772146011e+00 1.9497033734637270e+01 1.1809872771074947e+00 0 0 1 -430 144 1 -6.5456537019421690e-01 2.0996612135100165e+01 2.3575278454644387e+01 4.4848104634520487e+00 0 -1 0 -479 160 2 3.5143149704121679e-01 2.0090941043366730e+01 2.3794803455930094e+01 4.1063801965498241e+00 0 -1 0 -452 151 2 3.7511039745343261e-01 1.8242038568261091e+01 2.4312676814993754e+01 1.2408014532412548e+00 0 0 0 -2335 779 1 -7.0663871699902170e-01 2.7803249955786349e+01 3.0841525302039685e+01 1.1576639981750375e+01 -1 0 1 -2215 739 1 -7.5759516482600286e-01 2.4044598058876268e+01 3.0499261364788985e+01 7.5098444224430383e-01 0 -1 1 -432 144 2 3.5321799230547979e-01 2.1099341991831480e+01 2.3978205976758272e+01 5.3721841612848751e+00 0 -1 0 -1121 374 2 3.6602716921762257e-01 1.7788562511675782e+01 2.7500115242099934e+01 5.9408997621475974e+00 0 0 0 -451 151 1 -7.7479114258616244e-01 1.8956195284318440e+01 2.3779380845961956e+01 8.1650275600510236e-01 0 0 0 -1005 335 2 3.7425010479579085e-01 1.9019115995034273e+01 2.5937547750436089e+01 3.5420941138403799e+00 0 0 0 -391 131 1 -7.1903343169706346e-01 2.0633741021534266e+01 2.9437036759946299e+01 2.7178639091630310e+00 0 -1 0 -393 131 2 3.5197438791556285e-01 2.1042308894894298e+01 2.9938298988577603e+01 3.4500547962865422e+00 0 -1 0 -1 1 1 -7.5275174968800906e-01 2.2274546567364681e+01 2.3971593227612047e+01 7.0297719550043682e+00 -1 -1 0 -593 198 2 3.6821692456138522e-01 2.2630094997345115e+01 2.7119253615506256e+01 5.8004682052621579e+00 0 -1 0 -594 198 2 3.4130618206757080e-01 2.1599167406847030e+01 2.6222489465669813e+01 4.9644171821037251e+00 0 -1 0 -592 198 1 -7.4558336044021079e-01 2.1854184757612302e+01 2.6584592873719430e+01 5.8904946484285450e+00 0 -1 0 -392 131 2 3.4369613413918820e-01 1.9697038968448663e+01 2.9724448606225398e+01 2.8358995172859380e+00 0 -1 0 -126 42 2 3.7422219785173821e-01 2.0285381681406673e+01 2.7775135400249162e+01 3.0427494983516028e+00 -1 -1 0 -124 42 1 -7.2809449525284942e-01 2.0423346277474227e+01 2.6777363351430647e+01 3.1271560553692686e+00 -1 -1 0 -1857 619 2 3.4776498394299105e-01 2.0266250559281630e+01 2.8889562568593252e+01 5.3890956197132767e-01 0 -1 1 -125 42 2 3.7886289804488649e-01 2.0661450519657514e+01 2.6403793270474445e+01 2.1939402385286337e+00 -1 -1 0 -1003 335 1 -7.3374260266434299e-01 1.8394082976062357e+01 2.5426417334217984e+01 4.1281055653717926e+00 0 0 0 -1358 453 2 3.5320920959414304e-01 2.0181884329293933e+01 2.7535391615396801e+01 6.0836395423973135e+00 0 0 0 -453 151 2 3.8464374378974286e-01 1.9753646988402490e+01 2.4321280695410977e+01 7.1526528408521084e-01 0 0 0 -2217 739 2 3.7007639929684993e-01 2.4513342179557473e+01 2.9827918774373099e+01 1.2963472561364868e+00 0 -1 1 -1170 390 2 3.7203639517515485e-01 2.4316477511954879e+01 2.6019812701370970e+01 2.5424985484790432e+00 0 0 0 -1190 397 2 3.6648816131771772e-01 2.3530990378337936e+01 2.5373947402039541e+01 1.4763190384323588e+00 0 0 0 -1168 390 1 -7.1726548443494753e-01 2.3669431004163265e+01 2.6222569850352421e+01 1.8849284222704075e+00 0 0 0 -774 258 2 3.5870976329075838e-01 2.4611646906770677e+01 2.8008246261675229e+01 2.2690190621100172e+00 -1 0 0 -772 258 1 -7.6998498468766385e-01 2.5231146016647635e+01 2.8697308125595963e+01 2.6048632096997633e+00 -1 0 0 -1357 453 1 -7.2474852232336362e-01 1.9542919602024099e+01 2.7539633386633540e+01 6.8697274120249769e+00 0 0 0 -574 192 1 -7.3565241237755274e-01 2.0874195857857323e+01 2.5872258837729937e+01 6.5644486888479714e-01 0 -1 0 -576 192 2 3.2214123564982566e-01 2.1856440541000719e+01 2.6118436770139766e+01 5.2721422664059880e-01 0 -1 0 -1561 521 1 -7.2442043641608134e-01 6.1478558005357398e+00 1.7351146160950446e+01 2.1199996540750790e-01 0 0 1 -2707 903 1 -7.4908870477242695e-01 2.3572987187960493e+01 3.0247951655633539e+01 4.2770187072569259e+00 0 0 1 -2709 903 2 3.7701416401847976e-01 2.4018228287972992e+01 3.0016839751672130e+01 3.4541154315762790e+00 0 0 1 -121 41 1 -7.2051113576138714e-01 2.4191625099975827e+01 3.0650915047544217e+01 7.4574712232716918e+00 -1 -1 0 -3 1 2 4.1577633930000224e-01 2.3105901992940503e+01 2.3975506485778499e+01 7.5010060338255879e+00 -1 -1 0 -571 191 1 -7.1341890243255535e-01 2.4930557565015704e+01 2.4176879224243887e+01 7.6865627972039157e+00 0 -1 0 -123 41 2 3.3569826248679580e-01 2.4039494944321241e+01 2.9712947151475923e+01 7.2580477181558241e+00 -1 -1 0 -2451 817 2 3.7901607775320451e-01 1.7260992719357549e+01 1.7280321903502422e+01 1.5507075495442072e+01 0 0 0 -36 12 2 3.2211910731470411e-01 2.8596288805862930e+01 2.8755568105638790e+01 1.2611351594675826e+00 -1 -1 0 -1420 474 1 -7.6839855138204449e-01 2.9369288731394516e+01 2.3152743013854376e+01 3.5229814268119322e+00 0 0 0 -1418 473 2 3.3332506312944232e-01 2.7799031631687289e+01 2.4206610139617137e+01 4.8937517743836914e+00 0 0 0 -1079 360 2 4.1202959723708116e-01 1.1017085812565135e+01 3.0958157562986710e+01 1.3435728670024270e+01 0 0 0 -77 26 2 4.1061427900959452e-01 1.0175736789658936e+00 2.8182432170832623e+01 2.6693340884161372e+00 0 0 0 -103 35 1 -7.5456901333818416e-01 2.9649161718599714e+01 2.7187899327989076e+01 1.7311454374726398e-01 -1 -1 0 -1422 474 2 3.7138709430363176e-01 2.9407740548480952e+01 2.2677894956409339e+01 4.3436692679758417e+00 0 0 0 -573 191 2 3.7154365941629924e-01 2.5535670144797308e+01 2.4038380722464264e+01 6.9828917470572112e+00 0 -1 0 -2439 813 2 3.6826283620290740e-01 2.4691029633893312e+01 2.7767950007339177e+01 7.2722458966768038e+00 -1 0 1 -2437 813 1 -7.3154265702444210e-01 2.4484744310442654e+01 2.7802548689359515e+01 6.3432053449949279e+00 -1 0 1 -2981 994 2 3.6511473696165159e-01 2.9588960281624633e+01 2.7115320512173195e+01 6.3101417465397853e+00 0 0 1 -76 26 1 -7.4446262168796229e-01 4.4347907502734367e-02 2.8083582667516676e+01 2.8106831640334979e+00 0 0 0 -1417 473 1 -7.0444574478905619e-01 2.7176785934000979e+01 2.4342046570308533e+01 5.6224049670235079e+00 0 0 0 -2955 985 2 3.7873227585346980e-01 2.5593963277319812e+01 2.4460708836016174e+01 4.2460155714017382e+00 0 0 1 -78 26 2 3.6862115269425916e-01 3.0742708187176721e+01 2.7191840167992034e+01 2.5352936045524888e+00 -1 0 0 -1419 473 2 3.5501644844363678e-01 2.7621550811901798e+01 2.3813714936953865e+01 6.3081552703764885e+00 0 0 0 -2332 778 1 -7.3611234651260138e-01 2.9578056580891140e+01 2.8697427284645038e+01 5.0539779490147163e+00 -1 0 1 -2334 778 2 4.0171294821696840e-01 3.0129444416058540e+01 2.9357390069091423e+01 5.3552591046352775e+00 -1 0 1 -2953 985 1 -7.7697637895686589e-01 2.5324831336060210e+01 2.4487390586951999e+01 3.3571062370488240e+00 0 0 1 -907 303 1 -7.2251028040591492e-01 2.7100203938797701e+01 2.6593106258267170e+01 2.4440379882400376e+00 -1 0 0 -909 303 2 3.3500662682571025e-01 2.7427278216403398e+01 2.6522956737287711e+01 1.5033342341908511e+00 -1 0 0 -908 303 2 3.7961236192047176e-01 2.6956469552165704e+01 2.5744703492226272e+01 2.6400960394064432e+00 -1 0 0 -2412 804 2 3.4623101210603358e-01 2.6029577309995265e+01 2.9171189633077898e+01 4.3079987642570918e+00 -1 0 1 -2411 804 2 3.5218645700129853e-01 2.7336288672869212e+01 2.8783519190678735e+01 5.0785014135684090e+00 -1 0 1 -2410 804 1 -7.6011493149154941e-01 2.6477880327746849e+01 2.9184653431160037e+01 5.2067375322384324e+00 -1 0 1 -2708 903 2 3.3181334848678523e-01 2.4164266597886574e+01 2.9822345617660844e+01 4.9099631442280707e+00 0 0 1 -773 258 2 3.7012580699728387e-01 2.6102804889668402e+01 2.8294793487265327e+01 2.4404325203689918e+00 -1 0 0 -60 20 2 3.6438661909224723e-01 2.9672415367119456e+01 2.8687242549486129e+01 4.0691075695933865e+00 -1 -1 0 -2438 813 2 3.6905390739666244e-01 2.5397596245482042e+01 2.8086722995784147e+01 5.9351200968678022e+00 -1 0 1 -1913 638 2 3.9777170499484688e-01 1.2445734247165840e+01 1.5994290894358539e+01 1.1900694900542913e+01 0 0 0 -105 35 2 3.8022186632645188e-01 3.0441932538363968e+01 2.6795585923877784e+01 5.8196599449822606e-01 -1 -1 0 -34 12 1 -6.9103165850333870e-01 2.9102913931594440e+01 2.9592407312246191e+01 1.5211275179373571e+00 -1 -1 0 -2918 973 2 3.6744823694418821e-01 2.9460198883696403e+01 2.7028527124131571e+01 7.8749192047765266e+00 0 0 1 -1655 552 2 3.7093515606989202e-01 2.9881610170356275e+01 2.9150987659245054e+01 1.8389359555123999e+00 -1 -1 1 -1064 355 2 3.3879951321891011e-01 2.5483525215636931e+00 2.0024626791342854e+01 8.1380248165505513e+00 0 0 0 -1065 355 2 3.6124126446920163e-01 3.4938963528843967e+00 1.9346220672408222e+01 7.2481726367541306e+00 0 0 0 -818 273 2 3.8826292627461073e-01 4.9533731605449649e+00 3.1001128832846643e+01 2.7089246988955824e+00 0 0 0 -781 261 1 -7.1053193243808477e-01 3.0918245522048736e+01 2.2210287096960165e+01 8.4999784213451690e+00 -1 0 0 -783 261 2 3.3829689662728679e-01 1.9347358200781137e-02 2.1413498559152941e+01 9.0284816532350796e+00 0 0 0 -897 299 2 3.9667986531971500e-01 3.0590078971226010e+01 1.6721897173546587e+01 1.1712801130585841e+01 -1 0 0 -896 299 2 3.9060271093257459e-01 7.1430249162270276e-01 1.7354038616218705e+01 1.0935784766862362e+01 0 0 0 -2978 993 2 3.3328822053012341e-01 3.0403075834293748e+01 2.5154780732356976e+01 2.5831932127906847e+00 0 0 1 -782 261 2 3.8068974490929453e-01 3.6850592315502234e-01 2.2868794731213487e+01 8.9895074290264496e+00 0 0 0 -2479 827 1 -7.4283161069088044e-01 4.9449624192179638e+00 2.0053044930582871e+01 8.7838756901349413e+00 0 0 0 -2480 827 2 3.8904952102009055e-01 4.6308351414032618e+00 2.0801035198761209e+01 9.3320441559769840e+00 0 0 0 -2481 827 2 3.9032107431036239e-01 5.0447721051635677e+00 1.9232398023379780e+01 9.3816456769200052e+00 0 0 0 -902 301 2 3.7392508857859746e-01 2.8598438701388549e+00 1.6635609298857183e+01 1.1753616607594813e+01 0 0 0 -903 301 2 3.8081156908654729e-01 2.3674417963906715e+00 1.8052996094063570e+01 1.2287970858182797e+01 0 0 0 -1570 524 1 -7.5893671651103367e-01 3.0218300902229167e+00 1.9308785499479292e+01 1.3536737357231672e+01 0 0 0 -1571 524 2 3.8388295512999776e-01 3.8972856227907071e+00 1.9678335988182738e+01 1.3330824242472874e+01 0 0 0 -1572 524 2 4.0340330515784095e-01 2.9148444381818490e+00 1.9257058322215780e+01 1.4503628319612218e+01 0 0 0 -170 57 2 3.8882921609954363e-01 2.9427592381579668e+00 2.1619466459223013e+01 1.1027876270810093e+01 0 0 0 -169 57 1 -7.7463134278409251e-01 3.8529636758273407e+00 2.1699173051760646e+01 1.0628485272851613e+01 0 0 0 -1484 495 2 4.0383560934081486e-01 4.2071330215285281e+00 2.2606910771010458e+01 1.0772474498839145e+01 1 0 0 -2308 770 1 -7.3569171940956501e-01 1.5017620852195062e+00 2.0831890139540402e+01 1.1782616700171493e+01 0 0 0 -2309 770 2 3.8366802113539478e-01 1.9342199150744828e+00 2.0244472854130983e+01 1.2485520341268021e+01 0 0 0 -2310 770 2 3.9498363709379281e-01 1.2958100040264249e+00 2.0300058783725483e+01 1.0983524237686135e+01 0 0 0 -917 306 2 3.7008761071742147e-01 4.8220292832352154e+00 2.0914860722736151e+01 1.1825020786045929e+01 0 0 0 -901 301 1 -7.1954901362842083e-01 2.4476472653585248e+00 1.7539212404128129e+01 1.1476237039039427e+01 0 0 0 -2653 885 1 -7.1407794147296166e-01 2.2223217817991088e+01 1.5600288137492777e+01 9.7129661428534746e+00 0 0 1 -1661 554 2 3.5806502752998431e-01 2.8723309707562222e-01 1.8518812070504179e+01 9.5105582699629085e+00 0 0 1 -2681 894 2 3.7408838542420436e-01 2.5692127879270789e+01 2.4050868588982262e+01 1.5209429065012028e+01 0 0 0 -895 299 1 -7.7254256646473796e-01 3.0916044323341680e+01 1.6865507987979797e+01 1.0832587972324836e+01 -1 0 0 -972 324 2 3.8958678083689607e-01 5.2845295544754913e+00 2.2041888025454103e+01 1.4164436092325849e+01 0 0 0 -916 306 1 -7.1849250243876217e-01 5.2917958307580353e+00 2.0765686248163561e+01 1.2715811801842168e+01 0 0 0 -41 14 2 3.4597041917537447e-01 4.5404653034810440e+00 1.7441943296259307e+01 1.0763676472309626e+01 0 0 0 -42 14 2 3.4625268632405820e-01 5.4911163946317982e+00 1.6955800727265036e+01 9.6416415245918454e+00 0 0 0 -40 14 1 -6.9298718920580493e-01 5.3586832037896297e+00 1.7668787968159918e+01 1.0272929656102887e+01 0 0 0 -918 306 2 3.7241349642923333e-01 6.2774434684204188e+00 2.0597766446606272e+01 1.2439943861592742e+01 0 0 0 -2817 939 2 3.6362109850572560e-01 1.7072551470060397e+01 2.0791821797317706e+01 1.9730653547291296e-01 0 0 1 -2473 825 1 -7.8376303661055080e-01 5.2329675428867226e+00 2.2926869569941765e+01 1.4508261223785039e+01 0 0 0 -1394 465 2 3.7561675712294307e-01 1.0066961393282048e+01 2.2137513267239317e+01 7.9241561763396282e+00 1 1 0 -182 61 2 3.7036336294443822e-01 2.9772454062655132e+01 2.7398338040325360e+01 1.2452158687330796e+01 -1 0 0 -1929 643 2 3.7304411352453759e-01 2.0571506036799700e+01 1.5843275251657795e+01 1.4902031573720491e+01 0 -1 0 -2735 912 2 4.0466389476064457e-01 1.3663928778675162e+01 1.7700859662394102e+01 1.1273600014757855e+01 0 0 0 -693 231 2 3.7355905365668080e-01 8.2924051047883438e+00 2.1211611421873101e+01 7.5605276769303620e+00 1 -1 0 -81 27 2 3.4643788751501525e-01 1.3437500808154157e+01 2.0858005523084625e+01 7.0855832710738369e+00 0 0 0 -79 27 1 -7.0472834330902390e-01 1.2891631836566249e+01 2.0075875296449333e+01 6.7214342140418841e+00 0 0 0 -1094 365 2 3.8663965999858252e-01 1.1538959925197428e+01 1.8805378150876944e+01 1.4242985681441615e+01 0 0 0 -2154 718 2 3.6420188231188699e-01 1.0521146231131416e+01 2.2524680111552552e+01 9.4763834191858258e+00 1 0 1 -1362 454 2 3.5824690391237357e-01 6.5921348900644317e+00 2.0394826958198973e+01 8.1492985187104168e+00 1 0 0 -1635 545 2 3.6460421980976943e-01 7.8791961372700694e+00 1.9437307217523852e+01 8.4551633696940574e+00 0 0 1 -691 231 1 -7.1634038175820036e-01 7.4457620197018342e+00 2.0340597100576886e+01 8.7188804807012357e+00 1 -1 0 -1091 364 2 3.5348108080554042e-01 9.2352024301846232e+00 2.3062119115273926e+01 1.0688071281129636e+01 0 0 0 -1093 365 1 -7.5610592836972312e-01 1.1176049494231272e+01 1.9369925143825022e+01 1.3526617279730933e+01 0 0 0 -1092 364 2 3.5698678780043508e-01 1.0428095081578661e+01 2.2355387862443486e+01 1.1390639381003277e+01 0 0 0 -1090 364 1 -7.4170775116856325e-01 9.7310897953903712e+00 2.2196116250200184e+01 1.0732220278777797e+01 0 0 0 -2297 766 2 3.7934871719845747e-01 1.0794042060809771e+01 2.1020294208138296e+01 1.3887529507469980e+01 0 0 0 -2488 830 1 -7.3192761463762990e-01 7.5729790375084214e+00 1.9966054609970051e+01 1.1495176640393668e+01 0 0 0 -2489 830 2 3.9010762880406841e-01 7.2457720749580972e+00 2.0103302581885902e+01 1.0563387900827802e+01 0 0 0 -2490 830 2 3.5552434097681462e-01 8.2903037248428042e+00 2.0628250272285275e+01 1.1486238901911690e+01 0 0 0 -177 59 2 3.8421024410092713e-01 7.6534694143330260e+00 1.7274206383348062e+01 1.3765775587804821e+01 0 0 0 -2355 785 2 3.5028584914948896e-01 1.1086995691185416e+01 2.2359508348038510e+01 1.3131526882750579e+01 0 0 0 -2344 782 1 -7.2028535602954824e-01 8.3422327917342951e+00 1.7749713127973955e+01 1.3166647643860570e+01 0 1 0 -2346 782 2 4.0082094308859451e-01 7.8805465917902895e+00 1.8433376952478259e+01 1.2752454210832761e+01 0 1 0 -1095 365 2 3.5064756010964881e-01 1.0277271754319097e+01 1.9081853876585306e+01 1.3359986510885417e+01 0 0 0 -2353 785 1 -7.7169283784575082e-01 1.0892211058050357e+01 2.2012390989266652e+01 1.3985946095630926e+01 0 0 0 -329 110 2 3.8245793311242204e-01 9.4294825512239715e+00 1.8375170009595195e+01 9.3862643340546743e+00 0 0 0 -328 110 1 -6.8284934097088801e-01 1.0364693584158644e+01 1.8694073610397169e+01 9.3369426823978721e+00 0 0 0 -266 89 2 3.3998906893874364e-01 1.0835107512327555e+01 1.7886338480507185e+01 9.0448861727927401e+00 0 0 0 -180 60 2 3.6629437370309237e-01 8.9191909014610218e+00 1.6278123394845156e+01 1.2171630277942121e+01 0 0 0 -1230 410 2 3.4897159507022230e-01 1.2651522049522319e+01 2.2828698079773773e+01 1.1426060156834017e+01 0 0 0 -1248 416 2 3.7127122779483096e-01 1.2019755864652671e+01 1.9177004225515454e+01 1.0239280429073586e+01 0 0 0 -1246 416 1 -7.5123810229363408e-01 1.2612701047009665e+01 1.9269563800417110e+01 1.1007569385750237e+01 0 0 0 -1247 416 2 3.8478602703622933e-01 1.2022865885117511e+01 1.9363862621856210e+01 1.1794799083569512e+01 0 0 0 -325 109 1 -7.2032755691587191e-01 1.1154565249619596e+01 1.5905196799573638e+01 8.3293449943930895e+00 0 0 0 -628 210 1 -7.5200533637137024e-01 2.8083405600877811e+01 1.5856571411951402e+01 1.0421546054314188e+01 0 0 0 -1228 410 1 -7.2454729889141289e-01 1.1852767672858807e+01 2.3488213193315296e+01 1.1719209222607425e+01 0 0 0 -80 27 2 3.2829440486445405e-01 1.3397101627017882e+01 1.9252574526373138e+01 6.9684973749010570e+00 0 0 0 -1763 588 2 3.5492558261878643e-01 1.5831304590054888e+01 2.0671522283692784e+01 1.4260462216041889e+01 0 0 0 -1762 588 1 -7.4836374636434422e-01 1.5674285106779241e+01 2.1536284625293433e+01 1.4858417154632580e+01 0 0 0 -365 122 2 3.5847440711504786e-01 1.5936511086240854e+01 1.8619360678049826e+01 1.4222218270812556e+01 0 0 0 -364 122 1 -7.0291574883952124e-01 1.5402952506808310e+01 1.9153946361765730e+01 1.3562568591795484e+01 0 0 0 -483 161 2 3.0717727600877298e-01 1.5558502772744433e+01 2.3032799019011815e+01 1.3268370468094734e+01 0 -1 0 -2774 925 2 3.5465290195660870e-01 1.8661662836362428e+01 1.6595386784445584e+01 1.1730397209133352e+01 0 0 0 -1865 622 2 3.7846677915290078e-01 1.3991602498196146e+01 2.2008668217447539e+01 9.6822988125197078e+00 0 0 0 -1864 622 1 -7.5619108736371377e-01 1.3832629170277741e+01 2.1805191047844094e+01 1.0672757659842960e+01 0 0 0 -366 122 2 3.3662957893240802e-01 1.5892497289862192e+01 1.9052851851296623e+01 1.2798893411830880e+01 0 0 0 -2045 682 2 3.6843327272201931e-01 1.7383148487775625e+01 1.6242664951766255e+01 1.2430622317259399e+01 0 0 0 -1866 622 2 3.6888569615343975e-01 1.3449574509359403e+01 2.0853571389735475e+01 1.0770810432268060e+01 0 0 0 -1048 350 1 -7.7850812089130550e-01 6.2519657267750040e+00 1.6287851365657861e+01 4.4681118342316779e+00 0 0 0 -2773 925 1 -7.0289866530104472e-01 1.7720694473769644e+01 1.6392192292685635e+01 1.1554923167460693e+01 0 0 0 -1293 431 2 3.5874739847185821e-01 1.7573841405063501e+01 1.8998560915984307e+01 7.8418420310689143e+00 0 0 0 -1775 592 2 3.7930886030505406e-01 1.7628951233281235e+01 2.1651091800331972e+01 9.6374044199956437e+00 0 0 1 -1291 431 1 -7.1733704230154260e-01 1.6939076932549632e+01 1.8312466969617159e+01 8.2419840513479539e+00 0 0 0 -1292 431 2 3.8068886773413796e-01 1.7323067967853635e+01 1.7484472713562187e+01 7.8964692417287292e+00 0 0 0 -2627 876 2 3.2744916934268492e-01 1.5961330693165227e+01 2.0714668578823805e+01 1.0632985837133541e+01 0 0 0 -2626 876 1 -7.2597635668302984e-01 1.6852985064361519e+01 2.0338225510179768e+01 1.0533847084845975e+01 0 0 0 -482 161 2 3.7732523695064918e-01 1.4789997302559515e+01 2.2756784640945057e+01 1.1880158544694746e+01 0 -1 0 -2064 688 2 3.4982189958829368e-01 1.5398745546105964e+01 2.1573632558705661e+01 7.4042228792037763e+00 0 0 1 -2636 879 2 3.6801504006444241e-01 1.9287424658031981e+01 1.8884583749552444e+01 1.2304592146246019e+01 0 0 0 -2635 879 1 -7.1930182243662977e-01 1.8721799978166800e+01 1.9031954580377946e+01 1.3056327433617250e+01 0 0 0 -2834 945 2 3.3904231354261710e-01 1.8011825502857707e+01 1.9571668908372096e+01 1.2729719668732258e+01 0 0 0 -2062 688 1 -7.5233856886005890e-01 1.4720889017106710e+01 2.2083751114041338e+01 7.9319879318777540e+00 0 0 1 -2628 876 2 3.6013062061877316e-01 1.6793504274382368e+01 1.9667082287731365e+01 9.8196129202630988e+00 0 0 0 -246 82 2 3.8223723397471004e-01 1.9677629648349928e+01 2.2659560861524234e+01 1.3470837764260315e+01 0 -1 0 -318 106 2 3.6460510894379844e-01 1.9391691935460369e+01 2.2632410876852376e+01 7.8743501717128872e+00 0 -1 0 -1774 592 1 -7.3808776636459816e-01 1.8388365856387527e+01 2.2257583029510826e+01 9.4106770166346898e+00 0 0 1 -481 161 1 -7.3686566666960396e-01 1.5392754018076330e+01 2.3401506948523021e+01 1.2326685474492542e+01 0 -1 0 -2690 897 2 3.8077933113803375e-01 1.7118700699729459e+01 2.3755057829849676e+01 1.2108509925928093e+01 0 0 0 -2571 857 2 3.4705504739017007e-01 1.6659729929720985e+01 2.3120707191088925e+01 1.4711938719177578e+01 0 0 0 -2345 782 2 3.3408049698686781e-01 1.7951003949121066e+01 1.8490666724892229e+01 1.4971765217918959e+01 0 1 0 -1458 486 2 3.3546848630018994e-01 2.0688532644434744e+01 1.9796632568193832e+01 1.4429771487945500e+01 0 0 0 -274 92 1 -7.3567961464394083e-01 2.5123966332927758e+01 2.0330798567902363e+01 1.4445848293135958e+01 0 0 0 -2930 977 2 3.5568366779223870e-01 3.4285721790098439e-01 2.2938730406175065e+01 1.4631219344744295e+00 1 0 1 -1456 486 1 -6.9123898505827908e-01 2.1672533974329593e+01 1.9919714078324510e+01 1.4400695086354490e+01 0 0 0 -528 176 2 3.7194736345747315e-01 1.7530553520903077e+01 3.0545144868361422e+01 3.9729845031758839e+00 0 -1 0 -1244 415 2 3.7478692617993181e-01 2.0273458814267748e+01 1.7990155238290292e+01 1.1160300170329492e+01 0 0 0 -181 61 1 -7.4730568145306686e-01 2.9430578371317857e+01 2.6588779748915744e+01 1.1961461469247768e+01 -1 0 0 -1243 415 1 -7.3174734640122197e-01 2.0737337468379774e+01 1.7170816955908140e+01 1.1396599161137804e+01 0 0 0 -282 94 2 3.8360281622256703e-01 2.1021092367318527e+01 1.9731840779446717e+01 1.0351425630162543e+01 0 0 0 -1245 415 2 3.9155171097875230e-01 2.1419365418185183e+01 1.7423445127614535e+01 1.2048261554259843e+01 0 0 0 -280 94 1 -7.6743092679418234e-01 2.0178810112504355e+01 1.9743231124767004e+01 1.0680718568691095e+01 0 0 0 -281 94 2 3.5842289632887275e-01 1.9688873997523658e+01 2.0308117129783962e+01 1.0090800136651925e+01 0 0 0 -2957 986 2 3.4592950163766484e-01 2.3289160873739561e+01 2.2883794480643740e+01 9.3265178419923145e-01 0 0 1 -2655 885 2 3.7064092809625354e-01 2.2037209951736987e+01 1.6169541421012749e+01 1.0582799613228202e+01 0 0 1 -1276 426 1 -7.5469087222565279e-01 2.3008391762653400e+01 1.7326918310159513e+01 1.2818953611288835e+01 0 0 0 -1278 426 2 3.3681277895958806e-01 2.2801442616324763e+01 1.7137023953533227e+01 1.3770873088966352e+01 0 0 0 -1277 426 2 3.6340304975251581e-01 2.3505779351600385e+01 1.8086758659667957e+01 1.2957714615811325e+01 0 0 0 -1289 430 2 3.6533091991039757e-01 2.2848764884322208e+01 1.9894275044266344e+01 1.2794661809258885e+01 0 0 0 -1288 430 1 -7.1011042439796679e-01 2.3688861487805319e+01 2.0061435833718654e+01 1.2304173525710651e+01 0 0 0 -1290 430 2 3.8098515036334835e-01 2.4092879824807778e+01 2.0702079761935977e+01 1.2991360251216689e+01 0 0 0 -764 255 2 3.7022355281977826e-01 2.6872310051988801e+01 1.6115154023736682e+01 2.1725137676795652e+00 -1 0 0 -512 171 2 3.8412380436018584e-01 2.4267644800078443e+01 1.5986899549558521e+01 1.2225108267747364e+01 0 0 0 -1914 638 2 3.8847786056277950e-01 1.0897688610698163e+01 1.5810805535212650e+01 1.2033235321975353e+01 0 0 0 -244 82 1 -6.9521786709554856e-01 1.9544052489598037e+01 2.2348710749988040e+01 1.4370548852622965e+01 0 -1 0 -2742 914 2 3.6084303049161259e-01 2.0251362377557456e+01 2.1852148622208741e+01 1.1439894558044323e+01 0 0 1 -2633 878 2 3.9933252227664767e-01 2.3440361873456663e+01 1.6723943395913373e+01 9.3598720620014166e+00 0 0 0 -2632 878 1 -7.3915576872259658e-01 2.4038034342201431e+01 1.7447894673381377e+01 9.0492303629412252e+00 0 0 0 -1179 393 2 3.9660368888882308e-01 2.1852866160514409e+01 1.9522164809799822e+01 7.7530687749261791e+00 0 0 0 -2781 927 2 4.1030647399571779e-01 2.2890591164047450e+01 1.8612554158838794e+01 8.5930560897962547e+00 0 0 1 -2779 927 1 -7.2727859115035309e-01 2.2073751557777175e+01 1.9198543875935329e+01 8.6298631073995491e+00 0 0 1 -1434 478 2 3.9851599447773650e-01 2.3506887394850455e+01 2.1020272739838518e+01 1.0948284240640614e+01 0 0 0 -2741 914 2 3.3678527741236330e-01 2.0181249639319986e+01 2.3318724259645538e+01 1.1561525817332308e+01 0 0 1 -2740 914 1 -7.4866476455259201e-01 2.0600744267511196e+01 2.2554120619800575e+01 1.1914395065903795e+01 0 0 1 -1433 478 2 3.8322665744508810e-01 2.2869176642482675e+01 2.0539493450712051e+01 9.5226028653044441e+00 0 0 0 -1432 478 1 -6.6847296558310765e-01 2.3298033615914775e+01 2.1312867632419710e+01 9.9907725484808871e+00 0 0 0 -1205 402 2 3.8377984232055873e-01 2.3499690111339021e+01 2.3320835146967340e+01 1.0111167479857757e+01 0 0 0 -1137 379 2 3.6770268558152153e-01 1.8353088651016321e+01 2.2953721785978278e+01 1.0058670775751686e+01 0 0 0 -1453 485 1 -7.5145082130426499e-01 2.6789096505217518e+01 2.2430587692014818e+01 1.5442910304471745e+01 0 0 0 -2637 879 2 3.9311219977788153e-01 2.4741204898595598e+01 1.9647113231003271e+01 1.5113791566614278e+01 0 0 0 -1468 490 1 -7.2068342123639539e-01 2.8966434349854417e+01 1.9154201968148524e+01 1.4979358376186727e+01 0 0 0 -861 287 2 4.0651075317900559e-01 2.5806411494840208e-02 2.1270450064237135e+01 1.2783883048745254e+01 0 0 0 -608 203 2 3.6675238729668996e-01 2.7850178787626216e+01 1.9136371441949084e+01 1.3803217393134240e+01 0 0 0 -630 210 2 3.6309080307885683e-01 2.9028125951237563e+01 1.6058989394956633e+01 1.0415260748932875e+01 0 0 0 -1660 554 1 -7.5442722379400595e-01 4.0135881704838167e-01 1.9431027012911230e+01 9.7173969865152667e+00 0 0 1 -1662 554 2 3.5618623031647290e-01 3.0574287542183043e+01 1.9722017819454177e+01 9.4855283779133952e+00 -1 0 1 -859 287 1 -7.5023654268626561e-01 3.0254978323648722e+01 2.1079628652697938e+01 1.3298100381778786e+01 -1 0 0 -275 92 2 3.8390079721216863e-01 2.5787637441177402e+01 1.9840094727727273e+01 1.3938347969523656e+01 0 0 0 -786 262 2 3.6027909744608505e-01 2.8148054126738025e+01 1.8753102315176864e+01 8.6193906780994549e+00 -1 0 0 -784 262 1 -7.2302511553283211e-01 2.8903658671929485e+01 1.9389477793691043e+01 8.2089807192514126e+00 -1 0 0 -195 65 2 3.8191353315325044e-01 8.7113363255162319e+00 3.0846212294261775e+01 1.2596785873973463e+01 0 -1 0 -953 318 2 3.6027044517098017e-01 1.5817598124148383e+01 1.5714005722017710e+01 5.6174108869596939e-01 0 0 0 -1189 397 1 -7.1544367291068811e-01 2.6921682084028351e+01 1.7789488102408793e+01 8.9711005428389168e+00 0 0 0 -1733 578 2 3.6895704063676416e-01 9.1963439014940320e+00 1.5831193077288665e+01 2.3916686679337407e-01 0 0 1 -2847 949 2 3.9835923189317363e-01 2.7640457545297767e+01 2.0910592306274317e+01 8.6418918519677383e+00 0 0 1 -547 183 1 -7.2312140353185683e-01 2.7105741343730866e+01 1.9177755757790784e+01 1.3031043664579730e+01 0 0 0 -548 183 2 3.9742500055695790e-01 2.7304498342915164e+01 2.0033877462850207e+01 1.2530677573972113e+01 0 0 0 -1191 397 2 3.4840538967143153e-01 2.7451330835753257e+01 1.6933755771103396e+01 9.3414820357359876e+00 0 0 0 -708 236 2 3.6488594194418511e-01 2.7070039735781386e+01 1.7310121484343870e+01 1.3122638800061480e+01 0 0 0 -2719 907 1 -7.2966322172293274e-01 2.7107813178606079e+01 1.6311703555282133e+01 1.3207549150690276e+01 0 1 0 -449 150 2 3.5261750338568154e-01 2.5724691297489919e+01 1.5563016208233936e+01 1.2037111339031529e+01 0 0 0 -2845 949 1 -6.8769288041857168e-01 2.7025491040190250e+01 2.1592881727130667e+01 8.4990628473396512e+00 0 0 1 -2846 949 2 3.8038735579488880e-01 2.6433602461348386e+01 2.1354419784401358e+01 7.7688668323159575e+00 0 0 1 -1743 581 2 3.7765073139456967e-01 7.2356872641078835e+00 1.6060498379255343e+01 1.5391384239203663e+01 0 0 0 -535 179 1 -6.9351140030448077e-01 3.0284127290741271e+01 1.6230269670986370e+01 1.3573916799934615e+01 0 0 0 -536 179 2 3.7314818964639873e-01 2.9901479008657134e+01 1.6352230165212294e+01 1.4441972570683136e+01 0 0 0 -660 220 2 3.7179064244987614e-01 2.8865788050204245e+01 2.1362944491574712e+01 1.2154042996054416e+01 0 0 0 -659 220 2 4.0432105193771761e-01 2.7791523949705152e+01 2.2456870164268040e+01 1.1704153621669375e+01 0 0 0 -658 220 1 -6.9223023092681224e-01 2.8012348343654654e+01 2.1448870618608790e+01 1.1715364926751253e+01 0 0 0 -2721 907 2 3.6108356320386598e-01 2.6732987384118097e+01 1.6118864937044048e+01 1.4054984522232740e+01 0 1 0 -2406 802 2 3.5759213084386299e-01 6.9917753744641971e+00 2.6618904346310060e+01 9.1981759563612431e-01 0 0 1 -2634 878 2 3.7251254928066418e-01 2.4933829306015355e+01 1.7281373873388898e+01 9.4288325992868725e+00 0 0 0 -852 284 2 3.6451835468165611e-01 2.7934010582606248e+01 2.3453446618877454e+01 9.1836728485920904e+00 -1 0 0 -851 284 2 3.6612875001996253e-01 2.9385911656431233e+01 2.3579932011057522e+01 8.9765043757203298e+00 -1 0 0 -850 284 1 -6.8714835947063957e-01 2.8609390307377367e+01 2.4166971249212075e+01 9.0063218834278285e+00 -1 0 0 -1465 489 1 -7.0697422021671075e-01 2.6814958960255879e+01 2.3821799842204708e+01 1.1510981608322417e+01 0 0 0 -1470 490 2 3.9396544034778719e-01 2.9607576814578849e+01 1.9739531833934805e+01 1.4554791256008762e+01 0 0 0 -860 287 2 3.9738405253143166e-01 3.0049415937613894e+01 2.1845685412330898e+01 1.3854917881241008e+01 -1 0 0 -1970 657 2 3.6631544657957621e-01 4.4801048982882392e+00 3.0384862741634578e+01 1.2457271286002571e+01 1 0 0 -679 227 1 -7.3884430294729031e-01 1.3884601581128519e+00 2.7307601184088483e+01 8.0433511615065196e+00 1 -1 0 -2138 713 2 3.6574522442457519e-01 6.9649678246169577e-01 2.4684228485841167e+01 1.3184934328737844e+01 1 0 0 -2137 713 1 -7.0704388954002095e-01 9.3231783484885575e-02 2.4368009481772123e+01 1.2452573721020419e+01 1 0 0 -741 247 2 3.7434885247858879e-01 2.7727092391315016e+00 2.6691716599280845e+01 8.7988528462250741e+00 1 0 0 -1445 482 2 3.8548131930074031e-01 2.2005697343618769e+00 2.4900957451708251e+01 1.0087717825901684e+01 1 0 0 -739 247 1 -7.5354058077878527e-01 3.3607101838340738e+00 2.6226518828141142e+01 9.4456856881618663e+00 1 0 0 -1689 563 2 3.5366450763106971e-01 4.6756331867403400e+00 2.7096660767504279e+01 8.6034060848582605e+00 0 0 1 -2664 888 2 3.6248914724789583e-01 3.6253351295021203e+00 2.3415664233892677e+01 1.4668228614684358e+01 0 0 0 -740 247 2 3.7813238114201547e-01 3.2460095888464986e+00 2.6699903299190165e+01 1.0368050223914613e+01 1 0 0 -1586 529 2 3.7914039895457374e-01 2.5740308199525472e+01 1.6185108114413278e+01 3.9510960135165032e+00 -1 0 1 -681 227 2 3.6443997307201897e-01 1.0555671798228803e+00 2.8004445704230264e+01 8.7094294737145947e+00 1 -1 0 -1360 454 1 -6.7480008408751069e-01 1.4882493780982777e+00 2.4269534685597151e+01 1.0097032697747219e+01 1 0 0 -2491 831 1 -7.4313586911541984e-01 3.7274056157859561e+00 2.7308610645775840e+01 1.1901978495234834e+01 0 0 0 -1010 337 2 3.5848162394431332e-01 4.3408557086198805e+00 2.8087849175057361e+01 1.1869491949944251e+01 0 0 0 -1969 657 1 -7.1861000860944768e-01 3.7762539101629833e+00 3.0949819758938002e+01 1.2762526107510293e+01 1 0 0 -1361 454 2 3.7604403072138470e-01 9.6890215047289319e-01 2.4434767575930834e+01 1.0987557222386553e+01 1 0 0 -2663 888 2 3.7514753484908803e-01 2.5655514490488831e+00 2.4484266788593096e+01 1.4091030504039944e+01 0 0 0 -2281 761 1 -7.2337854692324965e-01 8.3296510298333487e-02 2.9523357072742080e+01 9.0212914448415393e+00 0 0 0 -111 37 2 3.4865849155406547e-01 2.5712482674108879e+00 2.6740270841671524e+01 1.3652703216261845e+01 0 -1 0 -337 113 1 -7.3277063770123152e-01 5.2120488092907511e+00 2.3985492898151392e+01 1.0959719444651245e+01 0 -1 0 -338 113 2 3.4553558971079390e-01 6.2101215163811032e+00 2.4246202947588152e+01 1.0943827835801443e+01 0 -1 0 -339 113 2 3.3212807815336182e-01 4.9598037038503726e+00 2.4396189596964280e+01 1.1791023608398064e+01 0 -1 0 -2283 761 2 4.1823708180317992e-01 4.5748216314865070e-01 2.9633425011777803e+01 9.9150992687357231e+00 0 0 0 -2662 888 1 -7.4003655433427440e-01 2.6664637143622563e+00 2.3560630291725882e+01 1.4418375427170361e+01 0 0 0 -109 37 1 -7.5977382313663044e-01 1.9055882972700284e+00 2.6096448762336642e+01 1.4006135911992970e+01 0 -1 0 -110 37 2 3.5479215686412657e-01 1.3927653851935911e+00 2.6513347488364442e+01 1.4765745062724859e+01 0 -1 0 -2475 825 2 3.5741072622930053e-01 5.6307128342522352e+00 2.2855817075340919e+01 1.5361045007921270e+01 0 0 0 -2492 831 2 3.4668336412011003e-01 4.2340425669308424e+00 2.6694833106235713e+01 1.2413656554824133e+01 0 0 0 -2487 829 2 3.6683106593829695e-01 5.5441176634189455e+00 2.4617578699145994e+01 1.3662232150179799e+01 0 0 0 -2485 829 1 -7.3305340844882494e-01 5.7369451291585660e+00 2.5553291098444294e+01 1.3448761055350099e+01 0 0 0 -912 304 2 3.7863694181231811e-01 2.7893370743276495e+01 3.0413138803232307e+01 8.0702270047507252e+00 -1 0 0 -92 31 2 3.8132548215501233e-01 2.1190540495800669e+00 3.0302769407529631e+01 1.1789497509934840e+01 0 0 0 -91 31 1 -6.9177040178921889e-01 1.2569725004997006e+00 3.0103235284568061e+01 1.1455679813964528e+01 0 0 0 -575 192 2 3.3863973483648530e-01 2.0446333414633720e+01 2.6761208615750910e+01 4.0302338863605713e-01 0 -1 0 -1688 563 2 3.8521082307435872e-01 5.6336866786490143e+00 2.7608018581349981e+01 7.4137911714745517e+00 0 0 1 -2831 944 2 4.0120236849744478e-01 1.1541474163486269e+01 2.9359371686660065e+01 1.1752173950452967e+01 0 0 0 -2152 718 1 -7.2840395014258164e-01 1.0771233970095382e+01 2.2869455708534712e+01 8.4131440408646938e+00 1 0 1 -2153 718 2 3.4814834762962904e-01 1.0147816463516468e+01 2.3775620741313222e+01 8.3219357419077973e+00 1 0 1 -2037 679 2 3.8362085249896749e-01 1.9899847643284769e+01 2.5336370734770949e+01 1.4911183385682811e+01 0 0 1 -894 298 2 3.4374717299163865e-01 2.1779549416947212e+01 3.0425566677244884e+01 5.2775980603456469e+00 -1 0 0 -188 63 2 3.8115975079692371e-01 3.0992125779233263e+01 2.1477571266727409e+01 1.1216504440015862e+00 -1 0 1 -1687 563 1 -7.1719615304991724e-01 5.5991592764731992e+00 2.7338239278206903e+01 8.3617872748748301e+00 0 0 1 -1795 599 1 -7.6870820021542008e-01 5.9494360062101341e+00 2.8972972617046459e+01 1.2403016717369882e+01 0 -1 0 -1878 626 2 3.7636298385944633e-01 6.4934736890311697e+00 2.8466200272256263e+01 1.1743586516661779e+01 0 -1 0 -1242 414 2 3.4819153269248820e-01 1.1458703621783737e+01 2.6217662116156244e+01 7.0050228561939214e+00 0 0 0 -172 58 1 -7.1874989402726008e-01 9.8018782620938776e+00 2.5205555533011093e+01 7.6901266485896800e+00 0 0 0 -174 58 2 3.4596646801330511e-01 8.8205436118645792e+00 2.5004152451287883e+01 7.4015636926675379e+00 0 0 0 -173 58 2 3.0562091312378320e-01 9.5135997837157511e+00 2.5731573796909860e+01 8.5283624559504201e+00 0 0 0 -2289 763 2 3.4569195403219072e-01 8.3959156523212233e+00 2.4458657913821110e+01 1.2248577581774047e+01 0 0 0 -1874 625 2 3.4453520128448678e-01 1.1217599696795792e+01 2.5665299626114340e+01 1.4875566851880778e+01 0 0 0 -1875 625 2 3.0763144174779811e-01 1.1633158219400611e+01 2.6723684815386864e+01 1.3980132317917876e+01 0 0 0 -1873 625 1 -7.7644829978827168e-01 1.0870391602787791e+01 2.6164980504216064e+01 1.4163444117104003e+01 0 0 0 -2944 982 1 -7.8030950606872118e-01 2.5094625183601316e+01 2.4729624226333470e+01 1.4848347488443634e+01 0 0 0 -2287 763 1 -7.5971256236996898e-01 8.1613287892445463e+00 2.4424577554753924e+01 1.1296842670315336e+01 0 0 0 -1796 599 2 3.5652387618113229e-01 6.1658294090837220e+00 2.8629799499281052e+01 1.3291114191694442e+01 0 -1 0 -171 57 2 3.5455462731887888e-01 8.7845489577640645e+00 2.5037455967793871e+01 1.0824436580267422e+01 0 0 0 -2830 944 1 -7.4329954283332977e-01 1.1656641946018244e+01 2.8912746684218583e+01 1.0890491019252101e+01 0 0 0 -1274 425 2 3.3728908911554367e-01 1.0254271118106468e+01 2.6247367068049233e+01 1.1641460915073457e+01 0 0 0 -2457 819 2 3.1916350196148274e-01 7.4395176851492133e+00 2.6616304689440746e+01 1.0786739217533420e+01 0 0 0 -1017 339 2 3.4525292214042869e-01 9.9089982397385334e+00 2.7756063275864712e+01 1.4549603740398132e+01 0 0 0 -2455 819 1 -7.2212191390713598e-01 7.1761790177787246e+00 2.7529759230761492e+01 1.0450754065767292e+01 0 0 0 -2456 819 2 4.0167138987704837e-01 6.3966272305360334e+00 2.7358149110698143e+01 9.8423136660914370e+00 0 0 0 -1129 377 1 -7.4402689481222684e-01 9.8679871040149294e+00 2.6428557603968883e+01 1.0818379404068505e+01 0 0 0 -1130 377 2 3.4906253787067065e-01 1.0308848949186933e+01 2.7296657017511102e+01 1.0631858315759979e+01 0 0 0 -1108 370 1 -7.3509866285050496e-01 6.7819386709148510e+00 2.8350745869579519e+01 1.5157542166913336e+01 0 0 0 -2486 829 2 3.7124170033753284e-01 6.7668685306300000e+00 2.5639416955711489e+01 1.3452178874451207e+01 0 0 0 -1309 437 1 -7.7410997084759603e-01 1.1738301814259012e+01 3.0966864452431789e+01 6.6548083195092929e+00 0 0 0 -1080 360 2 3.5058274539291207e-01 1.0337418717062187e+01 2.9558191710750361e+01 1.3402523135697662e+01 0 0 0 -1275 425 2 3.6837993201431540e-01 9.0598754230804577e+00 2.5439639281251701e+01 1.4159497195899700e+01 0 0 0 -1273 425 1 -7.5103018929361298e-01 8.2221070722734506e+00 2.4989921683706754e+01 1.4234853006812012e+01 0 0 0 -545 182 2 3.7983422390290761e-01 8.3190199387179860e+00 2.4323247452721915e+01 1.4988061584299976e+01 0 0 0 -1015 339 1 -7.2625316751530800e-01 9.5679904653137164e+00 2.8632579762848515e+01 1.4747348448165372e+01 0 0 0 -1016 339 2 3.8358706448607893e-01 8.5947944756125754e+00 2.8552143838314887e+01 1.4740479930045707e+01 0 0 0 -2832 944 2 3.6833849269024443e-01 1.2588437322679425e+01 2.9053786834328644e+01 1.0683054358137804e+01 0 0 0 -227 76 2 3.8069043050140500e-01 6.7542390031189177e+00 3.0773260057919693e+01 9.1966885347387062e-01 0 -1 0 -2915 972 2 3.8551792146819380e-01 2.9656999864425053e+01 2.3973228441648722e+01 1.4866838077747847e+01 0 0 0 -2639 880 2 3.5382776357617346e-01 1.6007331995540330e+01 2.5236837403739859e+01 7.9389906345421988e+00 0 0 0 -1193 398 2 3.8051987740779625e-01 1.8522913699255128e+01 2.9847006931604518e+01 8.6640675735241128e+00 0 0 0 -1732 578 1 -7.4532839113724625e-01 8.2798027313755096e+00 1.5589978915163060e+01 6.0614107305412301e-01 0 0 1 -1538 513 2 3.2744579304075944e-01 2.8846945819764723e+01 2.8684559785946476e+01 1.4562564651170861e+01 -1 -1 0 -1073 358 2 3.5008751492266438e-01 1.3516348774983586e+01 2.7235119518117589e+01 1.5243551143419339e+01 0 0 0 -1227 409 2 3.8695006736496318e-01 1.6865139872453611e+01 2.5470963849060176e+01 1.4541920940672078e+01 0 0 0 -1226 409 2 3.7873760396994960e-01 1.5874096929113774e+01 2.6770712919022515e+01 1.4331108043844960e+01 0 0 0 -2063 688 2 3.8209526769738550e-01 1.4922461290486877e+01 2.3021166676742244e+01 7.9279146966643985e+00 0 0 1 -1172 391 2 3.5355614092858006e-01 1.2267462673473288e+01 2.4221920277934284e+01 1.2202751818008295e+01 0 0 0 -1317 439 2 3.6427128582856894e-01 1.7258174439809238e+01 2.8197828259110025e+01 1.4529929347731880e+01 0 0 0 -1315 439 1 -7.0673690633660369e-01 1.7467177185380216e+01 2.8996844434408963e+01 1.5032248418901911e+01 0 0 0 -1225 409 1 -7.3521269320585547e-01 1.6760428185466743e+01 2.6343852476671227e+01 1.4119017882511317e+01 0 0 0 -2307 769 2 4.1092433174476961e-01 1.3686499160217535e+01 2.6190888129513567e+01 1.0509522490312445e+01 0 0 0 -2305 769 1 -7.3363234297698821e-01 1.3801725526248331e+01 2.6425268615620343e+01 9.5587547222638403e+00 0 0 0 -1043 348 2 3.7488238002414792e-01 1.4224794825377835e+01 2.4795576440808638e+01 1.2407501077041029e+01 0 0 0 -1072 358 1 -7.5077515467102973e-01 1.4100174963763427e+01 2.7158099946067772e+01 1.4422332292510733e+01 0 0 0 -2354 785 2 3.7955646818807254e-01 1.4403336353317394e+01 2.5707977956498741e+01 9.0801816765774657e+00 0 0 0 -1042 348 1 -7.5574451851450375e-01 1.3722560202291875e+01 2.5625203017520530e+01 1.2160140075432530e+01 0 0 0 -2689 897 1 -7.5596613291204851e-01 1.8049130070871175e+01 2.4077677492745515e+01 1.1843914553786719e+01 0 0 0 -1044 348 2 3.8444265938506628e-01 1.3719370747684914e+01 2.6258494731729748e+01 1.2866591766800873e+01 0 0 0 -2638 880 1 -7.3946183648271491e-01 1.5838469627839384e+01 2.4793575644859470e+01 8.7445951541069427e+00 0 0 0 -2640 880 2 3.8000076377866066e-01 1.6482863244304806e+01 2.5165264274375453e+01 9.3536532814575395e+00 0 0 0 -402 134 2 3.5434434072595594e-01 1.6485829848811974e+01 2.9322011186864653e+01 1.1874800116819284e+01 0 -1 0 -2691 897 2 3.4324381271677640e-01 1.8497596222731573e+01 2.4288384210517094e+01 1.2685712673771203e+01 0 0 0 -456 152 2 4.0156213536723340e-01 1.4079078091068254e+01 2.9208691867340892e+01 8.7948409004611250e+00 0 0 0 -454 152 1 -7.4724607350644467e-01 1.4269704606927844e+01 2.9049367119220246e+01 9.7639277367604222e+00 0 0 0 -1157 386 2 3.9693621783976146e-01 1.4549899230700456e+01 3.0410698280629511e+01 1.2407421056395414e+01 0 0 0 -455 152 2 3.8938432504030729e-01 1.4306317791770821e+01 2.8082202413390142e+01 9.8257789927633485e+00 0 0 0 -1074 358 2 3.3688842220012999e-01 1.4007528479879568e+01 2.8062766023229749e+01 1.4005996237181597e+01 0 0 0 -1158 386 2 3.6991769068996366e-01 1.4328583456193895e+01 2.9097732895946045e+01 1.1522628580131078e+01 0 0 0 -1156 386 1 -7.3693579554483479e-01 1.4375724792677884e+01 2.9473555471827485e+01 1.2424077907767250e+01 0 0 0 -494 165 2 3.8074666430643545e-01 1.7744184738142668e+01 2.5702243032888457e+01 1.1254239154423740e+01 0 -1 0 -495 165 2 4.0180544917710997e-01 1.7684296342007571e+01 2.7320131652222550e+01 1.1035037616890445e+01 0 -1 0 -493 165 1 -7.2753012853380328e-01 1.7560127483372341e+01 2.6468309166629076e+01 1.0624576470576089e+01 0 -1 0 -400 134 1 -7.4414814174795618e-01 1.7364456511259320e+01 2.9156083069696830e+01 1.1409583424397898e+01 0 -1 0 -2526 842 2 3.8682226415933840e-01 1.7407891697735227e+01 2.9800800492857434e+01 1.0697719107152466e+01 0 0 1 -1192 398 1 -7.5146970683876402e-01 1.7676230764997566e+01 3.0276716962852685e+01 8.8718959354934217e+00 0 0 0 -1741 581 1 -7.3205757942065153e-01 6.5646294206871234e+00 1.6602793438545699e+01 1.4935295448350956e+01 0 0 0 -1019 340 2 3.7533566628932991e-01 1.5494448101255530e+01 1.7967393218913010e+01 9.6419364205948610e-01 0 1 0 -1457 486 2 3.3608578371234021e-01 2.1802152775354795e+01 1.9974146943511290e+01 1.5349502717791385e+01 0 0 0 -429 143 2 3.7369022834846510e-01 2.3737537351792326e+01 2.9042833884525809e+01 9.9993294061308617e+00 0 -1 0 -245 82 2 3.2729285075045900e-01 1.9299541545737657e+01 2.3204914995461841e+01 1.4823889772453104e+01 0 -1 0 -2945 982 2 3.8493052695990354e-01 2.4558820099153891e+01 2.4237362512852961e+01 1.4248491875091533e+01 0 0 0 -1110 370 2 3.2284115324006901e-01 5.9629587183467230e+00 2.7879547095184176e+01 1.5289372348273277e+01 0 0 0 -1946 649 2 3.4319387916119626e-01 2.6385533926690393e+01 2.6915266267265956e+01 1.2790122706965821e+01 0 0 0 -2035 679 1 -7.4850951670186616e-01 1.9522439391815791e+01 2.5501955878457565e+01 1.4044260114417856e+01 0 0 1 -2 1 2 3.7182616676479113e-01 2.2099257703414636e+01 2.4866968193163192e+01 6.7331328722075625e+00 -1 -1 0 -1486 496 1 -7.4570053510063972e-01 2.9970113727581392e+01 3.0166641069568584e+01 1.4964882298871128e+01 0 0 0 -2084 695 2 3.6571927225739886e-01 1.8926476090992040e+01 2.5747936370918769e+01 9.4622934725375138e+00 0 -1 0 -1885 629 1 -7.5905026705536827e-01 1.9492371208209629e+01 2.5436962842319616e+01 8.7592194762612987e+00 0 -1 0 -1886 629 2 3.9134367693637823e-01 1.9417671525079349e+01 2.6040516596834813e+01 8.0482391152251491e+00 0 -1 0 -2264 755 2 3.6876059672045897e-01 2.0127903249874674e+01 2.9294240185926455e+01 1.0162597224450533e+01 -1 0 0 -1359 453 2 3.5682764756711299e-01 2.0003498669298974e+01 2.8159304742168526e+01 7.4747609713330609e+00 0 0 0 -1014 338 2 3.4719095364891989e-01 2.2834738116041521e+01 2.7860297648398340e+01 7.6587750779259025e+00 0 0 0 -2736 912 2 3.4769891114122353e-01 1.3599245093020784e+01 1.6479025823656730e+01 1.0280685422969542e+01 0 0 0 -2263 755 1 -7.4090646041065489e-01 2.0305524809265258e+01 2.9319573919632511e+01 9.0448243895213505e+00 -1 0 0 -1012 338 1 -7.6915917651958687e-01 2.2686210632562460e+01 2.8150152827682845e+01 8.5602338989257909e+00 0 0 0 -2265 755 2 3.6087503388705217e-01 2.1257154507068531e+01 2.9033514336035918e+01 8.9465941849200608e+00 -1 0 0 -1013 338 2 3.6505715459970411e-01 2.2306724491447220e+01 2.7355122049564567e+01 9.0130000203875085e+00 0 0 0 -2954 985 2 3.7582232234417695e-01 2.1564640697541989e+01 2.6395567250149814e+01 1.0872246030938877e+01 0 0 1 -2755 919 1 -7.6148392492405548e-01 2.1799280755174109e+01 2.5846175036755039e+01 1.0063024342258730e+01 0 0 1 -1184 395 2 3.7014196369676028e-01 2.0509120429392205e+01 2.8869233821073585e+01 1.2145827657275872e+01 0 0 0 -2757 919 2 3.8709186019132275e-01 2.0979702888375712e+01 2.5586546353317935e+01 9.5932138541673204e+00 0 0 1 -1185 395 2 3.7230877560740350e-01 1.9055063706262271e+01 2.9462956218345347e+01 1.1831934015659300e+01 0 0 0 -2076 692 2 3.7915662099277253e-01 2.0567140417363138e+01 2.6485831293818670e+01 1.2865693203352905e+01 0 -1 0 -1183 395 1 -7.3721753404518597e-01 2.0050729408969488e+01 2.9641306532156555e+01 1.1671696178352919e+01 0 0 0 -2074 692 1 -7.7414661817605712e-01 2.1190928563446558e+01 2.7145357222097807e+01 1.2441861780772955e+01 0 -1 0 -2075 692 2 4.0285127557932976e-01 2.1963979517384846e+01 2.7248635801780097e+01 1.2960945200595175e+01 0 -1 0 -2882 961 2 3.4567728753195492e-01 2.3689262756956474e+01 2.6221608865749200e+01 1.3897438508303820e+01 0 0 0 -683 228 2 3.8850947898225768e-01 2.2287043656262462e+01 2.2710659639236084e+01 1.3159838603159599e+01 0 -1 0 -684 228 2 3.9098808257530643e-01 2.3339634958910594e+01 2.3402399945945756e+01 1.2344122318292756e+01 0 -1 0 -682 228 1 -6.9746337220353483e-01 2.3125296302024395e+01 2.3166784061331143e+01 1.3275389404967701e+01 0 -1 0 -2883 961 2 3.3405337731821316e-01 2.4594507691402203e+01 2.7413326810741978e+01 1.3573785439163032e+01 0 0 0 -2881 961 1 -7.4833507498208907e-01 2.3678702829374647e+01 2.7157308162026748e+01 1.3777877093008364e+01 0 0 0 -1206 402 2 4.0841236155139748e-01 2.3127446955732903e+01 2.4816037541215099e+01 1.0488707043851456e+01 0 0 0 -1204 402 1 -7.3831533211398614e-01 2.3666061908616861e+01 2.4028985318967081e+01 1.0766836745112006e+01 0 0 0 -572 191 2 3.5723901917161704e-01 2.5448062543971378e+01 2.4378839592437217e+01 8.4478213725293188e+00 0 -1 0 -427 143 1 -7.2658915359131349e-01 2.4338046472811751e+01 2.9165416708310708e+01 1.0751912586528359e+01 0 -1 0 -911 304 2 3.2269895416079913e-01 2.8199373540185583e+01 2.9038503386115810e+01 8.8708669066955714e+00 -1 0 0 -428 143 2 3.4990884231565705e-01 2.4398068524033910e+01 3.0172422508081215e+01 1.0810772009746300e+01 0 -1 0 -2331 777 2 3.5079342493493992e-01 5.2064627058065236e+00 2.7708451934664833e+01 9.4589076273547601e-01 0 0 1 -289 97 1 -6.8890047440900226e-01 2.5614823927510720e+01 2.7405470988437354e+01 9.0938119240594943e+00 -1 -1 0 -2143 715 1 -7.5804542689975407e-01 7.8745710373642239e-02 2.8267785805496505e+01 1.3067751100228358e+01 1 0 0 -2139 713 2 3.7928201005903961e-01 3.0523943861771443e+01 2.5123347238073457e+01 1.2286052823693883e+01 0 0 0 -2337 779 2 3.5914943750021483e-01 2.7982980760739459e+01 3.0361659529949762e+01 1.0725883676226925e+01 -1 0 1 -1467 489 2 3.5954451884135707e-01 2.5873940482334660e+01 2.3683995088923901e+01 1.1185822601501235e+01 0 0 0 -1455 485 2 3.7693870283650671e-01 2.6146068105875198e+01 2.1789399816838561e+01 1.5035604289235520e+01 0 0 0 -183 61 2 3.4828795567031207e-01 2.8557800567354928e+01 2.6376138691493416e+01 1.2266070203373703e+01 -1 0 0 -677 226 2 3.6396272860491191e-01 2.5712859436769588e+01 2.9030195725155021e+01 1.2128497063177194e+01 0 -1 0 -1106 369 2 3.9913351683679482e-01 1.8174279945828175e+01 3.0684727674107993e+01 1.4512233723842488e+01 0 0 0 -1304 435 2 3.6107063623748398e-01 2.8625501449869109e+01 2.7181843318364749e+01 1.0310947948550398e+01 0 0 0 -1912 638 1 -7.4104414153033016e-01 1.1698069005670529e+01 1.5744419460621131e+01 1.2544597663609681e+01 0 0 0 -678 226 2 3.3044914957682942e-01 2.6419359007871105e+01 2.9680792073147057e+01 1.3215613763102581e+01 0 -1 0 -910 304 1 -7.4281924048833048e-01 2.8437280336074551e+01 2.9976056974506591e+01 8.8325068950829451e+00 -1 0 0 -676 226 1 -7.6505901219117389e-01 2.6301827644936228e+01 2.8799583958072560e+01 1.2882579797955763e+01 0 -1 0 -1303 435 1 -7.8727795606889606e-01 2.8309919864935516e+01 2.7010363946789624e+01 9.4216674720800295e+00 0 0 0 -290 97 2 3.7043836185306966e-01 2.6565017029408050e+01 2.7390411449107006e+01 9.1249793246568327e+00 -1 -1 0 -2171 724 2 3.4326834663890887e-01 2.7562919121937277e+01 2.7975513531725674e+01 1.4186873036472745e+01 0 -1 0 -2145 715 2 3.5341020361431097e-01 5.8511868267090583e-01 2.7692818681943656e+01 1.3752232476885101e+01 1 0 0 -1945 649 1 -7.6402729752946219e-01 2.6695077837973667e+01 2.6000376719885502e+01 1.2969061133326520e+01 0 0 0 -93 31 2 3.7976280265708601e-01 9.0348566445855460e-01 2.9409424590030735e+01 1.2152921026129114e+01 0 0 0 -1947 649 2 3.5703833910423982e-01 2.6106173714029055e+01 2.5634024907519958e+01 1.3699848668347313e+01 0 0 0 -2282 761 2 3.8799513008704178e-01 3.0099826630609414e+01 2.9613146404803253e+01 8.9160193148825062e+00 -1 0 0 -291 97 2 3.5750723329860512e-01 2.5331940887455815e+01 2.8152410132656726e+01 9.7326543340109648e+00 -1 -1 0 -2144 715 2 3.3552473139954792e-01 3.0642422856655269e+01 2.8868905179467856e+01 1.3638219124658908e+01 0 0 0 -1305 435 2 3.9480578818462042e-01 2.8376297744365395e+01 2.6030779364580070e+01 9.3636649868968576e+00 0 0 0 -1466 489 2 3.9246402888933674e-01 2.6904922929046229e+01 2.4783907287116225e+01 1.1771241445637314e+01 0 0 0 -2734 912 1 -7.2382854903492777e-01 1.3707108314973883e+01 1.6770863409777963e+01 1.1231203325519900e+01 0 0 0 -1238 413 2 3.4481247578860302e-01 2.9313808677053302e+01 2.6259789677049987e+01 1.5302785766078491e+01 0 0 0 -2569 857 1 -7.3177289447898375e-01 1.7137009565743430e+01 2.3885095763143838e+01 1.5187813887405355e+01 0 0 0 -1488 496 2 3.5692691954684008e-01 2.9509775826894746e+01 3.0717097422710697e+01 1.4205998097752483e+01 0 0 0 -1967 656 2 3.5178852207702033e-01 5.1822116287820572e+00 1.6081427724137171e+01 7.8795791913758668e+00 0 0 1 -178 60 1 -6.7984691073543635e-01 9.1232380330040979e+00 1.5777570487371852e+01 1.1278161510519119e+01 0 0 0 -2216 739 2 3.4190717057196779e-01 2.4732804026675620e+01 3.0787678630554399e+01 6.5088003105526468e-02 0 -1 1 -107 36 2 3.4971144609339067e-01 3.5813792575530221e+00 2.5772053968346633e+01 2.5939715693812210e-01 0 -1 0 -1596 532 2 3.8907654241846407e-01 1.3932695527699384e+01 2.1276800284547537e+01 1.5421449348608080e+01 0 0 0 -2812 938 1 -7.0935516142550625e-01 1.6201426602723924e+01 3.1004616013418381e+01 6.7505702489044870e+00 0 0 1 -942 314 2 3.5904571565151733e-01 9.9603587503673836e+00 2.2884806884661739e+01 1.5325075750172157e+01 0 0 0 -2476 826 1 -7.5195101737034253e-01 1.6465874655471463e+01 1.5593224616913542e+01 1.3965217933360407e+01 0 0 0 -602 201 2 3.6704959261871023e-01 2.1035877062916210e+01 3.0977558031118289e+01 8.4737950394283104e+00 0 -1 0 -2829 943 2 3.8852471663730892e-01 2.2462937506558461e+01 1.5984134869706034e+01 1.5510374544909403e+01 0 0 0 -2841 947 2 3.6796209378854011e-01 6.3042865678625271e+00 2.2908991682961382e+01 8.0237084697705630e-02 1 0 0 -2565 855 2 4.0436469491963317e-01 1.2704761764209320e+00 1.6053650115450203e+01 1.9080890623613435e+01 0 0 0 -2563 855 1 -6.7611000077238470e-01 1.1472683325292459e+00 1.6249162632465769e+01 2.0035846446403664e+01 0 0 0 -2564 855 2 4.0778981150198818e-01 3.2501020578611023e-01 1.6753303182253919e+01 2.0229597294791944e+01 0 0 0 -2874 958 2 3.0889470933723584e-01 4.5820739533130483e+00 2.2128723260691615e+01 1.7462635147454915e+01 1 0 0 -1062 354 2 3.6037252280074866e-01 1.5638869745625017e+00 2.1597388647498928e+01 2.0415959146700228e+01 0 0 0 -2453 818 2 3.7904019657753646e-01 2.3220359130048061e+00 2.1698675539625103e+01 1.8975353307752130e+01 0 0 0 -2452 818 1 -7.1933244817353248e-01 1.8909493635495129e+00 2.1082951341513748e+01 1.9587431856443843e+01 0 0 0 -810 270 2 3.4622181872072527e-01 3.3923609315101131e+00 1.7049297110884318e+01 2.0486325237545703e+01 0 0 -1 -2467 823 1 -7.4410670249583011e-01 1.9985166093300266e+00 1.6134561924140069e+01 1.7564190458245303e+01 0 0 0 -2374 792 1 -7.5549882313366945e-01 4.9708970216671613e+00 1.5897640845727093e+01 1.8162153196036638e+01 0 0 0 -2376 792 2 3.4100942613539392e-01 5.3517499864409963e+00 1.6193354287035945e+01 1.7356460206206449e+01 0 0 0 -809 270 2 3.7578964355484112e-01 4.7014133471784998e+00 1.7027075716661063e+01 1.9863578419664893e+01 0 0 -1 -957 319 2 4.0200516441711215e-01 3.1711690929003957e+00 2.0435804024865750e+01 2.0366921012028225e+01 0 0 -1 -955 319 1 -7.8889873207496419e-01 3.9247566400771396e+00 2.0163465758259353e+01 2.0907781192972930e+01 0 0 -1 -956 319 2 3.8557050395591708e-01 4.0623801606004930e+00 1.9223205577425333e+01 2.0751641667477642e+01 0 0 -1 -2880 960 2 3.6470456104793036e-01 4.5590835487633585e+00 2.1324788166738507e+01 2.2180636558811027e+01 1 0 0 -2448 816 2 3.7891469717871362e-01 6.4104048348264353e+00 1.5780213047357663e+01 1.9122582220757749e+01 0 0 0 -581 194 2 3.7460426720235190e-01 1.5419382297134044e+01 3.0800518915771480e+01 2.6043886925557764e+01 0 -1 -1 -2872 958 1 -7.6269479373786953e-01 3.7009428876424453e+00 2.2413959840696482e+01 1.7771422527835437e+01 1 0 0 -2583 861 2 3.7327435409857357e-01 5.4441623512822481e+00 1.8249974051004482e+01 2.2056304735162637e+01 0 0 0 -2276 759 2 3.6149696853742197e-01 3.1288172812713939e+00 2.2351439514553785e+01 1.7001251371961878e+01 0 0 0 -1711 571 1 -6.8819152537359740e-01 5.8566533843091850e+00 1.8293718521491556e+01 2.2909298612410424e+01 0 -1 0 -570 190 2 3.7790956638870143e-01 1.0061486189159239e+00 2.2026618126685257e+01 1.6446196223609501e+01 1 -1 0 -1712 571 2 3.7429560628687081e-01 5.9482113502938487e+00 1.7356911971271291e+01 2.3291942335504508e+01 0 -1 0 -2997 999 2 3.5225437272715709e-01 6.6086757608250366e+00 2.1146860438570563e+01 1.9455868658346034e+01 1 0 0 -2995 999 1 -7.1265882757587440e-01 6.0246788973483776e+00 2.0382500638383885e+01 1.9229781344684003e+01 1 0 0 -2996 999 2 3.6650296349571998e-01 5.2499733116524041e+00 2.0470690161445592e+01 1.9880591363399045e+01 1 0 0 -868 290 1 -7.3205821000451254e-01 2.5958374885186419e+00 1.8850417537589575e+01 1.6354720355830807e+01 0 0 0 -2878 960 1 -7.1548846979217984e-01 4.9358770289344820e+00 2.2117119705858219e+01 2.2697449221692509e+01 1 0 0 -635 212 2 3.5961360442179929e-01 5.6901360064690110e+00 1.9633135447409259e+01 1.7042339689310896e+01 1 0 0 -634 212 1 -6.7563410020830350e-01 5.3605055245776070e+00 1.8786296859330406e+01 1.6629063670717017e+01 1 0 0 -2115 705 2 3.6239867576259466e-01 8.1957615718520105e-01 2.1726024313333614e+01 2.2120325638004008e+01 1 -1 0 -808 270 1 -7.5427064274521927e-01 4.2494047742010075e+00 1.7450448103663643e+01 2.0626646924584463e+01 0 0 -1 -869 290 2 3.8570557115870291e-01 2.5185340578773343e+00 1.7998889873837001e+01 1.6843735479251066e+01 0 0 0 -2879 960 2 3.7164260702824170e-01 5.8521700015176608e+00 2.2045790028891812e+01 2.2297213410798278e+01 1 0 0 -2929 977 1 -7.1547115163270913e-01 1.6733174735264713e+00 1.7565037739044858e+01 2.3239784168949743e+01 1 0 0 -2931 977 2 3.2300493004303144e-01 2.2415982955798239e+00 1.7185611160903488e+01 2.2537360933781954e+01 1 0 0 -636 212 2 3.5946336426886771e-01 4.4147762414063987e+00 1.9027776247970419e+01 1.6412064428481170e+01 1 0 0 -870 290 2 3.7872752608724825e-01 2.0905325493323708e+00 1.9511792379724071e+01 1.6829961939440512e+01 0 0 0 -90 30 2 3.8834987715673935e-01 3.0943079419730942e+01 2.3362929219921256e+01 1.7346239916805800e+01 -1 0 0 -2113 705 1 -7.4531961303516558e-01 4.7096294719936260e-01 2.2425780260519058e+01 2.1565634816952937e+01 1 -1 0 -84 28 2 3.4897705322751993e-01 6.4508803916872415e+00 2.3559543074305076e+01 1.9269480285743430e+01 0 0 0 -2446 816 1 -6.7386356744338205e-01 7.2018006619244739e+00 1.5776218241604699e+01 1.9761553973954879e+01 0 0 0 -2442 814 2 3.5677817428353492e-01 9.6049044051135581e+00 2.2246363140981110e+01 1.7420877969602010e+01 0 0 0 -2447 816 2 3.9770318677378780e-01 7.4935616608432012e+00 1.6709551456264087e+01 1.9776904052396038e+01 0 0 0 -1800 600 2 4.1263441495919023e-01 1.0493244043314887e+01 1.7856467585679393e+01 1.7093068535115474e+01 0 -1 0 -135 45 2 3.9020101999581147e-01 8.9585516768587699e+00 1.8955011839864781e+01 1.8149561907320830e+01 0 0 0 -2260 754 1 -7.0103070485976005e-01 9.3873721090698456e+00 1.9082381628952291e+01 1.7263300317648142e+01 0 0 0 -2459 820 2 4.0434139329975316e-01 9.9682070030173868e+00 1.9843076963821684e+01 1.7447146520603926e+01 0 0 0 -1672 558 1 -7.3253141780020958e-01 7.9840608557733734e+00 1.8482620317594353e+01 1.9685083124885651e+01 0 0 0 -1674 558 2 3.7607888027345554e-01 7.3596416275299301e+00 1.9230285660106546e+01 1.9813327146661464e+01 0 0 0 -1673 558 2 3.6415389748626503e-01 8.5081160988086832e+00 1.8502998507052023e+01 2.0514696258781356e+01 0 0 0 -2440 814 1 -7.2029648161625559e-01 9.6242880106291349e+00 2.1778741467411137e+01 1.8312320727913580e+01 0 0 0 -2441 814 2 3.4230058605961328e-01 8.8814147484251507e+00 2.2167102283532959e+01 1.8858178997559353e+01 0 0 0 -979 327 1 -6.7482259063424510e-01 9.3088737385903926e+00 1.8844654865070989e+01 2.2460656347640754e+01 0 0 -1 -981 327 2 3.2430814659994767e-01 1.0090752856278911e+01 1.8493242842363081e+01 2.3048318147233751e+01 0 0 -1 -2509 837 1 -7.0196068058637862e-01 1.1788754153574342e+01 2.1536558931188686e+01 2.2727285444582797e+01 0 0 0 -2494 832 1 -7.4134374356485211e-01 1.1760325640174159e+01 1.5944605909120598e+01 1.9376881358470484e+01 0 0 0 -1972 658 1 -7.0047005231308657e-01 1.0356107018540603e+01 1.5765792843229191e+01 2.1808303769585933e+01 0 -1 0 -1097 366 2 3.6804654533983650e-01 7.8990432043169108e+00 2.1860162981074073e+01 2.2981153842560516e+01 0 0 0 -1096 366 1 -7.2729234791305175e-01 7.6152216078739663e+00 2.1444382553767134e+01 2.2209500718085835e+01 0 0 0 -1098 366 2 3.4838062587641866e-01 8.2952355939697160e+00 2.0776200139787651e+01 2.1968914814861467e+01 0 0 0 -980 327 2 3.7621919366667722e-01 8.5832690427575464e+00 1.8897036762754400e+01 2.3096414297956674e+01 0 0 -1 -2511 837 2 3.7597610626228445e-01 1.2184327819808559e+01 2.1060047289538311e+01 2.1924792581040840e+01 0 0 0 -2652 884 2 3.9789000070420916e-01 1.2263660768542426e+01 2.0679378164077566e+01 1.6766552072505430e+01 0 0 0 -2650 884 1 -6.8409435611026848e-01 1.1940315526251053e+01 1.9971637937423427e+01 1.7402509219403665e+01 0 0 0 -276 92 2 3.5792728558793091e-01 1.2473518730115815e+01 1.9986571964075942e+01 1.8227032133933289e+01 0 0 0 -1883 628 2 3.5294858934765755e-01 2.0126515986864028e+01 2.6600416664575562e+01 1.6710503370343691e+01 0 -1 0 -2468 823 2 3.5615560919483652e-01 2.8654151542591384e+00 1.5740984955840435e+01 1.7791581939739004e+01 0 0 0 -47 16 2 3.7949325700519548e-01 2.9817534616981050e+01 2.8032334758234612e+01 3.0746086176961189e+01 -1 -1 -1 -82 28 1 -7.7671112964081956e-01 7.1843657320280654e+00 2.3006719761256434e+01 1.9524647308538508e+01 0 0 0 -83 28 2 3.7436185898904384e-01 7.7254895369175776e+00 2.3519389228185439e+01 2.0129349219977321e+01 0 0 0 -1799 600 2 4.0180775006962682e-01 1.1810581389420010e+01 1.7033363248374886e+01 1.6621855523625594e+01 0 -1 0 -2496 832 2 4.0008485730469134e-01 1.1250540164512902e+01 1.6368263642458796e+01 1.8542999428761011e+01 0 0 0 -1083 361 2 3.4433348874294767e-01 1.1232902323015876e+01 2.5552244869791163e+01 3.0999593987954334e+01 0 0 -1 -2259 753 2 3.6420374135793915e-01 2.8495310473049784e+01 1.6082096260150365e+01 2.4803330061870188e+01 -1 0 0 -605 202 2 3.6069102724715812e-01 1.0653259836693101e+01 3.0665436152166350e+01 2.8953516374747096e+01 0 -1 -1 -1798 600 1 -7.4143336877672139e-01 1.0949162989447700e+01 1.6939559656764274e+01 1.7089535490890931e+01 0 -1 0 -1973 658 2 3.9184314405503479e-01 1.0849543291546629e+01 1.6068095219841016e+01 2.1029731159266454e+01 0 -1 0 -2682 894 2 3.5444139370273653e-01 2.2872210746000949e+01 1.5823126078637777e+01 1.9045757247082200e+01 0 0 0 -2177 726 2 3.7577310362369815e-01 2.7328595985351306e+01 2.7745186194996887e+01 2.7380636598096508e+01 0 -1 0 -1861 621 1 -7.2948921739616235e-01 1.4647541013196969e+01 1.5893645690038790e+01 1.6279559372752470e+01 0 0 0 -2498 833 2 3.8097263973112555e-01 1.2938270040404607e+01 1.7100569370949469e+01 1.9757891409716329e+01 0 0 0 -2510 837 2 3.9891115678219063e-01 1.2767352583765447e+01 2.1753746710905055e+01 2.3420981789955796e+01 0 0 0 -1200 400 2 3.8872285951965591e-01 1.3469725203925210e+01 2.0688908003932251e+01 2.0114797967351016e+01 0 0 0 -2558 853 2 3.6746091393743319e-01 1.4197026966545986e+01 1.7970933823901291e+01 2.1890988724450011e+01 0 0 0 -2753 918 2 3.7812641223402427e-01 1.4503789050574767e+01 1.7016554098710056e+01 2.0007044748354808e+01 0 0 0 -2752 918 1 -7.5794476806788680e-01 1.3773058971560914e+01 1.7610063743754900e+01 2.0147381432369915e+01 0 0 0 -1198 400 1 -7.3785542644020652e-01 1.2722945994650141e+01 2.0178892074428340e+01 2.0412494058857920e+01 0 0 0 -2754 918 2 3.7953874501108459e-01 1.2955585724155942e+01 1.9237787247783668e+01 2.0402977981879534e+01 0 0 0 -2501 834 2 3.8591245743111002e-01 1.7069179347359253e+01 2.0427873319025792e+01 1.8107261744812714e+01 0 0 0 -2500 834 1 -7.6572664227792298e-01 1.7451409436569911e+01 2.0796108924863930e+01 1.7384990849850592e+01 0 0 0 -627 209 2 3.8642862893208907e-01 2.9111656614776731e+01 3.0905618749578579e+01 2.1355596991645790e+01 0 -1 -1 -949 317 1 -7.3787771051202400e-01 1.6477607738654012e+01 1.9366811648631813e+01 1.9731657372562406e+01 0 0 -1 -950 317 2 3.3931122396063440e-01 1.5985927502409446e+01 1.8563515801563192e+01 2.0012871080420258e+01 0 0 -1 -951 317 2 3.3522345570974904e-01 1.6399763962324545e+01 1.9974858343661673e+01 2.0488216687038562e+01 0 0 -1 -2502 834 2 3.2300893204683401e-01 1.7701586389495752e+01 1.9978779271362470e+01 1.6797287143588839e+01 0 0 0 -2856 952 2 3.6286740285890251e-01 1.9088413504040428e+01 2.1422083807728644e+01 1.7331561596723645e+01 0 0 0 -1896 632 2 3.3866811829528354e-01 1.8154982291173472e+01 2.2262265937145784e+01 1.8813822681117955e+01 0 -1 0 -1894 632 1 -7.3085053977240566e-01 1.8742250855955579e+01 2.2242430132658562e+01 1.9587550246900438e+01 0 -1 0 -1153 385 1 -7.0909725109401156e-01 1.4568212577030154e+01 2.1758084676468798e+01 1.9084218084358760e+01 0 0 0 -1155 385 2 3.9048148196889804e-01 1.4683212818975365e+01 2.2584919729163854e+01 1.8463305709392731e+01 0 0 0 -1594 532 1 -7.5416754141135045e-01 1.3083912575970864e+01 2.1704003403232615e+01 1.5708244538227005e+01 0 0 0 -1813 605 1 -6.9441977609673300e-01 6.3039324182827920e+00 3.0821799880495821e+01 2.1189606677534080e+01 0 -1 0 -2849 950 2 3.5480349581328491e-01 1.8129051651410556e+01 1.8705079174557753e+01 2.0228902761443340e+01 0 0 0 -1863 621 2 3.6854576007161327e-01 1.5172666627302098e+01 1.6095702708726595e+01 1.7029458334273805e+01 0 0 0 -2746 916 1 -7.3273328749835243e-01 1.6093205557140369e+01 1.6337803951705954e+01 1.9134412030967425e+01 0 0 0 -2670 890 2 3.7884885366866627e-01 1.6904941489106388e+01 3.1017946547072516e+01 1.8351426234861631e+01 0 0 0 -2747 916 2 3.7526896474913241e-01 1.6632130676703571e+01 1.6039388323818944e+01 1.8415729258210146e+01 0 0 0 -1386 462 2 3.8475593535460384e-01 2.7164340055959478e+01 3.0099801116608390e+01 1.7095499208172395e+01 0 0 0 -653 218 2 3.7600427557950300e-01 1.8429978363641840e+01 1.6393214087114725e+01 2.0536708163206043e+01 0 0 0 -926 309 2 3.3585894276326667e-01 1.1333087962713002e+01 3.0477256321291371e+01 2.4285673591173943e+01 0 0 0 -2965 989 1 -7.2583966210207052e-01 1.2864962032239149e+00 1.6632632849149697e+01 3.0381041687091447e+01 1 0 0 -2559 853 2 3.4260462364336525e-01 1.4848326918990606e+01 1.8875073679901682e+01 2.2968734193161435e+01 0 0 0 -2557 853 1 -7.0605139533455008e-01 1.4331764527916098e+01 1.8058309776495935e+01 2.2872018353667798e+01 0 0 0 -568 190 1 -7.1732389025140930e-01 1.8578047794583581e+00 2.1535792668020783e+01 1.6028395496735452e+01 1 -1 0 -2748 916 2 3.8168868936078065e-01 1.6471888994325148e+01 1.6105801488731093e+01 1.9974337730133673e+01 0 0 0 -2193 731 2 3.7234436478270250e-01 2.7998844550166559e+01 2.6328675841197466e+01 2.6367469356902838e+01 0 -1 0 -2855 952 2 3.6194534394557654e-01 2.0033965557468058e+01 2.1858791951418684e+01 1.6125877121497311e+01 0 0 0 -1148 383 2 3.4354261902983407e-01 2.5158469268152945e+01 1.6053290568144252e+01 2.3155099627088500e+01 0 0 -1 -2835 945 2 3.3871436051537818e-01 2.1391769693115197e+01 1.6752990314935037e+01 1.6522425972689309e+01 0 0 0 -2854 952 1 -7.6148130321416307e-01 2.0042981091993074e+01 2.1579410100574112e+01 1.7093249739522637e+01 0 0 0 -1895 632 2 3.3633802886671432e-01 1.9645176520042821e+01 2.2097828586501326e+01 1.9152440208691370e+01 0 -1 0 -1811 604 2 3.5609428898676954e-01 1.8707827025288051e+01 1.6952055951109241e+01 2.3651863342904992e+01 0 -1 0 -701 234 2 3.9222358501290394e-01 2.3503612900094463e+01 2.0341372940500914e+01 1.7687642841542818e+01 0 0 0 -702 234 2 3.7651346292397025e-01 2.4993255123712686e+01 2.0385384067740553e+01 1.7991898240006243e+01 0 0 0 -1199 400 2 3.6152846434730673e-01 2.1925673007890705e+01 2.2668013759151197e+01 1.7366330540124970e+01 0 0 0 -2922 974 2 3.6359369647919776e-01 2.3361693486816201e+01 1.7936969153801638e+01 1.5680260362233357e+01 0 0 0 -1951 651 1 -7.9328339981929941e-01 2.0314945917663909e+01 1.7053498194643307e+01 1.8136306919551057e+01 0 0 0 -1953 651 2 4.0646187120711424e-01 1.9964678378818739e+01 1.7591120829025456e+01 1.8830486704836559e+01 0 0 0 -1471 491 1 -7.0560238583825863e-01 2.1591710370264284e+01 1.9400709504333953e+01 1.7575382984451089e+01 0 0 0 -1473 491 2 3.6358229425505018e-01 2.0895794207685931e+01 2.0046956148602124e+01 1.7377298397087262e+01 0 0 0 -1472 491 2 3.5797336917149358e-01 2.1135558773815383e+01 1.8509993956440493e+01 1.7515866130752990e+01 0 0 0 -2848 950 1 -7.4639765540348535e-01 1.8884359102375498e+01 1.8088210388615583e+01 2.0089347304986042e+01 0 0 0 -2823 941 2 3.3361870878766836e-01 1.9594100684430078e+01 1.8350188943716372e+01 2.0815798117173369e+01 0 0 0 -729 243 2 3.7204357853523695e-01 2.5116144885662930e+01 1.7388683086282882e+01 1.8512589751641979e+01 0 0 0 -727 243 1 -7.5798923778031790e-01 2.4500483041448923e+01 1.6633913849547586e+01 1.8522427042114860e+01 0 0 0 -700 234 1 -7.2428328091107230e-01 2.4173472907905484e+01 2.0978036113664331e+01 1.7857787913545049e+01 0 0 0 -1598 533 2 3.5615949548720716e-01 2.4266877405299546e+01 2.1718804381820732e+01 1.9993608189643279e+01 -1 -1 0 -1597 533 1 -6.8879075016082236e-01 2.4547053504657136e+01 2.1460191437475498e+01 2.0842654794992228e+01 -1 -1 0 -2895 965 2 3.4721873723606850e-01 2.3611735806262967e+01 1.7418190978508740e+01 2.0520242610221505e+01 0 1 0 -728 243 2 3.2560686269065575e-01 2.4729109153127549e+01 1.6294300081678781e+01 1.7621847646784289e+01 0 0 0 -812 271 2 3.6544233381893815e-01 3.0350325135098089e+01 2.9852854799496011e+01 1.8855060403428610e+01 -1 0 0 -1262 421 2 3.9280028734695327e-01 2.3320715372853154e+01 2.2594933660546744e+01 1.8002306692272668e+01 0 0 0 -2893 965 1 -6.7043759366381761e-01 2.3372327680289807e+01 1.7931492806898280e+01 2.1317027953159300e+01 0 1 0 -687 229 2 3.8011281492684679e-01 2.2063828530596499e+01 3.0140444948093727e+01 1.8154991056672642e+01 0 -1 0 -1261 421 1 -7.8027245716304938e-01 2.2625684936239633e+01 2.3207155910459772e+01 1.7695133159849458e+01 0 0 0 -1599 533 2 3.4109075232904440e-01 2.5005131269365876e+01 2.2272712024131749e+01 2.1123917212844873e+01 -1 -1 0 -2894 965 2 3.8818749381521300e-01 2.2400140867531587e+01 1.8072813606607230e+01 2.1214357055362939e+01 0 1 0 -2920 974 1 -7.4414679730307309e-01 2.4285015990036879e+01 1.8212687527780602e+01 1.5899101547282720e+01 0 0 0 -1300 434 1 -7.4822613276536010e-01 2.0800383473570825e+01 1.8465849784410672e+01 2.2204085512601551e+01 0 0 0 -1302 434 2 3.5738914623477813e-01 2.0487439209381307e+01 1.9408482096827495e+01 2.2244477767286060e+01 0 0 0 -1149 383 2 4.0392969453323502e-01 2.3972783245823674e+01 1.7019307704670378e+01 2.2751918520546074e+01 0 0 -1 -1916 639 2 3.3613964528713897e-01 1.8997302249916039e+01 2.0878099496222401e+01 2.1543113259621361e+01 0 0 0 -1915 639 1 -7.6926925654261991e-01 1.9342540467916194e+01 2.0868884698068083e+01 2.2407952677753215e+01 0 0 0 -1964 655 2 4.0187800998034429e-01 1.9927315977925936e+01 2.1596354965791296e+01 2.2454076308555667e+01 0 0 0 -1909 637 1 -7.2852885325819183e-01 2.1619076440640026e+01 2.2641295424567502e+01 2.2370432722815025e+01 0 -1 0 -1923 641 2 3.3898145705281468e-01 2.2544854891054413e+01 2.2316554998686897e+01 2.2403423703457392e+01 0 -1 0 -2939 980 2 3.8223651968555239e-01 1.8668189867310097e+01 1.6390840966832787e+01 1.7277087787602792e+01 0 0 0 -2484 828 2 3.7307712781596902e-01 7.6359864421142936e+00 3.0975696403139899e+01 2.5643613489742151e+01 0 0 0 -1652 551 2 3.5794883155325735e-01 5.0427297969356157e+00 3.0832567574938459e+01 2.2775451059533083e+01 0 -1 0 -2174 725 2 3.8363043313262279e-01 2.6110317662816119e+01 2.0443548485530055e+01 2.1075769124118832e+01 0 -1 0 -1391 464 2 3.7290317354576341e-01 2.7111382834942216e+01 2.1894183992540228e+01 1.6151440859766556e+01 0 0 0 -2358 786 2 3.8008604609966268e-01 9.3263411365665654e+00 1.5948262579326640e+01 1.5980403394054617e+01 0 0 0 -2833 945 1 -7.7680805794190866e-01 2.1889033295979491e+01 1.6742009812923342e+01 1.5635214724251041e+01 0 0 0 -2552 851 2 3.4690752209002046e-01 3.0224935614711704e+01 1.8289187070138855e+01 2.0077458156807612e+01 -1 0 0 -2551 851 1 -6.9442600053127224e-01 2.9902739622371950e+01 1.7510894175084186e+01 2.0595281762567023e+01 -1 0 0 -2671 891 1 -7.8981279469468568e-01 2.7038448668057629e+01 1.6109327801297642e+01 2.1980652823958877e+01 0 0 0 -2553 851 2 3.4054194871104354e-01 2.9932848115363079e+01 1.7888113838751423e+01 2.1503092451354249e+01 -1 0 0 -2673 891 2 3.5462103090337649e-01 2.7642869727354125e+01 1.6345687751129560e+01 2.1314664342917510e+01 0 0 0 -1339 447 1 -7.1505846326089539e-01 3.0264441714750088e+01 2.0001447498995709e+01 1.8559038714274156e+01 0 0 -1 -1340 447 2 3.8626202073150107e-01 3.0830832560579825e+01 2.0507250999418257e+01 1.8012385725203700e+01 0 0 -1 -1341 447 2 3.6031343875946437e-01 3.0053357011462392e+01 2.0572482492739759e+01 1.9371104911776399e+01 0 0 -1 -133 45 1 -7.3076751616149360e-01 2.8186702082558806e+01 2.0605350989896191e+01 1.6998728028641448e+01 -1 0 0 -2288 763 2 3.6741410489919724e-01 2.8499639413149080e+01 1.9791474184393412e+01 1.6047710584435372e+01 -1 0 0 -88 30 1 -7.3974407319908686e-01 3.0642275184573499e+01 2.2444786654927732e+01 1.7303369220099167e+01 -1 0 0 -2147 716 2 3.7038335781937110e-01 2.7025335670146816e+01 1.9672959580777288e+01 1.7723089611091176e+01 0 0 0 -2148 716 2 3.7651016205666127e-01 2.6496805034932265e+01 1.9443354706358477e+01 1.9246338887601325e+01 0 0 0 -2146 716 1 -7.2104093540569658e-01 2.6280388468820234e+01 1.9237152426356072e+01 1.8293702857600966e+01 0 0 0 -654 218 2 3.4769438023806692e-01 1.7623658204021812e+01 1.5643832632787415e+01 2.1610894594067368e+01 0 0 0 -1877 626 2 3.2112080310880986e-01 1.3870985175542049e+01 2.9875449119889161e+01 1.5792307590707940e+01 0 -1 0 -651 217 2 3.9286800400053029e-01 2.9192664370322753e+01 1.7711724994172208e+01 1.5802045269930654e+01 0 0 0 -134 45 2 3.9047567034986069e-01 2.9008881684968355e+01 2.0503523319701635e+01 1.7547946173593918e+01 -1 0 0 -2275 759 1 -6.4774583495306726e-01 2.9360709086511637e+01 1.6935661418682951e+01 1.6403866516251814e+01 -1 0 0 -2173 725 1 -7.3404361623082071e-01 2.6633380646204319e+01 1.9635410283715427e+01 2.1140455287178625e+01 0 -1 0 -89 30 2 3.8746167291159628e-01 2.9827072030322309e+01 2.2528212416225113e+01 1.6740639784501301e+01 -1 0 0 -1392 464 2 3.7102612806233226e-01 2.8390741155099267e+01 2.0538409814570340e+01 2.1339382996650819e+01 0 0 0 -1974 658 2 3.9124312565084696e-01 1.1007641386595305e+01 1.5652532773548923e+01 2.2598675846856850e+01 0 -1 0 -1766 589 2 4.1012433962073519e-01 1.2093625146649675e+01 1.5616728719308202e+01 2.4139661025106957e+01 0 0 0 -1390 464 1 -7.4075990346411791e-01 2.8955462743157913e+01 2.1197977826611819e+01 2.0980214939671992e+01 0 0 0 -14 5 2 3.3216402906072906e-01 3.0807338651004379e+01 2.0010596347711214e+01 2.3173548166399449e+01 -1 0 -1 -13 5 1 -7.1823393407369551e-01 3.0181623694281640e+01 1.9196841376224548e+01 2.3232789797521033e+01 -1 0 -1 -15 5 2 3.6643141516383010e-01 3.0824115746408197e+01 1.8564929535970997e+01 2.3620467024305327e+01 -1 0 -1 -2946 982 2 3.5464067049253556e-01 2.8347711815742397e+01 2.1955609811562447e+01 2.0786727957214900e+01 0 0 0 -609 203 2 3.3726211282363161e-01 2.6722126209328781e+01 2.1864245394913599e+01 1.8227963199264458e+01 0 0 0 -2114 705 2 3.6294635940713710e-01 3.0569382111652988e+01 2.2092167602819217e+01 2.1384765432168759e+01 0 -1 0 -2175 725 2 3.6956857299387247e-01 2.6775328288934990e+01 1.9391414265406720e+01 2.2070995898872191e+01 0 -1 0 -2277 759 2 3.4130372475137410e-01 2.8461490696868786e+01 1.6572290727888070e+01 1.6616339409653147e+01 -1 0 0 -607 203 1 -6.7870281831109713e-01 2.6848217984759554e+01 2.2629066216455989e+01 1.8799515229904490e+01 0 0 0 -1742 581 2 3.7733924902200827e-01 6.2124954020967262e+00 1.7260377098056626e+01 1.5550962438447414e+01 0 0 0 -1330 444 1 -7.8496253413332018e-01 2.3270089834049863e+01 2.6534928251474859e+01 2.4065661470658988e+01 0 0 -1 -887 296 2 3.6946757095486138e-01 2.0040782937944233e+00 3.0061591848212984e+01 1.8686775775007728e+01 0 0 0 -737 246 2 3.7155224071670767e-01 3.5949238954512595e+00 2.9850888051310818e+01 1.7110461504270695e+01 1 0 0 -835 279 1 -7.3994905485209217e-01 1.9001215466248231e+00 3.0243246749550234e+01 2.2811929013447735e+01 0 0 0 -1482 494 2 3.2537375859813600e-01 1.9086213375222647e+00 2.4433742767312904e+01 1.6078242920839681e+01 1 0 0 -2379 793 2 3.8172034119539050e-01 1.1872760584299091e+00 2.8351728036452197e+01 1.6573683527548113e+01 0 0 0 -1658 553 2 3.7598090017212937e-01 4.3362350139691737e+00 2.3622345476035559e+01 1.8845548092946810e+01 0 0 0 -1448 483 2 3.9598335182587041e-01 2.8956507372101109e-01 2.4211592747288478e+01 2.1898365888876480e+01 1 0 0 -1816 606 1 -7.4039505542705264e-01 4.4548197327358166e+00 2.9048771957014083e+01 2.0364574050961149e+01 0 -1 0 -1608 536 2 3.8415672467719181e-01 3.4094829216785132e+00 2.4810241251644356e+01 2.3214769057767086e+01 0 -1 0 -1480 494 1 -7.4321766030088710e-01 1.3151549441660131e+00 2.4699572551697230e+01 1.6845119956996410e+01 1 0 0 -1657 553 1 -7.5391051177746882e-01 4.6406861138286324e+00 2.4411640466564599e+01 1.9369193193625961e+01 0 0 0 -1607 536 2 3.4950019252893449e-01 3.9391172258977307e+00 2.4668809266498091e+01 2.1762309228807219e+01 0 -1 0 -168 56 2 3.9778111545845751e-01 4.8475093205966653e+00 2.6357860575154756e+01 2.2702131321288228e+01 0 -1 0 -890 297 2 3.6811701282287895e-01 6.2511905814711950e+00 2.6600886977625279e+01 1.9000587336021255e+01 0 0 0 -2218 740 1 -7.7505098638268577e-01 1.6972191076454666e+00 2.7678944955362095e+01 2.0391031360233221e+01 1 -1 0 -2220 740 2 3.2792785896845461e-01 1.0077534081334456e+00 2.6993360710017047e+01 2.0440971238793225e+01 1 -1 0 -1659 553 2 3.8144052861295125e-01 4.0897156698269264e+00 2.5182641988673712e+01 1.9084729215070265e+01 0 0 0 -891 297 2 3.5274381077766698e-01 6.2083068484585358e+00 2.5461600949760292e+01 2.0013337957564250e+01 0 0 0 -889 297 1 -7.6685202371536598e-01 6.4538906183109939e+00 2.6406976884223820e+01 1.9888325559538149e+01 0 0 0 -2389 797 1 -7.4567975904915462e-01 2.9232523437030604e+00 2.6152195051468794e+01 1.8331498017525611e+01 0 0 0 -2391 797 2 3.9326254808262040e-01 2.3780527706042967e+00 2.5518835027557358e+01 1.7847227822781967e+01 0 0 0 -2219 740 2 3.5504751925497596e-01 1.9382781297843090e+00 2.7899885033152866e+01 2.1228752311420461e+01 1 -1 0 -2390 797 2 3.5492559747849900e-01 2.3951946751869384e+00 2.6463788627000607e+01 1.9098362572217635e+01 0 0 0 -1606 536 1 -7.8273983031529759e-01 3.5379376735739876e+00 2.5287692988003748e+01 2.2404395229677025e+01 0 -1 0 -824 275 2 3.5757835209464606e-01 1.6778081964300646e+00 2.8544713183763236e+01 1.8504583158296640e+01 0 0 0 -1447 483 1 -7.8084231982991281e-01 4.1723176459940631e-01 2.5098881068255277e+01 2.2252886266331245e+01 1 0 0 -886 296 1 -7.4338410648607733e-01 1.9580275389767821e+00 2.9338943355103435e+01 1.8031630550089133e+01 0 0 0 -1449 483 2 3.4068386353378610e-01 1.3526734389341162e+00 2.5260052242748490e+01 2.2189683785804149e+01 1 0 0 -1817 606 2 3.3863263823282508e-01 4.7495420765212675e+00 2.8245071703044033e+01 2.0815730761767309e+01 0 -1 0 -1818 606 2 3.6230976516486735e-01 3.6050574599956482e+00 2.8796585338422496e+01 2.0080230250081200e+01 0 -1 0 -836 279 2 3.7944051003969576e-01 1.8343953575126255e+00 2.9269659788844582e+01 2.2711957199106845e+01 0 0 0 -1619 540 2 3.0865492332967515e-01 5.2531346251025601e+00 2.5839475428431044e+01 1.7155063367279972e+01 0 -1 0 -1553 518 2 3.3759533236758055e-01 2.3331642385303124e+00 2.6798799991892459e+01 2.3233869925364218e+01 0 -1 0 -2888 963 2 3.7221098412170578e-01 2.1736036678608901e+00 3.0554994531806472e+01 3.0547439384624489e+01 1 0 0 -1618 540 1 -7.2150748307404122e-01 6.0675544812496733e+00 2.6343445561732437e+01 1.6914227835244521e+01 0 -1 0 -166 56 1 -7.7798256713464498e-01 5.4730584070999084e+00 2.7036778709998938e+01 2.2512398414187615e+01 0 -1 0 -1481 494 2 3.6273777416015407e-01 7.8842479601488002e-01 2.5379055134433440e+01 1.6393740924115864e+01 1 0 0 -1622 541 2 3.7958629953034284e-01 3.0355259666111596e+01 2.8912811005557533e+01 2.8734220869269837e+01 -1 -1 0 -2658 886 2 3.3046556022745233e-01 1.2616239059600234e+01 2.3718554088655857e+01 1.6156384330192726e+01 0 0 0 -2967 989 2 3.9694405617735240e-01 7.8619980381494770e-01 1.5852233150811893e+01 3.0191631415087002e+01 1 0 0 -1536 512 2 2.9020479076616773e-01 1.2721807801685799e+01 3.0544256463690271e+01 2.7995926123662766e+01 0 -1 0 -1521 507 2 3.8855343951159921e-01 2.9008050743040521e+01 2.4575896530061790e+01 2.9455934354360195e+01 -1 -1 0 -1581 527 2 3.4044964783745879e-01 6.6704753023468610e+00 2.2146446156744457e+01 1.7720354237761928e+01 0 0 0 -1579 527 1 -7.3079233402842936e-01 6.8473799725083850e+00 2.2032389149695376e+01 1.6775499150127768e+01 0 0 0 -1710 570 2 3.3164288297072542e-01 6.3442717039164833e+00 2.9399264140279374e+01 1.7809259870664633e+01 0 -1 0 -1186 396 1 -7.1762498153613963e-01 1.2061130362862064e+01 2.7710725555119232e+01 1.6303129930368414e+01 0 0 0 -2543 848 2 3.9132667210679384e-01 8.0328620678882103e+00 2.7360249799475074e+01 2.0200877092041747e+01 0 0 0 -2542 848 1 -7.4335551537365108e-01 8.8588566111759999e+00 2.7839565103082613e+01 2.0158454636607239e+01 0 0 0 -1580 527 2 3.6660103810031852e-01 7.7822935418275607e+00 2.2187181491108323e+01 1.6653747143274629e+01 0 0 0 -905 302 2 3.8125581257206370e-01 9.9809440180732878e+00 2.5058303935333765e+01 1.8708120984336677e+01 0 0 0 -904 302 1 -6.6718807913192824e-01 9.7640093485817729e+00 2.5881439346480942e+01 1.8157436649501598e+01 0 0 0 -2028 676 2 3.7288708414509059e-01 1.1465150032820725e+01 2.2959931806776911e+01 2.2204695762379774e+01 0 -1 0 -189 63 2 3.6496297873456091e-01 9.5150793476160480e+00 2.6576982078446441e+01 1.8746133122372619e+01 0 0 0 -1683 561 2 3.3609316699776010e-01 9.5418941214948010e+00 2.4143828787022262e+01 2.1454915643622822e+01 0 0 0 -2544 848 2 3.5925502517564772e-01 8.7192940972858128e+00 2.8455501814449036e+01 1.9433901210997096e+01 0 0 0 -2026 676 1 -7.6000936424524745e-01 1.1481342449937031e+01 2.4001709511526855e+01 2.1916569286833848e+01 0 -1 0 -167 56 2 3.5939831747318335e-01 5.8399563755352411e+00 2.6838134911364133e+01 2.1648050653970635e+01 0 -1 0 -2387 796 2 3.7171811309155250e-01 2.7904319420004885e+01 2.8455017550611686e+01 3.0357763291847803e+01 -1 0 0 -99 33 2 3.6473960429000868e-01 1.0731596183910357e+01 2.2867900148968648e+01 1.9092941586161427e+01 0 -1 0 -2700 900 2 3.7199849930061141e-01 2.0852448107235148e+01 1.7054906030418309e+01 3.0575464308630306e+01 0 0 0 -97 33 1 -7.5071721085194021e-01 1.1049890349600167e+01 2.3840135524714370e+01 1.9254247088408178e+01 0 -1 0 -800 267 2 3.5710118669031121e-01 2.4035493305068787e+01 3.0830422818147284e+01 2.5625406350025436e+01 -1 0 -1 -98 33 2 3.9763138146762189e-01 1.1341014006311463e+01 2.3953077489078169e+01 2.0157369867347231e+01 0 -1 0 -1682 561 2 3.5912858910436246e-01 8.3063524807804434e+00 2.3893927687367249e+01 2.2415732600795270e+01 0 0 0 -1746 582 2 4.0922736998545300e-01 1.0218875115844151e+01 2.7265474418666845e+01 2.1122927422688214e+01 0 -1 0 -1681 561 1 -7.1194996980377623e-01 8.5989116638959242e+00 2.4407703998472464e+01 2.1619795482451607e+01 0 0 0 -1745 582 2 3.7183887959671857e-01 1.0709595644695415e+01 2.5864885948545112e+01 2.1638167364185758e+01 0 -1 0 -1744 582 1 -7.3448628392948379e-01 1.0884850457999093e+01 2.6795137266220760e+01 2.1657055121225177e+01 0 -1 0 -2656 886 1 -7.3595319421670635e-01 1.2278339467500622e+01 2.4569208954327447e+01 1.6485816072697872e+01 0 0 0 -2657 886 2 3.4676392257192501e-01 1.1761127253799433e+01 2.4296052154892031e+01 1.7274728627990154e+01 0 0 0 -1708 570 1 -7.2804739697530674e-01 7.2541583481233065e+00 2.9027374704991516e+01 1.7779498249360810e+01 0 -1 0 -1769 590 2 3.6420768175652235e-01 1.0065218192421860e+01 2.4199319642198414e+01 2.4657457497983135e+01 0 0 0 -1814 605 2 3.4098094159333331e-01 6.6857723747746620e+00 2.9926880883147600e+01 2.1470524305880222e+01 0 -1 0 -1704 568 2 3.4684011316705121e-01 7.0846777559195795e+00 2.8056444158164609e+01 1.7623210577804553e+01 0 -1 0 -1026 342 2 3.8781539415751987e-01 1.0532268753529356e+01 2.7258597941924911e+01 2.3254135035277464e+01 0 0 0 -1815 605 2 3.6556475865578497e-01 5.4602084228133503e+00 3.0496894748905664e+01 2.0791504545758951e+01 0 -1 0 -1532 511 2 4.1676796539526711e-01 2.6985021244925864e+00 3.0332255359412574e+01 2.3328311399892229e+01 0 -1 0 -941 314 2 3.3011655614087365e-01 1.0235075396833105e+01 2.3914868421003952e+01 1.6431859224198476e+01 0 0 0 -1960 654 1 -7.4577671936548362e-01 1.0672557369495419e+01 2.2202495197016393e+01 3.0797234871241518e+01 0 0 0 -1187 396 2 3.5475340768696395e-01 1.2074232581338990e+01 2.6801524266253413e+01 1.6557468728805507e+01 0 0 0 -1263 421 2 3.6177104414988503e-01 6.8798332669191469e+00 2.8866167446549504e+01 1.6015683362064738e+01 0 0 0 -1025 342 2 3.4740510085813531e-01 1.3831000128405167e+01 2.9956041032301236e+01 2.0265276112271710e+01 0 0 0 -1887 629 2 3.4401208015117996e-01 1.3693521295342007e+01 2.9883365004670086e+01 1.8803328339921094e+01 0 -1 0 -1024 342 1 -7.4732187151657015e-01 1.4087397191898239e+01 2.9404061588278498e+01 1.9492453858151610e+01 0 0 0 -530 177 2 3.7072902686858572e-01 1.8333980877958460e+01 2.8495650933719439e+01 2.1013438094557412e+01 0 -1 0 -2668 890 1 -7.2586779053953332e-01 1.6468616660246916e+01 3.0200576834508450e+01 1.8107458376186266e+01 0 0 0 -1154 385 2 3.4661338446117257e-01 1.5147437638589933e+01 2.1087505274478012e+01 1.8824016883184473e+01 0 0 0 -2027 676 2 3.6997504158884464e-01 1.2396017155534320e+01 2.4352657259825314e+01 2.2151001049086265e+01 0 -1 0 -1140 380 2 3.4746339177485541e-01 1.3293086927379797e+01 2.8899256805032657e+01 2.1625048514514795e+01 0 0 -1 -964 322 1 -7.4458835564014869e-01 1.4019783567999925e+01 2.4794847815034593e+01 2.1473518938176689e+01 0 0 -1 -1625 542 2 3.4774047102489730e-01 1.5675859432699948e+01 2.4603413527062351e+01 1.8148153647608549e+01 0 -1 0 -2620 874 1 -7.0699379411909236e-01 1.4511457350057446e+01 2.6632506733136950e+01 1.9393603708328243e+01 0 0 0 -2622 874 2 4.0309427424184130e-01 1.4177434274016157e+01 2.7522401107493817e+01 1.9327041279340989e+01 0 0 0 -965 322 2 3.7670942870363838e-01 1.4795561586879975e+01 2.4239948137266012e+01 2.1598707770989751e+01 0 0 -1 -966 322 2 4.0283551317030708e-01 1.4130893948778615e+01 2.5315683513789242e+01 2.0618639203639322e+01 0 0 -1 -2621 874 2 3.7009770339032583e-01 1.5534641821589435e+01 2.6597926923867742e+01 1.9152049738736999e+01 0 0 0 -546 182 2 3.9382516461967920e-01 1.7478807026721604e+01 2.5575790465036320e+01 1.9552121382113413e+01 0 0 0 -1109 370 2 3.9603631716475218e-01 1.7587893381911218e+01 2.7037447379780758e+01 1.8842235312372665e+01 0 0 0 -544 182 1 -7.5072975927881780e-01 1.7106796996545597e+01 2.6158125046985724e+01 1.8868433779044160e+01 0 0 0 -2521 841 1 -7.4647176537913629e-01 1.6428268017121251e+01 2.3429442241142524e+01 2.2041669613978961e+01 0 0 0 -529 177 1 -7.0375099083884907e-01 1.8131769227280607e+01 2.8795775098271839e+01 2.1924862280486551e+01 0 -1 0 -531 177 2 3.5122400712037394e-01 1.8980691893033367e+01 2.9179868653899451e+01 2.2242680310203820e+01 0 -1 0 -2570 857 2 3.6124228882708764e-01 1.6866886169502983e+01 2.3823010403779197e+01 1.6164612093841882e+01 0 0 0 -2021 674 2 3.5382380688622811e-01 8.1392963818983528e+00 2.9579488267733431e+01 3.0253733617405214e+01 0 -1 0 -2523 841 2 3.6929354710445378e-01 1.7232548888680952e+01 2.3622220153421953e+01 2.1593006085617734e+01 0 0 0 -1256 419 2 3.8051453201239649e-01 1.9030161814415106e+01 2.8274253626770872e+01 1.8113350609912985e+01 0 0 0 -1454 485 2 3.5206106808239324e-01 1.7664833885406878e+01 2.9013449343858760e+01 1.8533401541384283e+01 0 0 0 -1255 419 1 -7.5347409426897416e-01 1.8438052720492330e+01 2.8456261883209745e+01 1.8922797934676712e+01 0 0 0 -2083 695 1 -7.0262180250070194e-01 1.8718730438484116e+01 2.4754632237447048e+01 2.0588384405181767e+01 0 -1 0 -1624 542 1 -7.3956337810603157e-01 1.5475438283386362e+01 2.3771735795258046e+01 1.7641629969102098e+01 0 -1 0 -1138 380 1 -7.6146681499474245e-01 1.3501118733959119e+01 2.9300473626089911e+01 2.2448873836361070e+01 0 0 -1 -2474 825 2 3.5290603632116113e-01 1.2611528613337823e+01 2.9176722611242191e+01 2.2934708093577072e+01 0 0 0 -1626 542 2 3.2229356468678999e-01 1.4641124069320480e+01 2.3957978604511425e+01 1.7192156142550395e+01 0 -1 0 -2669 890 2 3.4717046986472083e-01 1.5952070580594635e+01 2.9875827566246453e+01 1.8883612975171534e+01 0 0 0 -1901 634 2 3.5317885571686453e-01 1.4822065551027405e+01 3.0854677505537257e+01 1.6477916041192977e+01 0 -1 0 -1136 379 2 4.0767392731456431e-01 2.6442879725683227e+01 1.5660008620575594e+01 2.8388589670819208e+01 0 0 -1 -1176 392 2 3.9978903776553631e-01 1.6613533320728646e+01 2.8201931388980782e+01 2.2813638686767995e+01 0 0 -1 -1174 392 1 -7.1174938226555085e-01 1.5872914593859974e+01 2.7707197555882992e+01 2.3184198145441943e+01 0 0 -1 -1286 429 2 3.4628438558018088e-01 1.3704448050920417e+01 2.4838717995177532e+01 2.3350832111526049e+01 0 0 0 -1175 392 2 3.8363519506068650e-01 1.5078492004653695e+01 2.8150711279424037e+01 2.2899483423447752e+01 0 0 -1 -1651 551 1 -7.8285060938598927e-01 4.4194403360896963e+00 3.0887922791398800e+01 2.3466532786569424e+01 0 -1 0 -626 209 2 3.9621845435720282e-01 2.7847615437997295e+01 3.0501424331885072e+01 2.2180508767960035e+01 0 -1 -1 -1992 664 2 3.6051410708628318e-01 2.0626178995937018e+01 3.0100602719890823e+01 2.3131218091174588e+01 0 -1 0 -686 229 2 3.7421055410712623e-01 2.3659852309891750e+01 3.0028143307556778e+01 1.8342547479037314e+01 0 -1 0 -2079 693 2 3.9583162780992048e-01 1.9723128741721968e+01 2.4988631778753060e+01 2.0407977996557332e+01 0 -1 0 -1932 644 2 3.4421227945259986e-01 2.1344207544968793e+01 2.7851226360959707e+01 2.1272955535337648e+01 0 -1 0 -2094 698 2 3.6354366099202706e-01 2.0173786607516888e+01 2.9422326227873164e+01 1.9269407748667831e+01 0 -1 0 -2085 695 2 3.8122818574191608e-01 1.8605509104893063e+01 2.3830764690561470e+01 2.0277565134432361e+01 0 -1 0 -1930 644 1 -7.1467213111077366e-01 2.1061847246342328e+01 2.6972145939373167e+01 2.0962496030190213e+01 0 -1 0 -2861 954 2 3.7137108517621442e-01 2.4010162127788433e+01 2.8885012400371821e+01 2.2101341853608798e+01 0 0 0 -1493 498 2 3.1921227646168970e-01 2.1941377844299840e+01 2.6041777970915742e+01 1.6078635848747432e+01 0 0 0 -2645 882 2 3.7965892203550533e-01 2.1310205260161514e+01 2.3565953570186085e+01 2.0756286030596012e+01 0 0 0 -2646 882 2 3.5161030539515398e-01 2.1820045308662191e+01 2.3535148380306374e+01 1.9184269218590966e+01 0 0 0 -2644 882 1 -7.1520438057815272e-01 2.1191335657157019e+01 2.3965552173549941e+01 1.9868811349623044e+01 0 0 0 -2000 667 2 3.1274855451952654e-01 2.2624599183228213e+01 2.6435976023384825e+01 1.7772537425430986e+01 0 -1 0 -2001 667 2 3.6783470505669036e-01 2.2505073076895595e+01 2.5088515871338409e+01 1.8459579740222669e+01 0 -1 0 -1999 667 1 -7.3642715313987328e-01 2.2887589255464917e+01 2.5970513611562644e+01 1.8578068888355745e+01 0 -1 0 -1501 501 1 -6.9287330548869552e-01 2.0836175516565266e+01 2.5384126095132398e+01 2.3299606156038639e+01 -1 -1 0 -1503 501 2 3.7331495611030308e-01 2.0789067022777637e+01 2.5767747167377664e+01 2.2398845118656855e+01 -1 -1 0 -87 29 2 3.8326523475718316e-01 2.4548780893894236e+01 2.5925905445403366e+01 1.9298195248266229e+01 -1 0 0 -714 238 2 3.6404874289258238e-01 2.2611542123142179e+01 2.9062648080099102e+01 1.6401000149738167e+01 0 -1 0 -1494 498 2 3.6072749688955152e-01 2.1849896753612629e+01 2.4555361021431327e+01 1.6572136572799668e+01 0 0 0 -1492 498 1 -7.3316391226676914e-01 2.1376452327114844e+01 2.5236755111693732e+01 1.6013729069238671e+01 0 0 0 -712 238 1 -7.6409342265939650e-01 2.2275477138770068e+01 2.8254020254038011e+01 1.5978890268152776e+01 0 -1 0 -1502 501 2 3.2750900876334710e-01 2.1854605585089143e+01 2.5496881375028856e+01 2.3527282653141938e+01 -1 -1 0 -1979 660 2 3.5852533808203746e-01 2.1799106933111819e+01 2.6740398500441689e+01 2.0401528248955636e+01 0 -1 0 -788 263 2 3.6507823480155110e-01 6.4987601079497761e+00 1.5912072241343145e+01 2.7219369238076688e+01 0 0 -1 -940 314 1 -7.5993433492151319e-01 9.4971805038864261e+00 2.3359367531046708e+01 1.6091599198667009e+01 0 0 0 -1477 493 1 -7.1577442377359546e-01 2.3053780979927641e+01 2.8890241959665630e+01 2.2208804037335931e+01 0 0 0 -2092 698 1 -7.5466715536911633e-01 2.0846215571218774e+01 3.0087135731962384e+01 1.9428012576765440e+01 0 -1 0 -1884 628 2 3.5873098249391222e-01 2.0613278823251694e+01 2.8033346049140139e+01 1.6555712592891147e+01 0 -1 0 -2093 698 2 3.5280392882267042e-01 2.1063815814163046e+01 3.0163670223973018e+01 2.0433479183754347e+01 0 -1 0 -2660 887 2 3.5286436995863907e-01 2.7487043461046728e+01 1.5571799794734668e+01 2.2627831911794022e+01 0 0 0 -1334 445 2 2.7821251700341615e-01 2.6832516560421453e+01 2.0818061555282569e+01 3.0764535328747993e+01 0 0 -1 -1487 496 2 3.4957869916832085e-01 2.9561919775415696e+01 3.0500099929317116e+01 1.5755978158247848e+01 0 0 0 -1764 588 2 3.5788303295335155e-01 1.6073523692620853e+01 2.1330068963384001e+01 1.5693728250753868e+01 0 0 0 -2251 751 1 -6.5790732008145958e-01 2.7060622111411480e+01 2.3138700873311208e+01 2.2664690476658780e+01 -1 0 0 -1312 438 1 -7.3031361001199424e-01 2.5070922222013131e+01 3.0006153655259908e+01 1.9220975369543176e+01 0 0 0 -1313 438 2 3.5012392042868484e-01 2.5663626027006142e+01 2.9716243149321699e+01 1.8394812199552447e+01 0 0 0 -1425 475 2 3.7723369047906075e-01 2.8704011049145159e+01 2.8681496250141464e+01 1.8905034529406556e+01 0 -1 0 -1423 475 1 -7.6388720290780832e-01 2.9459068497605028e+01 2.8458150964772159e+01 1.9529336963744697e+01 0 -1 0 -2859 953 2 3.3898463393995498e-01 2.4412946085468128e+01 2.5266811427507651e+01 2.2706451280232127e+01 0 0 0 -1314 438 2 3.9911783707008580e-01 2.5230358647721125e+01 2.9296964356321265e+01 1.9878087884485009e+01 0 0 0 -85 29 1 -7.2176281150996591e-01 2.5501815796869369e+01 2.5912885136275552e+01 1.9550462972877664e+01 -1 0 0 -86 29 2 3.7828471673898134e-01 2.5977024907606967e+01 2.6044837885169201e+01 1.8729185148217773e+01 -1 0 0 -2857 953 1 -7.1861125738522080e-01 2.4810140820814162e+01 2.4609540156158999e+01 2.2135171478698584e+01 0 0 0 -2858 953 2 3.5289203010979869e-01 2.5210821844548992e+01 2.5198328136581399e+01 2.1434880036131528e+01 0 0 0 -2860 954 1 -7.5285457172525971e-01 2.5601738315333559e+01 2.8319951749867720e+01 2.1315971798595246e+01 0 0 0 -2329 777 1 -7.1587306170789655e-01 1.2745333444452337e+01 3.0713852883838449e+01 2.8991351654586076e+01 0 0 0 -210 70 2 3.6226682833164664e-01 1.4143902594545324e+01 1.9423887559536048e+01 3.0612047887587707e+01 0 -1 -1 -2959 987 1 -7.3013535989558320e-01 3.0237182633524661e+01 2.5890023663243380e+01 1.9740863231399143e+01 0 0 0 -2960 987 2 3.5622862537414779e-01 3.0299131846153013e+01 2.5693359166793037e+01 2.0688122868310288e+01 0 0 0 -1257 419 2 3.5933204238177729e-01 2.5657296690931656e+01 2.7455889667437290e+01 2.0917270722460326e+01 0 0 0 -2862 954 2 3.7250045307840729e-01 2.6255280745453227e+01 2.8288700086652774e+01 2.2064979665634123e+01 0 0 0 -1922 641 2 3.4362641349359224e-01 2.6976547696003230e+01 2.6801524385294677e+01 1.6077574805213192e+01 0 -1 0 -655 219 1 -7.3923104617492019e-01 2.8532214575804154e+01 2.4786964313114087e+01 1.7945087656029163e+01 0 0 0 -2961 987 2 3.8798185001293345e-01 3.0122827747604592e+01 2.6862559208414233e+01 1.9598814034183825e+01 0 0 0 -1239 413 2 3.4811734015773615e-01 2.9401706320264012e+01 2.5196281784305587e+01 1.6473066862725489e+01 0 0 0 -1980 660 2 3.5305149377366718e-01 2.5905406120992328e+01 2.5790280102005948e+01 1.6219988346805874e+01 0 -1 0 -2828 943 2 3.9278023582779725e-01 2.7598890178238655e+01 2.3144953493614747e+01 1.8505526299270542e+01 0 0 0 -1989 663 2 3.4454112243938917e-01 3.0076554704847812e+01 2.6633317441455134e+01 2.2689203245614717e+01 0 -1 0 -1978 660 1 -7.6844919196992867e-01 2.6583171425421828e+01 2.6293726405368989e+01 1.6752193747778342e+01 0 -1 0 -2885 962 2 3.9118904723554615e-01 2.8359710255059280e+01 2.7730344669396558e+01 2.2859672370126003e+01 0 0 0 -656 219 2 3.9255638374308610e-01 2.9045824561554294e+01 2.5362944038839306e+01 1.8596145177741722e+01 0 0 0 -657 219 2 3.7129585855316388e-01 2.7893426569355885e+01 2.5397429958062208e+01 1.7541061765761540e+01 0 0 0 -2884 962 1 -7.3268410251980332e-01 2.7413006812704335e+01 2.7529314741846104e+01 2.3251247739875684e+01 0 0 0 -1948 650 1 -7.4953320836361537e-01 2.8122726365632381e+01 3.0850868487460112e+01 2.7573055039574019e+01 0 -1 0 -1385 462 2 3.3269047709986116e-01 2.6842454196208301e+01 2.8600625368696640e+01 1.6957790706377303e+01 0 0 0 -1384 462 1 -7.1975854813490003e-01 2.7167743036007774e+01 2.9237737336757228e+01 1.7610578135538887e+01 0 0 0 -2253 751 2 3.8404855165492230e-01 2.6250991974089555e+01 2.3689503084155746e+01 2.2698207350136617e+01 -1 0 0 -1990 664 1 -7.5799876694940427e-01 2.0310033339867175e+01 3.0558379448676224e+01 2.2290969717053880e+01 0 -1 0 -504 168 2 3.2915485874146866e-01 2.7263663448182932e+01 3.0494235989220375e+01 2.7481866585701230e+01 0 -1 -1 -2947 983 1 -7.3195509874969900e-01 2.6441829801977150e+01 2.5826687157912477e+01 2.5428823592552760e+01 0 0 0 -1424 475 2 3.9331289744865816e-01 2.9214220635044462e+01 2.8921798538790245e+01 2.0328427778120837e+01 0 -1 0 -2886 962 2 3.7960746802718409e-01 2.7191708866374935e+01 2.8239158756923270e+01 2.3829865930469452e+01 0 0 0 -1237 413 1 -7.3117183968274879e-01 2.9918237329244480e+01 2.5592796656982234e+01 1.5666137887588182e+01 0 0 0 -1952 651 2 3.7923751450845622e-01 2.0907546181404513e+01 1.6385037666537183e+01 1.8589971419953056e+01 0 0 0 -2952 984 2 3.8170399981523723e-01 2.8453831402895418e+01 3.0346460350421467e+01 2.8318315062606668e+01 0 0 0 -2982 994 2 3.5160848176065723e-01 2.1433520797686438e+00 1.9570177324108638e+01 2.3107669594727223e+01 1 0 0 -738 246 2 3.3881585883435528e-01 4.3942328605555732e+00 3.0940415646398296e+01 1.7571086406364834e+01 1 0 0 -2527 843 1 -7.2698607350615241e-01 2.3196844427726404e+00 2.8597361533093011e+01 3.0511378841156507e+01 0 0 0 -2385 795 2 3.8112394632777896e-01 2.9961022611046481e+01 3.0046928320472791e+01 2.9583730813162237e+01 -1 0 0 -2425 809 1 -7.1482193954971462e-01 3.3532621097783730e+00 1.9839960179927040e+01 3.0697845470502060e+01 0 0 0 -2044 682 1 -7.6541947644699238e-01 2.4080883844593615e+00 1.6570250945378213e+01 2.6274366783401948e+01 0 0 0 -2349 783 2 3.4925697880558282e-01 4.2177899621053410e+00 1.8625834447867678e+01 2.8263978262672715e+01 0 0 0 -1670 557 2 3.5537701753545869e-01 4.3957175266996851e+00 1.8261981054295262e+01 2.4220414729432971e+01 0 0 0 -2993 998 2 3.5601728201365512e-01 5.9966209851872598e+00 2.1505486325908254e+01 2.9316820119416924e+01 1 0 0 -2185 729 1 -7.2026698964259472e-01 5.9251447342090566e+00 2.1302848211743100e+01 3.0255932247279645e+01 1 -1 0 -2427 809 2 3.7781551298825800e-01 3.2391788583891357e+00 1.9129839771225384e+01 3.0004605488449087e+01 0 0 0 -2186 729 2 3.8086033796125646e-01 5.1316614119440169e+00 2.0823693620839357e+01 3.0628727699587035e+01 1 -1 0 -662 221 2 3.7040438123801894e-01 5.6057775253857596e+00 2.1244164183074147e+01 2.7714058504464710e+01 1 0 -1 -1669 557 1 -7.7973807097322501e-01 3.7105665137867598e+00 1.8465511511109611e+01 2.4917478135107892e+01 0 0 0 -661 221 1 -7.4345978647853916e-01 5.4534343238070910e+00 2.2178300475985267e+01 2.7535137116941208e+01 1 0 -1 -1671 557 2 3.7906399431028182e-01 3.6035188306125527e+00 1.9407400904731173e+01 2.5080826225205467e+01 0 0 0 -639 213 2 3.4775917502865855e-01 5.0086058037080203e+00 2.1304207456058961e+01 2.5805251422869500e+01 1 0 -1 -638 213 2 3.7575797283131918e-01 4.8161222937691592e+00 2.1373822266418401e+01 2.4186793679858802e+01 1 0 -1 -2609 870 2 3.6207718172912584e-01 2.5653745886657213e+00 1.7346433081956352e+01 2.5687148876610067e+01 0 0 0 -637 213 1 -7.5029474511640637e-01 4.3746138153245155e+00 2.1132142902691289e+01 2.5054344794489687e+01 1 0 -1 -1781 594 2 3.7299382573261469e-01 1.5271124588344611e+00 2.2359489900499078e+01 2.7318293041670938e+01 0 0 0 -1782 594 2 3.4965800040112033e-01 4.0408778846199250e-01 2.2811477995160018e+01 2.6495021835586197e+01 0 0 0 -1780 594 1 -6.6727446371460963e-01 7.6765915283417141e-01 2.1982486223802791e+01 2.6826298420496851e+01 0 0 0 -8 3 2 4.0004543789923119e-01 3.7389007622466433e+00 2.2956485676150958e+01 2.4736635630508982e+01 0 -1 -1 -2373 791 2 3.4132676429244602e-01 2.2320075841095659e+00 1.7572741224824838e+01 2.3968808897901820e+01 0 0 0 -2347 783 1 -6.9994644078339785e-01 3.2585968610693312e+00 1.8514001117853020e+01 2.8126629022433701e+01 0 0 0 -663 221 2 3.8517369262463574e-01 6.2863239824351833e+00 2.2550862664264713e+01 2.7125988994371482e+01 1 0 -1 -2985 995 2 3.5959307243929090e-01 2.7533647909566361e+00 2.0801544070023564e+01 2.3695961648486293e+01 1 0 0 -2980 994 1 -7.2435082162749465e-01 1.9530433639087641e+00 2.0497439297340019e+01 2.3255410862279671e+01 1 0 0 -2348 783 2 3.9242028395195871e-01 3.2298511116835784e+00 1.7896940828707912e+01 2.7452545440331555e+01 0 0 0 -1332 444 2 3.7557528071718405e-01 2.3335505391886112e+01 2.7170785156078885e+01 2.4806508931105750e+01 0 0 -1 -2970 990 2 3.6688522164120557e-01 2.1392287851070968e-01 1.6775029319005199e+01 2.8400191754781204e+01 1 0 0 -1164 388 2 3.7203740054446527e-01 2.3420702508344302e+01 1.5916410685922342e+01 2.7892214141606132e+01 0 0 -1 -877 293 1 -7.2797792673171768e-01 2.7326507547330130e+00 2.3122953324870057e+01 2.8587166585888376e+01 0 0 -1 -1373 458 2 3.7454744342175622e-01 3.5294120548527474e+00 2.2758599641007351e+01 2.8177262459028825e+01 1 0 -1 -878 293 2 3.4533057748804208e-01 2.7299791782970173e+00 2.2789702867485666e+01 2.9454504281095979e+01 0 0 -1 -1855 619 1 -7.4413045278774148e-01 2.0109463741570114e+01 2.8384278303775087e+01 3.0775028429911707e+01 0 -1 0 -789 263 2 3.2201335287888250e-01 8.0366521987961370e+00 1.6295480587007585e+01 2.6943826305270736e+01 0 0 -1 -1008 336 2 3.6199647950362324e-01 1.1433061008357118e+01 2.0584924781475298e+01 2.4739606332638903e+01 0 0 -1 -1007 336 2 3.3963757848030784e-01 1.1848870115635458e+01 1.9859120995618696e+01 2.6036267103374858e+01 0 0 -1 -2046 682 2 3.7504334709875575e-01 1.6784148202346003e+00 1.6097212511656824e+01 2.5866521603033110e+01 0 0 0 -1368 456 2 3.5296855135188632e-01 2.6786486543256075e+01 2.9770869533580811e+01 2.5853573431031720e+01 0 0 -1 -854 285 2 3.6495895283248919e-01 1.0286963693574066e+01 1.6226732856398215e+01 2.7079333688374668e+01 0 0 -1 -2580 860 2 3.7666573385358160e-01 8.0818711634162241e+00 1.9557816392836582e+01 3.0249395448745599e+01 0 0 0 -2984 995 2 3.4942380265166256e-01 7.3056665123708395e+00 2.4380438677743957e+01 2.9776738135504704e+01 1 0 0 -787 263 1 -7.1655311593151649e-01 7.1150450095111992e+00 1.6645050808161916e+01 2.6734791315587966e+01 0 0 -1 -2372 791 2 3.2708739682564875e-01 5.0403624953012516e+00 1.9460215584045418e+01 2.6762566269908149e+01 0 0 0 -2933 978 2 3.6884964838213624e-01 6.2588127909998352e+00 1.8712568461369344e+01 2.7358088496745232e+01 1 0 0 -2371 791 1 -7.6084226326464821e-01 5.7205299563339622e+00 1.9502373901037121e+01 2.7485782073226098e+01 0 0 0 -2579 860 2 3.7101854074803220e-01 7.3931112197157898e+00 1.9412394060699523e+01 2.8883205652423072e+01 0 0 0 -816 272 2 3.6774779926751000e-01 9.4885281301581639e+00 2.0502346966278203e+01 2.6628657758632169e+01 0 0 -1 -814 272 1 -7.4049522540214852e-01 8.9900266550976813e+00 2.0373456443070861e+01 2.7417177277438903e+01 0 0 -1 -1006 336 1 -7.4730406840951236e-01 1.1097194937958344e+01 2.0016171171720160e+01 2.5430917037415238e+01 0 0 -1 -815 272 2 3.5102478765766632e-01 9.6899271298978391e+00 2.0409386983556040e+01 2.8102725733044746e+01 0 0 -1 -929 310 2 3.5755448360355291e-01 1.2546024301591041e+01 2.0845001726412651e+01 2.8344045518432125e+01 0 0 -1 -2517 839 2 3.6053355160253997e-01 8.4146087133532834e+00 1.8066566043726258e+01 2.5923904072527709e+01 0 0 0 -2516 839 2 3.4208952252192504e-01 9.2010884982553840e+00 1.9021930393649431e+01 2.5203628674164495e+01 0 0 0 -2515 839 1 -6.8006417961155186e-01 8.3528672536724606e+00 1.8612341393371388e+01 2.5136481650863537e+01 0 0 0 -928 310 1 -7.4850589529028377e-01 1.1671665128308016e+01 2.0545031197013902e+01 2.8559542782304217e+01 0 0 -1 -930 310 2 3.5951898378706293e-01 1.1589631713643650e+01 2.0699238047084538e+01 2.9503360926302939e+01 0 0 -1 -411 137 2 3.6526854477137383e-01 1.0645338564008624e+01 1.8898674590499819e+01 2.8282499080327316e+01 0 -1 -1 -409 137 1 -7.3779704757276465e-01 1.0766834302382104e+01 1.7944319338377518e+01 2.8103255051933751e+01 0 -1 -1 -270 90 2 4.0932337550909392e-01 8.1287106356269145e+00 2.3450734020607989e+01 2.7686443730116949e+01 0 0 -1 -268 90 1 -7.6334650286139838e-01 7.9717188740338152e+00 2.2791802523291700e+01 2.6972408292185314e+01 0 0 -1 -269 90 2 3.8850743812907546e-01 8.3507946121563723e+00 2.1871436925633514e+01 2.7166011096979176e+01 0 0 -1 -10 4 1 -7.4144922682737113e-01 1.2652418375462048e+01 2.3822356309873324e+01 2.9498822671200010e+01 0 -1 -1 -2578 860 1 -6.8685119850518728e-01 7.7546564097184811e+00 1.8883074033833029e+01 2.9632613543449569e+01 0 0 0 -277 93 1 -7.4706014041644864e-01 6.3301207185237756e+00 1.5872939889636022e+01 2.4321732661954936e+01 0 0 0 -1139 380 2 3.3703715380538052e-01 1.1492728536418293e+01 1.7905262033176264e+01 2.4808368934517500e+01 0 0 -1 -11 4 2 3.5868183038247675e-01 1.3261055176239545e+01 2.4501129818021180e+01 2.9929913633790228e+01 0 -1 -1 -279 93 2 3.9636694809602385e-01 6.6822072006268058e+00 1.6388886105691455e+01 2.5120445204020498e+01 0 0 0 -1845 615 2 4.0037342141108112e-01 7.9788801684986606e+00 2.3368313336261640e+01 2.5155337074150104e+01 0 -1 0 -969 323 2 3.7681680487321695e-01 1.0780364875361105e+01 1.6902594079348503e+01 2.9810591300870293e+01 0 0 -1 -967 323 1 -8.0341325939387198e-01 1.0920621920707132e+01 1.6408302649097482e+01 3.0592893380933546e+01 0 0 -1 -2020 674 1 -7.7720933259377167e-01 8.2167274088490192e+00 2.3526983558392313e+01 2.4273999926959096e+01 0 -1 0 -2330 777 2 3.1725450587772430e-01 1.3446069005233168e+01 3.0100047985129379e+01 2.9198445776585761e+01 0 0 0 -1562 521 2 4.0113596528416090e-01 6.7074618120947695e+00 1.8100496235919344e+01 3.0879391555179403e+01 0 0 0 -2340 780 2 3.4546254223701778e-01 2.6540877819908410e+01 3.0447579965943490e+01 3.0279007941670262e+01 -1 0 0 -2333 778 2 3.7427108553013344e-01 3.0312874408061170e+01 2.7955092532008830e+01 2.7083093710849329e+01 -1 0 0 -1838 613 2 3.6426806310453319e-01 2.7112712927454506e+01 2.5237078829455747e+01 2.9994996804296004e+01 -1 -1 0 -2921 974 2 3.6796808973412642e-01 2.4922742466873604e+01 1.7489024369484341e+01 1.5888872013393337e+01 0 0 0 -736 246 1 -7.4994288039603940e-01 4.4751578473554732e+00 3.0231809296514271e+01 1.6926561001074131e+01 1 0 0 -410 137 2 3.7103952897677045e-01 1.1700570944419812e+01 1.7907387620704849e+01 2.8072410962195082e+01 0 -1 -1 -2249 750 2 3.6271331741513041e-01 1.6047288290823513e+01 2.1465633278741688e+01 2.2290319722325474e+01 0 0 0 -2248 750 1 -7.5260699785787322e-01 1.5731104879424302e+01 2.0552829578736780e+01 2.2430334922013024e+01 0 0 0 -2804 935 2 3.4363111603013075e-01 1.4471450578665561e+01 2.1724211498166685e+01 2.3504168456583962e+01 0 0 0 -2803 935 1 -7.4214056675984197e-01 1.3740812956746506e+01 2.1922717519747298e+01 2.4070672139493468e+01 0 0 0 -2250 750 2 3.5142395968296219e-01 1.6129463650684603e+01 2.0248459053629599e+01 2.3317441670243696e+01 0 0 0 -2582 861 2 3.8977704893254450e-01 1.2861941248787465e+01 1.7812813146045013e+01 2.3995236909727296e+01 0 0 0 -563 188 2 3.5360806667720890e-01 1.5080638054134404e+01 1.8520850171831054e+01 2.5758444075542553e+01 0 0 0 -580 194 1 -7.1206380693296645e-01 1.5819259777887305e+01 3.0978924485328747e+01 2.6928838839147804e+01 0 -1 -1 -2581 861 1 -7.2464733914795854e-01 1.2072914091350238e+01 1.7310040258710867e+01 2.4319887671166473e+01 0 0 0 -2606 869 2 3.8488747493431397e-01 1.7223805320404139e+01 1.8751765336860593e+01 2.8549103739813059e+01 0 0 0 -2629 877 1 -7.1240331807136525e-01 1.3724090020591767e+01 1.7128619971024985e+01 2.8231056127148104e+01 0 0 0 -2630 877 2 3.9094337921919620e-01 1.4281730500596009e+01 1.6483114767839940e+01 2.7746463813392200e+01 0 0 0 -2607 869 2 3.9206192799752232e-01 1.6847408948963519e+01 1.7849259917193070e+01 2.7332766647667007e+01 0 0 0 -2631 877 2 3.9134762402389950e-01 1.4279825054977309e+01 1.7441650590514307e+01 2.8860695893539742e+01 0 0 0 -2763 921 2 3.7883083012660163e-01 1.4862849102273890e+01 2.1199087176219283e+01 2.7047873708804747e+01 0 0 0 -2610 870 2 3.8097877885246345e-01 1.4310294745680100e+01 2.1191642484291055e+01 2.5568789027123973e+01 0 0 0 -564 188 2 3.8620485995142811e-01 1.6334436071431139e+01 1.8209376617717730e+01 2.4885801605375711e+01 0 0 0 -562 188 1 -6.9442575926660211e-01 1.5960965023542474e+01 1.8000404601672813e+01 2.5681609184661667e+01 0 0 0 -1993 665 1 -7.8544544675307293e-01 1.7438500911029035e+01 1.9461175578395899e+01 2.4088072177965216e+01 0 -1 0 -1995 665 2 3.6610933987576810e-01 1.7858694438469321e+01 1.9743094768525580e+01 2.4957071043448625e+01 0 -1 0 -1994 665 2 3.8039387092930027e-01 1.8053146063622791e+01 1.9757759414042464e+01 2.3452471451239436e+01 0 -1 0 -2608 870 1 -6.9546497224632975e-01 1.4427363092491850e+01 2.0614043292949013e+01 2.6354243067334536e+01 0 0 0 -2605 869 1 -7.0024437477443791e-01 1.7089106746636350e+01 1.7781850141267849e+01 2.8280314037135241e+01 0 0 0 -470 157 2 3.4606186412457152e-01 1.6607238470069163e+01 2.1272678734434784e+01 2.8979620400158684e+01 0 0 -1 -471 157 2 3.8486238589398858e-01 1.8010319637759057e+01 2.0559641968183449e+01 2.9183181282864364e+01 0 0 -1 -469 157 1 -7.5831135526856086e-01 1.7013760232937795e+01 2.0417007679385165e+01 2.9221752671395731e+01 0 0 -1 -1810 604 1 -6.8899465113569558e-01 1.7911312854825663e+01 1.6412749962375969e+01 2.3513700999536169e+01 0 -1 0 -2771 924 2 3.7489250165045396e-01 1.8493762769375266e+01 1.6714324027319922e+01 2.8490710819456293e+01 0 0 0 -204 68 2 3.6041723731107411e-01 1.5442314737664583e+01 1.9466709597492596e+01 3.0037712119166141e+01 0 -1 -1 -208 70 1 -7.2934340302405676e-01 1.4871228020502002e+01 1.8824698229469004e+01 3.0484373772147251e+01 0 -1 -1 -1366 456 1 -7.4613125621415322e-01 2.6643465478865014e+01 2.9872579896477610e+01 2.4914848573997180e+01 0 0 -1 -1147 383 1 -7.5456616405851118e-01 2.4163657367115821e+01 1.6259721158965124e+01 2.3377254583738907e+01 0 0 -1 -2964 988 2 3.6279463005322188e-01 2.4298622883527816e+01 1.6542279311060948e+01 2.5095159947458509e+01 0 0 0 -2770 924 1 -7.7205724521821151e-01 1.9427531126532596e+01 1.6342768478911413e+01 2.8787123080373348e+01 0 0 0 -2772 924 2 3.6390852749045111e-01 1.9248788262341225e+01 1.5861972063849548e+01 2.9589690494124500e+01 0 0 0 -2692 898 1 -7.3114909635428738e-01 2.4990018061830138e+01 2.3585327886121178e+01 2.6797083651917649e+01 0 0 0 -424 142 1 -7.2929243113180064e-01 2.1239111080180553e+01 1.8939714610065902e+01 3.0062136047596304e+01 0 0 -1 -426 142 2 4.1507469421731258e-01 2.0759460028566689e+01 1.9761222262362434e+01 3.0087046903840445e+01 0 0 -1 -1301 434 2 4.0909015601880788e-01 2.0767657987657248e+01 1.8167735872840655e+01 2.3088357058105732e+01 0 0 0 -447 149 2 3.6191683487441856e-01 2.4868176168858252e+01 1.7637350263868818e+01 2.9233546595072163e+01 0 0 -1 -1169 390 2 3.5321442406942771e-01 2.0277735005661945e+01 2.0606302196555387e+01 2.6436307245565981e+01 0 0 -1 -421 141 1 -6.7318672714800865e-01 1.9429796533662035e+01 2.0122675620520248e+01 2.6266337750176962e+01 0 -1 -1 -423 141 2 3.2409281002149115e-01 1.9884268339156151e+01 1.9303723181849239e+01 2.5886815017702389e+01 0 -1 -1 -2765 922 2 3.5381083906999028e-01 2.0505030447930626e+01 1.7688359823121470e+01 2.5712955095425375e+01 0 0 0 -2764 922 1 -7.5695650025452821e-01 2.0398911189531699e+01 1.7533166422233943e+01 2.4798122794444140e+01 0 0 0 -2766 922 2 3.8334976508300433e-01 2.0683086237215296e+01 1.6572826079878492e+01 2.4694602340485581e+01 0 0 0 -2739 913 2 3.8092389943616745e-01 2.0598879023088998e+01 1.7308868782891839e+01 2.7904348744792323e+01 0 0 0 -2737 913 1 -7.5949639804443092e-01 2.1237717472622915e+01 1.7984561023148117e+01 2.7588141215097284e+01 0 0 0 -2800 934 1 -7.6863444694662719e-01 1.9762401024159434e+01 2.0920727819452814e+01 2.9158192822963130e+01 0 0 0 -2962 988 1 -7.2012821007221539e-01 2.4782289513233604e+01 1.7161592013255284e+01 2.5759584365449108e+01 0 0 0 -2963 988 2 3.9475884974624215e-01 2.4642101980632091e+01 1.8152731193999116e+01 2.5386051097155971e+01 0 0 0 -2200 734 1 -7.0806354251879322e-01 2.4803482404097416e+01 1.9573007909627194e+01 2.4639957992118209e+01 0 0 0 -2202 734 2 3.5398416735722610e-01 2.5208295664395344e+01 2.0065017129635752e+01 2.5355732899804082e+01 0 0 0 -1345 449 1 -7.4077799166676994e-01 2.4337151889574532e+01 2.0976359468170397e+01 2.7482560070454834e+01 0 0 0 -2738 913 2 3.5382670487519752e-01 2.2154171455854229e+01 1.7571991838633284e+01 2.7621612234553314e+01 0 0 0 -1347 449 2 3.5767944889164582e-01 2.4098675887539958e+01 2.1058088172753649e+01 2.8429073543605433e+01 0 0 0 -2890 964 1 -7.1134171079813080e-01 2.3948994068967480e+01 2.1768390795138274e+01 3.0239052543182453e+01 0 0 0 -2194 732 1 -7.7005533830644213e-01 2.1593578849022897e+01 2.1909665487347979e+01 2.7150936207444126e+01 0 -1 0 -2801 934 2 3.7680248718311998e-01 1.9753315877993963e+01 2.1850851090497795e+01 2.9250284169925031e+01 0 0 0 -2802 934 2 3.7775311204537776e-01 2.0088431299985153e+01 2.0835141653967284e+01 2.8262560503447393e+01 0 0 0 -1931 644 2 3.7340981769755499e-01 2.2481048550654055e+01 2.1634913462016630e+01 2.7334322781005660e+01 0 -1 0 -425 142 2 3.7733790477895340e-01 2.1341562748922446e+01 1.8715140346393170e+01 2.9035597074486233e+01 0 0 -1 -1520 507 2 3.5081941354284474e-01 2.8604862763264908e+01 2.6064968730485209e+01 3.0012145223389343e+01 -1 -1 0 -1163 388 2 3.5123299324139184e-01 2.4218545706233790e+01 1.7177471664828058e+01 2.7344628742021239e+01 0 0 -1 -2195 732 2 3.7191712074675409e-01 2.1641294437109263e+01 2.2553720625071406e+01 2.6358006779170779e+01 0 -1 0 -2787 929 2 3.7900832422832464e-01 2.1357955026866012e+01 2.3358944425225616e+01 2.8043798120570020e+01 0 0 0 -1162 388 1 -7.7294150906629944e-01 2.3738793405157892e+01 1.6793835797848175e+01 2.8183931456706201e+01 0 0 -1 -777 259 2 3.6526099881417373e-01 2.9291447506110003e+01 1.9633422795007050e+01 3.0227173720571582e+01 -1 0 -1 -2948 983 2 3.3876707305675657e-01 2.5840550746034133e+01 2.6563734313338895e+01 2.5634148093608594e+01 0 0 0 -1519 507 1 -7.4423344612837405e-01 2.8566053943919371e+01 2.5389228152121881e+01 2.9231470426526773e+01 -1 -1 0 -2892 964 2 3.4394128628595089e-01 2.7411376064331339e+01 1.8548164515244540e+01 3.0704759839983378e+01 0 0 0 -2891 964 2 3.1500274960369046e-01 2.4942839275197503e+01 2.1683154869679498e+01 3.0248557032862443e+01 0 0 0 -445 149 1 -7.2055742434151882e-01 2.5453325969256660e+01 1.8201205864971534e+01 2.9922644033042840e+01 0 0 -1 -1346 449 2 3.7426422957622152e-01 2.4777820535855341e+01 2.1777859132828794e+01 2.7157887994497667e+01 0 0 0 -1959 653 2 3.5676757844118456e-01 2.5955744968716498e+01 1.8830190125656461e+01 2.9401250695427361e+01 0 0 0 -2778 926 2 3.3240223367030014e-01 2.5653419504413105e+01 1.5905306876794777e+01 2.7091852749206318e+01 0 0 0 -2969 990 2 3.6140904145656000e-01 3.0371147281621667e+01 1.7962524420357099e+01 2.8442466939553253e+01 0 0 0 -1759 587 1 -7.0207241864620085e-01 2.6803821166335151e+01 1.9902731058748088e+01 2.8047471868469973e+01 0 0 0 -1761 587 2 3.3033621077096037e-01 2.6146036844911823e+01 2.0376170066351857e+01 2.7486409083193607e+01 0 0 0 -2201 734 2 3.7114937986094171e-01 2.5492265507516144e+01 1.9491449559574850e+01 2.3980633814947911e+01 0 0 0 -2852 951 2 3.8642713804367368e-01 3.0292001594240364e+01 2.0568454834328030e+01 2.6273874260723719e+01 0 0 0 -2851 951 1 -7.1396659452734812e-01 2.9781360737889816e+01 1.9760783830209274e+01 2.6173936849067317e+01 0 0 0 -2853 951 2 3.6259541874575191e-01 2.9856612523789366e+01 1.9371806996527081e+01 2.7002171787561632e+01 0 0 0 -1760 587 2 3.3584733374450615e-01 2.7063943447771521e+01 2.0579588662236208e+01 2.8739497742062330e+01 0 0 0 -2873 958 2 3.8156420091352133e-01 2.8303034274005881e+01 1.8810809494973025e+01 2.3592363344886095e+01 0 0 0 -2377 793 1 -7.7285998145380552e-01 2.7411198341751980e+01 1.8610465274165609e+01 2.3509268190818457e+01 -1 0 0 -2368 790 1 -7.4133803164839684e-01 3.0071042992031234e+01 1.7172635406489047e+01 2.5360360610992696e+01 -1 0 0 -1411 471 1 -7.0726184327607333e-01 2.9703089302358126e+01 2.2688212790944046e+01 2.9781736784407720e+01 0 1 -1 -2378 793 2 3.6741168961987092e-01 2.7325458878714954e+01 1.7854217822780477e+01 2.2924957783030532e+01 -1 0 0 -1413 471 2 3.4035912367261106e-01 2.8906208759675490e+01 2.2121840792563646e+01 2.9850792566144921e+01 0 1 -1 -2366 789 2 3.6557559721913407e-01 2.7846204052099736e+01 2.0623467579608405e+01 2.4661950593140830e+01 -1 0 0 -1412 471 2 3.7429572264244859e-01 2.9997367793858011e+01 2.2785128819122058e+01 3.0713338178886954e+01 0 1 -1 -1333 445 1 -7.5236688755738135e-01 2.7027778479900594e+01 2.1701169214954394e+01 3.0363360727079922e+01 0 0 -1 -2370 790 2 3.8938617284034410e-01 2.9791141378046454e+01 1.8065002579796118e+01 2.5164060641733553e+01 -1 0 0 -2365 789 1 -7.0341069822843671e-01 2.7292999694524205e+01 2.1051650997946986e+01 2.5299927111788076e+01 -1 0 0 -2367 789 2 3.5931050852613372e-01 2.7202886627774667e+01 2.0591058063121025e+01 2.6141104189896701e+01 -1 0 0 -1081 361 1 -7.2623026523966339e-01 1.0359708259632736e+01 2.5754602836530488e+01 3.0597181989901138e+01 0 0 -1 -2369 790 2 3.8601335417491206e-01 3.0184442787734234e+01 1.7122241626572624e+01 2.6392827528273283e+01 -1 0 0 -2151 717 2 3.5893200566606132e-01 2.9853835223179420e+01 2.0775184427352997e+01 2.9358028437581574e+01 0 0 0 -2968 990 1 -7.0585150738382718e-01 3.0415294278882868e+01 1.7061252469570523e+01 2.8049592201235807e+01 0 0 0 -2252 751 2 3.3233735956158739e-01 2.7135265159528309e+01 2.2677530133245838e+01 2.3586960967350421e+01 -1 0 0 -775 259 1 -7.1814401310402909e-01 2.9918594119506444e+01 1.9839242677151031e+01 2.9430222869433294e+01 -1 0 -1 -1882 628 1 -7.2962295169510083e-01 1.9766300369619930e+01 2.7484739766634636e+01 1.6840089774999381e+01 0 -1 0 -2363 788 2 3.9183006922419689e-01 3.0839120732604822e+01 1.5524605227580697e+01 2.5368644947236863e+01 -1 0 0 -1988 663 2 3.6340908240412312e-01 3.0967276367153293e+01 2.7788527741365566e+01 2.3146059568728401e+01 0 -1 0 -1554 518 2 3.5062160154457800e-01 2.1164725943631124e+00 2.7678281093954819e+01 2.4448838860822121e+01 0 -1 0 -1552 518 1 -7.5913021673515657e-01 1.9530853219502355e+00 2.7658148697066434e+01 2.3496036916015548e+01 0 -1 0 -2617 873 1 -7.1264602361352236e-01 1.5842973009205968e-01 2.8313015250304193e+01 2.7375141368128162e+01 0 0 0 -1383 461 2 3.4875302711310585e-01 1.4474008158954297e+00 2.4172295651312034e+01 2.4966607673459713e+01 1 0 -1 -1483 495 1 -7.6320194121864704e-01 2.5453294539634537e+00 2.9521571381169366e+01 2.6039842449803501e+01 1 0 0 -1611 537 2 3.5863197081729287e-01 3.6205108526375840e+00 3.0060441539693148e+01 2.7362278849312919e+01 0 -1 0 -7 3 1 -7.5409262646562625e-01 3.3900185909921507e+00 2.3823035607086346e+01 2.4742428461570352e+01 0 -1 -1 -992 331 2 3.7610283904537362e-01 7.4047158409418379e-01 2.4993492128150478e+01 2.6937442204874170e+01 0 0 -1 -1381 461 1 -7.0217098583733417e-01 4.5520265359593814e-01 2.4391166630035702e+01 2.5003301853567422e+01 1 0 -1 -9 3 2 3.7975874120524844e-01 3.9878364961086796e+00 2.4416407729365705e+01 2.5299613634629868e+01 0 -1 -1 -2988 996 2 3.6537032146765108e-01 5.3630589197478207e+00 2.6674288377103551e+01 2.5588961302343627e+01 1 0 0 -888 296 2 3.7320512175451920e-01 2.0259605386041040e+00 2.8989725874326989e+01 2.6643812594427295e+01 0 0 0 -1648 550 1 -6.8731347318196734e-01 4.3383930649571809e+00 2.6876900521866716e+01 2.8627980167180233e+01 0 -1 0 -1650 550 2 3.5035214020937255e-01 4.4602818424953181e+00 2.7800290571680282e+01 2.8974432396754139e+01 0 -1 0 -1485 495 2 3.7992839106175530e-01 2.0724564809390413e+00 3.0352605799639591e+01 2.6080167500462871e+01 1 0 0 -2986 996 1 -7.0517640356463918e-01 5.0520641376271467e+00 2.5868858529121702e+01 2.5993326509601506e+01 1 0 0 -2529 843 2 3.4380582257115677e-01 2.2785048511840382e+00 2.7600134441466800e+01 3.0465877467269781e+01 0 0 0 -1649 550 2 3.6993684073797140e-01 3.7866749124656991e+00 2.6503061020048609e+01 2.9334048146157194e+01 0 -1 0 -794 265 2 3.4907112031664300e-01 5.0334666622090438e+00 2.9699565783287376e+01 2.9453950022178201e+01 0 0 -1 -2528 843 2 3.2110433303502028e-01 3.2630215633260642e+00 2.8788177915042240e+01 3.0266879555696274e+01 0 0 0 -94 32 1 -7.3215244151473424e-01 5.4398947636738129e+00 2.8944232487265118e+01 2.9996847749942390e+01 0 0 -1 -1961 654 2 3.6720856359441328e-01 1.1058221646402345e+01 2.3018171575082601e+01 3.0437508092903503e+01 0 0 0 -96 32 2 3.6525225261484517e-01 6.3672541858607197e+00 2.8908676796345578e+01 2.9657490921514537e+01 0 0 -1 -1389 463 2 3.6840834067600892e-01 4.3452777825173037e+00 2.9298867914184569e+01 2.5621753667941775e+01 1 0 -1 -2942 981 2 3.8448109061175989e-01 5.1013602095786190e+00 2.6106041213995315e+01 2.6924039253064095e+01 1 -1 0 -1387 463 1 -7.2554241457730873e-01 5.2127084233274603e+00 2.8978618994196445e+01 2.5197873399463443e+01 1 0 -1 -2386 796 1 -7.7376847037950447e-01 2.6969910565227856e+01 2.8386413434994740e+01 3.0314562483857912e+01 -1 0 0 -793 265 1 -7.1460856800938677e-01 9.7591676489196044e-01 2.5523489704217855e+01 2.7659852576475188e+01 0 0 -1 -795 265 2 3.8577436027645262e-01 1.4825937931493596e+00 2.4955746313923022e+01 2.8220796550580239e+01 0 0 -1 -1388 463 2 3.6925195446831038e-01 5.1691797847700611e+00 2.9393746663623940e+01 2.4310500047171569e+01 1 0 -1 -2618 873 2 3.7121663015303408e-01 5.8782697787149829e-01 2.7432234349809995e+01 2.7603766565551126e+01 0 0 0 -1382 461 2 3.7990383263614713e-01 2.6443699335495163e-01 2.4767822202894063e+01 2.4144401120631628e+01 1 0 -1 -106 36 1 -7.0486890047044037e-01 2.7985788214763172e+00 2.5569580527672773e+01 3.0721585942445316e+01 0 -1 -1 -2191 731 1 -7.3083575291983516e-01 2.8704437797836427e+01 2.6894651490831347e+01 2.6734975656461348e+01 0 -1 0 -2694 898 2 3.6337366625768674e-01 2.5737670399612583e+01 2.4216796695439196e+01 2.6649687322663659e+01 0 0 0 -2176 726 1 -7.5613931522288169e-01 2.6762040473911160e+01 2.8483105591886680e+01 2.7605050075699619e+01 0 -1 0 -925 309 1 -7.2044071090621375e-01 1.1004842122560150e+01 3.0016032342643072e+01 2.3574561590193454e+01 0 0 0 -927 309 2 3.5110245458827566e-01 1.0466623919005164e+01 2.9355810372546408e+01 2.4065796143698797e+01 0 0 0 -779 260 2 3.6630765481385175e-01 8.6167900450400197e+00 2.8521014218489622e+01 2.3190577399418117e+01 0 0 0 -1535 512 2 3.4816152118132787e-01 7.0727241547640611e+00 2.8396433899465585e+01 2.2807856871500093e+01 0 -1 0 -2178 726 2 3.5675646291851237e-01 2.6856755211333482e+01 2.8666566478278924e+01 2.8626403150797390e+01 0 -1 0 -1534 512 1 -7.2079320399291869e-01 7.8709229505903080e+00 2.8881479574040327e+01 2.2696054936946226e+01 0 -1 0 -209 70 2 3.7890348180635819e-01 1.2096436414616607e+01 2.4283157202713589e+01 2.8853301925179338e+01 0 -1 -1 -1694 565 2 3.7520729136396180e-01 1.0953731572345454e+01 2.4580176926173490e+01 2.6777936550244700e+01 0 -1 0 -1693 565 1 -7.2028810897973572e-01 1.0715917823054868e+01 2.4721082239705062e+01 2.7764209730456109e+01 0 -1 0 -2483 828 2 3.8049307740787236e-01 6.8324288598040166e+00 2.9479525315165830e+01 2.5702964183565111e+01 0 0 0 -2983 995 1 -7.3414451880007303e-01 7.9875708816313775e+00 2.4463438658456099e+01 2.9096783413365394e+01 1 0 0 -2590 864 1 -7.2907085058343046e-01 1.0713225216098387e+01 2.8165099995967665e+01 2.9144048021431452e+01 0 0 0 -2022 674 2 3.7474215018716495e-01 7.9321816111131778e+00 2.4454649762766973e+01 2.4141189095730770e+01 0 -1 0 -2388 796 2 3.3855074313136202e-01 8.8410670268371678e+00 2.4523189780805186e+01 2.9687125346169363e+01 0 0 0 -778 260 1 -7.3530338721298338e-01 7.4537888540314698e+00 2.6201661620481389e+01 2.4328928176807235e+01 0 0 0 -95 32 2 3.5587007654712272e-01 6.6464886966388210e+00 2.6455432280956632e+01 2.3738958179300059e+01 0 0 -1 -780 260 2 3.6094472110162096e-01 8.1797419624579817e+00 2.6754160530349242e+01 2.4063336587493822e+01 0 0 0 -2351 784 2 3.7263350397852646e-01 1.2095558771593497e+01 2.6893517914914153e+01 2.8658514256147928e+01 0 0 0 -1900 634 1 -7.5017107106248870e-01 1.0047486607705302e+01 2.7297477414103192e+01 2.4106027791286110e+01 0 -1 0 -1902 634 2 3.7742380634974315e-01 1.0357768258223230e+01 2.6528225575362569e+01 2.4640372223980712e+01 0 -1 0 -2436 812 2 3.3064507514740132e-01 8.2323848658921044e+00 2.6245640125394928e+01 2.7666321339555154e+01 0 0 0 -2434 812 1 -7.6684558527022262e-01 8.6740245078306568e+00 2.6918569071689486e+01 2.7162793777667694e+01 0 0 0 -2435 812 2 3.6972965492390847e-01 8.2509188569067984e+00 2.6878450585816331e+01 2.6292718318792783e+01 0 0 0 -1713 571 2 3.6317368550040352e-01 9.9653952796582459e+00 2.5352711622882772e+01 2.7677101168969372e+01 0 -1 0 -2482 828 1 -6.6884895017431434e-01 7.7119215590855346e+00 2.9819988715105385e+01 2.5913585988215438e+01 0 0 0 -1768 590 1 -7.4820989217329548e-01 1.0806932376836187e+01 2.4697294621808201e+01 2.4999548897865250e+01 0 0 0 -2352 784 2 3.3682209783127309e-01 1.2465870149761788e+01 2.5664582375565605e+01 2.7903000497471627e+01 0 0 0 -986 329 2 3.6084021645724457e-01 8.2753706048266480e+00 2.8074798137637920e+01 2.8296011002168939e+01 0 0 -1 -985 329 1 -7.8115382437982284e-01 7.8739472659069119e+00 2.9015117011382625e+01 2.8528028459092397e+01 0 0 -1 -987 329 2 3.9002089906374315e-01 7.6985290404801940e+00 2.9413557581916631e+01 2.7637481126301328e+01 0 0 -1 -1316 439 2 3.5091206851755652e-01 1.7770036251770858e+01 2.8700256245078734e+01 1.5883152222774891e+01 0 0 0 -2350 784 1 -7.1253130897378247e-01 1.2814965956497741e+01 2.6557520855818161e+01 2.8070815413822476e+01 0 0 0 -2592 864 2 3.4110753363333102e-01 1.0030333530839522e+01 2.8107151557959874e+01 2.8417960549489454e+01 0 0 0 -1770 590 2 3.5170336486136156e-01 1.1513488860313641e+01 2.4656801810522989e+01 2.4286819711244870e+01 0 0 0 -606 202 2 3.6385264633856612e-01 9.1466917539784660e+00 3.0404332468949825e+01 2.8859181933473284e+01 0 -1 -1 -2591 864 2 3.7854329901120853e-01 1.0438083463654520e+01 2.7540518291983641e+01 2.9775168239414267e+01 0 0 0 -1620 540 2 3.3604212857084048e-01 6.0709212969241069e+00 2.6247420923327301e+01 1.5980916154775347e+01 0 -1 0 -2687 896 2 3.9087604956725852e-01 1.7622129756600057e+01 2.9928015108487546e+01 3.0079417920144522e+01 0 0 0 -1647 549 2 3.6075636633338520e-01 2.5235880987689036e+01 2.8038742066905233e+01 2.6646719148616551e+01 -1 -1 0 -1727 576 2 3.6764575340621874e-01 1.6452491471712243e+01 2.4081167199556990e+01 2.2777656890647606e+01 0 -1 0 -582 194 2 3.6831021773205630e-01 1.5549289163030222e+01 3.0201367488385721e+01 2.7417632738869521e+01 0 -1 -1 -823 275 1 -7.3516470270034551e-01 1.0035927205217823e+00 2.8118524429521937e+01 1.5676637337578386e+01 0 0 0 -2805 935 2 3.7391239590807357e-01 1.3538816278882962e+01 2.3684716482749010e+01 2.4326891292117342e+01 0 0 0 -2810 937 2 3.9093755993206647e-01 1.4014598370655994e+01 2.3023500339754261e+01 2.8639030381633468e+01 0 0 0 -2809 937 1 -7.3262781038372915e-01 1.4756960259799975e+01 2.2508609309234476e+01 2.8255141987300249e+01 0 0 0 -2190 730 2 3.6014914737506321e-01 1.5334509282582109e+01 2.3213266681974812e+01 2.7842344949930002e+01 0 -1 0 -2070 690 2 3.8882041488348895e-01 1.6553590010225371e+01 2.5286772999264638e+01 2.7442275352269800e+01 0 -1 0 -2002 668 1 -7.0378300403560734e-01 1.7129616940812923e+01 2.5389778301853571e+01 2.4275413345063487e+01 0 -1 0 -2003 668 2 3.8780752904161625e-01 1.6655070310705369e+01 2.6207382688531730e+01 2.3936863052330455e+01 0 -1 0 -2068 690 1 -7.2808066890463030e-01 1.6095334105090782e+01 2.4803547543770900e+01 2.6784206983098890e+01 0 -1 0 -1478 493 2 4.1761848612086006e-01 1.6254280242307647e+01 2.5075195163945317e+01 2.5934700912500176e+01 0 0 0 -2905 969 1 -7.1075187786685157e-01 1.4617800468373995e+01 2.5410815879726041e+01 3.0487900816105022e+01 0 0 0 -2906 969 2 3.7754294860194931e-01 1.4223248156640576e+01 2.6338978664063184e+01 3.0430746927634406e+01 0 0 0 -2572 858 1 -7.4531379502836315e-01 1.3546298381435944e+01 2.8095604635320178e+01 3.0502364202542847e+01 0 0 0 -384 128 2 3.5651215750392595e-01 1.3886508788719953e+01 2.9870827945273504e+01 2.4100047036607084e+01 0 -1 -1 -1285 429 1 -7.2050589708172608e-01 1.3511883500665618e+01 2.4681824286146849e+01 2.4301924947063576e+01 0 0 0 -1287 429 2 3.9328036995849186e-01 1.4036705975733248e+01 2.9008649365676227e+01 2.5465121929570358e+01 0 0 0 -382 128 1 -7.5527424873250282e-01 1.4117349154791070e+01 2.9941452563643050e+01 2.5081547463325599e+01 0 -1 -1 -2313 771 2 4.0458292355223296e-01 1.3659834686985018e+01 2.6447811829920681e+01 2.5044311700596946e+01 0 0 0 -1843 615 1 -7.3135402935307969e-01 1.3676724329591480e+01 2.7330696169100058e+01 2.5481621223302461e+01 0 -1 0 -1844 615 2 3.7595962128880162e-01 1.3557345164051824e+01 2.7180939481059948e+01 2.6412742230556990e+01 0 -1 0 -2057 686 2 3.6506409503807830e-01 1.7042007962283868e+01 2.7042214182468303e+01 2.9010314649618508e+01 0 0 0 -2058 686 2 3.4009653230409059e-01 1.7064597438359606e+01 2.5768114672953143e+01 2.9894780175783726e+01 0 0 0 -2056 686 1 -7.2199243227411480e-01 1.7325713749006116e+01 2.6102863001217031e+01 2.9065231302929991e+01 0 0 0 -387 129 2 3.3951229230480767e-01 1.4242415604477493e+01 2.8193928381198607e+01 2.7710812344400068e+01 0 -1 -1 -2524 842 1 -7.1540897185153074e-01 1.5088215211884521e+01 2.8346132092430032e+01 2.8163745691278145e+01 0 0 0 -2525 842 2 3.3713086907605433e-01 1.4908941862619400e+01 2.8028687490498818e+01 2.9120332366794937e+01 0 0 0 -2573 858 2 3.5737926522529234e-01 1.2760235703432556e+01 2.8621653619195200e+01 3.0370938938254547e+01 0 0 0 -2688 896 2 3.3244394654366038e-01 1.6467799768217787e+01 2.8971082726217151e+01 2.9575279074570702e+01 0 0 0 -1748 583 2 3.9932207221014837e-01 1.7943470010350762e+01 2.5823004247923688e+01 2.4619943642054714e+01 0 -1 0 -2686 896 1 -7.4281423106968880e-01 1.7209207993618779e+01 2.9010021595303098e+01 3.0203456019417672e+01 0 0 0 -2726 909 2 3.6069766156550270e-01 1.8044706625504677e+01 2.4171176863546254e+01 2.8673693693914721e+01 0 0 0 -1911 637 2 3.6333317646275737e-01 2.1674751578335314e+01 2.3230973178826719e+01 2.3120171874733760e+01 0 -1 0 -1856 619 2 3.7801019952403159e-01 1.9157564727075059e+01 2.8463717008823142e+01 3.0565682923722431e+01 0 -1 0 -2089 697 1 -7.0496813300901562e-01 3.8846483720764891e+00 1.5580136852342440e+01 3.0988989949697324e+01 1 0 -1 -1446 482 2 3.5684944118174039e-01 2.3622382153967447e+01 2.1145980699353274e+01 3.0922007381584152e+01 0 0 -1 -20 7 2 3.8313988649451719e-01 2.3567149168289870e+01 2.6521600224523564e+01 2.9047557301732944e+01 -1 -1 -1 -1645 549 1 -7.2975217517491020e-01 2.4503116602137837e+01 2.8220645360772622e+01 2.6024256833339081e+01 -1 -1 0 -1479 493 2 3.3277901451789660e-01 2.3043266049476788e+01 2.9472055510377256e+01 2.3026684338522582e+01 0 0 0 -21 7 2 3.6957552563387847e-01 2.3004009724383639e+01 2.5151261985446151e+01 2.9010157214707696e+01 -1 -1 -1 -19 7 1 -7.3283206707000104e-01 2.3837342577896429e+01 2.5590600819654583e+01 2.9004041557282498e+01 -1 -1 -1 -2919 973 2 3.3657564800542050e-01 2.3226334412340972e+01 2.8631419923044739e+01 3.0565437556374363e+01 0 0 0 -2994 998 2 3.3185646686298959e-01 2.2130529141372453e+01 2.7788822981808160e+01 3.0249116095757081e+01 0 0 0 -2811 937 2 3.4347782695574663e-01 2.1728890000655692e+01 2.9920986248140004e+01 2.5214011447807373e+01 0 0 0 -2950 984 1 -7.5540204534745348e-01 2.0926670256690628e+01 2.9448847715040952e+01 2.5024621462083321e+01 0 0 0 -2725 909 1 -7.3873503702858367e-01 1.8570953662424213e+01 2.3495487828789724e+01 2.9114240296907006e+01 0 0 0 -2727 909 2 3.4578431704926010e-01 1.8521402073736528e+01 2.3803369510420776e+01 3.0046711269915065e+01 0 0 0 -2706 902 2 4.0134355968739022e-01 2.0027182644166121e+01 2.6557493357920286e+01 2.4145390728749291e+01 0 0 0 -2992 998 1 -7.5913711940645257e-01 2.2970109524231784e+01 2.8032645642922468e+01 2.9869171958268229e+01 0 0 0 -385 129 1 -7.1279576946000944e-01 2.2400765939444359e+01 2.3888346755024067e+01 2.5425837077985594e+01 0 -1 -1 -584 195 2 3.3997388729632499e-01 2.3252595381056373e+01 2.3597189808628819e+01 2.5892592333652562e+01 0 -1 -1 -386 129 2 3.6021614130896101e-01 2.2591488978199816e+01 2.4730541934939339e+01 2.5006367399286887e+01 0 -1 -1 -1646 549 2 3.5247924473061648e-01 2.4187891291529947e+01 2.9084220378797124e+01 2.6265107250975543e+01 -1 -1 0 -2704 902 1 -7.2538461010879418e-01 1.9366548933982255e+01 2.7003482749459032e+01 2.4784293272716216e+01 0 0 0 -2705 902 2 3.5569396967362998e-01 1.9532957843494568e+01 2.7959407245345876e+01 2.4860260856571184e+01 0 0 0 -799 267 1 -7.6050101057871444e-01 2.3988048355725599e+01 3.0636437496838141e+01 2.4652500799214650e+01 -1 0 -1 -1268 423 2 3.7639747176313071e-01 2.2231703368249963e+01 2.9098356754253786e+01 2.8585082778064507e+01 0 0 -1 -1986 662 2 3.5487267787675603e-01 1.9750188049423382e+01 2.7187594892472802e+01 2.6640233875527738e+01 0 -1 0 -1985 662 2 3.3736674454677884e-01 2.0267462855064423e+01 2.6820323975036533e+01 2.8102370674810249e+01 0 -1 0 -1984 662 1 -6.9783562612802830e-01 1.9825533572332510e+01 2.7529939521248139e+01 2.7600380138886276e+01 0 -1 0 -1267 423 1 -7.2532864435020250e-01 2.1636063668219499e+01 2.9461977229570202e+01 2.7859512169419489e+01 0 0 -1 -2785 929 1 -6.8589612528722610e-01 2.1172630996025855e+01 2.4133535125323121e+01 2.8645805385843328e+01 0 0 0 -2786 929 2 3.6187004113704491e-01 2.0324955226508639e+01 2.3878077420526786e+01 2.9143893808061488e+01 0 0 0 -1269 423 2 3.8169946623808348e-01 2.0777827361035222e+01 2.8843598204104719e+01 2.7926543763986889e+01 0 0 -1 -2827 943 1 -7.5178981778370491e-01 2.5980207330104658e+01 1.5883927015697910e+01 1.5933980603556099e+01 0 0 0 -2951 984 2 3.5115645556354869e-01 2.0613112882121001e+01 2.9282777176086590e+01 2.5849956558510126e+01 0 0 0 -1830 610 2 3.4562081475759565e-01 2.5042883762442986e-01 1.9659806805631007e+01 3.0838531101438452e+01 0 0 0 -2949 983 2 3.7538315262016592e-01 2.6728904078646107e+01 2.5980725541678012e+01 2.4524765091211119e+01 0 0 0 -2693 898 2 3.3339425832370145e-01 2.4465202567280162e+01 2.4127880542052008e+01 2.7395744824065918e+01 0 0 0 -2192 731 2 3.6659376702940660e-01 2.8856470552368346e+01 2.6506868869494156e+01 2.7596926665383766e+01 0 -1 0 -1837 613 1 -7.1365031316252459e-01 2.6425043242862866e+01 2.5620135077268284e+01 3.0621573076223548e+01 -1 -1 0 -1331 444 2 3.5500527902638757e-01 2.3184779434937365e+01 2.7082744171995643e+01 2.3370410135977959e+01 0 0 -1 -1621 541 1 -7.6435417363797209e-01 2.9628730033886924e+01 2.9180588446022917e+01 2.9391911565459942e+01 -1 -1 0 -1367 456 2 3.6840931346151579e-01 2.5693374475437924e+01 3.0087113401159538e+01 2.4915942123885991e+01 0 0 -1 -1987 663 1 -7.1082251196474511e-01 3.0060262246121411e+01 2.7610554694576539e+01 2.2780775200354022e+01 0 -1 0 -2938 980 1 -7.4112000273699075e-01 1.8149803686751540e+01 1.5695169511354322e+01 1.6947474577849174e+01 0 0 0 -1839 613 2 3.6079283000119255e-01 2.5602942316285514e+01 2.5649254220041389e+01 3.0064023277643344e+01 -1 -1 0 -1876 626 1 -7.1122447250616871e-01 1.3882831693372349e+01 3.0791374304312075e+01 1.6088923223980341e+01 0 -1 0 -1188 396 2 3.5912490985459461e-01 1.1132479352648046e+01 2.7769533203195365e+01 1.6085424043853980e+01 0 0 0 -625 209 1 -6.8070199915260399e-01 2.8298375442686439e+01 3.0378227657718618e+01 2.1330941736995175e+01 0 -1 -1 -2324 775 2 3.6528238885428532e-01 2.6624285533476154e+01 2.7465633462681023e+01 3.0405350018301814e+01 -1 0 0 -2966 989 2 3.8324270048809833e-01 2.2145736866876939e+00 1.6293361592060393e+01 3.0554627512122444e+01 1 0 0 -685 229 1 -7.6185286627974624e-01 2.2911596052139330e+01 3.0356836516298955e+01 1.7698177981943278e+01 0 -1 0 -1812 604 2 3.4587306522017625e-01 1.7231487300098411e+01 1.6994206995354919e+01 2.3772481960570808e+01 0 -1 0 -2449 817 1 -7.3098760066670754e-01 1.7226073658772862e+01 1.8207511631168725e+01 1.5571328926836692e+01 0 0 0 -1609 537 1 -7.3209378689090843e-01 3.8038541319091670e+00 3.0469943247784794e+01 2.8248713179443495e+01 0 -1 0 -71 24 2 3.7722929972710306e-01 1.1828349487701109e+01 1.6115815808013849e+01 3.0621871422273017e+01 0 0 -1 -811 271 1 -6.9547622941354248e-01 3.0428812893249077e+01 3.0859717988145043e+01 1.8802269306680319e+01 -1 0 0 -2405 802 2 3.4020652691064257e-01 7.4528018084076963e+00 2.6012876505596005e+01 3.0705739252272764e+01 0 0 0 -1253 418 2 3.5717004716194040e-01 2.3664945895202479e+01 1.6287715192098435e+01 3.0322970930456712e+01 0 0 -1 -252 84 2 3.8701305495106386e-01 2.1482185801453028e+01 3.1006367209523919e+01 2.7196564479751714e+01 0 -1 -1 -1862 621 2 3.7625538466757952e-01 1.5251364631771182e+01 1.5616838924692072e+01 1.5618905489741165e+01 0 0 0 -813 271 2 3.7367922684603366e-01 1.1794541687145023e-01 3.1039606881210492e+01 1.9416399237735966e+01 0 0 0 - -Velocities - -1497 -7.9908248671464147e-04 -6.9675512015525938e-03 3.2292593769422430e-03 -2401 -1.7029119258100784e-03 6.5786545574567602e-03 -7.1634214865199416e-04 -498 -1.4889038379136452e-02 6.0207394475226697e-03 4.6966531302689496e-03 -496 6.3219969784109780e-04 2.2321548020049638e-03 3.4544614014290223e-04 -497 1.4631764920825336e-02 -1.3634778534498128e-02 1.2125535370129783e-02 -141 2.3371872243926940e-02 8.1476690431276991e-03 1.4207354972945677e-02 -139 1.0448385364179786e-03 5.9608177851918371e-03 -1.2261980087153538e-04 -140 1.2255983075075130e-02 2.7338869476814733e-03 -1.3770348145577416e-02 -1528 -1.3521275511788509e-03 1.1726775431755605e-03 -9.8759379403351899e-04 -1530 1.8001754874431734e-02 9.1461492532777505e-03 -1.0444731352960538e-02 -239 1.2389416308185531e-02 -2.5955525930197324e-03 -8.0215624758931715e-03 -1631 -3.3265181519548342e-03 1.1104629355244753e-02 -1.9897173502549551e-02 -238 -1.2701840064846999e-03 3.4196063086705513e-03 1.6842498088798607e-03 -1529 -2.4868344781390540e-02 -1.1133892839065063e-02 2.4864041376688661e-03 -803 7.1394671703609719e-03 5.6585268030506222e-03 -2.2733608265207791e-04 -25 -1.7249343978559273e-03 2.4810022710645531e-03 3.4924588933320936e-03 -27 -5.0428846320595046e-03 1.7320294903628027e-02 -5.6321151453934040e-03 -2163 -3.3958709041529735e-02 -2.0738704238807911e-02 -7.2168895495345296e-03 -1496 3.3932904136772329e-02 -2.2943311875440034e-02 1.1925801251448123e-02 -115 -3.8291117424671798e-03 -1.4356220061687160e-03 -1.5567825512875866e-03 -1085 1.4151018369228637e-02 7.2462606762886336e-04 2.4230597298895526e-02 -314 -4.6366129011873375e-03 -2.1251289979213436e-02 4.5084912395395287e-03 -819 9.2995415763434946e-04 -1.5453650605656054e-02 1.6636814226414803e-02 -2403 2.0553039888732701e-02 1.9287250588282026e-02 7.2925233326843345e-03 -1574 -3.1387819600591588e-02 -3.5337305711420717e-03 -4.2754843285378544e-03 -116 -1.8804397063959324e-02 3.9726395158581626e-03 7.1182476783205554e-03 -1636 -8.6767453502839596e-04 3.3942419974190528e-03 -3.5001938986360692e-03 -2065 -1.5087437376439595e-03 7.7479480964932803e-04 -1.6531762020403210e-03 -802 1.0297125084103291e-02 5.8985547904963796e-03 3.7686876163752470e-03 -59 1.3334716389293401e-02 -3.2144983842388695e-02 4.0081564516293239e-03 -33 -2.4642736707804775e-02 -1.1902076214958479e-02 1.3031888521401838e-03 -2127 6.5926226014652962e-03 -6.5497062246737073e-03 -1.1567140407727652e-04 -550 -1.4933298545652121e-03 1.1002722972805927e-03 -1.7795404091809186e-03 -309 -1.3748205859442112e-02 -1.2259882474524966e-02 -3.4689085026771774e-02 -2232 4.5983141685747644e-03 1.3862171001298329e-02 -2.2530139414434255e-02 -226 3.3349674195616045e-03 -5.1781308752756028e-04 -1.2002176550137183e-03 -1637 7.6205091219548934e-03 -4.0081232308130700e-04 3.5968631343695989e-02 -260 -3.3403602971350817e-02 2.8250853701100882e-02 -1.5274833341109477e-02 -1086 -1.0023424591843770e-03 1.5327591650978252e-02 -2.5562375327172850e-03 -1840 3.2307881788933086e-03 2.2986359903590901e-03 -6.7659643518051581e-03 -2612 3.8735506261235557e-02 1.5513405616829118e-02 -2.6848180598106314e-02 -1842 -1.1142163255096630e-02 -1.9151374964429314e-03 -2.8368866918332403e-02 -963 -3.1638608216044898e-03 -7.7590469836181768e-03 -1.6364006689190438e-02 -1084 1.8112200927775130e-03 -1.3320498187405420e-03 1.5630974824608391e-03 -1663 -2.6848931431822476e-03 1.4575757088130287e-03 -1.0776365225923823e-02 -821 8.6268419964264948e-04 3.0348378323378160e-02 -1.1502324882662139e-02 -1791 5.4827560413404034e-03 1.4265998199797813e-03 -1.5051259350392331e-02 -2023 -5.7776444910683806e-03 3.2473898089544076e-03 3.8026464348636215e-03 -1664 3.0811957336586107e-02 1.7482676041505385e-02 -3.3456218474794742e-03 -1767 -1.5679284009508833e-03 6.6028843507724743e-03 -4.0376982020013665e-04 -2311 3.6353731506225920e-03 -4.3529484245046230e-03 -3.6589735208805291e-03 -2312 2.6883718835233352e-02 -1.7886351502707912e-02 2.4629402286361752e-02 -303 -2.3902419387264118e-02 -1.8780343237262739e-02 2.0595586539500211e-02 -1853 -2.3219294334831758e-02 -1.2620322457578849e-03 5.7106648837436883e-03 -1852 6.9314011744484689e-03 7.1005808378865067e-04 6.0192342495425889e-03 -829 3.2207373877966142e-05 3.2194400415736396e-03 -5.9542364435181318e-03 -2875 -4.0768256924573489e-04 -5.5742789255987151e-03 -1.9733858361812135e-03 -2759 4.1946424357806262e-03 1.9056908498682690e-02 -1.0044174151598221e-02 -249 2.4597525973642675e-02 -1.7136986042041554e-02 -4.1867889050482892e-03 -993 -3.9445437329963138e-03 -1.8203490431599013e-02 1.5285818602264221e-02 -401 1.0084441479019801e-02 2.5263381903938401e-02 -9.5254761024347022e-04 -247 3.6523020941608537e-03 3.8160207316955698e-03 5.9316269927768448e-03 -1103 1.4018444024400147e-02 -7.4703301937026840e-03 -1.5629662611476318e-03 -2876 -8.6942966622013135e-03 3.6365953815311954e-03 2.4100636611584150e-02 -1011 -2.9660286377169932e-02 2.6874710301892047e-03 1.1380700179317117e-02 -1893 1.5243524586900916e-02 -1.2812710776664259e-02 1.2158592932092215e-02 -2877 -4.9200678351322561e-03 3.0277740648936045e-02 1.1793100812982371e-02 -1841 3.8357388644642662e-03 5.7528198576615126e-02 -1.1108941227455338e-02 -203 -2.3942554375920390e-02 -4.7051700386042368e-03 -2.5723217671385469e-03 -2466 -1.8948946307082555e-02 1.7774504089244586e-03 -1.5232182550048871e-02 -1700 -2.9736569561357677e-03 -2.5058346754390306e-02 -5.0312550901366977e-03 -218 -2.3730352353472480e-02 3.3912934534408558e-02 1.6947962883746188e-02 -202 -3.2285676107068500e-03 2.7687995824540556e-03 5.3321424791669065e-03 -1104 -2.1688665108721375e-02 9.8780770537531520e-03 1.0355933590996064e-02 -991 -1.6449432749044320e-03 1.0433811726119312e-03 -1.5729885044967832e-04 -102 3.0531561352095241e-02 1.6671569523484916e-02 2.7767166598439256e-02 -2029 -7.5705858032099347e-03 -1.5469945971573534e-03 -2.7575400714465064e-03 -2025 -9.0757440976590338e-03 2.8997301655393076e-02 -1.3325255127122999e-02 -2031 1.1564805316764194e-02 4.1450659987947433e-02 9.2421187407129412e-03 -1111 -3.7797263947524601e-03 7.2932771930494808e-03 -1.5109121569061726e-03 -1112 -3.9882388949374374e-03 -1.4624103754530476e-02 4.4086941935867893e-03 -1009 -1.9298372007628551e-03 -7.1441072550341225e-03 -3.2734111423607108e-03 -1113 -1.8670078667432453e-02 1.0084807937404383e-02 1.2694270635380773e-02 -983 -7.9006614707362432e-03 -5.3612666460449362e-03 -1.9792230379126436e-02 -982 -1.9213662811703592e-03 -4.0402971683784102e-03 -2.6012202808595639e-03 -196 1.5807385039279345e-03 3.4124820184570073e-03 2.9412162347673856e-03 -379 -4.7759991743171817e-03 -4.1647686397480411e-03 8.0626806993175978e-03 -954 -6.0283680173137651e-03 2.3754947343410920e-02 -2.0012784733558701e-03 -197 -9.4191817020314664e-03 4.9469394531384166e-02 -4.0486780450487383e-02 -308 2.6895764165053609e-02 1.8949578394687246e-02 -1.1277184344689769e-02 -2674 1.3580305721036065e-03 -3.3714502402179733e-03 1.4639409888692744e-03 -2675 1.0625932247659385e-02 -2.9097042447537906e-02 1.5048660163659683e-02 -381 1.6579468577162301e-02 -1.5371545143266213e-02 1.6326107873304381e-03 -2676 -1.5871459419951880e-02 -2.6451658473754950e-03 -2.8274795117569737e-02 -221 -2.3856285850125770e-02 -1.0714748886340360e-02 3.5771895720480402e-03 -220 1.5292771199528698e-03 -7.2016850461439420e-04 3.5022211303377638e-03 -222 -2.6486465688803633e-02 -3.6432163435968440e-03 1.2376105856868458e-02 -958 3.1126091759404111e-04 -1.2234737209281109e-03 -2.1266923441997975e-03 -960 -5.0626210474542244e-03 -3.9478650008964280e-03 -4.0410108626986766e-03 -320 2.8242957850156351e-02 8.4746649553843357e-03 -3.0281433004504001e-02 -380 1.8154876756822938e-02 4.4784443901255185e-03 6.7199002758236591e-03 -319 -1.5728502631223910e-03 3.0200925364802160e-03 -3.6361960116831132e-03 -2078 -1.0385692101242967e-02 2.0953706275628418e-02 -1.1809805295382159e-02 -2042 -1.4824696091829960e-02 -8.0128126829382643e-03 2.6352556093538492e-02 -525 1.5845548588373847e-02 7.1570009412015353e-03 -6.4563146531564763e-03 -526 -2.1128899657902531e-03 6.2502023739401732e-04 -2.9703400186317890e-03 -527 -1.5812906644533005e-02 -8.1647490174383795e-03 -1.2165630916335858e-02 -534 -1.2303058027773055e-02 1.1139512700674512e-02 4.3667271405646900e-03 -119 2.9527810679875220e-02 6.5568891080373523e-03 1.0126637251472880e-02 -307 1.0707814269067405e-02 5.7871418009752002e-03 3.5586406305592650e-03 -434 -1.8190310227323134e-02 1.9384540451324705e-02 -4.3978085725698253e-03 -2538 -5.3020960727519426e-03 -1.3539011987247013e-02 2.5992096548517404e-02 -362 -1.7565598164536265e-02 -1.3650909699945462e-02 3.2028180365857396e-02 -1773 -1.2411419199548310e-02 -1.0930022545076546e-03 -2.1063614931651528e-02 -1441 -2.9140371426869599e-03 -7.5167969708285617e-03 -2.6357647644734547e-03 -2049 -1.1224604000171487e-02 1.3110637205062885e-02 2.7389681385523051e-03 -1311 1.6055225998483309e-02 2.6767448824675903e-03 8.2759835212376355e-04 -1194 1.7665069350946413e-02 2.2954180885461417e-02 -7.9032083968161512e-03 -1144 4.7458724509818785e-03 -3.2595847142712700e-03 -3.3234060688876909e-04 -2043 1.9516371123338767e-02 1.9760262340664627e-04 4.4002343239351194e-03 -532 -1.5980456410984552e-04 -3.8877705698683088e-03 -1.7467513936720899e-03 -533 -1.0957828014863056e-02 2.0732537936417741e-02 3.6094682730025286e-02 -2041 7.0778179148645406e-04 5.4008608274392863e-04 -7.2819103482043325e-03 -1905 1.4013068870782375e-02 9.5073180731355261e-03 9.0716645735606748e-03 -1903 -8.3770307959708332e-03 -2.1136005802252439e-03 3.0366232626571047e-04 -1217 1.7093454936111713e-02 -1.7723088392309944e-03 6.6831480887197259e-03 -1904 2.1035380263701085e-02 -3.4958734899867075e-02 1.0105471587484502e-03 -1216 2.0839788826823554e-03 3.9198582112532901e-03 4.6282452892582654e-03 -248 4.9397004628372191e-03 2.7124092292430856e-02 -2.1981392513447520e-02 -1146 1.9492565447298538e-02 2.5891462461180865e-02 1.0639081823799914e-02 -515 2.0350607263225615e-02 -1.5769570082929573e-02 -3.7822148840436802e-03 -1116 3.8276102726921987e-02 -5.5358928814725579e-03 -6.3262627764779636e-03 -1114 4.2380501899051126e-03 -8.1582630155345170e-03 -2.4371542164668093e-03 -1115 2.2499100650836369e-04 2.5380180120596639e-02 3.3485059686344165e-03 -579 2.7347993011689370e-05 -6.8516546752483039e-03 1.2240705121263837e-02 -585 -2.9143210077597820e-02 1.7587412122898865e-02 -1.8639019185146419e-02 -1196 1.0562661609733211e-02 5.7332997501171185e-03 1.9076106204504908e-02 -1714 -6.2288022081633055e-03 1.9478668416106019e-03 -8.6946021315406283e-03 -2814 2.7283831626297696e-02 -6.3225500206647127e-03 -1.7090762228530464e-02 -2819 1.6878615356606060e-02 1.6929757237440158e-02 2.7777918934105975e-02 -583 7.6555237769561808e-03 -4.2284829221785579e-03 -5.7378168147331479e-03 -624 6.1809515630607305e-03 1.5552572427243170e-02 1.9327603131701094e-03 -1195 3.5654906929441332e-03 -1.7064601082626197e-03 5.1414358938934625e-04 -1197 -1.3275027831289019e-02 4.7400299614444620e-03 -2.1335383701082143e-02 -418 -1.1948486073443340e-03 -1.0948919708370538e-04 1.9898658249684550e-03 -420 -9.7388193707794186e-03 -6.7622152711292599e-03 1.5574650116846657e-03 -419 9.3172242931418396e-03 1.7273338643516638e-03 4.0445918581911407e-03 -1145 -2.4522847461295905e-02 9.8121751529528737e-03 -1.8308018057293114e-02 -1171 -4.2151354426788268e-03 1.9293519001271717e-03 1.7310159952826202e-04 -503 -1.7384172515226753e-02 -1.7508224355168255e-02 2.2175992383319288e-02 -1280 -8.9864323235905284e-03 1.6902017750351410e-03 -1.9331090431908938e-02 -502 -1.3050166721160132e-03 -1.5556534582607748e-03 -2.2159765041914808e-03 -884 -4.2370397255939969e-03 6.9437586667193945e-03 -8.4688017007669529e-03 -2161 -3.9167491579275441e-03 1.8181216156665074e-03 -1.7966616998454903e-03 -32 -9.9540970061759090e-03 2.2156986128890627e-03 2.1169406565725697e-02 -31 4.3981567275504889e-03 2.2992295438212743e-03 -3.5965320854600660e-03 -1397 2.8309930711169023e-03 5.1230167916413915e-03 2.0366340643227634e-02 -615 4.4128385758732602e-03 2.0562394428451012e-02 8.0622027070894487e-03 -302 2.6701951591005081e-03 -2.8812872734757099e-02 -1.4611308554352890e-02 -2901 2.4554236617988908e-03 2.6200007687199305e-02 -7.6641395980791283e-03 -301 -8.1570686615924527e-03 -1.5517340417907813e-03 -3.3238917847137205e-03 -58 -6.4484328893117202e-03 -8.1749351391990493e-03 2.5541139895602868e-03 -240 2.3145555721682042e-02 -3.0400002739604696e-02 2.1470863825593683e-02 -2007 1.1423541525369662e-02 1.1304813193999565e-02 7.9081505702398372e-03 -622 -7.9881010901281333e-03 5.7043528207857772e-04 7.3821548310272671e-03 -1298 -7.5326500444896684e-04 -2.1402435648813577e-02 3.0939076956864837e-02 -448 -5.6320927430805563e-03 3.6972528583864282e-03 -5.7900631861106293e-03 -2004 1.0632522299561038e-02 1.8655173197884362e-02 1.2370566958585424e-02 -1415 1.3213912121440846e-02 -8.2652026917753151e-03 -4.6154935818122543e-02 -935 -2.4283843589203540e-02 9.8106299406359419e-03 1.9615140587429376e-02 -934 -5.7337950421257619e-03 -6.1827871225546144e-03 4.0956528399324205e-03 -936 -1.8582812449941900e-02 -1.7180964712145728e-02 9.1146857455487486e-03 -1654 -5.1397029914029557e-03 2.4487963510356333e-03 1.6869646772605759e-04 -1656 5.1576910145896679e-03 -3.1756851617265061e-02 7.9418897971444951e-03 -1416 4.1133901636328657e-03 1.2679927742279772e-03 -1.5268725360768615e-02 -1284 -1.2511248360173501e-02 -2.6240768227013853e-02 -1.4651483239920576e-02 -1282 7.8226025717472811e-03 -3.5214730291049777e-04 2.5435455237222278e-03 -395 1.9082612646208214e-02 3.4666991005522013e-03 1.4317905638957948e-04 -315 -1.0616189277544309e-02 -8.5104706481865661e-03 3.8606320247686304e-03 -2005 -1.4165879490791817e-03 1.6381419502027757e-03 -2.3208776328252178e-03 -1283 1.0769494722266782e-02 -1.3978745627494097e-02 -7.7702121906975397e-03 -2454 -4.8162213284155099e-03 1.6090251952430679e-02 -5.9110020254276394e-03 -143 6.6786611885027341e-03 2.2339205772339627e-02 -8.1559406848548937e-03 -322 -8.3633610063082887e-03 5.4893124421780820e-03 5.3189479669179382e-03 -2006 -1.7863332275124034e-02 1.9155365939569534e-02 1.9178922916634047e-02 -144 -7.4184533239827592e-03 -9.1174389182046480e-03 3.5975869712366981e-03 -142 1.4582610560141805e-03 -5.3917942477474997e-03 -1.6759378774080917e-03 -128 3.6087448923352715e-02 1.5897514723517799e-02 -1.6339102475492449e-02 -893 -3.2320026227000656e-02 9.7797689571352143e-03 -2.4804100240806540e-02 -613 5.8334013233233275e-03 -1.2159731793847473e-03 5.3996142175316087e-04 -1854 1.5158367686553471e-02 6.0857772198515073e-03 8.0068019634841284e-03 -313 -5.7867036382897028e-05 1.8162825117730723e-04 1.6040612407688000e-03 -489 1.9644361768644838e-02 8.0170993609708467e-03 -1.4830922863632466e-02 -1582 8.7280254189198582e-04 4.4664659123654074e-03 2.7712389622180276e-03 -1583 -1.1135060672097559e-02 -3.2747025959565516e-02 1.0487246059545310e-02 -1545 1.0402316858020847e-02 1.6417970965281966e-03 -2.3095562532846718e-02 -487 -5.3554273515514002e-03 3.2419915934690756e-03 -4.4955993392181920e-03 -488 3.3932279087654045e-03 1.1547676959171225e-02 -1.4206371129410573e-02 -236 1.9073649800892885e-02 -4.4236148318942846e-03 -9.2531439824011970e-03 -1087 -4.2278747431775806e-03 -1.2251055706367586e-02 1.6593042429528986e-03 -876 8.0851011625596662e-03 9.8534564416091087e-03 2.2051029912712902e-02 -1089 -1.2401424363918480e-02 -3.6312421117871904e-03 4.6470781873664286e-03 -988 -2.0031298690486498e-04 1.8913231226289633e-03 3.1856759037971849e-03 -989 -8.8008124638151665e-04 1.6900784009326133e-03 -9.7803790718916355e-03 -351 -1.1501925670547365e-03 -5.2731829229935483e-03 8.7865369622840365e-03 -349 -1.1343793330540408e-03 -1.3534801453992391e-03 -2.7308408145738186e-03 -2204 3.9762044158305608e-02 2.0522188710398685e-02 -2.0027583278764981e-02 -2090 -7.1056200379739937e-03 5.7132563886989488e-03 5.5889441884288571e-04 -2165 1.8250633326371276e-02 2.0331830441215511e-03 5.1538183844372799e-03 -2822 -1.3264839818237148e-03 -1.7103714682673809e-02 1.4689889325815449e-02 -2821 2.2937374641922603e-03 2.1073013808293605e-03 2.2432304890401228e-03 -2838 8.9508553976786771e-03 -8.6333697654156979e-03 1.2380402098545658e-02 -2164 4.3681381606283046e-03 -1.5635940328132709e-03 3.1171543303073301e-03 -975 -1.5780669417482726e-02 4.2822013186961062e-03 5.6812340198926009e-03 -2066 8.3484909403207762e-03 4.6155365397040297e-05 -5.2864242986176910e-03 -2935 -2.5929368540499554e-03 1.9938103102073079e-04 3.6570941196694936e-03 -2244 -2.8060432182550193e-02 1.4449309738672002e-02 1.0605045858308107e-02 -990 2.0647605821813485e-02 -1.4356708535669182e-02 -3.1344060989562869e-02 -2149 9.2850028827261939e-04 -3.5584783649996550e-04 -5.2645781917208274e-03 -973 -6.0239151849522171e-03 -4.3887523425169706e-03 -4.9412128021200045e-03 -762 6.4503170762220318e-03 -2.6447943908276771e-02 1.4048282461466258e-02 -2795 1.8662674248859555e-02 1.3701609209244727e-02 -1.8128015120106360e-02 -122 1.2357317851714322e-02 -1.3571886388583328e-03 -2.1652603370572791e-02 -358 2.3183878962753398e-03 -5.8161198604382864e-03 7.3873897411191370e-04 -417 -2.0988330308678492e-02 1.1691162118937739e-05 1.2312284433254217e-03 -961 4.6823824693189029e-03 6.2879730381568359e-03 -4.8517610730746475e-03 -962 -4.3390594354374215e-03 1.3275938005346733e-02 8.1694361656435965e-03 -2030 -1.0734452435421721e-02 -5.5605162255385158e-04 -6.3487753536457629e-03 -296 -1.9713496536959658e-02 2.0484874067763170e-02 2.0545839714418545e-02 -1684 1.4930722192608172e-03 6.3814741154114597e-03 2.4403631508149392e-03 -295 1.7077669789548641e-03 1.8627776779282603e-03 -4.4052133981464020e-03 -297 -1.6437135718561841e-02 -1.7345498143376829e-02 -4.5477812511563621e-03 -752 8.3097414126224785e-03 1.7055075331385235e-02 -1.2444271033261664e-02 -751 -1.1563975966299162e-03 -4.1231927296061469e-04 9.7590485125591774e-04 -333 -1.6959452828296932e-03 -1.1989619504064472e-02 1.3843929644496714e-02 -1721 -5.6106817101860334e-03 2.4082471312009712e-04 2.2036736416472472e-03 -1720 2.7590592816905605e-03 3.0900925558540663e-04 7.0064912355726457e-03 -1722 -1.5556877154767767e-02 -3.4567467218731877e-02 3.0965675356712024e-03 -513 4.2395231799385062e-03 -5.8656120038155205e-04 4.8378196247026014e-03 -359 -2.5592252545755083e-02 2.8627024249044102e-03 -3.2997647226055962e-03 -1686 -3.3899339642793624e-02 -7.0879424672288032e-03 2.3684631204696386e-02 -2280 -3.8372074506195480e-02 -4.4469950252267534e-03 1.1831588725206676e-02 -332 1.0883180586158676e-02 1.6457569037258549e-02 -1.5171604514664039e-02 -994 7.6227324704301784e-03 -2.3477907727690911e-03 -1.0663617570308511e-04 -341 -2.5916841793148385e-03 1.0671979152266782e-02 2.1503002693621643e-02 -340 2.5480572384286421e-04 1.8096069402814066e-03 3.4090454881240246e-03 -2278 -2.4506359818393633e-03 -2.1872694271245605e-03 6.5129840401316366e-04 -331 -2.6604521730524628e-03 -7.4539078271880054e-04 -7.8899932770064242e-04 -1272 -5.6046143087255121e-03 2.2318135216007295e-02 -1.3555160069386889e-02 -2279 2.3385414346932011e-02 1.0677944001547885e-02 3.3692976618471095e-03 -552 1.3372721966117320e-02 2.8530931436333683e-02 -2.7100370743465929e-03 -1071 3.5793967672013197e-03 -1.2849752859292489e-02 -1.7380386478403438e-03 -753 1.9587335114256022e-02 -1.2449836153186174e-02 6.3781771822438438e-03 -996 -1.1138025376782944e-02 -2.1213389139999993e-03 8.8953630420522483e-04 -649 4.8597280856150349e-04 5.7943603461439936e-04 -2.0122725687411482e-03 -1069 -5.8952304517893470e-04 -2.5215500227489746e-03 -3.3825104973519318e-03 -698 5.0250748337215701e-03 -2.7563037035671337e-03 -4.2622847806343802e-04 -2720 -2.4409711862176123e-02 1.7892036460270457e-02 5.3154209057393390e-03 -806 2.4627653020782434e-02 9.8357855686826562e-03 1.8945461941756218e-02 -524 5.6472699032750432e-03 9.8200604025397366e-04 2.1506458458607713e-03 -523 -2.1239008837839963e-03 1.4318426235828032e-03 9.7702620973164552e-05 -1892 2.8162979899861353e-02 1.2813032386062791e-02 -4.7507067659916602e-03 -977 -9.5317235921080282e-03 -8.1826889931665234e-03 1.0263044808705667e-02 -1270 -4.8198121768810163e-04 -1.9423143951583827e-03 4.5151344572185465e-03 -1271 2.3442467611663166e-02 -2.5680943177814382e-03 5.5724885277921399e-04 -1891 5.0071056670207201e-04 1.5483942800350139e-03 -2.9122633030638777e-04 -374 1.0746575716787374e-02 -5.6222652980072304e-03 2.2646197626385828e-02 -999 -2.0026616245369364e-02 -7.4515226815074038e-03 2.0689362099200061e-02 -976 1.9654016332718038e-03 -2.9046601492808332e-03 9.6896463680203656e-03 -2537 3.0693245246296904e-02 1.1457190747015145e-02 -8.3984337197257897e-03 -945 -1.1711091533662219e-03 6.2458666277018168e-03 -1.8179963175873500e-02 -1925 2.6294243773367861e-02 1.9550584080346375e-02 9.9120011032159724e-03 -1924 -1.5036409784334015e-05 6.7695477628962313e-03 3.0427680499407815e-03 -1926 -1.9205465926749300e-02 1.0241389444802186e-02 8.9776784721134276e-03 -1128 1.2477213539079055e-02 3.6102921627798983e-02 -7.4867099670139128e-03 -1126 5.3220822748564663e-03 -2.2978245225661675e-04 7.1488574977183919e-04 -1127 1.1460913441514725e-02 -1.1153846553058335e-02 -3.5756043558795296e-02 -997 -1.9503454415126162e-03 -2.3951965191235085e-03 -1.9519881332752881e-03 -1962 6.2196389541928970e-03 -3.8111576198025699e-03 -1.0040445776900336e-02 -373 -4.9331117684815930e-03 -6.3140186652721683e-03 -1.3237306877335380e-03 -558 -4.8844056123380133e-04 -1.3019793882195037e-02 -2.3684345893905612e-02 -2536 -5.1793519166329800e-03 -1.6374719788108908e-03 -7.7098394441548332e-03 -1758 -3.2438503860604765e-03 -2.5531214354915933e-02 1.1347815308592692e-02 -2450 1.0674742082644720e-02 -4.1183677455603040e-03 1.4545829421484994e-02 -1060 7.1439929231997589e-03 6.1867854448685697e-04 3.9878052666437727e-03 -1052 1.2582676920429707e-02 2.6911429136777503e-03 2.4306404177531965e-02 -952 -2.1490982130722655e-03 9.8867210827582983e-04 -7.6896126498907169e-03 -1160 -5.3787908533191519e-03 7.8249936911554303e-03 -1.0149541475741326e-02 -1061 -1.5316758586522485e-02 -4.5768087514248372e-03 -2.0698596818227302e-02 -2157 -1.0087460703138171e-03 6.2172632630697359e-03 -2.7516235597048792e-02 -271 -5.6925362952664721e-04 -2.9923293909952238e-03 5.5835728996127378e-03 -2843 6.0565712223069890e-03 -9.2556773676401079e-03 8.9927577301182268e-03 -2865 1.3917014306235518e-02 5.9072256603351066e-04 -1.3236000191757554e-02 -2336 -2.3385143231520675e-02 -3.3556099927422145e-02 1.5799939046797077e-03 -560 -2.8204463180717045e-02 7.8563695772583854e-03 4.6256400396129304e-04 -1002 -8.8207597339263200e-03 1.4929329764313232e-02 1.9862063082583214e-02 -556 5.4361450764519679e-03 -1.7311851966339376e-05 4.9915479512840076e-04 -557 2.5183273813222523e-02 2.4551305787412950e-02 2.0325015986316700e-02 -1051 4.1396776457323431e-03 1.7197326356439867e-03 1.7060318714160489e-03 -1141 9.8270318109728682e-04 -4.6771889214383532e-03 4.4512141684878862e-03 -1143 1.3733265409892762e-03 6.6469830218041284e-03 3.1074666166456322e-02 -1142 -2.6097320005064775e-02 -6.6722911601741902e-03 1.7396906851512475e-02 -1344 -2.5649393058574894e-02 -1.0403790899133581e-02 -5.7270816894730385e-04 -1342 -2.6067322806399254e-03 -2.8126823416459480e-03 5.6116582650408845e-03 -1279 3.5151198980035007e-03 -1.5808812130168157e-03 -1.1813572318390119e-02 -1323 5.1283070718133013e-04 -5.8599355507204434e-03 1.3977372723877094e-03 -749 -1.5186778337127451e-02 -3.3703453264668916e-03 3.9793140760593778e-03 -750 -1.6570515149865496e-02 -1.4577002220814851e-02 1.9745396493641679e-03 -1053 -4.3573594907291404e-03 2.5757213868678248e-02 -2.4018792624876620e-02 -1364 -2.4314326859848939e-02 2.4130358993098903e-02 -3.6202964951386235e-03 -1343 4.6330190769088824e-03 7.0240818624747658e-03 1.3627345858885446e-02 -1363 -1.0118739042827685e-04 -8.5554959150187552e-04 -1.9613151204872221e-03 -1365 4.0816226369735070e-03 8.5746244674397322e-03 2.2875310610935944e-03 -1294 -2.3753439809136409e-03 5.7504642275787077e-04 3.8240985640198336e-03 -1229 -3.0773313723246747e-02 1.6539023966694673e-03 -1.3273033691027067e-02 -1296 1.6313468565145761e-02 7.1453637116003620e-03 -2.4754280794175038e-02 -2934 -2.2735285236326321e-02 -1.1821903317200936e-02 1.6644689928562398e-02 -2850 4.3900790848486696e-03 1.0958587054645344e-02 7.8332120025196282e-04 -2932 -3.9316997155717385e-03 -1.1402412159147860e-03 -7.2948527765480213e-03 -748 3.0384761123419541e-04 2.8601312069580441e-03 4.3599809337755572e-03 -1321 2.5023349794384198e-03 -3.9080028036248566e-03 2.8048242801276068e-04 -1281 1.6932224693713110e-03 3.0603262663149826e-02 1.0124246452556154e-02 -2780 4.5753895599900396e-03 -8.3999679750539243e-04 1.3977275667926413e-02 -1295 -1.0793880248871995e-02 4.7700387051792291e-03 1.3833730496220156e-02 -1177 3.2592230738516708e-03 1.1412281078458032e-03 2.8564529311870721e-04 -1178 -1.0043551392854087e-02 -2.3606180891535513e-02 1.8274395919374260e-02 -2228 -6.6089067731486305e-03 -1.3038598987000048e-02 2.7607180716283836e-02 -1322 -2.9188769161998890e-02 6.6450932226007548e-04 -9.8827057372842149e-03 -224 -1.6330096300922359e-02 9.9281628647898620e-03 3.8838367107170250e-03 -2227 5.5825259630152624e-04 -8.8927765043569171e-03 -7.5409098447736639e-04 -2229 -9.2522808431036510e-03 -1.2955200078652739e-02 -1.1512332979194840e-02 -507 -4.0596489215045335e-02 -1.2043874467277742e-02 -7.5742361893262038e-03 -2080 -1.6780805351525512e-03 2.1300309544506576e-03 2.7894895921929215e-03 -2082 9.3278048168107790e-03 -1.8503019761558815e-02 -1.4437343592013948e-02 -431 -1.7970970442943487e-02 1.6966920506839019e-02 2.5416471968755360e-02 -1632 8.8731642268009888e-03 6.2008183217713304e-03 1.3488695586579857e-03 -1630 -4.7729948900931138e-03 -5.3314175320369845e-03 -4.8026639904379109e-03 -2166 1.5421912450648400e-02 8.8867356836217024e-03 1.1283620166305662e-03 -1917 -1.2981236133267980e-02 5.6213828483000442e-03 2.6000722328151094e-02 -2203 3.9560417203961190e-03 -2.1492936524055684e-03 5.0069306307212241e-03 -1180 9.6595432829880046e-04 2.0348909305603147e-03 5.2908533404696142e-03 -127 -1.7201495780087191e-04 -1.7082771225344414e-03 -4.4615181375701829e-03 -12 1.9085797233466906e-03 -8.4668246410390720e-03 9.1398461897689845e-04 -2095 8.8028185379506133e-03 -3.9856897017941556e-04 -5.8543777417833620e-04 -2096 -3.1298684693479385e-02 -1.7142821375137111e-03 -1.0657514240271615e-02 -623 -7.2635282775017863e-03 2.0491935068731541e-02 -8.2425649680650821e-03 -2159 -1.2083556607193961e-02 2.4400363190270325e-02 -4.6974752391323593e-03 -2158 -5.2891954798547159e-03 -6.6940382679632924e-03 2.4758539506489880e-04 -2130 4.3946100377987513e-03 1.5641241196024620e-02 1.8968977737618551e-02 -1182 2.6281009869255519e-02 -1.7712848019945389e-02 -3.6550775797022559e-03 -2128 1.8370294395987678e-03 3.8537231793827013e-03 3.9338726235784776e-03 -2129 1.8436271134434627e-02 -2.3809312559408108e-03 -2.2307501206812390e-03 -2870 -1.2950823524070934e-02 9.8992226384152435e-03 -2.3535256313017019e-03 -1328 1.8154210542831112e-03 6.4051298786240215e-03 1.2221815375361536e-02 -2869 4.1145062138576395e-03 5.0235485727370464e-05 9.5040995880935446e-03 -610 8.2100411762774106e-04 5.9501112024884257e-04 -5.3869553102587631e-05 -611 3.0725469667712890e-02 -7.4176835469131870e-03 5.6582977168987605e-03 -2160 -1.6801350588389240e-02 -2.0243246191774915e-02 -3.7276363024980956e-04 -612 7.8112773144968679e-03 -2.0965959332623192e-02 2.0050501872459502e-02 -759 2.8724381808172935e-02 -2.5300000115752912e-03 -1.4303655424813625e-02 -559 2.6748620282049120e-03 -2.4639604934416576e-04 -1.4325833983717326e-03 -561 -2.5208471076728009e-03 -4.5732539866626832e-03 1.5554751956218233e-02 -2048 5.2438164346097068e-03 -1.8562753055782661e-02 -1.6170343558195764e-02 -1623 -2.0392100576989078e-02 2.1583683429712120e-04 2.8970024689775054e-03 -2047 1.7292581602734239e-03 -6.3835870795923098e-03 -3.6936829055842463e-03 -2871 4.5061445171060123e-02 -9.9370718522232039e-03 1.1571108558708094e-02 -1379 1.6802636621881396e-02 -2.9007986645578018e-02 1.9156234617218496e-02 -2863 -2.9963319086937219e-03 -1.0252799871228806e-03 1.4341840097249791e-03 -1327 -3.1781942804154080e-03 -2.1276281607710565e-03 6.5535122932126044e-03 -228 1.3113528398231517e-02 1.0607197902729577e-02 -1.8638274294522791e-02 -1495 1.0215042357295851e-03 6.4844842059432577e-03 3.2605528188463782e-03 -1706 1.2279002805988585e-03 7.5129469107125166e-04 -8.0499857552969248e-03 -1707 6.7309062605877337e-03 -3.8425751118826754e-03 1.6146622060683281e-02 -1100 7.2340224131082565e-03 -1.5123050484955821e-02 7.5760142594100974e-03 -117 -1.1745285863412457e-02 -9.6527105163808080e-03 -2.9699171748310826e-02 -6 1.0398684830444189e-03 -1.1326819160551508e-02 -8.0103679734646379e-03 -4 7.9300319388166587e-03 1.5588247243824281e-03 3.9934275954154556e-03 -1527 -3.3451541456593556e-02 -1.6064973288055059e-02 -7.1951283163256691e-03 -151 -2.2714105561264195e-04 1.5580435765071181e-03 3.0091638279819539e-03 -153 1.3853863456791619e-02 7.7015340286341093e-03 -3.4646807495578151e-03 -1119 -1.2060411918084855e-03 -1.3392071248193492e-02 2.3950825025691163e-02 -147 -2.9040279007548020e-02 7.8999845264930018e-04 -1.7323210176867873e-02 -1117 1.8161088323784391e-03 5.1026702375422549e-04 -1.3972729748696012e-03 -1118 -6.1566307800894858e-03 3.2578472648126015e-02 1.1122556142761753e-02 -1123 7.2073614706866327e-03 6.7890389917652652e-03 -8.0441519203632156e-03 -5 9.8561925901574140e-03 8.9489669188231123e-03 -1.9746974282814946e-02 -2433 -2.7866872482827685e-02 -1.4261214774256997e-02 -2.2379101263735414e-02 -2431 -2.9278786122333479e-03 2.2279529535554786e-03 -2.0795357300178925e-03 -2432 1.3620997589977504e-02 2.0614282129853938e-02 -1.6543602060513829e-03 -152 -1.0732489230868839e-02 7.4778981675791877e-03 1.3851058553065006e-02 -857 1.0995564681565380e-02 1.0365525023570668e-02 -6.7592397224120410e-03 -923 5.4181998750686923e-03 -6.4818113758654703e-03 5.6791265645178939e-03 -1525 7.5180370366078469e-03 -3.5878566476114397e-03 6.5307903415456284e-04 -856 -1.3239775008756385e-03 -5.8462454014034312e-03 1.7816821354425993e-03 -858 -7.4125018697117513e-04 -6.8748722846075708e-03 -3.2183221014895402e-02 -120 6.6916697485917744e-03 -1.5901927686281802e-02 4.2849592643050428e-03 -118 9.3427320908879025e-03 -2.9597111715163834e-03 -3.8988925312918475e-03 -1705 -3.3378803927446986e-04 4.0431016150284079e-03 5.6802344932020176e-03 -792 2.2348932746030944e-02 -2.6291725541217264e-02 -2.0400604046977508e-02 -145 -1.6601877806911021e-03 -1.7014885662745851e-03 3.1702631982706351e-03 -146 1.2259956546065481e-03 1.2536509833861686e-02 3.0810976525283508e-02 -885 -4.9855954469564629e-03 6.5442089755096732e-03 -1.3861371246305590e-02 -733 5.7175196350662443e-03 -2.1499117979208800e-03 4.7705830908564865e-03 -734 3.1831318259227789e-02 1.3253613721506121e-03 1.7665458829965114e-03 -2326 -2.7795332249576409e-03 -1.0830160386524331e-04 1.1513013765163550e-03 -2118 -1.4620441935358455e-02 -5.0886215626466140e-03 2.3463084611727778e-02 -1871 2.8613600450906999e-02 1.4102128901414469e-02 1.4245378834279393e-03 -2205 -4.7435273146522478e-03 1.2009577697258252e-02 -1.7484105929029083e-02 -1641 1.6734807214937125e-02 -1.8538051018826683e-02 3.2741854200235183e-02 -1208 -3.1432608722127005e-02 -7.5309825125516264e-03 -2.0073253660416124e-02 -1125 -3.3294941070362280e-02 -6.7975604713130253e-03 1.0913423610557653e-02 -1124 -1.7356102482522940e-02 -3.0354334944041481e-02 -1.3409118051615656e-03 -75 1.4637894615629485e-02 -9.4596296292534729e-03 -2.5365509628471845e-02 -1699 2.6767466709100594e-04 1.9514011808139092e-04 1.7782442285921814e-03 -1701 -1.2410763729193813e-02 -1.5965764396177844e-02 -1.7650605372070401e-03 -830 -7.0484557328133240e-04 3.2486166400479124e-03 2.5217549982308064e-02 -73 -3.2556291512370991e-03 1.4515261870159479e-03 1.3010852987245017e-03 -848 -5.7296837605919334e-03 2.7296138766444631e-02 -3.5465871862223310e-02 -101 4.3959668953035555e-03 -3.1331906779051449e-03 1.6982207987257400e-04 -217 4.1123238309669578e-03 4.8739553734844093e-03 4.6511651019501277e-04 -219 -1.0700265413985615e-02 1.0623674178352024e-02 -3.2567136362535956e-02 -820 4.3787103848519759e-03 2.2744043249583643e-03 -3.7676146939115331e-03 -822 1.1719857730609408e-02 3.0445168282162791e-02 -3.3319170866296429e-03 -2937 -2.9451341357895379e-03 4.6642524812255687e-03 1.2577304732932953e-02 -2293 5.9520526737052754e-04 -5.9247135323262290e-03 -4.5971368169950267e-04 -2585 2.8203355822353747e-02 -1.8055875535576811e-05 -1.3034780783668973e-02 -2586 1.1133372276605330e-02 2.1264645926462263e-02 -2.1609390034570426e-02 -2295 -1.6380458969287082e-02 5.2972709667094596e-03 1.2630303319920235e-02 -567 6.5889849077103340e-03 -2.0349414839488929e-02 -1.1643861631945055e-02 -100 3.8319252579413873e-03 -7.3569165066411663e-03 1.9898894336001526e-03 -2300 1.3093251213214680e-02 1.4223760909286964e-03 1.3765798988962290e-02 -1559 -3.5875604480110090e-03 -9.0653335074133735e-03 2.1212085096761143e-02 -1522 -8.8542402648616797e-04 4.3367017484145388e-03 -3.8979733324639430e-03 -1524 2.5104750276818067e-02 -2.0915043203839526e-02 -1.3645610557637104e-02 -53 -2.9551984093641962e-02 2.3993428298663875e-03 1.0789637674787293e-03 -54 2.2785382426985998e-02 -4.8386537936912161e-03 4.6155732944451614e-03 -52 -3.2007566738965947e-03 9.7792668056745531e-04 1.4144213727226495e-03 -1558 -4.1591187058528942e-03 5.0579269224239991e-03 -2.9718588517321448e-03 -1523 3.3445423731995488e-03 -1.7215794988860182e-03 -4.1316358070762269e-03 -1560 -3.0017955808523708e-03 4.0563892814942815e-03 8.8699541004474414e-03 -1035 9.7074514991829751e-03 -2.4745591862646018e-02 1.9754391831301199e-03 -1033 4.3089927812104691e-04 2.1832828437034942e-03 -2.2466672433104481e-03 -849 8.5018930097442540e-03 -9.5853128739613758e-04 -7.3222869664458356e-03 -2584 -6.4328018872965359e-03 1.8286680028888709e-03 1.1751036533722283e-03 -193 -2.2480098542165378e-03 2.2646740253360878e-03 2.0145600253728426e-03 -1692 -1.1587283811058133e-05 7.9425216414750373e-03 -2.4445192564464382e-02 -1547 -8.2387557659736460e-03 5.9156711568857613e-03 -2.6290058241457840e-03 -1443 -1.4818630623489764e-02 -1.4928939053244612e-02 1.9161766449431534e-02 -832 -4.3870821139546474e-03 -1.1456279029166021e-03 5.2779870367085603e-03 -833 -2.4584942732215807e-02 -2.6807522410358598e-02 -1.2747363885186042e-02 -2642 1.8291979805763553e-02 5.2393551254613438e-03 9.7208868992593907e-03 -603 -4.1449367112937931e-03 4.7534301576199426e-03 5.2207795944835501e-03 -1949 -1.5519453989048701e-02 -7.0241500913215951e-03 3.6728924068801898e-03 -56 1.5836287509072750e-02 -5.2844429305851613e-03 5.4432693887044043e-03 -1998 8.3933718837670198e-03 -4.3650464796903101e-03 7.0599931261895593e-03 -1996 4.1352591784007183e-03 -1.4013802587202417e-03 5.7494827867307511e-03 -2394 -1.2274422997661653e-02 6.5791688324991710e-03 -1.3060547270329647e-03 -2392 -1.2744963406278143e-03 -2.8877718787350768e-03 1.2163429550339283e-03 -1997 1.4533377326528350e-02 -1.9747667790179366e-02 -2.2176133680817490e-02 -2393 -1.0158817551956741e-02 -7.3212383990551716e-03 2.2758264216641372e-02 -831 2.5741833607243268e-02 8.5534880229850997e-03 9.9090687042133526e-03 -343 1.0918793368839778e-02 2.8350566454412112e-03 2.3184602490560987e-03 -345 -1.5585825904956390e-02 9.3104451323450883e-04 -2.0377254906902016e-02 -492 2.4142616932829802e-02 2.2275312109065974e-02 -4.3992811358473126e-02 -490 4.9632654182506378e-03 -4.0765350606645203e-03 3.1760835396470563e-03 -344 -5.8444752934103021e-03 -2.6847087713090512e-02 7.5864355256840654e-04 -520 3.5283303316789335e-03 -1.3751479753414016e-03 -1.0738253659260562e-03 -521 -5.6143572230481246e-03 -3.4080161568024359e-03 -1.8408612068368374e-03 -522 1.6412676543618186e-02 4.2499861298431569e-03 -2.8807651667557424e-03 -1756 5.7568352569534638e-03 1.6603995135413612e-03 2.2675542229855933e-03 -1747 -6.4618018248306722e-03 2.4841781373751244e-03 -3.9991989857699559e-03 -1749 9.6246704485537064e-03 3.9973484280294040e-03 1.3246146381243860e-02 -267 -1.7488393174228060e-02 2.9125216609426591e-03 -5.9365119263557658e-03 -356 -1.8215915377678173e-03 -2.5500737851810337e-02 -1.9713557787447347e-02 -2478 2.0345092341372280e-02 1.4370507731803666e-02 4.8630419916578542e-03 -292 4.1467573832269589e-03 -1.7246344139196092e-03 -3.0558723920447047e-03 -293 1.9515162435984887e-03 -3.1480128381542870e-02 1.8934603406939716e-02 -1107 -1.2180276527344013e-02 1.0525487903983572e-02 8.9447915512334986e-03 -1105 2.0814462722643718e-05 -3.7499626668227697e-03 -2.6719853919175474e-03 -2125 -7.1193382333069235e-03 -7.0821877334481843e-03 -8.1707302958682060e-03 -43 -3.2886599394774839e-03 2.8083324425702051e-03 -3.0748593955078375e-03 -1757 -3.2135941796972601e-04 -2.7969442735396501e-02 -1.4229503054140284e-02 -509 -9.9807815511398492e-04 -2.4586476401398008e-02 3.6094802748203959e-02 -1380 -3.3773211705721506e-02 1.0073474700427789e-02 -1.7286111984736841e-02 -578 -5.7936187413037687e-03 -6.4229829341231927e-03 3.7891381409427532e-03 -367 2.6813755654399411e-03 6.2659578405034697e-03 -5.1763778313490263e-03 -511 3.1563011228144945e-03 -5.1697525748700445e-03 -1.4512771967219039e-03 -2011 -1.0842543220403575e-03 -1.3923039222047304e-03 -2.2291696590771059e-03 -1475 1.2974801830156349e-02 -1.2533759288663544e-03 -3.6834753847083665e-02 -601 9.1785550580064787e-04 -9.8701263037667113e-03 -6.0727890481403082e-04 -2187 1.2601926869680121e-02 -1.7588297396200530e-02 2.4261419707251792e-03 -577 7.0579569972602642e-04 4.2402548815904462e-03 -1.9179859462882460e-03 -614 2.4179689801740019e-02 1.0394120263072088e-02 -2.4714699459964771e-02 -2866 3.7488588275006112e-05 -5.1809936554334272e-03 -3.7528881362686849e-03 -1474 2.2651709245384540e-03 9.2562041088301034e-03 2.0425527861735564e-03 -1476 7.4462404598182475e-03 1.6531602596115573e-02 1.6634166165890685e-02 -1218 -8.2522539839901821e-03 -1.2093162563315990e-03 -6.5639247500507026e-03 -688 5.6827419529101482e-03 8.0927005040723945e-03 -8.8204741594665684e-03 -1499 -1.6725523241246476e-03 -1.6659235928223843e-02 -6.7910882222246526e-03 -1498 -1.5304012778496298e-03 -4.0732506246741046e-03 4.9127382619160364e-03 -1258 3.3409562010576193e-03 -3.8331444937332875e-03 -2.7346525243854571e-03 -1259 4.3840351759065867e-03 -6.6433424642396936e-03 1.5135600667495303e-02 -1260 -8.4403435394699456e-03 1.9440788767968550e-02 2.8964180073827181e-03 -516 2.7565897425045730e-02 1.5077538837234943e-02 -1.6562478512389851e-02 -450 2.3823700518826791e-03 1.1527885033464590e-03 -3.0880060422541497e-03 -514 1.5304566102900625e-03 -3.2445577201152785e-03 7.8397342303063670e-03 -543 1.2985166809883840e-02 -2.1137982646094598e-02 -7.4848642258770618e-03 -477 -1.1621070490518047e-02 -4.2016227913850471e-02 3.4733593255656496e-02 -1500 -1.6716182270554616e-02 2.8251886216702118e-02 -2.2604675067731818e-02 -540 -5.5424873966339978e-03 -8.8236177249678711e-03 -2.2266983465138900e-02 -475 -3.4812067638899605e-03 8.4840322454202855e-03 7.3034515865462515e-03 -519 1.5704501716473730e-02 -5.5603826818958584e-03 7.4018060097969353e-04 -518 3.4382592011514214e-03 -3.8449922885134109e-02 2.7225384452486162e-03 -517 7.5966879440616229e-04 -2.0023685090745829e-03 -4.0662699704659654e-03 -1463 1.9695423536959127e-02 -9.7789260634590820e-03 -5.4661212474546141e-03 -690 -6.1216815475334738e-03 -7.8170841651037885e-03 -6.8724124006339518e-03 -305 -6.8839888464922909e-03 2.1496952088068760e-02 1.5461637717108241e-02 -1427 -1.6204082142436516e-02 1.5066058979556825e-02 4.0541040835246088e-02 -705 3.4970295867624711e-03 -3.7184924544771988e-03 3.7168509060510591e-03 -541 2.6336515340293740e-03 -1.3312573889001009e-03 -1.5866443430100281e-03 -1899 -2.1138876137897711e-02 -2.9942720282296026e-02 6.8133759540536885e-03 -1426 2.4826364675595348e-03 1.1389752360385082e-03 2.5025292287421340e-03 -1428 -1.5765226019282853e-02 -9.3905304231731001e-03 2.0940413714171701e-03 -1414 -5.9806203215921642e-03 2.6318986516043110e-03 4.3936166834771207e-03 -1927 7.5575942717717353e-03 8.1567481440209346e-04 3.8982661731355103e-03 -689 -5.9639049184151659e-03 1.7273616557351341e-02 -3.9702329739646465e-03 -435 6.2441517645837382e-03 2.5973195023326515e-02 -9.3262362300429620e-03 -2162 1.1306464492703420e-02 -1.2811243791629123e-02 -2.2970783412229290e-02 -542 2.2989142431353218e-02 3.6575628227692473e-03 -4.3783908943746275e-03 -1462 -1.4124643493014964e-03 1.5178849345083066e-03 -5.9252268630575573e-03 -1464 -1.8097671423959700e-04 -4.4829525761881563e-03 1.0632373877834942e-02 -433 4.5309319817150133e-03 -2.5205176712716094e-03 -7.9062584889003627e-04 -790 6.9359443055998856e-04 -4.6195930770891847e-04 7.5587820657737302e-04 -791 1.9371948232549372e-02 4.0520318432027162e-03 -1.7127118224336522e-02 -1898 1.8574080931509224e-03 4.0099532507375177e-03 5.3129452151888228e-03 -932 -2.3939149102098576e-03 -8.5693909834957133e-03 2.2335442311690816e-02 -1897 1.1600807970819523e-03 5.5664601732971931e-03 2.1720233528524004e-03 -65 1.4002236669823932e-02 1.1774895612312486e-02 1.5622160759663462e-02 -931 -5.3052903243461045e-03 -3.4472994233734943e-04 2.6058656955989462e-03 -619 -2.7772272399897327e-03 -6.1465928725469047e-03 2.6730948430234085e-03 -621 -3.1216590406813433e-02 1.1458676841053018e-02 -1.9267526745345719e-02 -149 -1.2848200221162657e-03 -2.6020416849107691e-02 -2.9121204825382795e-02 -620 8.1510656360134250e-03 1.2938412551021856e-02 -3.9865489854576117e-03 -64 -5.3120071565939658e-03 7.0936939946775780e-03 1.5935756691597713e-03 -933 -3.5886324589867791e-02 6.8341983971100537e-03 -7.0684342461307965e-03 -66 1.8732600645491548e-02 -1.2841665422029733e-02 1.9213279695868470e-02 -150 4.1425250247916941e-03 1.5595094868646232e-02 -6.2047030863383590e-03 -148 3.2297962869624105e-04 1.1833270023829467e-04 6.0826303974982933e-03 -1410 -9.5016535675107958e-03 -1.7410765052676278e-02 -2.4703010964963286e-03 -565 -7.8929817752781050e-04 3.3568223993787113e-03 5.6491549040318641e-03 -632 -5.7879682263846308e-02 1.3066746485658611e-02 -9.8054531687921404e-03 -2361 9.7649025383708173e-03 8.9574191798462901e-03 1.4486459129621895e-03 -175 -8.6944198843490260e-04 4.3501593508675261e-03 9.3435083504950299e-04 -2328 -2.3803114304375646e-02 -3.7813162781045540e-03 1.9220992773429670e-02 -176 -5.8540712488969653e-03 1.5809979344411137e-02 -7.5580927249089087e-03 -330 -4.2787894462868650e-03 1.2515067108551657e-02 1.1332771760602023e-02 -2327 8.6824097108754092e-03 -1.1276416179270225e-02 -2.4363726710935778e-02 -62 5.1848506613628277e-03 -8.9979081529791820e-03 2.9710817689234031e-02 -1041 1.7131883979998184e-02 2.9194514424658303e-02 5.9371336714447969e-04 -1351 -7.1820125723772955e-03 -8.8124625218635603e-04 1.2182119474716951e-04 -2198 1.5036541793914549e-03 1.3694755227752727e-03 2.9645030654139770e-03 -974 1.3863236162573169e-02 2.4381191249751480e-02 -7.2451498086123570e-03 -631 3.6246056647445514e-03 -2.3166474548755962e-03 -1.6369523006268736e-03 -1088 1.6588684755222929e-02 1.5283981294499038e-02 5.7072423282499864e-04 -2199 3.1709026198799509e-03 1.8076156326300490e-02 -4.8535103866887627e-03 -235 4.8812169400327147e-03 1.9977033501207813e-03 1.0384963860526806e-03 -898 -2.6670752224445945e-03 -1.0532863310103531e-03 6.5203043111548703e-03 -900 -6.2454763281321463e-03 -1.0994330646999942e-02 -1.0586223086333659e-02 -600 9.5417157330575965e-03 3.6151975601749348e-02 1.3631236589241216e-03 -69 1.1015662883939908e-02 -2.7202617802215227e-02 1.0516065511655959e-03 -1353 1.3672593096603096e-02 -8.7752458366165235e-03 -2.2995461680932899e-02 -67 3.5116013569569380e-03 -2.6459670345702528e-03 7.4682392948989659e-04 -598 3.7027143989079633e-03 6.4454514008106746e-04 -1.1164139401510509e-03 -2097 7.7419045810497959e-03 -3.0168523117437396e-02 -6.2736455552135041e-03 -2402 1.2336339320338292e-02 9.2393258512332866e-03 -6.3776628151700271e-03 -237 1.8149075779100004e-02 -1.7917484197094907e-02 -2.8187074086761722e-02 -68 -1.1071496712737780e-02 -1.2069776736242424e-02 -2.7349219831211420e-02 -2116 1.1004852163865304e-03 1.3918672800169673e-03 2.1751097567855710e-03 -1040 -1.9839610245003315e-04 1.1628675657168925e-02 -4.5607745752555611e-03 -1039 -1.8397211074367981e-03 -8.0376790411538328e-03 -4.7530935597362621e-04 -2117 1.1105014620608797e-02 -2.1439844727011048e-02 -1.2379065113831010e-02 -2825 4.6728857635098568e-03 1.5549058963814219e-03 1.4727730941840050e-02 -706 -3.3066503434313111e-03 -2.2135935822038808e-03 3.2168667678046953e-03 -707 3.5629747500847144e-03 -3.2460463010475150e-02 -2.1622598747264819e-02 -416 -1.7654173969000011e-02 3.1810755382372574e-02 -1.3698122893007878e-02 -1515 -1.5434866876681132e-02 -3.6343594505257077e-03 -3.2365278303168966e-02 -2197 -3.8887385373241245e-03 -6.7201251329111981e-03 7.6029105165288278e-04 -342 1.7478893498519745e-02 1.4410772302266343e-02 -1.3455882486593247e-02 -1820 -2.8806583954184731e-02 1.9946432754658041e-02 1.8889623605106001e-02 -1396 -5.2374911690025391e-04 -1.0481296553396084e-03 2.2021129751406097e-03 -1971 -1.7589435442098587e-02 -1.1234233621112994e-02 -1.4984445918424801e-02 -864 1.9527933731912413e-02 -3.1229911901937231e-03 -5.9821086530537611e-03 -862 -1.3362794971511149e-03 1.5982341894007811e-03 -1.9257051479585855e-03 -179 -1.4564214012017488e-02 1.2709097516040725e-02 2.7303896418359487e-02 -368 3.0665434092681460e-03 2.7136906027898696e-03 -4.3034271371233451e-03 -847 -3.8550088743124641e-03 2.3233356576100807e-03 9.1055832086773365e-04 -1556 6.9309645352695287e-03 4.0177739101722159e-03 -2.8706616655655125e-03 -1849 4.8466231565905708e-03 1.1526990867562124e-02 -1.9955680891864331e-03 -875 1.0096065382048471e-02 1.2143726899545643e-02 3.8151976146329294e-03 -874 -5.4709458606675317e-03 7.8567061090069126e-03 3.8764664030056670e-04 -1850 -1.2966564753690230e-03 1.9202371074052212e-02 -1.7656131467088495e-02 -1352 -1.2494827018427669e-02 -9.1563788883172650e-04 -6.3845159759930419e-03 -697 1.0149116951036680e-02 -4.6355094940113313e-03 5.3394325622184728e-04 -1819 -5.7112986428482001e-03 1.1673371817808372e-03 7.3337593373349061e-03 -863 2.9978211498484529e-02 3.9903670909463380e-03 2.0806520002270137e-02 -1889 5.5742307415614107e-03 -4.5968534295882796e-03 -2.5616580987192173e-03 -259 -4.8653517881894204e-03 5.5802080740623688e-03 1.9954681513140814e-04 -261 -7.7992370335544150e-03 -1.2523010460657562e-02 5.9031787697073953e-03 -995 1.9360811736134291e-02 -1.2049743394263554e-02 1.0271380116842407e-02 -1034 -1.0049296179541305e-02 1.5934932787159427e-02 -1.7188574075347393e-02 -699 -2.1025643740643304e-02 -1.6639946140088485e-02 1.9246160373972504e-02 -2623 2.1800174291668221e-03 -2.7678395129016784e-03 -6.0934750650414333e-03 -1888 4.2717176070919630e-03 -6.3343105459383168e-04 -1.1503028945615753e-02 -1890 -5.5955377644141989e-03 1.1315962574896990e-02 4.1650395172195178e-03 -2624 -1.2920499177701151e-02 1.7655880360161802e-02 -9.2981033903080934e-03 -2625 -3.5571413360365400e-02 -4.0662877170849999e-03 3.2491428178670094e-03 -1851 8.4446991653115647e-03 -4.1321778467796957e-03 -4.2070619070498257e-02 -2299 -1.9764459090569563e-03 -8.8168096720081489e-03 -5.7744541293744444e-03 -1703 3.9603719412224878e-03 3.1222791800768191e-02 1.5401441059888285e-02 -1702 2.6156414886276277e-03 2.2314749799760111e-03 7.3916212058577251e-03 -1797 3.4289327206565363e-02 3.5368604522796423e-03 -3.1373582196129443e-02 -335 6.2145613803535399e-03 -3.6625801076478148e-04 -8.6371050615048777e-05 -336 -1.0408636566081812e-02 2.2753775762681474e-02 -2.9540250005816180e-03 -334 6.4632136855019146e-03 4.2906147274826729e-03 -4.2445887325278904e-03 -1685 9.4992069951221093e-03 1.8690278113404075e-02 7.2638476217375125e-03 -537 -1.0442081428720109e-02 5.6226486297988416e-03 8.7686876788282825e-03 -375 1.1589359251601684e-02 -1.5378410567504497e-02 -2.3371767082565286e-02 -436 4.7516107934585904e-03 3.8634669944673278e-03 6.6720448576453829e-03 -2465 8.4136618658546755e-03 5.7909892815410950e-03 -2.2889029356387980e-03 -2477 -1.9485502291330673e-02 -2.4295227173013381e-03 2.6972222180504636e-02 -1207 1.2349577684247920e-03 5.6923825493039384e-03 5.4004580685425019e-03 -2301 8.0767665172992390e-03 -1.2008790542343590e-02 3.1639100693260654e-02 -2464 -1.6967483461002812e-04 5.6421839342378627e-03 2.2750798413380771e-04 -1049 1.5715822436578079e-03 6.8308215391332293e-03 3.7491416929201220e-03 -2508 -1.5400712611074062e-02 9.0956451052876773e-03 -5.5423525795155774e-03 -347 2.0260028582111390e-02 -4.8032326302104716e-03 1.7592748235414687e-03 -1378 -2.3022398346483363e-03 -5.3015969097252344e-04 4.7810194199404046e-03 -2507 1.4485817689609643e-02 2.5479348585698575e-02 1.5978431936466621e-02 -491 5.1722686614272793e-04 -7.6554193056536657e-03 5.9033858224144739e-03 -44 -1.9530310125315919e-03 2.3087357488499844e-02 -6.7871749828631953e-03 -2506 -4.9819858926126136e-03 -8.7343106241852837e-03 2.0049389142283856e-03 -2445 -1.1120194011137136e-02 3.7775691926297081e-02 -1.1714051642715594e-02 -2444 3.9976000893982871e-02 1.4401560282569751e-02 -1.9200207164810777e-02 -2443 5.1943547244816361e-03 -2.2667434121750635e-03 -1.8297902976889011e-03 -1679 2.4636547562577216e-02 -1.3106267607790816e-02 9.2552710442407539e-04 -294 1.4390338908804592e-03 -3.3456022491801123e-02 -1.1768537081589321e-02 -2322 1.2362097121716341e-02 -9.3436285415096545e-03 -5.3108817270641154e-04 -1236 -4.2092020325554362e-02 -1.5147167020572365e-02 -8.5137685966025743e-03 -1234 -1.7456882132483673e-03 7.9459258379664197e-03 -3.3443745484590035e-04 -2320 -4.4707127668523354e-04 -1.3633731666010361e-03 6.9142267322863020e-05 -2321 -2.0891914468419995e-02 -2.2625351356356408e-02 -1.7226138874639245e-02 -1235 1.2265397746248557e-02 3.0287733022692745e-03 1.1310957508311360e-02 -192 2.2545879553343379e-02 3.5783470337723708e-02 -8.5798218343374789e-03 -225 4.8809594744885117e-03 8.0411082844797990e-03 -1.9472272075523659e-02 -190 5.8081210304029036e-03 -2.2760866930957996e-03 -3.9381247082410000e-03 -191 -1.1365060349958612e-02 -4.8939550329504576e-03 1.5379431138418373e-02 -464 -8.8462307062590288e-03 -1.5695462199154464e-02 -1.0003636181384707e-03 -1678 -5.2763576983378925e-03 -3.5761740834455778e-03 2.7106051536359447e-03 -1680 2.1439178335978006e-02 -1.3851602488299485e-02 2.9709631603883426e-02 -265 -4.5742841441966083e-03 -1.0481338167026731e-03 -2.8096885473685774e-03 -1629 -1.1209411958181190e-03 4.1199386847218531e-03 -7.5982615890169266e-03 -463 7.0733125411808092e-04 -2.0233536374320853e-03 -5.1558249346714692e-04 -1821 9.8688504778165001e-03 -1.9913098095287230e-02 -1.1251662720286344e-02 -465 6.0099417550669304e-03 -1.7133107363676344e-02 2.2058002313315745e-02 -438 -2.0297513203418129e-02 2.0970209552087830e-03 -9.4606084669311577e-04 -437 -7.5541007516931444e-04 -3.6095589388707452e-02 -5.3093581462316511e-03 -348 1.2471090916213895e-02 -5.5598268164196224e-03 -1.0577208876613651e-02 -2684 -3.4753302542474278e-03 -8.9751751906408470e-03 1.5733435201285705e-03 -2685 -3.8313767425281878e-02 -1.5654809392553228e-03 -5.2459073025491812e-03 -2683 1.6976385791960206e-03 7.3573956244477054e-03 1.4637997868620154e-03 -1299 -2.2654937847154864e-02 -1.3746514006564178e-02 1.8389740122484760e-02 -1297 -3.9617461601682957e-03 -7.3149449240608169e-03 6.5148496841855030e-03 -369 2.3137621353726891e-04 5.8083495878752207e-03 1.0980232796230905e-04 -223 -1.1191784644375650e-02 5.7935171620910144e-04 -2.1984065043322326e-03 -306 -2.6601438637751548e-02 7.1349266823393107e-03 -1.9194273692026267e-02 -216 2.2180468935361894e-02 8.7878315093042926e-03 -4.0297533367396427e-03 -2903 7.9381247997693267e-03 7.6889553670778316e-03 -7.0850677253628362e-03 -2818 -2.9094278735880613e-03 4.6776384841518701e-03 5.4612700908307380e-04 -304 5.6624167322692478e-03 -4.4123619860433503e-03 -5.2059707878624375e-03 -215 1.8173561110142761e-02 -3.2606526077607330e-03 8.5277438244941699e-03 -1771 4.4901704296658549e-03 -3.8080030707240780e-03 -3.8964875188691752e-03 -2091 1.1806964528576932e-02 -1.1381595544424385e-02 5.3406145262332788e-04 -357 -1.5806299681809462e-02 4.7910825109631168e-03 -9.9777494817381001e-03 -2060 2.5251876968662254e-02 -1.1631165978639339e-02 -2.7346121291276507e-02 -476 -2.7332307745619841e-03 -1.1142842249760913e-02 -6.6828026136335969e-03 -539 1.0884335215718634e-02 -2.4034825141323785e-02 -2.7283396054725677e-03 -2081 -8.5936822092890083e-04 -1.9877129732525776e-02 -1.0522887485497704e-02 -566 -2.0451842076063161e-02 -2.6470359545674810e-02 -1.2263912239344114e-03 -2661 -1.0141990853102103e-04 1.5208355572957145e-02 -1.5201395379070037e-02 -2659 7.0126090458366109e-03 -6.5879885769274163e-04 1.9545972755095715e-03 -538 -1.0528988746147598e-02 -5.1478400286006955e-03 -5.5116474547117229e-03 -2679 1.6692886911580267e-02 -1.1997680159848811e-02 1.5313204695726293e-02 -743 5.3079572757044689e-02 -1.0103660543545631e-02 7.4935575173645354e-03 -744 -1.6864335397227658e-02 5.0106771177800130e-03 -1.3590745092696765e-02 -742 2.0618661448342916e-03 -3.1896646381179071e-03 2.3042535231951851e-03 -214 -3.5807298082980773e-03 -8.9113247308555445e-03 1.3174120233577699e-03 -2904 1.0766992552785931e-02 -9.8927721404613953e-03 -2.8531380043065428e-02 -2902 2.3197771358615137e-03 7.2185725845661953e-03 3.6448699823587527e-03 -2150 -1.6777422106881247e-02 -9.0777642159492397e-03 4.5583862162259904e-03 -599 1.0575635925467203e-03 5.2368415534757261e-03 -1.3194216097067040e-02 -508 3.9617184446751183e-03 5.4073769792698650e-04 4.5717897650252460e-03 -633 -1.6580289014997081e-02 2.2010695157749283e-02 6.6645125222143725e-03 -2545 -4.1221877641386502e-03 2.9930721569495127e-03 7.9251100843501024e-03 -2547 -1.4763669861780850e-02 -1.7850553465085399e-02 2.3686574163157240e-02 -360 3.0853361149142597e-02 2.0257700299298738e-03 -1.5556123099920934e-02 -2546 -8.8415065386751659e-03 -2.2617258219897761e-02 1.4756837342875711e-02 -1371 7.9700233579722043e-04 -2.2731027503980462e-02 -6.4137455522323729e-03 -324 -1.1445874982120133e-02 -2.1779349346498771e-02 1.3743283963231710e-02 -1513 3.3839424629611790e-03 -5.9026453776857514e-03 -7.9066162879411737e-04 -1209 -6.5653515724430952e-03 1.1676101760408697e-02 1.2040447177802938e-02 -2867 8.1879278117140096e-03 -1.5812810000633609e-03 -7.8057633133553463e-03 -726 -7.3903987804620642e-04 -1.7490757674027565e-03 1.8753510957703252e-03 -2842 -4.9714910363943135e-03 2.2251959485573279e-03 4.3183621283412665e-03 -696 -3.6293986672642472e-03 5.6868790618851374e-03 2.2284810825643930e-02 -1369 -6.8826776262527287e-03 -7.4453358627211356e-04 1.1146397888436468e-03 -694 6.1750090163475765e-03 7.6223235358588621e-04 -5.1675810785854013e-03 -323 -2.6473500669353525e-02 -3.9226987426223331e-03 3.2690539659413584e-02 -695 1.4437273348045579e-02 -8.3809112582447129e-04 1.8461615682056860e-02 -1514 -9.3748753799760970e-03 -2.6952046120769187e-02 1.6249188952877060e-02 -510 2.1212810538048899e-02 -1.4162922565366973e-02 2.3824258320727397e-02 -724 3.8466302193338763e-03 -1.1663087506371802e-03 2.4426545137865899e-03 -2826 2.0297911339497151e-02 3.5681607591885075e-03 2.5798664161177454e-03 -2824 -2.4312171733152825e-03 -1.2123938564969027e-03 2.8960040954892959e-03 -2820 -8.0934753735114658e-03 5.4673966870821831e-03 8.7854051065440666e-03 -355 -1.7468862037428189e-03 -3.5801673710711703e-03 -1.9501434931922404e-03 -1370 -7.0444885193290457e-03 4.8413822931737457e-03 -2.0228234327295822e-03 -1772 -1.8867130289880144e-02 1.5203398505628378e-02 1.8726224869642785e-02 -770 -3.8092845644746207e-03 -8.7292909080411464e-03 -2.0452512956627322e-03 -1928 -1.1133421917634672e-02 -7.9319997977331195e-03 6.6110597464566863e-03 -618 -2.2621871309256129e-02 7.8786593846449167e-04 1.2673011113716888e-02 -1398 7.3390389805562117e-03 -1.0792225199147557e-02 1.2077584902763519e-02 -2077 1.8078939508877929e-03 -3.7075418340914465e-03 -1.0269847684005224e-02 -2760 -2.0289924597709577e-02 5.0695744944855318e-04 2.7104081404216093e-02 -2360 5.7513813431439888e-03 -9.6441115695917383e-04 2.1250854258158595e-02 -1716 1.1553115815347535e-02 -1.5058644752797513e-02 1.2233289003677563e-02 -2495 2.1782530494843872e-02 -5.8454228204425050e-03 2.3406920584916925e-03 -1510 4.1873767197709161e-03 -5.8959146056897253e-03 7.2713366572871600e-04 -1399 2.2332280244639247e-03 -2.6699802968236808e-03 2.1517027006157860e-03 -1400 -1.8468402143493670e-02 1.3218623872161829e-02 -1.1295164700400151e-02 -1512 -8.6227742822880121e-03 -1.9614208357772956e-03 -1.4115838925092457e-03 -721 1.9621022857267182e-03 -1.2146943477289985e-03 3.7940624399410219e-03 -667 6.6722586995108541e-03 -2.8227371623104091e-03 1.8549315963080932e-03 -1489 1.1852325891429935e-03 1.2651471436277188e-03 1.7423708435793895e-04 -1491 -2.2375258567218300e-03 7.2791966758225060e-04 2.9747767168680640e-02 -2182 -3.3187518611119461e-03 8.0188000041352021e-03 3.2332340821415308e-03 -1490 1.0152757972224487e-02 -2.6917584690345917e-02 1.5916131090732501e-02 -1731 9.9734729851947146e-03 1.5922113372271604e-02 1.5896381042197327e-02 -1076 -2.0257897856946230e-02 -3.7620964729827033e-03 7.4855310022020217e-03 -1628 -2.4288227004964639e-02 -2.5502797102315733e-02 1.6071622805195862e-02 -1627 2.2871919893743568e-03 3.4381297234364863e-03 -1.4977965416520167e-03 -2302 -4.2986698547761099e-03 5.5407199294831583e-03 3.2642260110443402e-03 -2304 4.3651090076178818e-03 2.9886209040119668e-02 3.6918359164011660e-03 -1730 1.4433775964571771e-02 8.6759571231752059e-03 -1.7769742172954642e-02 -2123 -7.8971792004133585e-03 3.5785189838888685e-03 -9.4799147982448703e-03 -18 -1.7023809024210395e-02 6.8676103892999297e-03 2.7910140298274982e-03 -1576 -3.5868305928465921e-04 4.7828945927694076e-03 4.8813581508511843e-05 -834 -2.9999508953667160e-02 7.4244636390859362e-03 -1.6568177514410150e-02 -1077 -1.6536433100596812e-02 -2.5013346441054730e-02 9.2391747034044468e-03 -2768 1.7536367999246589e-03 -3.4082232471121100e-03 2.2715592229408995e-03 -1075 -3.5947726302157043e-03 3.4627910521514093e-03 -4.7419915933612795e-03 -1737 -1.4969880711748218e-03 4.5643649691593742e-02 2.1308550219428731e-02 -74 -9.4281977422483766e-03 -2.5422930399190160e-02 1.0585104058399786e-02 -723 -2.0360028899832862e-03 1.1317131761810225e-02 6.7005414613191356e-03 -1557 -3.9304974619947877e-03 2.7628070346897560e-02 -2.2819486702588950e-03 -2012 -3.4145852900875108e-03 -5.6267270780852550e-03 -1.0848255454587296e-04 -1548 2.9810743442654563e-02 1.3106259446698562e-02 1.6109351243981985e-02 -1526 -9.7204531638516983e-03 -5.7936491383988173e-03 3.4767925912167351e-03 -1736 -3.1348064574343304e-02 8.2705004776335526e-03 -5.4308471083894640e-03 -199 -5.5342325857701716e-04 1.6056008320789452e-03 5.5016165348487547e-03 -2183 3.4738296843776724e-02 -6.7972758176419786e-03 3.4461958731541046e-03 -2184 5.6700168457441561e-03 -1.8746406454250675e-03 -9.1937888773714598e-03 -2119 1.0501651727895858e-03 -6.1381910278108173e-03 -3.0892924490849151e-03 -1029 -1.2842453258054852e-02 -3.7597237814061428e-02 -8.0344530942802906e-03 -1578 9.9899673411240134e-03 9.2922758160511355e-03 1.4892589650023538e-02 -922 3.7701847276911545e-03 5.5273818230473807e-03 -6.0312856307657634e-04 -350 -8.0897841702380381e-03 3.4388552980184561e-02 2.2613160933256979e-02 -1642 -3.2577977983322690e-03 -4.1187082676103657e-03 -3.7516698985450405e-04 -1729 6.1632153885622159e-03 2.7241561960902037e-03 7.8684375155640938e-03 -2126 -1.2151714064690698e-02 9.0706729623139040e-03 -1.7192372501048839e-02 -1577 -1.4007854443933094e-02 -1.0010662248714346e-02 2.3881531167589100e-02 -1555 -2.7971018829463881e-03 4.0348291921058158e-03 -6.3241940733172386e-03 -2314 5.8992240315575211e-03 1.7230535902070254e-03 1.5254379783913843e-03 -2316 -1.1856364579079976e-02 9.9268799664342672e-03 3.5151308179421628e-03 -2339 -2.3009541734639011e-02 2.3170812415419500e-02 8.4670364360542160e-03 -1717 5.7545161016772477e-03 -4.8399476669078846e-03 1.3900306932827734e-03 -1718 -2.5155490539654985e-03 2.9495557810460898e-03 1.7937485106029105e-02 -2535 2.5933495224930610e-02 3.7587285389416880e-03 9.8742823122279152e-03 -2533 -5.5924279219118269e-03 -2.6666919805528417e-03 3.5491308207239126e-03 -1719 1.3281515669529319e-03 -9.6224473845851564e-03 4.2566747633789190e-02 -461 -1.9462733399319056e-02 -1.1937311592682743e-03 1.4438073458779770e-02 -880 1.6202019752395115e-03 -3.8412309245916001e-03 -1.0072701996289280e-03 -837 -1.9252685202326498e-02 -8.1063553407912659e-03 3.2394505970674654e-03 -1858 9.0011042731020651e-04 2.3461924325105712e-03 -3.3053221925081083e-03 -1846 -3.4582460658737087e-03 9.3263999820615312e-04 -2.2427776299394281e-04 -1847 2.9214664087014439e-03 1.4932567071714130e-02 -9.6743245650882485e-03 -1848 -2.7360175681713349e-03 8.6147103328772876e-03 -1.1302087329205884e-02 -2291 -2.6605871877827141e-03 4.4138649857467394e-03 5.3237626982369397e-03 -257 -2.1167864403673277e-02 2.2358705729425281e-03 -2.0817298304354886e-02 -1600 -4.0749546534046954e-03 -3.2914452722040493e-03 -7.0838875992131770e-03 -1408 -8.2828719146047936e-03 -1.0735486840729503e-03 -5.8903435360359866e-04 -2667 -1.4844329963153529e-02 -8.3075434872233699e-03 6.9436248648011714e-03 -1643 -1.3116033823711841e-03 9.4238914295293984e-03 1.4903962344460854e-02 -112 1.7208627555439647e-04 -2.6469244420673649e-05 9.2106058101868436e-04 -113 1.5923044567084980e-03 9.4652376397609556e-03 5.9141162371130112e-03 -114 -7.2532976976109409e-03 -2.4886003347910572e-02 -9.2042048625378004e-03 -460 -3.3209416931600038e-03 -2.9538218190224238e-03 -3.1166464304141486e-03 -258 2.6942834357103478e-02 3.8952284221222900e-03 -3.0865942729554410e-03 -256 1.2858984676719851e-03 4.3764041666590689e-03 5.0045917116111347e-03 -1602 -6.6821420336551970e-03 3.1866455692771599e-02 -2.1705500733340548e-03 -2274 2.0635440810869491e-02 1.0782029941465271e-02 1.3653244621478537e-02 -2273 1.9035432084021732e-02 4.7095403037266566e-03 -6.8474166488338220e-03 -2534 1.8568609218727872e-03 -1.1935455088940702e-03 2.3009502142260850e-02 -2723 -5.3155394619373532e-03 -1.5364552180998014e-02 -2.5782254009645022e-02 -2429 -2.5401462375148495e-02 8.7164130646154078e-03 -2.0084560497474108e-02 -2722 -3.9711828196128899e-03 -3.5096077866975102e-03 1.0664214980391225e-02 -2428 5.3279417483151920e-03 7.4369586747485075e-03 3.5269810568223097e-03 -2430 -2.5695547690921623e-03 -8.4733182730199249e-03 -5.9697117857432118e-03 -2724 -1.3341403600235018e-02 -1.8214736234076717e-03 -9.3034604191340377e-03 -212 4.7402490140049814e-03 -1.8835245186775793e-02 6.0585601232840429e-03 -2666 1.4321598725894827e-02 -2.9547463235453420e-02 1.9214248077265995e-03 -311 2.6719642739477332e-03 -1.5010802912732213e-02 7.5033819707199696e-03 -310 1.8757929911253600e-03 -3.0649262385815633e-03 -6.3153712082208513e-03 -312 -4.9594482672300757e-03 7.2236648722523427e-03 2.1277998839678478e-03 -2512 2.8615995714971598e-03 9.6484260620516241e-03 4.3313932349512470e-03 -1726 3.2557526811467685e-03 3.0303615698078360e-03 6.5681792861778795e-03 -2807 -1.0209179048467406e-02 -1.0542473028483232e-03 2.7881212323968063e-02 -2806 -2.0659956732365604e-04 2.5899526916358115e-03 4.5850795965196329e-03 -2808 1.4359400275840111e-02 -8.7909774109122540e-03 1.2252507325108376e-03 -1450 -3.6362450123263177e-03 7.6775858482572886e-04 -4.0825457152339579e-03 -2522 2.0867492547986845e-03 -1.1337138363229462e-02 -6.9694377013138483e-03 -1728 3.7652981116874741e-02 8.2754114704827689e-03 2.0818467335148583e-02 -2514 1.2831620070131836e-02 2.5353095614568673e-02 1.0364290837585954e-02 -597 -4.6124958908623937e-03 1.6274316145095568e-02 -4.3132647830369970e-03 -596 4.4657138275772034e-03 1.2322125076331408e-02 -1.4991334210370626e-02 -2531 -1.4916083772084318e-02 -5.9177508347181508e-03 -3.0270043845481054e-03 -2665 -3.5311305131473861e-03 -4.5503849504392995e-03 8.4858418816432266e-04 -1452 -2.0032261332491769e-02 -1.3177300446016284e-02 2.2735961836914606e-02 -595 -4.4084396900991524e-03 7.5668229828477433e-03 -3.0973504292022835e-03 -1906 -8.6653948959397892e-03 1.0848829235406317e-03 -3.6297297591585597e-03 -1907 1.6952277901192553e-02 1.4593135626814517e-02 -2.1266374133669448e-02 -1908 -1.0521613334837353e-02 -2.7146507925315160e-03 1.2166252048804817e-02 -2568 1.1260945518182972e-02 4.4342103836110145e-03 1.0245338438335781e-02 -2696 -2.1739981088608723e-02 4.2133452818836174e-03 5.2941460397915550e-03 -1870 3.0787906505172148e-03 6.3237224549699889e-04 -3.9252554954461918e-03 -1451 5.9529146905303596e-03 -3.4758309668157308e-03 3.4223465818162317e-02 -1807 -2.2028689340245753e-03 1.4778377701297569e-03 -2.1731050644294711e-03 -1809 1.2227447635051066e-02 -2.1859079099612717e-02 7.6903362379429293e-04 -1872 -1.6618549410523584e-02 1.6467876359083710e-02 8.1487100323690224e-03 -2513 -1.4760203303030623e-02 1.1344986476839163e-02 1.4307129156069999e-02 -2750 5.2194214189922221e-03 -1.5880174364188142e-04 -2.7846416013732511e-03 -2751 7.8222965565202581e-03 3.1769438007495858e-03 -2.5582607418204416e-02 -2548 7.2566208708694339e-03 -8.9054130482111015e-05 -5.4429175481304918e-03 -2549 -1.8660523001514705e-03 -7.1786628998580807e-05 -1.8412323588645352e-02 -704 -1.4442717149436386e-02 2.4087520297439335e-02 -1.1716963559490680e-03 -703 -6.8811283645828451e-03 -2.8439167320672971e-03 2.8400990947281563e-03 -2104 -1.9111227688370649e-03 -3.9813948687399698e-03 2.4110900184827005e-03 -2106 -5.6983412341213985e-03 3.8946203870920417e-03 -1.5653095407653764e-02 -1933 5.9797701372703927e-03 -4.4435458178703055e-03 2.2753867260753228e-04 -1935 8.4407887992514457e-03 9.4615711240335926e-03 1.0697614188848039e-02 -1934 8.7481729445598715e-03 1.3738160296325774e-02 1.1701539603530106e-02 -2105 -1.2292228652611939e-02 2.8495716449651133e-02 1.0183329984706419e-03 -2703 -2.7922608177286472e-02 1.2180476645146368e-02 1.0285308486536086e-02 -1977 -2.2765710658665228e-02 3.3212640359116226e-03 2.3738919380528720e-02 -2897 -1.0215795983551147e-02 1.2218559410032068e-02 1.1466549530877152e-02 -1214 1.5099282980285495e-02 -2.1919641254321706e-02 -9.0965026393692808e-03 -2701 -9.2343799856178040e-04 3.7180597994865908e-03 -3.5423827545514301e-04 -2898 -1.0929591331462861e-02 1.5096983584933553e-03 -1.9061768076544781e-02 -1215 -1.1820727478545701e-02 3.5947877002824064e-02 -5.8097941865867843e-03 -1213 4.5870629651888744e-03 -7.0282081473379979e-03 1.7318876090757749e-03 -1539 1.6993149736423480e-02 7.4493184002777874e-03 -1.0450835867709425e-02 -2212 2.8730572090647556e-03 -1.6789257749508164e-03 -8.3720297459441307e-03 -2695 -2.0096924902550435e-04 -3.1241134032147446e-03 2.6317797144038584e-03 -1806 -1.9375740939111027e-03 -7.0804889324131955e-03 -1.1907975201236222e-02 -1805 2.6289607957129733e-02 -1.0037100820420948e-03 -1.7843984049119965e-02 -2697 1.8049430525681790e-03 -8.3036699584831987e-03 -2.0341230246721735e-02 -2896 8.6888764495022062e-03 2.4159256078046584e-03 -8.4181045033604950e-04 -1804 -2.1361433714273915e-03 -4.2255159576024379e-05 -6.7796229287825013e-04 -2749 1.3724863345470904e-03 -4.0907655806422189e-03 4.3878804204077627e-03 -2702 1.7128518460931389e-02 2.1380199651985392e-02 1.3189687647901544e-03 -1976 -1.5718114842899894e-02 1.2716104106989175e-02 1.4182059792983970e-03 -1752 -1.0058942486917999e-02 -9.8639080364881730e-03 1.0967210480249364e-02 -1750 -3.3300654548443112e-03 2.2035109594392712e-03 -7.6234687681543179e-04 -2110 -9.8432853514743290e-04 -3.4206651391559995e-03 5.6511131771244628e-03 -2844 2.1803409363509239e-02 -8.5982983733458810e-03 -1.1140776017805588e-02 -1751 8.5371717606016022e-03 -1.7134830553343899e-02 -2.2797815769592108e-02 -1511 -6.0685315319953144e-03 -2.2315137257649933e-03 -1.4779673971983995e-02 -883 3.4830940815201517e-03 3.2050347048504057e-03 2.6408876028662181e-03 -2231 -2.6297931166342544e-02 3.8234170853961117e-04 1.3934494117820282e-02 -2294 -2.0263332204144970e-02 1.5640742225175017e-02 1.4897308031846320e-03 -2550 -8.4005115689421567e-03 3.0239966689176870e-03 6.1282975074042900e-03 -1404 1.1057300653846271e-02 -2.9893561978853334e-02 -1.8246261664589661e-02 -840 1.5208863601205557e-02 1.0458620647805915e-02 6.3675348618557311e-03 -2532 2.2290177401731757e-02 8.7357637144285186e-03 6.9025652187657983e-03 -1546 2.4451299061385360e-03 -4.6273988457249142e-03 4.8295525371394002e-04 -1921 -1.1256162066996984e-03 1.5919639921603498e-03 2.8043946181225874e-03 -555 1.5537481048285626e-02 -9.9265215555044937e-03 7.9694547287325196e-03 -2913 -7.5329529587697995e-03 -1.5280741958014238e-02 -6.6326864397219477e-03 -919 3.8526790351892182e-03 -4.0487970591562179e-03 5.0456814531953109e-04 -2317 -5.6323788995950687e-04 -1.0012542145731379e-03 -2.6670174573451212e-03 -650 1.8107872191990870e-03 -2.2394879175377545e-02 -5.4671257038948814e-03 -2103 -1.5667745089498281e-02 -4.5378205325091832e-03 -6.0241722445946583e-03 -735 9.1662727505154393e-03 -7.7539312995504083e-03 -4.0814291815298331e-05 -553 5.2697136215956349e-03 -2.5272053026822788e-03 1.0752611193459772e-03 -2319 -2.0694507894428037e-03 2.4121746751841311e-02 -8.8721652754561921e-03 -2318 -6.7772156461066548e-03 -2.3856096539389166e-02 -3.2959730447241781e-03 -2069 -1.2852048043782984e-02 1.7731325169701353e-02 4.1862597551735065e-03 -2419 -9.6818989023380701e-03 2.8835117267081121e-03 2.7259802895640748e-03 -2234 -1.1724773405985083e-02 -7.8968924236113049e-03 -3.2367681838718639e-02 -1910 2.1228707860859153e-03 1.9582743541653680e-02 1.5611584141568447e-02 -554 -1.8786454841880737e-03 -1.5621677303784165e-02 -3.9575911958831108e-03 -2101 6.6709636008879694e-04 6.6431495696890894e-03 5.9261179795122966e-04 -3000 1.7997421984771032e-02 2.1021242605273743e-02 -2.2996276879130820e-02 -2998 2.6831586215136627e-03 5.4512430788147799e-03 -3.0689365423809804e-03 -2799 -1.8961956702256241e-02 1.7232155526710164e-02 -5.1239417164792103e-04 -1920 5.6641983983105500e-03 -1.4889416429201446e-03 3.0746689576399113e-02 -2338 -1.1573006514173250e-03 -3.1663750927403997e-04 -1.6461048693563424e-03 -2196 1.9035117011193500e-03 -1.0692717340521667e-02 2.5596368193515844e-02 -2562 1.5095950071613508e-03 -2.6433960217113334e-02 2.4793961358974333e-02 -2086 5.8414274144507079e-03 2.9426324231129758e-03 -2.5233207868811283e-03 -920 1.3009230933417043e-02 -2.9299892191783260e-02 -4.9560283864803099e-03 -2102 -1.8042263069040106e-03 -5.0055239585904327e-04 1.3092593328045276e-02 -2088 3.9581676558257855e-03 -1.6923598163707143e-02 6.7633004343422903e-03 -2375 1.6362315182469323e-02 -1.4943395956439537e-02 1.9291372114144289e-02 -30 -7.8888150317413634e-03 -1.2664400000813834e-02 -3.5169196970374168e-03 -131 -5.9249825503164405e-03 2.4120361937025690e-02 -2.0057071923667260e-02 -722 2.1517318763168300e-02 2.5381578473905691e-02 2.4699845632912909e-03 -2071 5.4575071919587817e-03 5.0152655480952772e-03 -1.6478953281730523e-04 -1566 -3.2718879877749588e-02 1.2231898555658595e-02 2.8982840836591002e-03 -164 -3.9394089400017838e-02 -1.1558707283781720e-02 6.4885235270630750e-03 -165 -1.3886115484699910e-02 1.7972583300968289e-02 -3.3004464754429315e-02 -163 1.6108398067763807e-03 2.2533118566053544e-03 -2.5630408226250904e-03 -2073 7.5808364919918141e-03 1.0820956855111254e-02 -1.2201175427072976e-02 -1564 -1.0830944509238523e-02 -3.6041987198867898e-03 -9.0219698185139323e-04 -1565 5.0362441837360572e-03 8.8957699511256188e-03 -6.6965713626294231e-03 -28 -9.0753340873349457e-03 -7.4700682188243691e-03 6.4963391156673527e-03 -843 7.9478223813691032e-03 1.8735254599479948e-02 -3.6016189613991556e-02 -841 5.3735330670492195e-04 1.3969589986446748e-03 -5.1310075759716149e-03 -136 -8.9131489890136240e-05 -2.1365271568322885e-03 1.7144358840669071e-04 -29 -1.1213403922672399e-02 -9.2510848345780505e-03 -1.9173527167139527e-02 -138 2.3000659125496571e-02 1.6988675358897642e-02 -2.6485762300686277e-02 -161 -1.4613233746234650e-02 -6.0268933261258704e-03 5.5713486028942175e-03 -1543 1.8344770604726381e-03 1.6894838752752265e-03 -2.3845253050890024e-03 -1544 3.2399504291227205e-02 -9.7504021158415603e-03 -1.4813834134766585e-02 -2989 1.5505240305071233e-03 1.6936803324418745e-03 3.5690123064785551e-03 -132 9.2209751992998589e-03 3.1833704148364369e-03 1.6547476558486471e-02 -130 1.7784815451243525e-03 -5.6356602605632826e-03 6.5168024961194610e-03 -2460 -1.2047415864991249e-03 1.2021391560916823e-02 -2.4159685229181820e-03 -2458 4.9406110295443931e-03 -7.8590454631885498e-04 5.4490617992918417e-03 -2261 3.0234203617943260e-03 -6.3453412910371484e-03 7.9638888940786572e-03 -2990 -7.2736992996892628e-03 -1.6852290994129032e-02 1.4665894148717343e-02 -2836 -4.9361069408576748e-03 -1.0400482419069001e-04 -2.4341270315524180e-04 -2991 -1.1307028974129923e-02 -1.4456146368696651e-02 -7.6152051239335497e-04 -1785 9.4427120514188022e-03 -4.5354855105607149e-03 1.4981315199470581e-02 -2121 -8.3382536217985106e-03 -8.5994996934463126e-03 7.8003242069910605e-03 -2837 -2.4482745192254455e-03 -1.6290127348245743e-02 1.9675628517705712e-02 -937 6.2952404501763074e-03 3.1202127931753130e-03 1.4784547767100027e-03 -938 -3.7446926691783768e-03 5.4774178447006402e-03 -3.9900034277200816e-05 -2900 3.9004362872633205e-03 8.9441790426882488e-03 -2.5706856260809333e-02 -405 2.8430014555504489e-03 3.7061982316805081e-03 8.7652769969546445e-03 -2794 1.6628823999182772e-03 7.2812533620743762e-03 -2.6233964095021818e-03 -2407 3.4152075701433336e-03 7.0132676656583690e-04 1.0200766132809663e-03 -2408 3.1435095751767582e-02 2.4261252512901763e-02 1.3918662570788980e-02 -2409 8.3639658221492427e-04 1.5805664408105300e-02 -1.3000512039044490e-02 -1640 7.6339224503678702e-03 2.9857680956059929e-03 -1.0136058092688968e-03 -207 -1.4874489153986715e-02 -9.6450898001622168e-03 1.1873560450455114e-02 -551 3.1542742918371280e-02 -2.2027294531271040e-02 -8.7185576601298571e-03 -1028 -3.2712195905228937e-03 3.9109973823868048e-03 -6.4580443414454392e-03 -1573 4.8300682349628988e-03 -5.4964222363255676e-03 -3.3325760180670347e-03 -129 -2.0084648675973921e-03 1.0841945525950379e-02 -6.5768040548586882e-03 -1575 1.1591034518933646e-02 -7.1057721717581630e-03 2.6110136750241912e-03 -2423 1.0101305616305909e-02 -2.0116238523679060e-02 3.0976974172648879e-02 -2422 -3.0903122876678483e-03 -1.0281448356487073e-03 -9.7456711958692627e-04 -1233 -7.7947095729944309e-03 -7.6402373138326710e-03 6.9609580332242798e-03 -1533 4.2737616865266394e-03 -3.2403716844566035e-03 -5.7267802677358802e-03 -1531 -2.4154832924064571e-03 -6.0512577265367442e-04 -7.6414748307114420e-03 -2357 1.2012098590314086e-02 2.1926075968953487e-03 1.9633740406068894e-02 -2567 2.0177699203127519e-02 1.2552195477171017e-02 1.2065118394904119e-02 -1784 2.2782051798829552e-02 -5.0454538298949575e-03 2.6736991472441879e-02 -2923 -1.6071543685610556e-03 -3.3277178321955174e-03 -7.6776079341914182e-03 -2561 -4.1519212299501677e-03 7.6680099006480535e-03 1.5797677611959444e-02 -2560 6.0602612236376307e-04 -1.9729859542692420e-04 -2.2295700069021808e-03 -1869 3.7721172328955374e-02 5.1426503018432998e-03 -1.2668195577407104e-04 -206 1.5896659841461592e-02 -3.5110683435796056e-02 -1.3294931731789700e-03 -2181 -1.4308697915177708e-02 9.1449572904297885e-04 2.4589963268491822e-02 -2924 -2.9394879230629438e-02 8.6910319875979445e-03 -1.7283255649024904e-02 -2053 -1.1745757884818729e-03 9.9453550040239855e-03 2.6113492812992046e-03 -1644 5.6477082228054282e-03 -6.1812396309940277e-03 -1.8071199628801996e-02 -1027 -3.6383960032899529e-03 -6.4235675589380801e-04 -2.6930998732679263e-03 -278 9.6041799255018722e-03 -2.3328493341893679e-02 1.1284412344735059e-03 -1783 -5.2104678976793647e-03 -1.0571445435430166e-04 -6.5649300961877419e-03 -2230 -3.5053803248529065e-03 -1.5841359479993090e-03 1.2449965246747227e-03 -2018 1.9357141454021346e-03 1.3311234838983440e-02 1.0148743412462165e-02 -403 5.3017412489506912e-04 -5.8358829352821749e-05 -3.5183560815460425e-04 -1401 -3.1811637998628399e-03 -8.2147760238893471e-03 -7.0664176487885456e-03 -1754 -4.4442498591915180e-02 6.0928617729348591e-03 -1.9180268532785125e-02 -1665 9.7290852731623991e-03 2.3106540611018987e-02 1.2059760509069284e-02 -2925 -7.7901173934518050e-03 -1.0423157604671990e-03 2.2287828499783439e-02 -1753 -1.0833342832741557e-03 4.7137181953237186e-03 -4.5600988936635454e-03 -2017 9.4110828066296965e-03 -2.4475236569269777e-03 -3.7675359857248028e-03 -404 3.7140317257933264e-02 1.5649892218787296e-02 6.2085295647082515e-03 -1755 6.8736781785526530e-03 -1.7585275162237238e-02 -1.1942383453483502e-02 -2019 -2.1663823922696696e-02 -1.2035593116261324e-02 1.3929539064784337e-02 -1739 1.0149526436248212e-02 -8.5380396888881955e-03 7.8404552917313453e-03 -1738 -1.1661314522872835e-03 4.7739629025928022e-03 1.8767010588152306e-03 -2730 -6.2134941997334285e-03 3.5090146092753779e-02 2.3168507687216979e-02 -1740 -9.1586308841153877e-03 2.1811276392761643e-03 -3.7131938793520031e-02 -1210 5.1659753849312854e-03 -2.2783995787803474e-03 1.2132732580736514e-03 -2519 1.7355422127825374e-02 -2.8560155400939637e-04 8.4430161641603060e-05 -2518 3.9330807862905598e-03 7.9534896694422800e-04 3.1462228555174054e-03 -2520 -1.5186911254071140e-02 -1.2987038872947339e-02 4.0218539437589362e-03 -2728 -4.4453616643241097e-03 -3.1942130085661367e-04 1.8755343371686167e-03 -2672 -5.6196139459183097e-03 1.9737162408741137e-02 4.1250175202453008e-03 -616 2.7455830724633337e-03 -2.4850167872809280e-03 2.7225072052684346e-04 -1212 -1.2138187766707321e-04 7.3828790423787248e-03 -6.3377524437495565e-03 -1211 3.7779492994559063e-03 -4.2594720671932816e-03 -6.8258250122936268e-03 -1037 1.2116966942377957e-03 -1.7666835696849962e-02 -9.6149036219203251e-04 -1836 1.1384523300547039e-02 9.8748207657307300e-03 1.8998928566693332e-03 -2940 1.8746135951617275e-02 -5.8627464351306245e-03 -1.1917777695209981e-03 -842 -3.7735325919170631e-03 -3.2521056928028085e-02 3.6581526563388450e-02 -1516 -1.1610660084353872e-03 2.0498210797111950e-03 1.8513631763574078e-03 -1639 -3.6706248116976040e-03 -3.6029442100492014e-03 -3.5768825636367139e-04 -1038 -3.5096367820552539e-03 1.9624885776908352e-02 -1.5557843618529021e-02 -388 -2.7701268289876406e-03 -5.4886918553212066e-03 -1.2444930696785569e-03 -390 9.0515243794977059e-03 -1.4849103330037857e-02 -4.5424664941536731e-03 -2595 -6.8386010674429404e-05 -1.8286648641719205e-02 -5.9532267568416413e-03 -1036 6.9620202475954955e-03 5.4132473858320928e-04 -2.5532355483769593e-03 -617 1.8716755707666875e-02 1.1816478846631766e-02 5.7199130734964807e-03 -1735 3.3298765438177680e-03 -3.8889215767150850e-03 4.1144194846314290e-03 -1991 -1.2185464275719033e-02 -8.3951998920313228e-03 2.0093017595502662e-02 -899 -2.2650507860805759e-03 -1.5379431913570512e-02 3.0758582046436890e-03 -398 3.7600514232992661e-02 4.3888284093829841e-03 -1.6634035858762039e-02 -2680 2.8425687492108511e-03 6.2950611201743325e-03 -1.0735117686267056e-03 -2170 -5.7637747122016815e-03 2.3197170665661304e-03 5.4996247643109303e-03 -716 -2.9068794142239323e-02 1.2219326038146985e-02 -2.6692981091121431e-02 -2678 -2.2267141426064289e-02 1.3940249536897337e-02 2.8108814371012457e-03 -354 1.9140129732542862e-02 -1.5683909601058060e-02 -1.9507786658932588e-02 -352 -3.1677122964698409e-03 3.4021054304876776e-04 -4.1157793280933172e-03 -353 -2.0256104253916135e-02 2.3736970460626339e-03 1.6418219924369180e-02 -2172 9.1205857091998157e-03 7.2251654541474687e-05 1.6176882564902156e-02 -506 -3.3594942251033655e-02 -1.2695592511052085e-02 1.7175259580540136e-04 -397 -3.1193042175671975e-04 -3.3532174449622137e-03 -3.4642085917339542e-03 -2112 5.3643090244211268e-03 -2.1329418523753019e-02 1.7327147552251326e-02 -399 -1.1902980881212321e-02 -1.0878793439271501e-02 3.9828459207725028e-02 -669 -1.9276183617556519e-02 -1.5048505721762731e-02 -1.4785440880067332e-02 -1939 1.8108198342531667e-03 -5.5959605539273420e-03 4.3958482441292367e-03 -715 -2.9938057827469601e-03 6.7178097891573340e-03 -6.2206076642797731e-03 -1940 1.2141457680067001e-02 -1.8894845983307307e-02 6.7970913315875401e-04 -717 -2.7906165891788091e-02 1.0543945329745515e-02 3.3345258709098165e-02 -459 -6.2903537659005134e-03 1.7999776507745213e-02 -3.1022127744917288e-02 -1834 1.3690748047997239e-03 -3.4107217952347542e-03 1.4131071178317698e-03 -505 2.2382509804435421e-03 2.5846416049208590e-03 -3.0344849724000685e-03 -1835 -4.0043174337263454e-02 8.7817842550408321e-04 -2.9300507201178599e-03 -458 -4.4734675071637697e-02 -1.9674612340735888e-02 -2.4000398693196680e-02 -457 -2.2796989490676003e-03 1.8924111769149279e-03 -6.5970910127152154e-03 -1956 -3.6413677235447393e-03 -4.5561071179907485e-03 -3.3454610763077614e-03 -2729 3.8620149543148963e-02 2.1018154724547544e-02 -2.7432091263045532e-02 -1941 2.2416043730371579e-02 2.2343996322047011e-03 2.1756912905634116e-02 -2111 4.9414992796692056e-03 -1.6431015881874213e-02 -4.0526999191382836e-03 -2303 -2.2004843820389790e-02 -6.7538093284636004e-03 5.3713592212120569e-02 -882 2.3572509648733649e-02 1.8360547713232884e-02 -2.9283176407515033e-02 -185 -3.9956679477586039e-03 -1.9057966096117741e-02 -2.1065995653151998e-02 -2384 2.9347967860145343e-02 1.9614353758366343e-02 -1.3198282565495704e-02 -1068 -7.0437635826682511e-03 -6.8265507889423583e-03 1.8782207233307043e-02 -2987 3.2833613013699397e-03 1.3393560508977914e-02 -2.5932316494915602e-02 -346 -1.0675034228181367e-03 2.2309525037340176e-03 -1.5593077875231071e-03 -184 -1.4685795688060481e-03 1.4085750996359844e-03 -5.5788569646531840e-04 -2469 -1.0873688687631416e-02 1.9561283237076770e-02 -1.5524531972238834e-02 -921 1.1395200713296666e-02 -2.2209442516459422e-03 2.1170428150941899e-02 -730 -4.4027538205802502e-03 9.4121179689254843e-03 -1.1405281654662820e-02 -732 1.2674583712728451e-02 1.3702149753515245e-02 1.1875209000673292e-02 -2132 1.5785788414173801e-02 -1.3817054725451288e-02 -4.1510224055123224e-03 -2131 3.5739864748601294e-03 -6.6223260503462996e-03 1.1739777777375923e-04 -2133 -4.7878157172712141e-02 1.2724352721668115e-02 1.0002882266846317e-02 -640 -3.7291463035579657e-03 -5.8059994068198825e-03 -2.1391329658067875e-05 -2225 3.5815386732032398e-02 6.5807693901682070e-03 -3.5647842732745350e-03 -2226 -1.1058691540211408e-02 8.1692306610872938e-03 1.1826847751184982e-02 -2246 1.2818156041711789e-02 1.4543791371354271e-02 1.5778324966882147e-02 -160 -4.8017131375171062e-03 3.0215976484426702e-03 5.2027125006182551e-03 -162 7.4681006155597569e-03 -1.0092340659900230e-02 2.8050449083676940e-03 -731 1.0965009505754703e-02 -1.8437844041698154e-02 3.2742904751814295e-02 -2136 -1.4032796986455308e-02 -1.4952727738257843e-02 -1.3382905524892200e-02 -2135 1.5236825740949705e-02 -1.1468788793638567e-02 6.8878886038568525e-03 -2134 4.7655916319149080e-03 1.1645376097190915e-04 9.9015992301453928e-03 -2072 2.6764309055621435e-02 -5.0900020351781665e-04 2.6216056668003503e-04 -2122 2.1685696176679246e-03 5.0320723700489943e-03 -1.9491076113982929e-03 -2224 6.6673894826928335e-04 -3.2873138662852411e-03 -3.5966644572368520e-03 -2124 1.7682474825395839e-02 1.9985869033842280e-02 -1.2598128877541795e-02 -2247 1.4263935112386140e-02 1.9708184974664457e-02 1.7247421311387491e-02 -2912 -1.4644793447434386e-02 2.6790674158272819e-02 -2.5506547423118590e-02 -2911 6.5419226807884754e-03 -2.4592596878463538e-03 8.9308367175942752e-04 -2245 1.2837652681617535e-03 -1.1067143428011144e-04 -4.2716714634892039e-03 -2732 1.3278082519476202e-02 1.4038512260410198e-02 -1.1746554712993316e-02 -1405 -1.7332484835875443e-03 6.3484956999024234e-04 2.0805300884516155e-03 -1919 -1.1145162827385017e-02 -4.8995030044975676e-03 3.2000499907205221e-03 -137 -1.8457035021480953e-02 2.4740558872461487e-03 2.6132162331425863e-02 -2797 -6.0353431501712551e-03 3.7995451875699054e-03 3.6091761133408154e-04 -1407 -1.3528412389138940e-02 -4.5046969822894580e-03 -2.0113515090093275e-03 -2887 3.7927681134298195e-03 8.6874809541921856e-05 -3.9201958785005176e-03 -2356 2.1176628362084412e-03 -6.5399309189686991e-03 3.0451877523082101e-03 -1135 -4.9866340539714534e-03 -6.4914782444517186e-03 3.4327588863643289e-03 -45 1.2134881406333044e-02 -1.4234635099986296e-02 8.3444152544774660e-03 -652 4.2243997298040984e-03 -3.3673044605537056e-03 -2.3349001049946800e-03 -1605 1.4533638627107570e-02 4.3525290711177288e-03 7.4482998098801979e-03 -156 -3.8484315260107647e-03 -2.2972719349141385e-04 1.4758747416682125e-02 -2576 5.3989795529265578e-03 -2.4642596410026911e-02 -3.5836190403392299e-04 -1603 6.2613869520187944e-03 6.8395592047592879e-03 -4.8931210728238696e-03 -1604 2.9340247084356612e-03 -2.6388022249803769e-02 1.1887476433072636e-02 -768 2.3714391411303215e-02 1.4255991209591569e-02 -4.1371012462918721e-03 -959 1.2863759859012660e-02 -2.6536994027197006e-02 4.1156417401455800e-03 -154 1.6911292062153744e-03 -1.8813537755465426e-04 -5.2059496135707364e-03 -155 -1.7487980733800909e-02 1.8919754276603647e-02 -2.7622450579299802e-02 -746 -1.2113744626078773e-02 9.9940349086061406e-03 -3.3447031442869531e-03 -745 3.6573938778566759e-03 -6.3541314563948523e-03 2.6737918406442890e-03 -747 3.7697726985566368e-03 5.8152859369390644e-03 7.3427189432917588e-03 -2140 -5.6633372754166349e-03 -1.5267300340636820e-03 6.4091264639984128e-03 -760 2.2434386794132233e-04 -4.0213229011716442e-03 -8.9019275404380910e-04 -761 -3.0449083643482545e-03 -1.7098366199043258e-02 1.7147064812116676e-02 -766 2.0916297269843761e-03 -2.4536387316146614e-03 -9.8281475860832624e-03 -2142 9.4101109558861846e-04 -2.9858811808401095e-02 1.1724946703669362e-02 -104 -1.2418419952200034e-02 7.9726500206063824e-03 -4.9911269875267603e-03 -55 -1.0522687906050720e-02 -1.2569141512756880e-03 -8.3918351097787521e-04 -2243 -3.5582768684221315e-03 -8.4934020168792018e-03 5.6699555613431559e-03 -57 6.6277695089915723e-03 5.1243737088573276e-03 5.9927699842043779e-03 -1610 4.9257918876607770e-02 4.9013336291325281e-03 1.0608164332608050e-02 -231 9.9695960359793461e-04 1.1301645420350538e-02 -9.4819828132878346e-03 -2575 2.7127357161202646e-03 -8.1513826975279972e-04 3.2410217104500592e-03 -229 7.7329879597292013e-04 -4.6222919301992524e-03 -2.3146200973959510e-03 -2242 -9.0209504680812964e-04 -2.9644495934353344e-03 -1.0805260188336333e-04 -1709 -3.8351681837977998e-02 -1.6599117163871323e-02 4.7017992430791076e-03 -230 -5.7626755834298592e-03 -6.1639151925451168e-03 1.5583626773846816e-02 -1437 -1.0743575587489668e-02 -1.2433721852692462e-02 -3.0772492863519155e-03 -2257 -7.3923051284173922e-03 6.2129466490578617e-03 8.8138042098433404e-03 -2141 -7.2714095161625488e-03 -1.5760528592084821e-02 -1.1235368547268948e-02 -1506 -1.0506699682838105e-02 -2.3335193693751064e-02 9.3837101007653995e-03 -2341 -3.3973711213332023e-03 -2.6469407282303163e-03 3.9575128482247273e-03 -604 -1.4618855215027440e-03 9.6519536440830818e-04 -1.7403256211312203e-03 -1668 1.7534098958897976e-02 -2.0375414432622328e-02 -3.5567658716850525e-02 -2470 1.5166067364283942e-03 -3.5360231900087021e-04 -3.8691799030862732e-03 -1698 -2.4716897981972255e-02 2.0040933695462705e-02 -4.4016420927061969e-02 -2505 -2.9116640109102958e-02 -4.7896778046688081e-03 -3.7378447783959829e-04 -1790 -3.2663498515424689e-03 -2.2836893897796248e-02 4.7363937618604829e-03 -1667 -1.2397393924148379e-03 8.7475780146837444e-03 -2.8030869990337232e-02 -2471 -2.7565438599438188e-02 9.7041432388047990e-03 8.7473845145631234e-03 -828 1.9947448488083319e-03 -6.8957210341379395e-03 -6.4156092822722039e-03 -827 -3.8623636740730286e-02 1.8461898651451744e-02 -8.6738726154083484e-03 -2290 -6.8743771797648741e-03 3.3585021868094644e-03 5.7333108680167767e-04 -2292 -1.0247391191970948e-02 6.3247267489258893e-03 -8.6661508718487955e-03 -826 -1.6259266053172142e-04 5.7795317642876957e-03 2.7983104842814518e-03 -2462 -1.9535226761532219e-02 2.1432396927996014e-03 5.0515030983687998e-03 -2577 7.7628636619037272e-03 -1.0724734915149721e-02 3.6316583560726833e-03 -1676 -1.3848201572828117e-03 6.8678335102865390e-03 1.6832355997771262e-02 -2463 6.6382166475122285e-03 2.1937583965811785e-02 1.8098939862423390e-03 -2461 3.1351165997900153e-03 5.5833019491045299e-03 2.5059087986740317e-03 -1675 -1.2206279680512285e-03 8.7617394917172890e-04 3.0136098549809953e-03 -1677 1.0151600358794177e-02 -7.6988173294200157e-03 -3.9691012173108151e-02 -1612 9.0513054705847814e-04 -1.6527254344774775e-03 3.3638071891002033e-03 -1695 -1.8510371114438578e-02 2.2838039594160999e-02 2.4427167432636277e-02 -1613 -5.7144129536230222e-04 -1.7336150938800754e-02 3.6111042040202737e-03 -1614 -1.3568684576504228e-03 4.7030498831144105e-03 -6.4586016117114294e-03 -2504 -5.1041914530052029e-03 -4.0118094269264298e-03 -1.1805302243881878e-02 -1666 -5.6821603175807424e-03 -5.7312960776673286e-03 -2.7073000723184209e-03 -1789 -6.1966183272201191e-03 -9.0158556864047106e-03 2.5277502347839562e-03 -1102 -9.3731856460713518e-03 -2.6683181189153817e-03 -6.5300928823960030e-03 -1950 1.0749778363798921e-02 2.5156206969570525e-02 4.7200061250311925e-03 -201 -5.5877506423496698e-03 -7.3183832157075954e-03 -7.8683590493139940e-03 -213 -2.0583592449762912e-02 1.2296262575148265e-02 -2.5047805205362931e-02 -1697 1.0938907391590222e-02 -8.6394980337647000e-03 2.9639334834354663e-03 -1696 -4.3792800571055444e-03 -1.7141632661884832e-03 1.5489802887135684e-03 -2784 -9.0697713161321859e-04 2.3523399684660551e-02 -1.2528445923891034e-02 -200 9.7157463396414824e-03 1.2566495970827606e-02 -4.4833659820082486e-03 -2087 -2.8233884974944234e-02 -7.2997385790184305e-03 1.4401622047718403e-02 -2055 -4.2509666082394447e-04 -2.3769118180740163e-03 4.4980334078123813e-03 -2715 1.9914777175014618e-04 9.0075109820150386e-03 -1.5512577163363385e-02 -2530 -5.6430289705053874e-03 3.6299790487431886e-04 -4.0247076542163553e-03 -2713 5.3225301087822304e-03 2.3954189304616850e-03 -1.8410191681204270e-03 -1879 5.9511156079507495e-03 3.0374340839061788e-03 1.4507987049559793e-03 -198 -1.2883673962989155e-02 1.8301279262973959e-02 1.7957792200807454e-02 -383 -8.0509082160040990e-03 -1.3854591567546329e-02 -3.7409305579201003e-03 -2189 2.8352958405340836e-03 -5.8384839273534113e-03 -1.5664019872996607e-03 -1808 -8.1868402390121234e-03 1.2952619860399594e-02 -4.6513528556089449e-03 -412 8.1395974249253973e-04 -2.6285089615122161e-03 -4.8259275444473873e-04 -2188 -2.0474728968256353e-03 -7.9491866253731530e-04 9.7105931815255828e-03 -1794 -2.5929142026987709e-03 -3.4515531833495469e-02 2.0384919615728903e-02 -1691 -5.7679797532272170e-03 1.0285664890349336e-02 3.2624276822903253e-02 -2782 -2.9713747445793766e-03 4.0392564382160578e-03 2.5424228209583871e-03 -2714 1.3162898367440385e-02 -2.3845833302694623e-02 -1.8649128633478351e-02 -1867 -1.2690703203978467e-03 -4.0337839207295571e-05 4.4162070041811000e-03 -1860 -1.1629029928946632e-02 1.6458239920733920e-03 8.4931432119890807e-03 -1801 -4.5092081849371392e-03 -4.1780540791761999e-03 -4.5400892942719919e-03 -24 -3.0528175028562195e-03 -1.2601006977839502e-02 7.9175723483061993e-03 -23 1.0322321668748942e-02 -1.3016134063886218e-02 1.1963795978769634e-02 -22 -4.8283801949171415e-04 -3.2961476063603414e-03 -7.1707509685538110e-03 -2424 -3.0785050109302377e-02 1.6834518663765400e-02 -1.1826037925293473e-04 -1802 1.7725905896879935e-02 2.6327999745917957e-02 1.4257996201051044e-04 -1822 1.0642637167108820e-03 -4.8635750798811496e-03 5.4142069376117890e-03 -2566 -4.9039853111489213e-03 6.6505586608717818e-03 4.8408337206681945e-03 -1824 -1.8419504999049197e-03 -1.6950474017990661e-02 2.4453397583782182e-03 -1823 2.2414432907140848e-03 9.6726536834012364e-03 2.1963969295600794e-02 -413 -1.9446555245839426e-02 -8.3931225556562947e-03 -2.9994335093197325e-02 -1132 -6.4231979489460904e-03 -1.2789644880300622e-03 1.5162006609432924e-03 -1023 -1.1371876598377453e-02 8.2323556745618233e-03 -8.6430178641100190e-03 -1803 3.5589401976787020e-03 -3.6918127513925086e-03 -2.0227238762938561e-02 -1881 2.6996868816300968e-03 2.1220639135135499e-02 -1.9663830483979936e-02 -2783 -2.0659813761485343e-03 -9.1850109546643740e-03 6.3097144259986306e-03 -1021 8.0495570495012127e-03 2.6405831415153421e-03 3.5114314928829664e-03 -1134 2.4704526457354114e-02 6.7391480234321897e-03 -3.6991652705936021e-03 -1793 1.5646358722173979e-02 -2.0323593962404487e-02 2.3685605459774398e-02 -2796 1.0530607265388126e-02 -6.9568487050462782e-04 1.7187357813409051e-03 -1792 -8.5156430255584545e-03 4.4975161373297596e-03 9.8732300784366302e-04 -1880 -2.4665163486097059e-02 1.8598590365859115e-02 -5.4435251562495379e-03 -2061 1.1104378017164799e-02 -5.0029443467034208e-03 9.1289062965620206e-03 -839 -9.7962538498782715e-03 3.8261384400303196e-02 -1.2060633925059544e-03 -1308 1.3446744836091486e-02 -1.3000976720137510e-02 1.7425777977158701e-02 -414 -1.1533919250301707e-03 7.5801834950157722e-03 -1.6546046545037361e-02 -838 1.5487062475024853e-03 -4.5245731796761937e-03 7.4723825533203189e-03 -2040 4.2917151988277509e-03 2.4310769414829615e-02 -3.5027349765413981e-03 -408 -1.1038427022423736e-02 -3.2029572918294114e-02 4.0411356794996509e-02 -1319 -9.3809881812624094e-03 -1.6648917073407706e-02 -1.4799881360626684e-02 -1725 -4.1005122136254330e-03 -8.7187475419758000e-03 2.5953487643546637e-02 -1723 2.3742354562648308e-03 -3.4140432859399382e-03 -3.2500885166406052e-03 -2039 4.0744135505927183e-02 -2.8860920944403239e-03 -1.9283381149105407e-02 -1975 4.4314107434413402e-04 9.0494859608398635e-04 -5.3359425957688091e-04 -1133 -3.6635613643584497e-03 -1.7602086357102580e-02 -2.9239100326179084e-03 -251 -1.9202843097925457e-02 3.5561468758371628e-02 -1.0664619292028478e-02 -2013 -2.2099135064385534e-02 -2.1918173585781585e-03 6.8469115394924340e-03 -2221 -8.1447124187373500e-05 -4.0069348762539767e-03 -4.6643295571277563e-03 -2038 2.4701210841305563e-03 -4.1466965112934391e-03 4.3803492383791033e-03 -1918 -3.3429548881031275e-03 -3.6760150489460795e-04 -5.5719372838355418e-03 -2015 -5.0480925905297697e-03 -1.4576090735668698e-02 1.2150190424314191e-02 -2016 1.1880344484180830e-02 2.6567061494506827e-02 -1.7522071429886078e-02 -2014 5.5844062468488943e-04 1.8638775616939050e-03 -2.5724945788433589e-03 -1724 -2.6804795501001412e-03 2.5387840747768013e-02 -6.4824278527358687e-03 -2615 1.7147902640343819e-02 3.9161330325291968e-03 -7.7794110740749744e-03 -2616 4.3045241576987253e-03 1.1965225218082283e-02 1.0446667984160902e-02 -2614 -2.4183934434233246e-03 -3.0424809187724580e-03 -5.8095539095612070e-03 -250 -4.6760035523120526e-03 1.7242196691829045e-03 2.8284394303661753e-03 -2223 1.0239333852895259e-02 -2.1691671436795826e-03 1.1588135654299116e-02 -1938 -1.8807012154106934e-03 -1.0123441419652020e-02 -3.5233492865543295e-02 -2975 -2.8709686371426921e-03 -1.5208499469252221e-02 2.5417263933890533e-02 -2974 4.0901319881509243e-03 1.1577320432206047e-03 -1.7803600346072907e-03 -1936 -7.6364574367069065e-04 2.6574465513740901e-05 -7.9073752640545260e-03 -2208 -9.3322179470148852e-03 -9.6868799607093704e-03 -7.2842640075943760e-03 -1944 1.6335903835748546e-02 2.3457947684116139e-02 -2.2510285917337509e-02 -2222 -6.6357599179091504e-04 2.6356857437487849e-04 9.3616263852702424e-03 -2767 5.1288963797722848e-03 1.3622144296355124e-04 -7.4991239083403837e-03 -371 8.9363272335568622e-03 -2.5916879523191221e-03 5.8489020903671404e-03 -2268 1.6221502448823501e-02 -2.2584697393539098e-02 1.8612544807187349e-03 -1232 -1.9786800754746887e-02 7.3743062960923093e-04 -1.5291245918993241e-02 -1505 -3.9074784886647569e-04 1.2688301389030073e-02 -1.5875633702534996e-02 -2272 -1.1337277638205382e-03 -7.3431990534654793e-04 5.6812197824508931e-04 -1402 -3.0859097179142081e-03 4.4188057961232286e-03 -8.4155563328804984e-04 -642 2.8438306416816318e-03 2.1628429923926835e-02 1.2243243257486176e-02 -406 -2.3600128926649011e-03 -1.9260588099236186e-03 5.4509224408659605e-03 -2258 1.3696378534644347e-03 3.1719070701109317e-03 8.4260033480044357e-03 -1431 -6.0832345820218507e-03 1.5811076815276617e-02 6.9228127455048952e-03 -2976 7.8156437728838575e-04 3.7834743052758413e-03 -2.3586263197319791e-03 -2100 -4.1669630138620401e-03 1.3744704469731493e-02 -2.2864392335494080e-03 -2999 5.1216539052048289e-03 -3.9988585443113340e-03 3.7183884461688258e-03 -1220 4.7665084588303958e-02 -4.2717281223569046e-04 1.7716695488071046e-02 -881 -2.4510515474745587e-02 1.2085070491427900e-02 -1.6121712360848320e-02 -2120 7.4080042842941630e-03 1.2993185509750420e-02 6.7247884003297084e-03 -2098 5.0326514423403878e-05 -1.3121566231188860e-03 1.0043186843672718e-04 -1943 -6.4437273826040815e-04 6.7354959079545139e-03 -1.2287223663060612e-02 -2910 9.6472482795865611e-03 1.2477411279301607e-02 -2.8890691871943090e-02 -2908 3.0143316845454089e-03 -1.3954165762785095e-03 4.6554502039087790e-03 -1942 4.2204812533564902e-03 -5.1765374174126680e-03 -5.5413681537382293e-04 -2420 -5.5303158767172816e-02 4.7976680142489594e-03 2.5583634399066170e-02 -1504 7.1854503106156724e-03 6.9680683256789788e-04 2.8016523375910140e-04 -2168 -6.4381863005706641e-03 1.1172638220073334e-03 -1.0156034870359352e-02 -1306 4.2083879967255971e-03 -1.6907254040605640e-03 -6.0797409502951838e-03 -2868 -2.4440238575460638e-04 -1.0968918403450980e-02 -1.0123696886358289e-02 -2798 -8.5922103717945834e-05 4.3844106471119526e-03 1.9386142015573156e-02 -2167 1.0349561925549857e-03 2.3605234374770197e-03 1.1417525755199581e-04 -2909 2.5231942067955033e-03 7.2402934604104113e-03 1.5898920676856748e-02 -2889 -1.4301592109895013e-02 1.5032827753190564e-02 -4.4374534220664209e-03 -2733 -7.4113268688236738e-03 -1.7887934171684491e-02 -1.9362351639065304e-02 -2731 -4.8949906382751594e-03 1.6602119148040088e-03 -3.9606202655306484e-04 -671 -5.0369798282363411e-03 1.5313522869718994e-02 -3.5798714954169042e-03 -1403 2.2856752103675541e-02 -1.1495396730240099e-02 -2.0973827046560506e-02 -670 -1.9795846014516658e-03 -3.9986391999116411e-03 -2.3782322339492568e-03 -1221 1.3810085087202132e-02 2.6163938634605178e-03 -1.0922472751444921e-02 -1219 -2.8439501366017222e-03 -3.9126968891058170e-03 -1.4985514537218293e-03 -672 1.2747673423864823e-02 6.4480658237561338e-03 -1.3089401530081113e-02 -1435 2.9355092840236421e-03 9.2897169799663185e-04 1.1791921233193144e-04 -2059 -6.1595905187179622e-03 6.6989335903169817e-03 4.6190675794438134e-03 -1542 -1.2982389125210875e-02 8.0471599105017885e-03 1.6507068577454972e-02 -1540 -4.5223709239779241e-03 1.1057192183746545e-03 1.2120424465533023e-03 -39 1.5738101927388032e-02 8.1902618358887895e-03 1.6804601807858567e-03 -37 -8.5179842202353327e-03 -8.7630925205045497e-04 3.2293933747191018e-04 -38 7.5196406974598617e-03 -9.9631017329298369e-03 6.5984627941094564e-03 -2169 1.9471706151074571e-02 4.8903323210066543e-03 -1.4119219102571776e-02 -2267 7.8375222314070354e-03 -1.9107081606364974e-02 -1.4620400462593082e-02 -72 -6.3236635455994122e-03 7.6285218061949702e-03 4.3559438015236280e-03 -2864 -7.9658793204152208e-03 -7.0959974415113827e-03 -1.4970433559907702e-02 -2359 -3.3881726201940524e-03 4.6253978780186307e-03 -9.8424320050789294e-04 -462 7.3994705992826981e-03 9.1243366610505184e-03 1.6765143943179208e-02 -2362 4.2700597198740671e-03 2.3814332116677403e-03 -4.9843148624457391e-03 -1592 -1.5120479133169981e-02 4.8642681404021719e-02 1.1114435859441385e-02 -2941 4.8191937976723052e-03 -3.7422526330192604e-03 -4.0885221512468352e-03 -1591 -1.3803563221473512e-03 9.7104259447600052e-04 -4.4562416150882339e-04 -2396 6.8291034255025607e-03 -1.2682934324317770e-03 2.9029064517515499e-02 -2298 6.9910871996887647e-03 -4.7538341168383352e-03 2.2424658681156239e-02 -2284 -3.0327521257668094e-03 -9.1851653751053318e-05 2.4739416616834082e-04 -906 6.8628125909922502e-03 1.4065320464260418e-02 1.8543979538907449e-02 -1593 -4.6851311655746589e-02 1.5060668298635274e-02 -1.4579683030487215e-02 -2286 -3.6334447653499874e-03 -9.4754093509682984e-03 -1.6336729553965961e-02 -1588 1.5073109362037833e-03 -3.2477817942659251e-03 4.3653415884781368e-04 -1541 2.4298093626785731e-02 -2.7734967552036256e-02 3.8590298473223528e-03 -1590 2.7940564699003662e-02 -3.1604721254382424e-03 -8.5002006853526671e-04 -939 2.5495389571697953e-02 -2.6479674031499947e-02 1.3704294921133328e-02 -590 1.1282071248747461e-02 -2.2370631911156381e-02 2.1654472583791634e-02 -589 2.6683242553272074e-03 -4.0678187533449173e-04 7.6692646049059262e-04 -591 1.0733946610397130e-02 3.2675751911128118e-03 -7.9857263064817066e-03 -2209 -4.6928775058124369e-03 -2.2901531485887685e-03 -4.9622648286266032e-03 -2210 6.5679906266507661e-03 4.7829078114411672e-03 3.5863513678133147e-03 -2342 -1.3677158222707359e-03 2.1232822567035896e-02 2.8858946052333161e-03 -2211 3.2872613017315151e-02 -1.8916361077159365e-02 -2.1798986161719745e-02 -2943 2.9032009227341206e-02 -2.1009237742058089e-02 4.9744219060057935e-03 -2296 2.0137034697760483e-03 -3.3037359070453953e-03 -2.2307112489812326e-03 -2285 9.7687965409130467e-03 -1.0040806466386876e-02 9.5287345532497070e-03 -2936 -2.8109968883573092e-03 -3.4438265472009387e-03 -8.5022691777107695e-03 -1589 -2.0867022767077768e-02 1.2257675071626308e-02 2.8730259591851014e-02 -1715 -1.9692132645370668e-02 5.6441592423932506e-03 7.3313244158272521e-03 -2179 8.3483066353043649e-04 1.2288897634239366e-03 -3.1034052758463502e-03 -1430 -1.4294260964278604e-02 1.1281314989803682e-02 4.1605503088926729e-02 -2099 -6.6663828029743469e-03 -3.1729754465624316e-02 2.0039320778120130e-02 -2400 -5.3691983097487149e-03 2.6783312566526986e-03 1.5049794556075875e-03 -51 1.6210207635344625e-02 -7.6982815804511884e-03 2.1637759011294323e-02 -49 2.0071771102193356e-03 3.4391761491868126e-03 9.1157961172441920e-04 -50 -2.0835303293600040e-02 -9.7457718287784056e-03 5.3869829935947302e-03 -1223 2.7582296303949198e-02 3.0494384015355949e-02 6.4164964492068434e-04 -1222 -9.7276526282063791e-03 7.2964460184667080e-04 -4.1989137962427855e-03 -2613 -3.0732528273503049e-02 -1.1750109681592576e-03 3.2695302434140074e-02 -2399 -1.1095239952326594e-02 1.0132721651592201e-02 -2.3375842650394160e-02 -2421 -1.6266336146164258e-03 8.3190576111383096e-03 1.2236832491092622e-03 -2398 -5.6113237283608539e-03 2.1209063719527044e-03 -4.2978293822713131e-03 -1568 -1.9407904695142197e-02 6.8601797425234413e-03 5.3665300732763871e-04 -1601 1.9194133420215698e-02 -1.3934063057499096e-03 -1.1681388425715882e-02 -2233 1.3841730682003792e-03 3.7469528963750289e-03 -4.9050311371802253e-03 -2235 -1.4584718122489812e-02 -1.5918836936040584e-02 1.7590495169557258e-02 -205 4.7877887886617343e-03 -1.0759635601429109e-04 2.5836435704723109e-03 -807 4.2544234998647176e-03 -2.0002052101005747e-03 1.2521583553219391e-02 -1567 8.0373093813789660e-03 -4.6199657375812055e-03 -4.0424688542938669e-04 -1569 2.0359470478676860e-02 1.5510316404469770e-02 8.3050927338546212e-03 -2589 -1.7911460185190100e-02 1.0304864428308991e-02 -1.1357266184000181e-02 -1963 1.4480654660565593e-03 2.4557203830544911e-03 2.1141692799189478e-03 -2588 -9.5587820145652501e-03 -1.9983142154935834e-02 1.7080631042797615e-02 -2587 -4.8145946480311914e-03 8.2703488459501245e-03 -2.9573293684954762e-03 -1616 1.6572445278677531e-02 9.5833482399368952e-03 1.4603418073024061e-02 -2180 -2.5637235227932351e-02 -3.7993525020169859e-03 -2.5161892237713049e-02 -1615 -1.5588851650490240e-03 -8.1606391073429548e-03 -1.4899662253485229e-03 -1617 6.0838990883278392e-03 -1.0891635095636724e-02 -2.4189603404726149e-02 -243 1.7202916180877336e-02 -3.7065563910162547e-03 1.3935894398946606e-02 -241 -7.3923989563266660e-03 4.8634846659390552e-03 2.0293746909674359e-04 -242 7.4794887235027719e-03 4.3935913579066187e-04 4.4384810401090526e-03 -845 1.1601809056087846e-02 -1.8333478178195906e-02 2.8958514748966820e-02 -846 1.4942096427558381e-02 -1.6402047462416414e-02 -1.0772821086127607e-02 -844 -3.3707899283621995e-03 -2.2709617178389065e-03 4.2873540952536861e-04 -2775 -1.3481841212063427e-02 3.9399472178658435e-03 1.4080302832367667e-02 -1965 -2.7237718497109117e-03 4.5306077728639680e-03 -6.5732057394165986e-03 -1251 1.5737480232460885e-02 5.8970339193080588e-03 -1.0406862892049375e-02 -1429 -3.7909206060247210e-03 -1.2912553888965665e-03 -1.1945654350063398e-03 -1320 -8.8567023544534433e-03 3.7556328844523403e-02 2.1720800402250745e-02 -2611 4.9983116273621614e-03 -2.8787155104028701e-03 3.1473531504667925e-03 -1031 1.4802718577255340e-02 -9.9174247276489027e-04 -5.1288363962714448e-03 -1030 3.8766339780571931e-04 2.9363166690937800e-03 -7.1722528394949671e-03 -1032 -7.0106164244404766e-03 4.9808924507606378e-03 -1.4145911334290892e-02 -70 -7.3933139490376925e-03 -2.9188458286266237e-03 2.1189053218005123e-04 -1224 -1.0378869091231313e-02 7.2202918802744057e-03 9.7444575504754358e-03 -1584 8.6333808853172201e-03 1.9500291032530150e-05 5.6116986150951424e-03 -1690 -2.5283550066744365e-03 6.8263758779278769e-04 3.1345373641479958e-03 -254 3.3334963323692493e-03 1.0897307982863175e-02 -1.3530055708345005e-02 -1318 -2.8228969078819420e-03 1.0841593502202258e-03 9.5907517275569093e-04 -2067 -1.0939016350668096e-02 -5.0862337481093513e-03 8.9237826280688954e-03 -1249 -3.8185961642647022e-03 9.4623858412995628e-04 -4.8740251158962394e-03 -924 6.3461700681429478e-03 3.2306928815185224e-02 9.8727293007461712e-03 -1067 1.6722404108405545e-02 1.6611455875485695e-02 -1.8703190729472439e-02 -943 -1.5886575873565929e-03 8.1820260809128639e-04 -5.3054171921564182e-03 -944 -1.9547501354170101e-02 5.0996506708657473e-03 -1.3173268211278129e-02 -1066 1.0355623298513566e-03 2.4833865284648103e-03 3.9156882056731960e-03 -2927 -6.1667384063857512e-03 -6.0329219269496361e-03 1.6852018505552527e-02 -2594 4.1647558896521861e-03 1.2967189466332718e-02 -7.7908184213895011e-03 -2254 2.2945002174379838e-04 -2.4704266436254285e-03 4.9907696804409145e-03 -2256 -3.6960029903167465e-03 1.1621538343152233e-02 6.9599851455445306e-03 -1250 -1.2723374972933356e-02 4.9024080721671012e-02 -2.5336064976252123e-02 -2712 -2.5208618887422977e-02 -1.0329835661954993e-02 -3.8560261438447805e-03 -389 -9.0351252929883330e-03 1.0364094873835657e-02 2.2733568626080225e-02 -2926 -2.3766559256518612e-04 -3.1476587958176728e-03 6.6403623283818481e-03 -321 -3.3989448993621579e-02 -1.6243779483664064e-02 -1.5025169223672818e-02 -2593 3.0529657246262162e-03 6.0812445380532794e-03 -5.0189631335764828e-03 -2540 2.9715051682498168e-02 -4.4544904632389986e-03 2.3048291835516162e-02 -2539 1.5623090716851752e-03 4.3572216891756737e-03 1.7505647821347518e-04 -2541 8.5548149199125910e-04 8.8491928069255928e-03 1.4256155292555634e-02 -1765 -7.2726595657974782e-03 -7.7069227258923592e-04 7.2682730392435238e-03 -1868 7.0346406783156441e-03 -9.3909093893672774e-03 2.7693133473129270e-02 -2710 6.5295631462714996e-04 1.6312784303150341e-04 4.6489871430511472e-04 -2711 1.3707427456454526e-02 8.8436493290767609e-03 -3.4098047893246965e-03 -2255 4.9248778394765770e-03 -8.1741945236335576e-03 2.3462537114712781e-04 -1831 6.5856363312372691e-03 2.1538145063451294e-03 -8.3689131051730141e-04 -2928 -1.4754710249004080e-02 -1.0113629075504692e-02 1.8891753841098036e-02 -1252 6.6834848773954705e-03 7.2782794145453784e-03 -1.7493549377463546e-03 -273 9.1329505578506478e-04 1.9305426216985524e-02 -5.9195620968759879e-03 -2677 -2.7132919798366914e-03 2.4895300510643867e-05 2.1885964202159767e-03 -1954 3.4417455443246640e-04 -1.3849142450462278e-03 -4.4051519669404005e-03 -1955 1.3332978747911915e-03 2.7828819355608214e-02 -4.9881468063603584e-03 -767 4.0586889539880469e-03 3.8031077065155943e-03 -2.3854111172788562e-02 -1326 1.7937028943106031e-02 3.2465131740505609e-02 -4.0106443964153846e-02 -2769 4.9030752975042727e-03 -9.8194578189590223e-03 -3.2145998265856096e-02 -2050 3.0982517614910900e-03 -1.4060026060001586e-03 -7.3346492303351515e-03 -26 -1.8706719704874183e-02 -5.4740535199799992e-04 2.3794605466595821e-02 -2052 6.9874336867191203e-03 -8.9194382323126310e-03 7.5168585634706568e-03 -372 -1.3218197825168939e-02 -2.9062241385835580e-03 2.1387923244420510e-03 -2777 -8.1914508658104609e-03 1.2536083023343008e-02 -4.8067600929551013e-03 -2051 1.2526625606481413e-02 2.3053132332434743e-02 2.3310371328004620e-02 -1203 -5.8338980875518700e-03 -2.1937218689556150e-02 1.5880194904529986e-02 -2717 -1.5804711128559346e-02 -9.5763092644165406e-03 -2.2422739501477405e-02 -2716 1.4257190316896786e-02 -5.9770110273469389e-03 1.8922980669384777e-03 -1202 1.8972644292490182e-02 1.3869755056087077e-02 5.5865590493047708e-03 -2554 -3.3302193833783974e-04 3.1611571102607494e-04 -4.5879438224738257e-03 -2555 2.6821414049382303e-04 2.0872376193435240e-04 2.5380547540987241e-02 -1459 2.2519852260230845e-03 1.9989317015003936e-03 -5.0678269817322746e-03 -2207 -4.1298873772993207e-03 -1.3480137708692600e-03 7.6502655080772320e-03 -1461 1.9965810921035859e-02 1.9764457802453891e-02 2.1966102193841819e-02 -1460 1.0030284677700268e-02 1.3483635004924620e-02 -2.4168286547948670e-02 -1355 -1.7836174913806648e-02 2.9588811939423292e-02 -2.5534279456955897e-02 -1354 9.1063854716533666e-04 6.3488771949454376e-03 1.0934385718904202e-03 -1201 -1.2289267822981518e-03 -4.7116940952623646e-03 1.1527501739660260e-03 -1833 1.3276317005277252e-02 -5.1745405411054548e-03 3.7276687491668960e-03 -1832 -9.6875144460371078e-03 -5.6809468133738770e-03 9.5392524988357121e-03 -2556 -7.2361580747197620e-03 1.1891167658283573e-02 8.9401770491841503e-03 -2718 1.8084916912451520e-02 -9.7817280668905781e-03 8.5761315084779150e-03 -1937 -3.1638193958134352e-02 -1.6912297248460557e-02 -1.6314433931520513e-02 -2206 -9.6249517397468281e-04 -4.0036532358196427e-03 9.5079507410193091e-04 -2743 4.6398690479312410e-03 -6.3036553611458138e-03 -1.9067378444598225e-03 -2744 -7.6546438706489150e-03 -3.1273921411635623e-03 2.0848927176879150e-02 -2032 -4.5917458295615917e-03 3.7183916213613184e-03 -3.6232186232028878e-03 -2033 -2.5823371185302490e-02 2.8923504622174311e-02 3.4143584150347983e-03 -2034 5.3787532086518770e-03 1.9279771268806501e-03 -2.1831862467478352e-02 -370 -2.0628912701145755e-03 1.5140330640882797e-03 -1.2067178557805904e-03 -1324 -6.1071565409711445e-03 -3.1419856473084767e-03 -6.2120697934877718e-03 -1325 -2.6522170515609806e-02 -8.1895353176063071e-03 -1.7262037174691595e-02 -668 5.3849397167881974e-03 1.0099838810359828e-02 1.8151840861573849e-03 -1356 -1.0070372632112412e-02 -8.4620272835764015e-04 7.3508167528192640e-03 -1518 -7.0280349588918460e-03 -4.8578209707831280e-03 1.3643436774321033e-02 -805 3.7258025838807387e-03 5.8807609379900082e-03 4.2164818854332174e-03 -2054 -4.1588330027976066e-03 3.3339184078888022e-02 -1.3451054671282653e-02 -2397 -9.7959078180913789e-03 5.5224970300085177e-03 -6.0631014999098275e-03 -2383 -6.7546199622095463e-03 1.1622032227672390e-03 -5.1117584209004596e-03 -2214 -1.0785624623550767e-02 -7.5675040765243885e-03 -6.3216035005772666e-03 -439 -2.5111688087002910e-03 -2.6566064291321167e-03 -4.1449525005807881e-03 -2343 -1.0613322608508292e-02 2.2474320055321833e-02 1.7822862673589235e-02 -440 -5.6150021214155868e-03 -6.7380229202081750e-03 -3.5304505108827794e-04 -211 3.7645409148418340e-03 -1.1790672772464142e-03 2.0996475373073358e-03 -2745 -3.6187789746942395e-02 -4.5212294300417670e-02 2.5573608565128608e-02 -1517 -1.3525925366305626e-02 -1.6748737861579103e-02 -7.3540116488059444e-03 -2266 -7.1253473613380736e-04 -4.3462541534625655e-03 -1.9777106746614900e-03 -1231 -2.9571628715545973e-03 2.1989158215762741e-03 -1.5658860199653025e-03 -2364 -2.6834131206687523e-03 -7.9673461009032425e-03 -5.2616790683532371e-03 -17 -9.5591817366871938e-03 7.9233291491983895e-03 1.1997162979784957e-02 -441 -9.9040436100006225e-03 3.8306343877538805e-02 9.7108159268540321e-03 -1022 2.0216139712836634e-02 5.2843665652448097e-03 -9.6317128273891387e-03 -2899 3.1332772238514316e-03 1.2735286356204776e-03 5.6966773588913401e-03 -1859 2.3271870975665382e-02 1.0014692045177643e-02 4.6288360797729069e-03 -2262 5.3516781888330641e-03 -2.8357833926641570e-03 -1.1451094224629721e-02 -2395 -4.1714266232030809e-03 -9.0103072233161993e-03 -2.6618138728063895e-03 -186 -1.7611435516436340e-02 5.9628815689112512e-03 -3.3874862081581343e-03 -2472 2.1360242899358239e-02 6.7630766827202673e-03 3.6154772208828637e-02 -801 -1.7876090441299314e-02 -5.3110600808164874e-03 -1.4469269151283019e-02 -1406 -2.3870926856489175e-02 1.0698452968011514e-02 1.2242787732348274e-02 -2776 1.4013468698905783e-03 -5.7155866950095125e-03 -1.1850139003257180e-03 -984 9.0539219252344962e-03 -1.0217357956621636e-02 -1.8906564560272000e-02 -549 6.0599331385089135e-03 -8.5387450965941775e-03 9.8439300042527482e-03 -1409 -1.7141866971176506e-02 1.1772117056458480e-03 2.0821447278434695e-02 -407 6.9557739412280661e-03 -6.3363254499059669e-03 2.6772530723031002e-03 -1436 -1.0509651141095184e-02 1.0836805474933594e-02 -9.3913046925437858e-03 -2315 -1.5389130579561013e-02 8.9740003670197924e-03 3.0436857179600856e-02 -272 1.1216214713460662e-02 -8.8499297974021784e-03 -6.4359460879691559e-03 -998 3.4633071107197787e-02 5.8363500401187093e-03 -2.0651456582609206e-02 -641 1.3703177710646693e-02 7.6645668747920932e-03 2.5848971139729868e-02 -2213 -3.8019071035761721e-02 -8.3985806005476768e-03 -1.2909941238163703e-02 -1307 5.7799434227214976e-03 1.5486593808116992e-02 -4.4224235442713129e-03 -1377 3.6661933556623844e-03 1.9172966230548809e-02 -8.7111388834076389e-03 -853 1.8380104683260610e-03 -2.4939230941656851e-03 -9.2026503039371182e-04 -855 3.3822527499516440e-02 1.1246609966361397e-02 1.6115858402101287e-02 -674 -1.3780750056033722e-02 1.5193815261213999e-02 -6.0779217624604290e-03 -776 -8.7308763083532460e-03 -1.2339494640323363e-02 1.7762927624009717e-02 -673 5.0294320656071598e-03 5.6342224041133231e-05 -2.1168379858939163e-03 -1372 -3.3887063649058139e-04 7.2189996032480577e-03 -2.2044130576481216e-03 -1981 2.7928736804081850e-04 -4.7290724250508122e-03 -1.0572580137519431e-03 -1982 -1.2159133154660908e-02 1.0238550187520361e-02 8.6531849420077146e-04 -1983 -4.6394856491064904e-03 -6.6302946559024219e-03 -1.1729295648095557e-02 -675 -5.1248686870763319e-03 3.1511688589066643e-04 -5.1243896008130287e-03 -1374 1.5394679012688076e-02 1.9986264235126155e-02 1.9631517637559697e-03 -757 -1.6083051660576268e-03 3.3019900639344149e-03 5.3726645428184793e-04 -646 3.7977909457405303e-03 -6.7475070510741170e-03 4.2307256803446177e-03 -159 1.9256789779364999e-02 -7.0356715413304226e-03 3.1602165484143407e-02 -1829 3.1762715665122490e-03 1.9962304548822810e-02 1.5051664705396373e-02 -1638 -1.3849897543100009e-02 2.1913343870657676e-02 3.4794050530553662e-03 -758 9.6253729603026066e-03 2.4810998471445935e-02 -1.0233361097123564e-02 -2323 -9.2421950388953816e-04 2.0181157043997100e-03 2.8670668286139736e-03 -2325 -4.7733363014162795e-03 1.2966862220621213e-02 -4.9771930688444228e-03 -1828 2.5441559640913321e-03 1.8767929375823136e-03 5.8238257884331802e-03 -647 1.4025448875627392e-03 1.8235355279602697e-03 2.5750255154982364e-03 -1063 -3.9277923941230947e-03 1.0249493579299622e-03 -7.0744817884007264e-05 -648 -2.2570830103357544e-03 9.6670707550328898e-04 -5.4181660757202489e-03 -284 4.0885920914928951e-03 1.3788506176752285e-02 -2.6662627890173388e-02 -1469 -1.4077547686841885e-02 4.0646238492371388e-03 1.5133484788049736e-02 -1161 -9.2551416878296853e-03 -1.0801148447550275e-03 2.1207336211646172e-03 -61 -6.1880640825857686e-04 -9.4454261151766337e-04 9.5547172493799413e-04 -629 3.0887818259860188e-03 -7.5358359119143915e-03 -2.6845778007772207e-02 -769 -7.7413622157587302e-03 2.3816873976395458e-03 3.2481644181657264e-03 -63 -8.0702958544622682e-03 2.4614182236777013e-02 4.8859536584392217e-03 -1050 3.0269781154656995e-03 4.6361744305164869e-03 2.0009713639858634e-03 -771 1.7072335741209648e-03 2.8483289237505558e-04 -5.7505010431107787e-03 -1563 -1.4321649029728980e-02 1.7642564456403269e-02 4.5412868734067517e-03 -1376 -4.2350927372968809e-03 -7.2042485869649193e-03 -3.4996674645509603e-02 -756 -1.6518304220313012e-02 8.4331644057213575e-03 9.3473404951428789e-03 -1966 -3.2945798144449656e-03 -4.3208868406076090e-03 -8.1025731845370784e-03 -157 -1.5875688093974888e-03 -5.9045690336287154e-03 -7.9104590190640469e-04 -968 -3.5010041413668321e-02 -1.2543037118624693e-02 -1.0881189528846648e-02 -978 -7.1290519722669952e-03 -8.8078986585768317e-03 6.1848866665049282e-03 -1395 2.7173778239833368e-02 4.4313457522951209e-03 1.8535089544563382e-02 -1393 -1.8936001958204671e-03 3.6163049711839326e-03 5.0142161399572352e-03 -710 2.0989438205546832e-02 -3.4088934022658071e-02 -9.0542910164187907e-03 -709 3.8408693371470050e-03 -6.5090026053655822e-03 -2.2825826063897542e-04 -711 1.0292318139818211e-02 -1.8622722681832328e-02 2.3461637374117958e-03 -914 -1.4618404774245669e-02 1.6596861887157935e-02 -1.1989857072519754e-02 -913 5.1042292849715403e-03 -5.4091125549574764e-04 4.6422565708148173e-03 -915 1.6541265676092074e-02 1.8835973718973487e-02 2.4997948223801858e-02 -1633 6.8404189941023024e-04 9.9466145342036309e-04 5.4293971527952269e-03 -1634 1.2198828754390629e-03 8.6447214338725743e-03 -2.2424778415793011e-03 -158 1.5324336724593702e-02 -1.6538474281452278e-03 -4.2145525724915211e-03 -255 1.6898499972194461e-02 1.1600719265959902e-02 1.7809978171894780e-02 -253 2.4573628019139383e-03 8.7699702010406649e-05 -3.9259286853009110e-03 -300 -1.1257008856928671e-02 1.6849209482943277e-03 4.5085885396971958e-03 -299 3.0675690234799404e-02 3.4055453266222608e-03 -4.6817118881019486e-03 -466 -3.8679030982743017e-03 4.9978230411217954e-03 -6.1396135260051530e-03 -298 6.3824894887294040e-04 -4.2966024239090780e-03 3.2245388958262022e-03 -467 -1.3365934657201961e-02 1.2161378337012237e-03 4.0902455196440833e-02 -376 3.6633979667463445e-03 -2.2805170988987756e-03 -5.0494779527138862e-03 -468 -3.5714779156696109e-03 -1.9310689672488441e-03 -1.8855483602483548e-02 -825 2.6847380441402933e-03 1.8157899431598307e-02 8.4225797212359919e-04 -377 -1.3747860820366836e-02 2.5032337260466584e-02 -1.1374672260254612e-02 -1000 5.4502072048985399e-04 3.3584097161289362e-03 -1.6948489757467704e-03 -232 5.7720507469987267e-03 -5.2766416222994545e-03 -1.4269481303017045e-03 -233 -2.3106188810638598e-02 3.0106744727442160e-02 1.2563756183811465e-02 -1827 1.7787217662411946e-02 -2.5337798742357052e-02 -1.6649906003116093e-02 -378 1.8371969001563127e-02 6.3921178994264362e-03 -1.1592654850751595e-02 -2156 4.1029076072152303e-02 -8.5680655836572351e-03 1.9022219798293216e-02 -2155 -4.3004635987384755e-03 1.2663884927020530e-03 4.2802727564848086e-04 -1070 -3.3340261018889671e-02 1.7383709192420646e-02 6.1201368121637009e-03 -326 -1.5474869937826607e-02 8.4293448026893578e-03 4.8793765226372325e-03 -1375 4.2322054656518714e-03 -1.2581725672580831e-03 2.7767834814350378e-03 -234 -5.0371637284268916e-03 -3.6981295329221058e-03 1.7433357741564667e-02 -2036 2.8770020789961642e-02 2.5170994210385569e-02 1.5908090834360209e-02 -1018 6.5876415981703618e-04 -1.0557438650280446e-02 -5.7424742609147256e-03 -1001 -5.4870618311776403e-03 -1.2565471658242833e-02 1.3515138908497808e-02 -1734 7.9750053585306256e-03 5.6074428680709248e-03 -2.8091626937962373e-04 -2654 -8.1782550341452289e-03 -7.9353755108599149e-04 -2.3466892349410774e-02 -2108 -5.2358021850088723e-03 -1.7895145082296993e-02 -6.6405179951444862e-03 -264 -3.2161898502817902e-03 1.4975799193330527e-02 1.0891127517864247e-02 -2602 -5.7061222243245668e-03 -3.7123147022132480e-03 1.1969871602662203e-03 -2603 2.5468697106845316e-02 1.7193441491684628e-03 4.3179455757835557e-02 -1779 -5.1940415469354578e-03 -2.1787329997569813e-03 1.6070804161859025e-03 -1777 2.9502817994912526e-03 3.3524915788282123e-03 -2.6252243245344911e-03 -1778 -1.1602104855385707e-02 1.3098145310881555e-02 1.2357352819567192e-02 -287 -3.4847131096663563e-04 -4.3630747374589374e-03 -8.7073163564784055e-03 -2699 3.2060682025199197e-02 3.6112345729866300e-03 1.0075594323766826e-02 -263 -2.0111104125011912e-02 -2.3498421208101319e-04 -6.4520929574181721e-03 -286 2.1909538181564183e-03 -9.9728973695172246e-04 -2.8207306771426588e-03 -262 -6.6179416703361317e-03 -3.0779947683135466e-03 -3.5061132026604365e-03 -472 3.3058654513523685e-03 -1.6718677117964983e-03 -4.8147805728360167e-03 -288 1.0766219679026296e-02 -1.5703259503477111e-02 1.8473748075435156e-02 -473 -4.0099117881447297e-03 1.7927585089498355e-04 5.1592808495708924e-04 -1054 -5.0301652810861956e-04 3.6774103989044462e-03 -1.7518245593111789e-03 -1047 4.3543522626835592e-02 8.1154535837508427e-03 1.5433397584103829e-02 -1056 -1.8264066538611547e-02 1.1661286981792494e-03 1.9267582547192942e-02 -1055 -2.5938034204399524e-02 1.9073078070594548e-02 1.5227372554036387e-02 -1045 1.7400552747772878e-03 -1.6540651467708532e-03 -1.2992802021224987e-03 -2107 -3.1732736498241592e-03 -1.0565772833158401e-03 8.0997754317060702e-03 -2109 3.5013395216568384e-03 2.6322076263890146e-03 2.1587694139668431e-02 -2008 -1.3332116846892616e-03 1.8583978223803966e-03 -4.0788677730021318e-03 -2010 -1.1654182418166622e-02 1.7197709465261026e-02 1.7414719276246028e-02 -2009 4.0817379789735909e-02 -6.1656188594443485e-03 1.7078427160577472e-02 -1020 -7.4297182188355054e-03 5.5269982266499592e-03 -2.0053795491232557e-02 -316 -8.3622834473931333e-04 1.8013401045420400e-03 3.4049186052492546e-03 -2762 -1.7912111930247440e-02 1.6696741669809858e-02 -1.2393079466779368e-03 -2761 3.7352419089973486e-03 1.5308654001858579e-03 2.5938709310568148e-03 -2604 -1.6321025995157518e-02 3.1416487283437690e-02 -1.4727513470056701e-02 -1173 -1.1712237464641700e-02 -3.0566771648624833e-03 -1.0531581130678275e-02 -1082 2.0345500217712399e-02 4.9403208348810616e-03 -1.6688882113651965e-02 -2426 -2.1547601656281525e-02 5.0685272163577169e-02 8.3253694259656855e-03 -415 5.3199255381816447e-03 5.2119405979555245e-03 -8.7192460866039492e-04 -817 -1.6540908625459960e-03 5.0290421260034230e-03 4.1620205154054973e-04 -2916 -1.7008349279946860e-02 -7.9423203615748943e-03 -9.3879375153648192e-03 -474 -2.0460277298195134e-02 2.9197405934898075e-02 -3.5533957770341601e-02 -1442 -1.3139437429231342e-02 1.0824929000588448e-02 -6.2664935953494066e-03 -1254 3.8138482148669384e-03 -1.9645761440943630e-02 1.2630936933118897e-02 -2698 -2.4209479718859121e-03 -1.2080217344642597e-03 -4.0429157790556267e-03 -1046 3.0546035534071226e-03 1.3850122966057334e-02 -6.0111089687129953e-04 -1264 8.7747032368936046e-04 -9.6752884469951470e-04 2.3900134843280836e-03 -1265 -1.9397758319575048e-02 7.4155488627869756e-03 3.9334337892633839e-02 -1337 -2.1374853248490654e-02 2.8404031241028344e-03 5.0025273456436713e-03 -1336 -6.7109938775589714e-04 5.5976798510960222e-03 -4.6551887132098308e-03 -1338 -9.9054569724443767e-03 -8.5941126553342566e-03 3.4436497176912107e-03 -2973 -6.6279773154501887e-03 -1.0888943808175084e-02 1.3921576485065583e-02 -1181 1.2271628956593177e-03 5.3834253185373860e-04 -2.3317695561205637e-03 -1444 4.6739637987703713e-04 -2.3749032996041304e-03 -5.7532518260891442e-03 -1266 8.4967209502415982e-03 -5.8608553174353496e-03 -1.9339770457309065e-02 -1152 -1.6406970177404733e-02 9.7942099600380333e-03 -8.4297023287582956e-03 -2792 -3.7420245793941178e-04 8.9915568755152032e-03 -1.7601552166223309e-02 -1150 -2.1201213504384786e-03 -2.3199305535363569e-03 -4.6810052964062219e-03 -1151 6.5177089312119380e-03 -1.7868136962432883e-02 -1.8711372933902303e-02 -2239 6.1988965500149266e-03 -7.3347298265021119e-04 3.6025264804563275e-03 -2815 -1.4205926923919860e-03 -2.3869865955524179e-03 -1.6957651334063813e-03 -2793 -3.4046847507836634e-03 1.7396469681997744e-02 5.7637980552275358e-03 -2791 -5.1250445764047543e-03 -2.9277561933300361e-03 3.8064382995515911e-03 -2958 9.5988982000179066e-05 1.7345335558580895e-03 8.7434107841251989e-03 -1776 6.5592078298743102e-04 -9.3867166871300020e-03 -3.0430984127694269e-03 -1329 -1.7575606372684485e-02 -6.4998562085486879e-03 -6.3156954779900682e-03 -2643 -3.1375060468296863e-02 -1.0401411722207212e-02 -1.1084163914234238e-02 -2641 -3.3211622362933849e-03 1.9395242861961848e-03 -8.0554281716666595e-04 -396 2.3352487169343326e-02 -1.9306821322220082e-02 3.6721619785957458e-03 -394 5.2081801343100108e-03 -2.2538227938046864e-03 1.7594024581925613e-03 -1549 -5.2151340242811827e-03 6.9469941886338826e-03 2.8271762733442956e-04 -1550 5.9202410389466746e-03 1.9848991518999701e-03 -1.6821712517371298e-02 -1551 -5.8951601914081046e-03 3.4261600369964828e-03 2.8232441035284030e-02 -187 1.7990965346965572e-03 4.8000612561819645e-04 -3.9090815531180121e-04 -2956 -5.7117568167885770e-03 -8.2529437657748725e-04 3.2166727029289913e-03 -2816 -1.6100116044957216e-02 2.5672181048673286e-02 -1.0182049062328662e-02 -1826 1.6611230133695472e-03 -3.3410201913964245e-02 -5.5142174385229628e-03 -1099 -8.1014566061593887e-04 -4.0877549979627037e-03 2.6680292141664421e-03 -1968 2.6742643246559273e-02 1.6548644551737129e-02 2.2256513285365227e-02 -1101 1.9293108014849621e-02 -8.8854684379997741e-03 -5.4516294132559472e-03 -796 -3.6381424828504878e-04 3.5549462536024947e-03 -2.5692705121636442e-03 -785 -2.5224708135187370e-02 3.4665358327626683e-02 -9.1243644926352029e-03 -798 9.8182390882141477e-04 3.5779747911812196e-02 -1.6311865865873500e-02 -1585 5.8217501268045432e-05 -1.8385300329064745e-03 4.0613830558247641e-03 -1335 2.3976345669094825e-03 1.0943243952302629e-02 -2.2509516976651007e-02 -1348 -4.6164317187212516e-03 6.4268957503713581e-03 4.8755146239499204e-03 -444 -3.2878444949940573e-03 1.6814753623067988e-02 -1.5662541688287110e-02 -1587 2.0846521170204930e-02 -1.6028156593884995e-02 2.3352586159645042e-02 -1958 2.3493131814132664e-02 -1.0524658624125742e-02 -3.0970457151880265e-03 -873 -6.1015775094273219e-03 4.5253128726307316e-03 -2.6761850779673600e-02 -1159 -7.3724654352043690e-03 -3.1256750445038772e-03 1.0836897339976403e-03 -1957 -8.5599425659929288e-03 -3.5099076509748860e-03 -4.2942397224300750e-03 -871 3.5953519886389308e-03 -2.5151582132798785e-03 -4.4690641095412173e-03 -872 1.8820198524221968e-02 1.6095945415174010e-02 2.9649168871997388e-02 -725 2.7556533585856198e-02 1.0462639101347117e-02 9.5724423280577012e-03 -2574 1.0218387418602046e-02 -9.3123335424821166e-04 -9.6963771213936806e-03 -2647 -5.4031650215680916e-03 -5.1278928672077303e-03 1.6788149745366329e-03 -2649 6.6822883304245295e-03 1.3553945420034496e-02 -1.4717256853964767e-03 -665 -2.4521925796529807e-03 -1.2813313749529914e-02 1.3563208843762688e-02 -664 -1.2935218958700558e-03 -4.4715937176070799e-03 1.0410904334619592e-03 -666 2.3010380443653678e-03 2.1498124997794216e-02 2.0109960570370674e-02 -2648 -1.6013097815656095e-02 2.6965911044624702e-02 -3.5985199346087815e-03 -2237 2.5640480778391806e-03 1.8218342865076072e-02 7.0444186566574803e-03 -443 1.3004586860899650e-02 1.1484097669515539e-02 -2.9314561850284922e-02 -2236 -5.1319156770072852e-03 4.5254354426157517e-03 1.5021106015905632e-03 -2238 1.4240317432193611e-02 2.3889065213298200e-02 -1.1739167548868184e-02 -804 9.1609302563806245e-03 -2.1793010132471747e-02 4.3079190938504893e-03 -1350 6.4679331764449859e-04 -2.1801495226866606e-02 4.8001466881039184e-03 -763 -3.0669372214000732e-03 2.0973693660228630e-03 8.8004548000503754e-04 -446 -1.6988612015078206e-02 9.0555870850359179e-03 -1.4213046526222250e-02 -2972 -1.2621547139591840e-03 2.2776117733047399e-02 2.6526437437557490e-02 -442 -5.1289577222491103e-03 3.7004556741666510e-03 8.3169057755651309e-04 -1349 3.6642468975100442e-02 -1.2382299195060118e-02 -1.2361006353275837e-03 -765 1.3957358699071264e-02 1.7268507698446435e-02 6.4809479961862194e-03 -2971 9.6838026851791149e-04 -1.1121129836626157e-03 -8.0865518909376346e-04 -1421 1.2810687122750790e-02 4.8994567154577087e-03 -2.3167676995421192e-02 -2813 3.9915128903319922e-03 -1.6306617081985619e-02 1.1066316348530137e-02 -2756 1.0675941360377849e-02 1.4236400183564249e-02 -6.2532176253368554e-03 -2493 3.6193400029189700e-02 -1.1729188435267504e-02 -6.0622973435181856e-03 -879 -5.0279170637955676e-03 -1.1525977194999301e-03 2.1923495575761256e-02 -2840 -8.7921652321299813e-03 -5.8894502056179967e-03 1.7283345450454915e-02 -2839 2.2349745262216173e-03 1.7231531473834391e-03 1.4099771793915855e-03 -2270 2.5626969598306109e-02 5.6773083680094196e-03 3.2744913900103111e-02 -588 4.3465856686668945e-03 2.3797055244053889e-02 1.1004053301580557e-02 -586 -6.2501517574835306e-03 2.5877923199795023e-03 -3.9231982827692500e-03 -587 -7.2495035906044438e-03 3.7202930109817875e-03 -1.4321310108945771e-02 -2601 6.6235903063982995e-03 1.7398084415995985e-02 -1.3368569681545451e-02 -692 1.2457298229377696e-02 -2.9850297773099206e-04 1.6445662963307699e-03 -1508 7.4262979266509288e-03 -5.8786371140659788e-03 -9.0151365056986375e-03 -644 2.1918002419330743e-02 -4.7737496841466437e-03 -2.4328034098951103e-02 -643 -4.2151830603250964e-03 -1.9644198851922444e-03 3.0867573833774919e-03 -645 1.5698333320394508e-02 1.5432418066986654e-02 -3.5279840690182696e-02 -2790 -7.3902059329497933e-03 -2.7638071310817240e-02 3.3361196465283636e-03 -755 3.2258841205374152e-05 1.2008652568889153e-03 -2.0930983491656417e-02 -754 -5.1263369595561346e-03 1.6849999251657419e-03 -1.1415521937698425e-03 -2416 5.2910688296690619e-04 2.0550545544894020e-03 2.1321874055680763e-04 -2417 -4.9768012257998852e-03 2.8571481788914138e-02 -2.3953840366314860e-03 -2418 -3.7004068257206424e-02 -7.4308792414312826e-03 6.9397064822692093e-03 -2788 -1.3195885723820983e-03 1.4625522754557016e-03 4.3019414676377073e-03 -2789 -5.9133432080465762e-03 -4.7750718166814409e-03 2.2818976192169216e-02 -680 1.7055088173643148e-02 -1.0216418494573673e-02 -2.8897287594076070e-02 -1509 -1.4903626701955058e-02 5.1472695925762046e-03 -1.5567763265616423e-02 -1507 2.2495722041687969e-03 9.1331384008978399e-04 3.9731545536565043e-04 -1653 -8.5717807617125621e-03 -1.3737054518843137e-02 7.2648529552580684e-03 -16 4.4005356268597704e-03 8.5242077142401989e-03 -4.3874204580958134e-03 -108 3.3030835403254993e-02 8.8301743172662425e-03 -2.0308681836496388e-02 -2596 -1.0512990286694953e-03 -4.9198971355265400e-03 3.5967588678321072e-03 -2598 1.6885820881142499e-02 2.5772149021214136e-03 -2.3273133836570004e-03 -2917 2.1844135873054877e-03 -9.0206209081331468e-04 8.1680568991853353e-05 -2619 -4.5981249502886956e-02 2.1848011614164019e-02 1.5763109383488984e-02 -2599 6.8657199064631269e-03 -2.2581811148938693e-03 3.1131931604602278e-03 -2979 -2.4543925172314494e-02 -6.4943206664738705e-03 -2.1586781661229001e-02 -2977 -3.9091375720320037e-04 3.6696703637630048e-03 -3.2213200991832239e-04 -2240 4.8060671098988346e-03 -2.2410874786111701e-02 7.7392332982250461e-03 -1537 3.1214708231475465e-03 9.2411571417214133e-04 -3.9074316109646880e-03 -1078 3.6558732957338248e-04 -2.6979660304043856e-03 3.2513667303851052e-03 -2381 1.3784082651643966e-02 -5.8410114730036468e-03 1.1638924805544862e-02 -283 -2.0816165294039960e-03 4.9192893426181260e-03 -2.5276610069531443e-03 -2382 -1.0886441007951990e-02 6.4381194499097726e-03 2.3932188931671274e-03 -285 1.3655591397518941e-02 1.3899165630333818e-03 -2.2385906400561692e-02 -2380 -3.9480655729298214e-03 -3.1918839722452951e-03 1.7026532794103741e-03 -866 8.4083660957929521e-03 5.2126101680524878e-04 4.8139658783403023e-03 -865 1.2232397857458012e-03 -3.0686864513448011e-03 4.2024267076207766e-03 -713 2.2378470362235295e-02 -2.2070379891686542e-02 -2.0054036792419471e-02 -2651 -1.0689816910777865e-03 -8.4014800050505201e-03 6.0015228168710929e-03 -2497 2.6726374991682465e-03 2.2838927195723419e-03 -1.0200980938536548e-03 -2499 -7.2086820232390228e-03 -5.1724901459841163e-05 -5.5458926385782512e-03 -947 -7.0468420471916154e-03 4.3008384923950245e-03 9.0659246989075373e-03 -948 1.6292802949063469e-02 -1.8816917145104181e-02 7.5181377705681365e-03 -946 7.3380242190601965e-03 -4.4907138358796499e-04 -8.1049254921649831e-03 -2415 -2.9372519412953445e-02 9.8560738650917447e-03 6.5859771911621389e-03 -2413 -4.3544971980337462e-03 3.9963912741325814e-03 -4.1442992723351333e-03 -2414 1.3827291197529464e-03 -1.3417511895675010e-02 1.8056117387044816e-03 -2597 -1.7831544647804551e-02 5.6291866189848300e-03 -2.1779194882432788e-02 -1595 -1.8566711286259332e-02 -9.9876195606492246e-03 -9.3543504439086451e-03 -2271 6.2928106511355997e-03 -3.2445333200153454e-03 -3.5140907147725134e-03 -327 2.4574365227862119e-02 -1.0986857762574504e-02 6.7728723371646279e-03 -35 1.3533624267806087e-02 1.3219740692305505e-02 -2.6782860013411521e-04 -46 7.3103529937753936e-04 1.7023960523752959e-04 1.3161514038198623e-03 -1059 2.3023620033265427e-02 -9.4852027141490818e-03 7.6407435974403422e-03 -48 7.5997854020311685e-04 2.8766379394694272e-03 8.8062120855348057e-03 -2306 -1.5096508497772490e-02 -8.9095550297512635e-03 -1.9418460534229444e-02 -867 -1.3132571849893917e-02 -8.9984431828021069e-03 -9.3108859348477613e-03 -1240 5.1713173441371614e-03 -9.3335118930158115e-04 -3.0205548527554625e-03 -970 2.4913191542378990e-03 -3.7635729309597773e-03 -3.4300393522508057e-04 -797 -4.0197594116605445e-03 2.9883901628932907e-02 -2.4230972850095591e-02 -2907 2.0701414667410174e-02 2.8396795952596999e-03 7.2225365945992950e-03 -1310 9.1458701248608981e-03 2.0170328106376718e-02 -2.9600270952346405e-02 -194 2.8072474485450784e-02 -1.8059609891778617e-02 -2.0852910654867489e-02 -2404 1.2557848267130583e-03 -4.3530392997711042e-03 -4.4003483974187204e-03 -2241 -1.8684871605312420e-02 3.0993923164277719e-03 1.5523684126557728e-04 -2024 -1.7366738005875779e-02 -1.0549722588432833e-02 1.2783277484935750e-02 -2600 -2.9551040042212900e-03 -9.0962425797325962e-03 7.6212893353564135e-03 -2503 5.8892819409747156e-04 3.7503388833123610e-03 2.5598133679851972e-03 -892 -6.4772032136887862e-03 6.8538329698864435e-03 9.4170410478925184e-04 -2914 3.0048730434271156e-03 5.6945381693277548e-04 1.3584515358770067e-03 -422 -1.0408899851520681e-02 4.4307442099039696e-03 8.4719847160737022e-03 -1440 1.8143005687444178e-02 -1.4043315405372367e-02 2.5805818868904162e-02 -971 2.4888143429873232e-03 1.2507859368603307e-02 -1.8620129069961727e-02 -1438 -2.6253614848116957e-03 -9.3693732645107591e-04 -3.5627735693037838e-03 -1439 1.4518706123117427e-02 -2.4388986957498871e-03 5.5398227443711765e-03 -1165 -4.3306525518572623e-04 -5.7582829443353530e-03 1.7948340513997808e-03 -2758 -4.3923622355679549e-04 -4.3469515967725567e-03 9.7454760886073893e-04 -1057 2.8785256381127673e-03 1.5271592915087500e-03 1.8367590022184031e-03 -1058 1.8071760214732689e-03 -8.1357716185800476e-07 -3.3349253454654657e-02 -361 -2.2862763114459600e-03 -6.9277263832354943e-04 -3.9752435461844326e-03 -363 8.4404107968726397e-03 -1.3410286315578814e-02 -9.8685309527987361e-03 -1787 1.8151369995339242e-02 7.9897063075814534e-04 6.0158431227628406e-03 -500 3.0622969343231526e-02 2.4759934309009819e-02 2.1559265479784346e-03 -499 -3.2936552965127415e-04 -4.1775751023365275e-03 4.5676122808993656e-04 -1786 2.5140538267564494e-03 3.6025710874324464e-03 4.6137958496293239e-03 -501 -2.1498965245641464e-02 5.5876636942927646e-02 -2.0231977760471905e-03 -1788 1.2532297159247995e-02 1.4044351123669347e-02 2.6797169309784197e-02 -485 1.0025098752458815e-02 1.4339085986179030e-02 -4.2101428259678266e-04 -484 1.7191047410860382e-03 1.7924377062471719e-03 1.1092227412546390e-03 -719 -1.2634818960062574e-02 -6.5378651332649263e-03 1.2906794758668376e-02 -1131 -7.3017921994979543e-03 8.2216792676917429e-03 5.6760759775163943e-03 -1120 4.6761774676295611e-03 -2.0877735124803366e-03 5.1929869540143937e-03 -478 -3.8701661485944115e-03 1.9165109792362799e-03 -2.8869617533051357e-03 -480 2.7953791714727407e-03 2.6281699253873970e-03 -1.9040318699701686e-02 -1166 -1.3410216726111899e-02 3.4846166576299022e-03 -7.3100120813704133e-03 -718 -2.1641256369298784e-03 4.5872835450234381e-04 2.7443374466682947e-03 -1167 3.0722942824490184e-02 2.8694757638759978e-03 1.6064562810477225e-02 -486 -7.7596414064636720e-03 2.0213661469197289e-02 2.0390032415772356e-02 -1122 -2.8246374470102076e-03 1.8306267828125347e-02 7.3636239105694459e-03 -1004 1.1912495524471500e-02 -6.4144888238936602e-03 -2.1319500453015339e-02 -1241 7.9556587277232593e-03 -6.8812043316624390e-03 2.0917630897031612e-02 -720 -2.2053400455969933e-02 1.4718930602470221e-02 1.6559906730645873e-02 -317 4.0375239269020417e-02 1.2927398379736622e-02 -2.2833576700374700e-02 -569 -1.6653462886348596e-02 -2.3941336089184102e-03 -1.3979578673563992e-02 -2269 2.7096750949660176e-03 -5.2689298396158182e-03 6.3783071310961250e-03 -1825 5.5897842628185282e-04 -1.5980021787974643e-03 5.9397575924613226e-03 -430 5.9189495948992225e-03 -6.0799946473667386e-04 -8.1518010532487962e-03 -479 2.3051882403166739e-02 -2.7027948727148627e-03 -7.1160559621578686e-03 -452 8.3268191716822770e-03 9.1368980799044902e-03 -1.3251802922495887e-02 -2335 -4.8087252013446387e-03 -6.8611714505687942e-03 -2.2596792341718747e-03 -2215 -1.2257530426317608e-03 1.5628753694546978e-03 -3.7779586822590948e-03 -432 3.1156464574820129e-03 4.5786795090427424e-03 -6.7324254540858360e-03 -1121 4.9608468624480701e-03 3.8023958189945801e-03 -3.1640292289971238e-03 -451 -2.3161129261946058e-03 -1.5283028184845896e-03 3.3330652901100446e-03 -1005 -5.3380681822944752e-03 -2.4499936064176112e-02 -8.5797417792788985e-03 -391 -8.4659693655668514e-03 8.4293084456578209e-04 5.2661509864648471e-03 -393 2.3684641917413175e-03 8.4766538373071808e-03 1.6719184585063156e-02 -1 -5.2785836852064722e-03 -2.1906574603136513e-03 2.7835092522565442e-03 -593 1.2401230044721151e-02 9.4556404109012542e-04 -7.8355300315119444e-03 -594 -1.4678933885800460e-03 3.7214240352485702e-03 -9.7280838415835010e-03 -592 2.6740558800789726e-03 -9.3194003256839310e-04 4.0666350558379609e-03 -392 9.4663901115287045e-03 -2.2184881879450086e-02 4.0645892302332322e-03 -126 -1.2207094292677287e-02 -9.6434165878305760e-03 1.7899572293054665e-03 -124 -1.1712492021964845e-03 4.0370826726690706e-03 -5.3053104743377216e-03 -1857 -1.8513178037072482e-02 -8.8865902887732811e-03 -1.0504124238857873e-02 -125 -2.6444423774991316e-02 5.8363761148857831e-03 -4.2653900259494781e-02 -1003 -1.7280014348886241e-03 -1.6968807365575268e-03 5.7447123989492587e-04 -1358 -1.2935323249696380e-02 -3.5695462529890783e-03 8.4684543514244350e-04 -453 -1.4237472053535545e-02 1.0591070355998260e-02 -5.2301988414475372e-04 -2217 -6.1755078611350905e-03 3.3622849983113079e-03 -1.6648405897452971e-02 -1170 1.4040450782319953e-02 -1.3217327804710357e-02 -1.0963449842370625e-03 -1190 -1.6005482651981019e-02 1.1899304142423829e-02 -1.2756708202805939e-02 -1168 -2.3490054268317071e-03 1.0931061377959534e-02 -2.3683740950840677e-03 -774 2.1778930884986412e-02 -2.1011802128142375e-02 3.5334686915021278e-02 -772 5.2288988018347571e-04 -7.9037426366554300e-04 -4.5073472047100337e-03 -1357 -1.3222879056049729e-03 9.0090998710224150e-04 3.0805402869584380e-03 -574 -6.1870066332325524e-03 -3.2248794977674236e-03 2.6624654825133671e-03 -576 -1.6548722404012398e-02 -2.0150952319779192e-02 -7.5393426327858351e-03 -1561 -1.3035688505010271e-04 -3.6987295138750354e-03 9.8712025592508426e-04 -2707 2.2907594793453718e-03 3.6775226825130951e-04 5.0504350979180806e-03 -2709 -7.4608447567076292e-03 3.2415106497936774e-02 -1.8522648545470023e-03 -121 -2.4226309904280732e-03 2.7950236468987557e-03 2.8937150391604894e-03 -3 -8.7935839632102639e-03 2.5205020815012389e-02 7.0374432799304317e-04 -571 -2.0066795193489457e-03 1.5745457981200021e-03 8.0284056359274467e-03 -123 -1.4149913685839431e-04 -1.5340228407664258e-03 1.2306398751895542e-02 -2451 -4.0189288462526812e-02 1.1687872963255753e-02 6.1173907670995049e-03 -36 -3.3903335128073362e-03 -1.2047548807172494e-02 -2.2356713708071765e-02 -1420 2.4032486721098311e-03 -1.5496490852817991e-03 -1.8784309934144676e-03 -1418 1.3268129501171844e-02 -3.9763146993513363e-03 2.1433355043909957e-02 -1079 2.9925324510323235e-02 -3.7159692969197899e-03 -1.9282520963588996e-04 -77 1.1973181022114870e-02 2.0075624313924172e-02 -8.4766017890908971e-03 -103 4.5466768952596758e-03 -3.9327524800771563e-03 -1.4985837096843024e-03 -1422 2.6010114027766384e-02 5.9300014033613598e-03 2.4179230303660905e-02 -573 1.0917670822644460e-02 -2.5517487881924570e-02 1.6757451585231588e-02 -2439 8.8003125354960098e-03 7.6621017681493949e-03 -1.3879491357898772e-02 -2437 -3.7620428523116214e-04 -2.7891965358063376e-04 5.4232041043301002e-03 -2981 -1.4222193440866249e-02 -1.1584414080860575e-02 1.1001024985386135e-02 -76 -1.7460775642941140e-03 6.4915170644112893e-03 -1.2650432581688190e-03 -1417 2.9253008670513921e-04 -4.5279719912352792e-03 3.9602118405407940e-03 -2955 -1.8139822430676782e-02 -1.3533662994460752e-02 -1.1775047731720775e-02 -78 -1.3180720979957273e-02 -4.8402599703125613e-04 -7.9635679276483899e-03 -1419 -2.5231065599540242e-04 -7.6804315997449323e-04 -4.8267341967209079e-03 -2332 -7.4770496222992797e-04 1.4690428652803461e-03 5.0130235914608951e-03 -2334 2.4978404047072533e-02 6.2456429702194404e-03 6.2466223357725390e-04 -2953 -1.2901654219217636e-03 3.0431921092628506e-03 7.6215299143900597e-05 -907 1.9584162119364447e-03 6.2181289257168173e-06 2.0170673383330595e-03 -909 -1.4358699028626572e-02 -6.3038195837065922e-03 1.4362916544261044e-03 -908 9.4288312554076912e-04 1.8008631231252084e-02 -3.6670571917454225e-03 -2412 2.6042904289237750e-03 4.4923557482832140e-03 -7.6418779817327709e-04 -2411 1.4021434057511790e-02 4.3045476898242946e-03 4.6736400188404021e-03 -2410 -1.1439989963611340e-03 -3.3670813946117717e-03 -6.8243674508986201e-04 -2708 1.1422561453795334e-02 -1.3090236466849947e-02 5.5644165610706502e-04 -773 1.9047741837837655e-03 -2.8928002618978894e-02 1.4625781599186006e-02 -60 -4.4987812277287390e-03 1.8487791762251050e-02 -2.4835996048150552e-03 -2438 1.8472305295173391e-02 1.8127865326641693e-03 -3.1693479833601865e-02 -1913 -2.2064920402555459e-02 6.7428687105019402e-03 1.5934286995696798e-03 -105 3.6642777791986297e-02 1.5895942019245487e-02 -2.6523475258188711e-02 -34 -7.1211798680740632e-03 -2.5667113938204404e-03 1.0534742544501803e-03 -2918 1.0780925944386826e-03 3.0326059031803836e-03 -6.8574379084148148e-03 -1655 1.4603477081555728e-02 -3.0982883357175478e-03 1.2569485794800555e-02 -1064 7.5424352230186896e-03 -3.9218634358221607e-03 -1.3505025057767466e-03 -1065 -1.7483271105231166e-02 -2.5151531017309003e-02 -2.6541996081775994e-02 -818 -5.5917690969596130e-03 1.7723380411405545e-02 -5.7394693707250920e-04 -781 -5.6517789204601531e-03 3.0473680271560812e-03 -3.7946639151285886e-03 -783 -3.6486438840682804e-02 -7.2317943710369309e-03 3.7093428298784654e-02 -897 -1.2564216264233121e-03 1.1855054537356685e-02 -2.2034575245272118e-03 -896 8.0234878168118258e-03 -2.0325172562154992e-02 -1.1390290024747802e-02 -2978 -2.2296184590753112e-03 -1.0842404351349724e-02 -1.2858716013587454e-03 -782 -5.0973926602339683e-03 -2.2605601518542896e-02 -1.4067768167095509e-02 -2479 5.6466417442497009e-03 -2.9437714791391681e-04 -2.8573496224918089e-03 -2480 -1.6211447349473305e-02 -1.0995756783251889e-02 -7.3885350481513517e-03 -2481 -3.2869337485441762e-02 1.6740169729938626e-02 1.5013692866522113e-03 -902 -5.6632054147943652e-04 2.7863957820511258e-03 2.9387331146667726e-02 -903 4.8009344319589520e-04 5.1745647053178948e-03 -3.6757534583209003e-02 -1570 -3.0758563978991326e-03 -6.7128698106118864e-05 -3.1299385428831738e-03 -1571 1.9154906414597148e-02 2.7125685791306690e-02 2.8985534076982960e-03 -1572 3.9978152614654041e-03 1.3925288239864520e-02 -3.7388258681899512e-03 -170 -5.1197608115849357e-03 -7.5237581889125837e-03 -9.9285616623199374e-04 -169 4.9520288601518593e-03 1.8841157425664487e-03 -1.2738302146406260e-05 -1484 1.1954373191391643e-02 2.0944295322265988e-03 2.0640243379097010e-02 -2308 -8.8369927409863230e-04 -3.4456551540377493e-03 -1.7715818950968488e-03 -2309 6.3589518923438358e-03 1.4013219927036196e-02 -3.1146211742525444e-03 -2310 -9.8864287473213325e-03 2.3965617759407670e-02 -2.0101180498256013e-02 -917 -8.8482362685859538e-04 -7.2587627639630770e-03 1.2365677489618308e-02 -901 -1.4915925042914995e-03 2.8287200893383864e-03 -2.1486766761488133e-04 -2653 6.6353431761904435e-03 -1.1158754469467683e-03 -5.9503589444844852e-05 -1661 1.0402322792987195e-02 -5.4854514103544662e-03 -1.5264030241570806e-02 -2681 -5.7686997448593942e-03 -1.8509748683751614e-02 -1.3112449277373997e-03 -895 2.4465191744463140e-03 -1.0135901728539844e-03 -3.2121309859923365e-03 -972 5.0018755112059676e-03 5.8802995360698017e-03 1.5339053015051068e-02 -916 -7.9331891951286426e-03 -7.3115655807653567e-04 -1.3307883574226319e-03 -41 -5.0387354969530620e-03 -2.5610506859338963e-02 -1.1211592272779793e-03 -42 3.3958392243653428e-02 1.3045374856724263e-02 -1.7499085236114088e-02 -40 5.5850139936932238e-03 1.2887091374010930e-03 -3.0195085178056601e-03 -918 3.4848555974624058e-02 2.0763236902313086e-02 -2.9112832122002372e-03 -2817 -2.0582438657192507e-02 1.2003310735332420e-03 7.8082766053555177e-03 -2473 -1.4016462313452814e-03 -3.2554893302181418e-03 -4.6452634884071222e-04 -1394 9.1312525346722000e-03 2.6510690854646152e-02 -5.5079546393634301e-03 -182 -1.3105792739018976e-02 1.5676470685643967e-02 -1.6548378095178447e-02 -1929 -2.2456903724687394e-02 -6.7701217055254901e-03 2.1542392458064535e-02 -2735 -2.0553130431682352e-02 -6.8595844620875672e-03 -9.6506497754141347e-03 -693 -3.7016139512107991e-02 -2.0202697889371412e-02 -3.7756045132694700e-03 -81 2.6544847396232807e-02 2.9678598693344961e-03 2.2584746074881776e-04 -79 4.6140636337626776e-03 3.3507434196805613e-03 5.2356433849087289e-03 -1094 -6.3197813006128905e-03 -4.8991237987299312e-03 1.4026584701596321e-02 -2154 6.8253472826344010e-03 -1.2255587563593079e-03 1.0633106752305284e-02 -1362 4.7456762684485967e-02 6.6117862890253069e-03 -7.7445717470230506e-03 -1635 -1.6110141414043263e-02 9.0074499922563073e-03 2.1314795885553593e-02 -691 -9.9410578859240547e-04 6.5029992545840862e-03 -7.6648399699751166e-04 -1091 8.5209638291558545e-03 3.5344414271677857e-03 1.8002764074739115e-02 -1093 -2.6564534643442190e-04 -2.1982223971778033e-03 -6.1168636866860710e-04 -1092 -2.5227296647178528e-03 3.4134096282270225e-03 1.4834991899459197e-02 -1090 5.4055109637365650e-03 2.6141164681934255e-03 -6.9044151863165574e-03 -2297 -1.5766900040568552e-02 -1.9614757127812067e-02 -2.2348648620050589e-02 -2488 -2.1266462760411446e-03 1.0876431570908556e-03 2.0440778384759320e-03 -2489 4.4009326924329554e-03 9.8702065993167207e-03 -7.0419998135940812e-03 -2490 -3.8376127302814349e-03 -1.4502006340543326e-02 9.2532618368658254e-03 -177 -2.2820763380164175e-02 6.5468898966891120e-03 1.0679645592228591e-02 -2355 -2.1786941528858302e-02 2.9643333961245192e-02 6.2982110602195591e-03 -2344 2.3335486071039596e-04 2.1035011783042900e-03 2.4360615751725287e-03 -2346 7.1845650146767793e-03 -1.5019698038793943e-02 1.1969730086050515e-02 -1095 1.3019253804313175e-02 -2.2989598558731325e-03 -1.3012425379171605e-02 -2353 4.5521817526934950e-03 -3.1755762477985769e-05 -4.1143368987962394e-03 -329 2.3737315362726490e-02 -7.3841932966484808e-03 8.9711243360186838e-03 -328 -6.8834170776374429e-04 3.8950043328250382e-04 -6.7003862582881686e-03 -266 -1.3453442082328728e-03 -8.0556154297914285e-03 2.2313939657216054e-02 -180 -6.5806711621420677e-03 -1.2484112026222547e-02 1.7936003938095867e-02 -1230 -9.3806687490115524e-03 1.8878780425447727e-02 -1.1827199917849286e-02 -1248 -3.6779175105755421e-03 -1.3409302355789512e-02 -2.7731058406097336e-02 -1246 7.2040082936229762e-03 -1.8650568709639645e-03 8.0342826490339503e-05 -1247 -1.6500227397697145e-02 -2.0369603215762706e-02 1.8362099236712347e-02 -325 4.1004645887481143e-03 4.9497260511943047e-03 -4.1855934704944494e-03 -628 -1.5592000402074298e-03 1.4772987774151335e-03 8.3300129941476144e-03 -1228 5.9136525314104123e-03 -5.7322487868122288e-03 -1.8560300250735223e-03 -80 4.2892450209083876e-03 -6.0561809540493399e-03 1.0925051505660215e-02 -1763 8.3212229773795988e-03 -6.0867001315222900e-03 -1.5974845766779468e-02 -1762 6.7875665547368355e-04 -2.0850833653334381e-03 -1.8852843537410140e-03 -365 3.4763606747051949e-03 -4.8907184380076133e-03 8.5678622831761864e-03 -364 -5.5391416790819478e-03 -3.4115354810668047e-03 7.7339192888767208e-04 -483 2.1261999602266136e-02 -1.6032255960220989e-03 -2.3018158006238403e-02 -2774 1.8105025439830464e-02 -1.1065571994430944e-03 -5.7820365715129341e-03 -1865 1.3610989857924818e-02 -1.7333141819699999e-02 6.2655939965649363e-03 -1864 7.3776288749346887e-03 6.1145490845966903e-03 2.9701843441843298e-03 -366 -1.1855360479122157e-02 9.3021636920654939e-03 -1.3603640600122632e-02 -2045 4.5355733626543347e-03 -5.6884780105421577e-03 3.1440644078238877e-03 -1866 -1.6831603751205283e-02 -4.1167486121419534e-05 -1.0590857739740986e-02 -1048 -3.3891104489883811e-03 4.3851219638059132e-03 6.0038626808906212e-03 -2773 -3.8703554413339392e-03 5.2353004925434800e-03 4.1600010148787649e-03 -1293 -1.9618374765838865e-02 -1.9915987051042697e-02 1.9835581080230275e-02 -1775 1.9773291841864042e-02 5.9425227874859909e-03 -5.3194949469559660e-03 -1291 -2.2394938415184413e-03 -4.2349256180848572e-03 -4.5908838236188420e-03 -1292 1.8372800014619869e-02 2.4587214501891538e-03 -8.7337859237539839e-03 -2627 -9.5921835265773293e-03 2.6198474004930538e-02 3.2065471236011507e-02 -2626 1.6206783607944403e-03 -2.6781062369356115e-04 2.8278884457376787e-03 -482 2.3441914091362312e-03 3.5489326450828720e-03 -1.5591135210570687e-02 -2064 -7.7431243111717400e-03 -3.1282690495500878e-02 -1.3579736747771421e-02 -2636 -1.3104507010941310e-02 -6.3428129426489326e-03 -1.7218270742550397e-02 -2635 4.3584352885184377e-04 -4.4792460552725566e-03 -5.5318502238481861e-03 -2834 -3.9778603751131330e-03 1.3090711585853993e-02 -1.7646338810645109e-03 -2062 1.4240072461238013e-04 9.9375429352511579e-04 -5.1287055424133251e-03 -2628 -2.3376133251732387e-03 3.7932052966363414e-03 1.9592215901111820e-02 -246 4.9512401800326043e-03 1.7622005314356346e-02 2.0406410626426903e-02 -318 3.7617180513764064e-03 1.4548445208958790e-02 3.6012852518799189e-02 -1774 -2.9866074276964478e-03 3.7254276301090369e-03 1.1301463418951032e-03 -481 -4.5422122229898543e-03 -1.9267574283674280e-03 2.7372514652091468e-03 -2690 1.3172217950898249e-02 1.0756547331520695e-02 -1.4595603258503198e-02 -2571 3.0716786801088268e-02 -1.2780556246945605e-02 -5.4294590812289135e-03 -2345 1.1785732561545092e-02 7.4156014477565870e-03 -4.3004011574697878e-03 -1458 -1.7042749835588865e-02 -3.8393529707986776e-02 1.2486537661686867e-02 -274 -3.6747264097061516e-04 2.0107205854206934e-03 -1.0318128591436401e-03 -2930 5.7878407059103916e-03 2.1594838951011965e-02 1.5996566650477117e-02 -1456 8.2405313743661914e-03 3.3579815297821625e-03 -3.2633758541210606e-03 -528 1.4584847611510776e-02 4.9926996577814168e-03 -4.4839392856504817e-03 -1244 -2.1122402302931019e-02 4.8035394642096296e-04 -3.6186753557078145e-04 -181 4.7485460855018575e-03 4.1771896170918754e-03 -8.1059840728829220e-03 -1243 2.9811897522284210e-03 -1.0939612824123971e-03 3.3644889466710932e-03 -282 6.2144993253412332e-03 -1.8591881257060780e-02 -1.7564572235546767e-02 -1245 2.3321845019917891e-02 1.6908571556450088e-02 -8.6699252816110888e-03 -280 1.0088538196678005e-02 -4.5678203912178361e-03 -5.4206005137599905e-03 -281 1.0365284402494883e-04 -1.6162153527873587e-02 1.2196581569288566e-02 -2957 8.7243870303494730e-03 -1.1125069933926909e-02 2.5637482954422920e-03 -2655 -1.0582620543533771e-02 4.7265914367665470e-03 7.1782415796581775e-03 -1276 6.1810683728547738e-04 4.0083657014783405e-03 -7.4258943753589140e-04 -1278 6.0319342835973280e-03 -1.5472819659905617e-02 -4.2954970719131591e-03 -1277 -7.8627523099999864e-03 5.4656473579739896e-03 8.3512018311762744e-03 -1289 -1.3204483154587218e-02 1.1724057859609853e-02 -5.0003538830218170e-03 -1288 5.1502076187023077e-03 -3.5760342233563262e-04 -2.6283794799026208e-03 -1290 -4.0288133381478405e-03 -2.0200629637506448e-03 1.9195914069166448e-02 -764 -2.0793403743542278e-02 3.9105272161387900e-02 -6.0194426697274999e-03 -512 1.0398424208427052e-02 1.5272600270117901e-02 -1.2405845009345270e-03 -1914 -3.0672076916913951e-02 -1.8995134038416090e-02 9.5643431484348663e-03 -244 -3.6228070299702180e-04 4.4744876570948847e-03 5.0981962468493042e-03 -2742 -3.6243227476262192e-02 6.6626988977649621e-03 1.3049174449716204e-02 -2633 1.5482184402658045e-02 1.3759458514271223e-02 -1.0104224537439050e-02 -2632 -2.9722496076256956e-03 -1.1599663718670451e-03 8.8745580262412411e-05 -1179 4.3212234437489888e-03 -2.4094203999389070e-02 -3.0973968050631427e-02 -2781 -3.5197472384577086e-03 -9.8411427591244185e-03 -2.9588871225607206e-02 -2779 -1.7487475489395931e-03 -3.2485863220144576e-03 -2.1040391651854155e-03 -1434 7.2793925848826501e-03 -1.3278532508280379e-02 -1.4058024294274243e-02 -2741 -1.7730503415316134e-02 -6.4845227284837312e-03 1.1056430400084522e-02 -2740 -4.1323558058597538e-03 3.7471993229867672e-03 -4.2113298759717662e-03 -1433 -2.2184408524046160e-02 -1.5198070222113360e-02 1.3523461188955454e-02 -1432 3.6082767960686152e-03 2.8859535715247187e-03 2.9883755470872268e-03 -1205 -3.6472968663822776e-02 -1.2593670378915937e-03 -1.2618519740911906e-02 -1137 8.8604854329568834e-03 -7.4322775655583364e-03 -1.6005269726556515e-02 -1453 2.2258879428874757e-03 -4.8817052486459980e-03 1.4521041790436279e-03 -2637 -2.1441764843602232e-03 -6.7151416246432043e-03 1.0181215073901897e-02 -1468 1.9833127246066651e-03 -1.8530526075639484e-03 1.3764136198458135e-03 -861 8.3150477872439114e-03 -5.7517783679093349e-03 -1.9516059384382521e-02 -608 -1.6550522374275432e-02 -7.7436710493453444e-03 -5.9344029119515985e-03 -630 -3.6571044085894422e-03 -1.0810569692866411e-02 2.2232161691573605e-03 -1660 1.1870594627683422e-03 2.9046300852082329e-03 9.5608873239820991e-04 -1662 4.6920989237459691e-04 -1.4403595673585578e-02 2.0855754936864718e-02 -859 -6.7428808074274406e-03 1.0901329477516991e-03 3.0774425601554360e-03 -275 -7.0109303367550235e-03 4.6027571813972053e-03 -4.7089043818049634e-03 -786 3.2953644132776953e-02 9.1850931640584214e-03 7.7396729865015102e-03 -784 -2.6273846034343806e-03 4.7377759048176921e-04 6.8466517179395564e-03 -195 -3.2691881037184289e-02 -3.3084829689153675e-02 2.2698335687270231e-03 -953 -4.3125013291101747e-03 2.5382795129610149e-02 -3.8045962189891570e-02 -1189 -4.9911608242301829e-03 2.7860638155135439e-03 -6.1324853879771830e-04 -1733 -3.9162262427656767e-02 -5.2536784784647230e-03 5.7034120747613323e-03 -2847 -1.6228481674484607e-02 9.8878274308960967e-03 4.1032780668547866e-03 -547 -1.9908753806153830e-03 2.9414637340086972e-03 -7.5343237381033058e-03 -548 9.4665598855592800e-04 -2.0875051888847484e-02 -3.3946248410790807e-03 -1191 1.4772519432809226e-02 1.4327983163673084e-02 -8.5434362122295930e-03 -708 2.5514292885741158e-02 -8.2107877895767397e-03 -2.2032313520080641e-03 -2719 6.5805740520221380e-03 2.9723107254894993e-03 1.1371843687640285e-03 -449 1.7776588548990224e-02 5.4158328480670591e-03 -4.2666372246754920e-03 -2845 -4.4507894791881696e-04 -1.7148437062390112e-03 -7.1485653682634394e-04 -2846 -5.6245621676270056e-03 -2.3562312195170203e-03 -1.8919306851799572e-02 -1743 -2.1670773359247857e-03 -2.9747479945490415e-02 -1.0180491637582632e-02 -535 -1.7105135996892506e-03 -4.1112756953383088e-03 -4.4079102753324818e-03 -536 4.2358488637070257e-02 -2.1713606574098019e-02 1.3453543085569616e-02 -660 -2.7919313346541998e-02 -6.0896887447282411e-03 1.1976197641360570e-02 -659 3.6926006786093077e-02 1.4520209705490020e-02 -5.1070284587004843e-03 -658 3.7861213823364845e-03 1.1214536955885417e-03 3.8969510005251876e-03 -2721 5.6601891071281793e-04 4.0698784277937074e-03 -1.0496598593099959e-02 -2406 4.4122472366510054e-04 1.9791306583453690e-02 3.0033242010783105e-02 -2634 -1.2135404820805645e-02 -1.0499099571777755e-02 -1.0783336800353083e-02 -852 1.9035651806801241e-02 -1.5968558480495748e-02 1.2843304970506682e-02 -851 -4.4130798515086651e-03 2.6738125082214665e-03 5.0469928429191712e-03 -850 4.8767096593231194e-03 -1.6712883540005567e-03 5.8353786296241146e-03 -1465 1.2246423205591063e-03 -2.2602661426511460e-03 -2.8220533350207175e-03 -1470 3.7405011328932550e-02 1.2942563613887214e-02 7.4699155869768601e-03 -860 1.2856398089979182e-02 6.9315664479201984e-03 -9.2161864546223531e-03 -1970 -1.0699652049918833e-02 3.4910074734307496e-02 3.9872130546758741e-02 -679 -1.4232308127758327e-03 8.0121686473175607e-03 -4.1680369201252615e-03 -2138 -2.7747227398704447e-02 5.4286798764229234e-03 3.0272952809976832e-03 -2137 4.7268359810960850e-03 3.6065607740093522e-03 -3.7296474114164760e-03 -741 -1.5988628109430615e-02 -1.7606280843545971e-02 -2.1186141672947006e-02 -1445 -4.3211403950804547e-03 1.2284309069766203e-02 -1.3016023181815954e-02 -739 -2.9659420479111343e-03 -9.1792208212271883e-04 -2.0739152004819413e-03 -1689 6.8736882872264078e-03 -3.2131927299005200e-02 7.0097152723380468e-03 -2664 -9.5369105494283665e-03 2.1047903084073668e-02 -1.0646229663456941e-02 -740 9.3499478229664944e-03 1.4273649542414640e-02 1.6615357130172304e-02 -1586 -1.2454499628960137e-02 -9.6304519335860556e-03 -3.4825198014332190e-02 -681 5.8109295108133754e-03 -3.4847147094559487e-02 2.6263666439070416e-03 -1360 -5.7173434881351475e-03 2.0582996226949867e-03 2.4029761724853782e-03 -2491 2.5597548440275072e-03 -4.0991373317540332e-03 2.7693724591721916e-03 -1010 2.1147103156276083e-02 1.0470425145084965e-02 3.9030064715801054e-03 -1969 -6.2115791400940614e-04 2.2608472608228016e-03 -2.8256694487349978e-03 -1361 -8.6773257700883104e-03 -1.1034215391630353e-02 -1.1636267471814303e-02 -2663 2.5919877165524685e-02 3.5151600778196200e-02 -7.0170422778215880e-03 -2281 5.3787919743248976e-03 7.1315058885211601e-03 3.8496798091407713e-04 -111 2.6986658995267202e-02 1.0892489507614558e-02 8.3728126525228277e-03 -337 -3.2590810463984651e-04 -2.3175790452530471e-03 8.5280899773399772e-03 -338 -2.1156743380126030e-02 -5.0670814968726977e-03 3.2225636331252002e-03 -339 -1.5878367160878357e-02 -1.9323522677309708e-02 -8.2162664346967413e-04 -2283 1.9263478354209780e-02 2.4110275940885963e-02 -3.5048206918879715e-03 -2662 -4.6620944030323699e-03 7.2097796957105199e-03 -1.6669351587893988e-03 -109 -7.4055717567954836e-04 -6.8847158687677460e-05 -2.9487486317256477e-03 -110 -9.7777465986546332e-03 9.3638505416940038e-03 2.9585243380622930e-02 -2475 -2.5385488406471091e-02 2.0863009920618944e-02 -2.2977387644031955e-02 -2492 7.1448935127986475e-03 6.7160930795874089e-03 1.8443719891605839e-02 -2487 -1.4302498546024181e-02 -6.9869629881601843e-04 2.1272306688457646e-02 -2485 -5.4359200675684772e-03 -3.6098088712704459e-03 5.0564694505295842e-04 -912 -3.1218382085228071e-02 -2.8884419372494245e-02 5.9668447097345574e-03 -92 -1.7692732566193810e-02 -8.4937209500716721e-03 -8.7799966284961908e-03 -91 -7.3549242390854642e-04 -3.8001756512843750e-04 3.7201079096697114e-03 -575 1.7160678855141654e-02 -1.2729456026217587e-02 1.0045525545469997e-02 -1688 3.7226195281654679e-03 3.4943542395855766e-02 1.3135138850841232e-02 -2831 -6.4919570044533041e-04 -1.2541613420464138e-02 -8.8966568879003498e-03 -2152 -4.0955804743945667e-03 9.2473764366373563e-03 5.9478639061605581e-04 -2153 -8.4351499640862998e-03 -1.8917395200131672e-03 1.4627968073962912e-02 -2037 -1.2533040135478851e-02 2.8919821170870257e-02 1.7937333079534018e-02 -894 4.2028384937498921e-03 -5.2024452037806937e-03 -2.1140200652403733e-02 -188 1.2468570014242225e-02 5.9234917246290507e-03 -2.8443767327563339e-02 -1687 -3.0565683682590877e-03 1.8774488104826773e-04 -1.4262832122429105e-03 -1795 -4.1642394191722240e-03 -2.6271135230744765e-03 1.9566444676784826e-04 -1878 -2.7202799820773359e-02 -3.0460354043162737e-04 -1.0157293394663217e-02 -1242 1.7132243453834811e-03 -2.0499381526310669e-02 3.8433309384571950e-02 -172 -1.8497005959287056e-03 -4.1906993868647512e-03 1.0122456375422571e-04 -174 3.9908750823737836e-03 8.9408539709800346e-03 -1.0904454162368543e-02 -173 1.5550705453190913e-02 -3.6566808857738137e-02 -1.9344323784572078e-02 -2289 1.3796138726741850e-02 5.1709071542319129e-02 1.9596752194736975e-02 -1874 -1.8252420560206765e-02 2.4958942790714650e-03 1.4300352393005313e-02 -1875 1.3395571613568271e-02 -7.5245976276390970e-03 -8.0362257578097656e-03 -1873 -2.1797843338104868e-03 2.6466302594077024e-03 -1.2953133845526512e-03 -2944 -1.2352118591524236e-03 2.7413828950406229e-03 -1.9960749548988280e-03 -2287 5.6876605675407737e-03 2.1297644792604375e-03 2.0756412083650579e-03 -1796 1.6219776909372013e-03 5.4954237843159279e-04 5.3381150226979313e-03 -171 6.3337070774421318e-03 -8.6337086448586130e-03 9.4555728670897121e-04 -2830 -1.1077253893366236e-03 -8.7947176837225513e-03 1.5503466266213826e-03 -1274 -2.0735501825375055e-03 4.5132770520206946e-03 4.8740718619977915e-03 -2457 -7.9198152075172397e-03 7.4840540390230543e-03 8.6936196749915848e-03 -1017 6.9019608798032749e-03 -1.2243743533073803e-02 -2.3498350583642181e-02 -2455 6.1317307141924475e-03 -2.2452908517706953e-03 1.3026143380680687e-03 -2456 5.2065684189476266e-03 1.2122661901466407e-02 3.7360165682287822e-03 -1129 3.5921859909392598e-03 -2.2562191464444744e-03 -4.4006785675376303e-04 -1130 -2.3386509260704829e-02 6.4981568612600552e-03 2.5688025075895687e-03 -1108 -1.9315710739583138e-03 2.1305520948475998e-03 -1.7495866413599112e-03 -2486 -1.0209879088455903e-03 7.2796670014389671e-03 2.4717306707784367e-02 -1309 -6.8424283339068885e-03 8.7094219882249263e-04 7.6277044724718695e-04 -1080 -1.9838775656156847e-02 -4.9508199694707038e-03 -3.0844121672267695e-02 -1275 1.1231374092837769e-04 -5.7555303168643529e-04 9.6800547967696923e-03 -1273 8.6448958174475780e-03 6.5245286724652718e-04 5.5910992129781035e-03 -545 -1.7069039743626162e-02 -3.1570779207516060e-02 9.3158388899766097e-03 -1015 -1.0313592339597358e-03 2.4924553108604526e-03 -8.6587851783946450e-03 -1016 -1.4910775354335435e-02 -2.4033552299946087e-03 6.3563194419486782e-03 -2832 2.5269256623349523e-03 2.5765493273366682e-03 2.0476916013967429e-02 -227 -1.8791018525090756e-04 1.4087304832721761e-02 8.2802303194788596e-03 -2915 -7.7971600611935424e-03 3.8338746477102701e-03 2.3967459173737646e-02 -2639 2.5984930380557762e-02 1.6365338368687487e-02 -1.1234055187283529e-02 -1193 3.0830402529270821e-02 -8.2918076710815254e-03 -2.7796049642717837e-02 -1732 -7.7909965911530975e-03 1.6852479465048202e-03 -2.5871285603473759e-03 -1538 3.1844931350977451e-03 1.6080910793238562e-02 1.6172150296133739e-02 -1073 1.6611728179432600e-02 -2.0834405385035355e-02 -7.6252259690660646e-03 -1227 -1.0676688935112384e-02 2.9674750178107275e-02 -1.3620997819770893e-02 -1226 -2.5903879875978718e-02 -4.5118540814920388e-03 -2.9548936466070843e-02 -2063 1.0059257757346375e-02 -1.4996743272177968e-02 -5.5776319884876680e-03 -1172 6.0057715761240070e-03 -1.0551852044636129e-03 -3.6385882254489363e-03 -1317 1.1241713135627796e-02 9.7764544117071150e-03 1.0026643130741954e-02 -1315 1.2101568798494312e-03 9.8008503021897141e-03 -2.4862593683677510e-03 -1225 -4.7707157897010695e-05 -2.3357226945720647e-04 4.8362457561374689e-03 -2307 7.4570313918109711e-03 -2.0304188431099532e-02 4.1728157268162744e-02 -2305 3.6817229086607574e-04 -8.3702628554082638e-04 1.7650213215373767e-03 -1043 8.2219257268865229e-03 -2.4105314205083816e-03 -3.5734323921992918e-03 -1072 2.6838888659300084e-03 -6.4037002953845764e-04 3.6648709294521487e-03 -2354 2.4543093974888883e-02 1.9010075038894882e-02 1.6775434511505097e-02 -1042 -6.2376553883692568e-04 -2.4403989776372605e-03 -1.0948130434513103e-03 -2689 -4.7793842511057233e-03 9.9380823017571063e-03 -6.3300100934322173e-03 -1044 1.0428583261397621e-02 -3.6697387843465143e-02 -1.4453882225085791e-04 -2638 1.6968429351972556e-03 3.7888200820215953e-04 6.5397407298335751e-03 -2640 9.4066766040686346e-03 3.4622238212644645e-02 -1.2790274080175482e-02 -402 7.8372088168650444e-03 5.0826852634634481e-03 1.5458931631574991e-02 -2691 -3.8829935502878560e-03 1.7513440806065282e-02 -4.5521316143688614e-03 -456 5.1894751300049337e-03 -2.2260991347235835e-02 3.1676630882069546e-03 -454 8.7329510098408634e-03 2.5807042573140174e-03 -2.9314487225996604e-03 -1157 -2.3665398288814379e-02 7.9390435630888150e-03 2.7477092375628433e-02 -455 -1.6225023294376518e-02 -4.5016871650336993e-03 2.8326357490292265e-02 -1074 -1.3139099764107412e-02 1.0597313892498234e-02 -7.0851095902540939e-03 -1158 1.7733290101678088e-02 1.3636367770838147e-02 1.0183773306061617e-02 -1156 4.3617404654767485e-03 3.2655310139494717e-04 5.3632056493730920e-03 -494 7.1984936568245169e-03 5.0994032996131960e-03 4.6444526954874554e-02 -495 9.6243382933705150e-03 -7.5098436458031293e-03 -3.7376657398778741e-03 -493 -2.4681687167118424e-03 4.9650434863484950e-03 -3.2330453537326755e-03 -400 -2.1269732143962255e-03 -4.1996736714421719e-04 1.8320751152413003e-03 -2526 -1.7219487343115706e-03 1.2419283746464423e-02 -1.9758978305803528e-02 -1192 -2.1991685835114922e-03 -4.6998683433519010e-03 -5.7789667872228476e-03 -1741 8.9600308774273364e-03 6.7124612680319736e-03 -5.8432270996913900e-03 -1019 -4.7015122456818817e-03 2.4666808038983140e-03 1.4790997637403753e-02 -1457 3.0645263259670961e-02 1.5717500480514329e-02 3.0776494728704133e-02 -429 -7.3708823732975453e-03 1.1629422959798876e-02 -3.0090111168123214e-04 -245 4.6764128425368879e-03 1.4723977120318607e-02 -5.9393397613362849e-03 -2945 5.4660588436612574e-03 -1.1897254626288855e-02 -1.5319325420092315e-02 -1110 -2.6152655358642075e-02 1.3421484089997578e-02 -2.2711936709524743e-02 -1946 1.0589515268966579e-02 2.9314041762207626e-02 -1.7276506130581397e-02 -2035 2.5031843990441943e-03 -3.1959643804389225e-03 -2.5648886678862276e-03 -2 -2.2541461653205072e-02 -1.9931670317505434e-04 2.4457929664887790e-02 -1486 -1.7975290338514255e-03 6.5088773911721473e-03 -3.2715180597781331e-03 -2084 -1.9435861206448261e-03 1.0156954449025456e-03 -5.5640494031990321e-03 -1885 -5.5125359791166704e-03 -7.4310918259498510e-03 -1.9766883620285524e-03 -1886 -4.9234983040949828e-03 -5.6968013770040014e-03 8.2227570091734784e-04 -2264 5.6818209823686072e-03 1.2449421423831555e-02 -2.3173612977829806e-02 -1359 3.2770455948251044e-02 -2.1984202045289704e-02 -2.3995426656725563e-02 -1014 6.0476048407866155e-03 2.1803356536307727e-02 -1.3663536596663346e-02 -2736 5.6030536805088136e-03 -4.7634706148503786e-03 6.2168948418780809e-03 -2263 3.1239859791876638e-03 2.0119486619341962e-03 -2.6389926975626658e-03 -1012 -2.2401096024199759e-04 5.3668046730026130e-03 -3.7424181738218527e-03 -2265 8.3706743277698302e-03 -1.3102182060807042e-02 -4.0946583240959516e-03 -1013 1.9636683864338645e-03 1.8819177057876120e-02 1.1149854979260914e-02 -2954 -3.9793965186145745e-03 1.2673740079580307e-02 3.1355154698869824e-03 -2755 -6.0709942125580976e-03 -2.6354190361422797e-03 -6.1273133412653481e-03 -1184 -8.9191001893144783e-03 1.5661250785874669e-02 3.9822711575505248e-04 -2757 2.0042076281554484e-02 8.2155191754247885e-03 -1.9363675911554606e-02 -1185 -1.8498277544906178e-03 -3.2048124953010012e-03 -1.1927287534294300e-02 -2076 1.9203357744412123e-02 4.7726348907917004e-03 -1.6935495766678245e-03 -1183 2.9144596159067912e-03 -3.6216328891372188e-03 1.8739815459242796e-03 -2074 -3.0622056635480001e-03 8.7410067846253429e-03 6.0729208570981102e-03 -2075 1.5182108295800401e-02 -6.9493498055133753e-03 -4.5902082844991997e-02 -2882 -8.6287180637458979e-03 -3.0399286863781686e-02 -4.3317307905553198e-03 -683 -1.1659222169577778e-02 1.2092028039310811e-03 9.1376064245027901e-03 -684 -3.5030775664169685e-02 -4.2079098222707698e-03 8.8053216879931673e-03 -682 5.7240847272792706e-03 -1.3482071349595664e-03 2.9158962575968933e-03 -2883 1.3264266278369210e-03 -1.0773912859900856e-03 -8.6292634549107010e-03 -2881 -4.4575240048984365e-04 -6.5752354605349769e-03 -4.2333937241803860e-03 -1206 3.0974997256097987e-02 1.5913720278779561e-02 -8.8473631754881019e-03 -1204 3.0261899409225711e-03 -1.8414204697449667e-03 1.0268315731249017e-03 -572 -9.1881161542274967e-03 -4.8972210344086151e-03 1.1209395975377269e-02 -427 -2.1136849032086812e-03 4.3457777864064389e-04 -6.8316452246992652e-03 -911 3.8653615245513870e-03 1.2439545641168594e-04 8.2810712472063622e-03 -428 2.0194217187565911e-03 -8.9711760042613629e-03 -9.0145296553360149e-03 -2331 -2.6662825963070604e-02 -1.6173321524288489e-02 6.9140973756637312e-03 -289 -4.9209277322048613e-03 1.7645727180702267e-04 5.7463236962354081e-03 -2143 5.1313311015788333e-03 5.0027675893803084e-03 -1.6406964647072307e-03 -2139 -2.0103754751060747e-03 1.7421250735465504e-02 1.0658967152585394e-02 -2337 -2.1693169069774976e-02 9.8827350986434026e-03 6.0878344735229030e-04 -1467 -1.5446683437512624e-02 -2.2514156287727571e-03 -4.8826219625951869e-03 -1455 -1.6958330987555101e-02 1.0063680906435557e-02 5.5675401344947436e-03 -183 -1.7915200299992336e-02 -1.6832215010178019e-02 -7.1550762241165272e-03 -677 7.6208451805176705e-03 9.6731082200218858e-03 2.1735565658314616e-02 -1106 5.6063892873372385e-04 -8.3482846555474593e-03 1.7102592962536627e-02 -1304 1.9010841452963907e-02 1.9794725907155846e-02 -2.2623520137560724e-02 -1912 2.4944632020693965e-03 -7.6106438210752142e-03 3.1116276020879663e-03 -678 2.0543958222665124e-02 -2.9935507588919565e-04 1.8637600585598126e-02 -910 2.9328432182515674e-04 7.0985143788137150e-03 7.1131159304581009e-05 -676 -2.6138342881227013e-03 -3.6246889221837049e-03 1.5097074493939217e-03 -1303 2.5845942956603148e-03 -1.8080777693746488e-03 3.3548004368044674e-03 -290 -1.2343278068771507e-02 6.3270368301294360e-03 1.6649863494831118e-02 -2171 9.0501543891393556e-03 3.2219605181495143e-04 -1.1374308730265646e-02 -2145 2.3426267727972253e-02 1.6263658350451750e-03 1.3796740253793537e-02 -1945 -3.0120349419439374e-04 6.3642551353807510e-03 -6.8251678100533508e-03 -93 -1.0682953007507216e-02 3.4568226534861524e-02 3.6024095471688132e-02 -1947 2.3944335487766466e-03 1.6142508086658316e-04 7.7113267332186864e-03 -2282 -1.2290481121428546e-04 1.0831980543239673e-02 -1.0032053361617735e-02 -291 1.3539730378919064e-02 1.6217020516237749e-02 1.2411059984293553e-02 -2144 2.1916501833217111e-02 2.8215134297284894e-02 1.3164267564203963e-02 -1305 -3.1751220776281820e-02 1.7929062860954456e-02 -1.8699317398496076e-02 -1466 -2.9145965054391235e-03 -1.4442560584436670e-04 3.0966568432621341e-02 -2734 -4.4008469063099411e-04 2.0952697164297318e-03 -5.0953079929101789e-03 -1238 -3.8432357091853248e-02 1.2652064672464493e-02 -3.4496708755015347e-03 -2569 -2.8903363198509438e-03 1.9459541730722685e-03 -1.0497971365934164e-03 -1488 2.1745469500136172e-02 -2.3786724600357370e-02 1.5848539815969027e-02 -1967 2.4265040047830273e-02 9.4997500447541964e-03 3.6699434602122157e-03 -178 3.4628601726411968e-03 6.6109783342707239e-03 -6.6190814282860791e-03 -2216 -1.1360758894701274e-03 1.0371556405460539e-02 2.5915904446357056e-02 -107 9.8501854312711065e-03 3.0344017025214572e-03 -6.5464575543236576e-03 -1596 5.5524713177720793e-03 -8.1425862073603254e-03 -8.6594687164341308e-03 -2812 -3.0218539276471753e-03 3.4031130755130842e-03 -3.8834944303976142e-03 -942 -2.4918750255709960e-02 -4.0518415359834933e-03 -9.7225202016915282e-03 -2476 -3.9639727293720832e-03 1.6575475227265728e-03 -7.1893133703351073e-03 -602 -4.6697297109374678e-03 2.8909462133286698e-02 -2.2801299937214390e-02 -2829 -5.2153907672944106e-04 3.0247220539290444e-02 7.2129097536260140e-03 -2841 2.2011106131999882e-03 -1.1998252940406575e-02 2.3398900877726399e-02 -2565 -1.1298231754483646e-02 1.3255436931967119e-02 1.1057758919723229e-02 -2563 -3.7536118072487449e-03 -5.7753644652896498e-04 3.8790058398922439e-03 -2564 -1.1536208937334166e-02 -3.2719364262032507e-03 2.2942735356924721e-02 -2874 5.5538306127043344e-03 1.6162950965242357e-03 4.0435748169840205e-02 -1062 -4.4374919431088219e-03 5.0895197629639410e-03 1.1817550921795874e-03 -2453 -1.8409742815820755e-04 2.4159699648991168e-03 -2.6294927049556899e-02 -2452 1.0525013702009573e-02 -1.3223168877647966e-03 -6.3954762316291436e-04 -810 3.4421731292534319e-03 2.2445420864932640e-02 -1.2801449351982927e-02 -2467 2.7712221609908039e-03 8.2749714618479122e-04 2.9177182524161107e-03 -2374 -1.8715143010404388e-05 1.9524879448162562e-03 -2.2009884521578802e-03 -2376 -9.1482596881742543e-03 5.0350685677488819e-03 1.4075479255874696e-03 -809 -2.5452456743826814e-02 -2.7145605117797438e-02 -1.8792648736644872e-02 -957 -1.3564945393910092e-02 2.9363585305713304e-03 -4.9935914966251172e-03 -955 5.6345308235848587e-03 3.6917467945155923e-03 4.4827266703900675e-03 -956 8.4040882461682460e-03 8.3029618991525885e-03 3.5227548053130095e-02 -2880 -6.1038531307743334e-03 1.1163993347740365e-02 3.3669452366996540e-02 -2448 2.2367904771704836e-02 -9.6144167290218834e-03 -1.1407799629876609e-02 -581 4.7228601223219188e-03 1.1654210441129131e-02 6.5300373631030830e-03 -2872 -1.4036740380388873e-04 2.0607311907072452e-03 -4.3074336097224152e-03 -2583 -1.4933306692696045e-02 -1.3639375820914405e-02 -1.5733097506159182e-02 -2276 -2.6409854762685044e-03 -3.5893387396427495e-04 2.6649165402750086e-02 -1711 2.1408969441129131e-03 -3.1339175146590996e-03 3.5428574260574753e-03 -570 -3.3660652119362968e-03 1.1340511271610178e-02 3.6433084770570814e-03 -1712 8.5504269673022035e-03 3.1686365463731402e-02 1.3019741571301029e-02 -2997 -1.9355244463149273e-02 -4.3727937244498327e-04 3.3277055344217023e-02 -2995 -2.6088017476474701e-04 1.1073724340014280e-03 -2.3690358018129440e-04 -2996 -2.1446277278479274e-02 -5.3622756680811578e-03 -2.8418665989337580e-02 -868 -1.1579713850515109e-05 3.1226708052674149e-03 5.5142021033024943e-03 -2878 2.2598132618457632e-03 -6.7465862376596113e-03 -5.2501347016793510e-03 -635 4.1982515583153567e-03 2.1231000240383600e-03 4.4387359328201407e-03 -634 8.4181719948079074e-04 -2.0299122811541425e-03 -2.3482916941551185e-03 -2115 -8.0252175063283866e-03 1.0497283767581734e-02 4.6403063155131472e-03 -808 7.7694933787367500e-03 -4.3453770924741699e-03 7.5459709934664835e-03 -869 -3.7301560744977869e-03 -2.2243490599213164e-07 -4.2066462396948869e-03 -2879 1.0104921082149774e-02 -3.7504857871530989e-04 -1.6717005730418487e-03 -2929 -8.1978042107770644e-04 7.6534672749384598e-03 -4.4567574461409302e-04 -2931 -1.5099297315495178e-02 -1.1911807091050216e-02 6.6714137498748993e-03 -636 4.2654226094344860e-03 -1.3565080263813062e-02 1.7352583286432591e-02 -870 -1.7354905404511872e-02 5.5626399734435734e-03 -1.7732137287893954e-02 -90 -1.0041349979738660e-02 -4.0525883135453797e-04 -1.0372904009798426e-02 -2113 1.1557706679533446e-02 -4.7673981667668477e-03 -4.6681612459848908e-04 -84 -4.6743911084050245e-03 -1.0509176284888665e-02 -3.8538931490153831e-03 -2446 4.3205226841644634e-04 -3.7467773649893774e-03 -1.4369282562946685e-03 -2442 -4.4865744934751442e-02 -2.0414265445052919e-02 -2.5229830363743551e-02 -2447 -8.2747772214440609e-04 3.5171240425336120e-02 2.7207721456410872e-02 -1800 6.0226214776922830e-03 -1.1705831472055525e-02 1.3118156665111191e-02 -135 -1.2007308619984549e-02 1.8081603187925701e-02 -9.7800543526656465e-03 -2260 -6.1547836485571971e-03 4.3151185661838903e-03 3.1051445228506792e-03 -2459 -3.1040407242818521e-03 -2.2135695291469960e-02 -1.2369143914324462e-02 -1672 1.6331699651040801e-03 1.2594245487822309e-03 5.5297600788422191e-03 -1674 2.1384340417808430e-04 1.0205285705859877e-02 2.6954869367315434e-03 -1673 -3.4130771796332081e-02 7.8485828086203300e-04 1.6989699792017577e-02 -2440 -4.4948120966989006e-03 -2.7245658364231399e-03 3.8728822491152994e-03 -2441 1.5871675526080153e-02 -7.7780521787880908e-03 8.4654964916445058e-03 -979 1.1918131943022732e-03 4.5271539874061923e-03 -7.6921571182437896e-03 -981 -2.1735404163897862e-03 2.3841811146939748e-03 -3.4592373837079521e-03 -2509 9.7150961678218811e-04 -9.0690235000902876e-03 3.2840282359832308e-03 -2494 -8.3744894391398865e-03 -6.1826808034405089e-03 1.5158601883140639e-03 -1972 -1.8764220233563301e-03 -1.9545183041779803e-03 4.7536117895544214e-03 -1097 -4.5042576544368712e-03 -6.0415537372679982e-03 5.9244387172510534e-03 -1096 8.3283161750877070e-04 -1.5504726939260674e-03 3.3001876650279875e-03 -1098 3.7034869904081905e-02 1.9228160676038147e-02 1.8032753935818546e-03 -980 1.4979712016169109e-02 1.8771493569785653e-02 1.9212151390059010e-02 -2511 -6.5513565863279961e-03 7.0048719095163635e-03 1.6956628788341518e-02 -2652 1.9028962692073575e-02 -2.3078345602912203e-02 1.8515156911772832e-02 -2650 -1.6327549397807187e-03 -5.0748401650521037e-03 -1.7224309483745044e-03 -276 4.3492180830020807e-02 -6.3806792408291459e-03 -3.1283761300262285e-03 -1883 1.8045360593466609e-02 7.4388946994768329e-03 1.7570298050333152e-02 -2468 2.2558847816087087e-02 2.9370513052713611e-03 2.7742962543554205e-02 -47 1.5503496951120490e-02 -4.2129896223422086e-02 -2.5976299452287145e-03 -82 1.0267776372528658e-02 3.0105958745117261e-03 5.3981639476138200e-03 -83 6.1192076616590381e-03 -2.6176977887461976e-02 1.1084439293956144e-02 -1799 6.9291809450661192e-03 1.5375264796153492e-02 6.3229218132496920e-03 -2496 6.8183401934192667e-03 -2.8085483997084665e-03 2.0005168718426475e-02 -1083 1.6525492504455029e-02 -1.7768818246554445e-03 1.2089158949396932e-02 -2259 4.2712369011350488e-03 -3.5916548738208045e-03 9.1800633762245225e-03 -605 5.5591188496569143e-03 1.2152326182518201e-03 -6.8443014126315128e-03 -1798 -3.8100707157711368e-03 -2.0192692136820479e-03 -6.5706663314465700e-03 -1973 3.2573067839904811e-05 2.9469295898156573e-03 6.3024237000663102e-03 -2682 -8.4033717397378870e-03 2.0491528623293603e-02 8.7333927489727133e-03 -2177 1.7802326976918411e-02 -1.1616902283463827e-02 -1.7731430110620321e-02 -1861 -5.7282538894495062e-03 -4.7559047561561013e-03 7.7347695558939687e-03 -2498 1.9460339667587596e-03 1.6778551793852460e-03 1.1994789812285333e-02 -2510 2.2392958645140237e-02 -1.6443872506198099e-02 7.1727049222996735e-03 -1200 2.4816972137083143e-02 -2.0263218733266503e-03 3.9398776697799433e-02 -2558 -4.6286293231560235e-02 -5.7531913465684809e-03 2.3345515859508715e-02 -2753 5.0096434707820542e-03 1.1596738031971360e-02 3.7878496611791782e-02 -2752 5.4340904261416618e-03 -2.0243339222722305e-03 -8.4021475595123676e-04 -1198 1.1031632086386260e-03 -6.6284988348713682e-04 -5.0629424056531005e-03 -2754 2.6204183430068268e-02 -3.4079135238347311e-02 1.3721000058427834e-02 -2501 6.4684879187665101e-03 6.2465572452132080e-03 5.9792598772356173e-03 -2500 -1.7109065514564446e-04 1.1460096009424303e-03 8.2376553898428021e-03 -627 8.5538209732368854e-03 -1.4767531018920138e-02 9.7015040350912907e-03 -949 -2.3365186709189537e-03 3.4707773752304795e-04 -5.6385665857690698e-03 -950 7.7441200454656130e-04 -2.6956139556872393e-03 -2.7612373765497785e-03 -951 5.2029444549962812e-03 -2.0565784500655788e-02 -4.4965116805389758e-03 -2502 -2.6046970644990015e-02 6.8968253093394227e-04 1.3374976860606612e-03 -2856 -1.8754504525180887e-02 -1.8059418159097795e-02 -6.7585045212829372e-03 -1896 -5.2212321792131488e-03 -1.8552158385584293e-02 6.9043170183850392e-03 -1894 2.5479414787969762e-03 -6.6986859354188069e-03 -3.2419446118170489e-03 -1153 5.4203046425034258e-04 4.0030769978356077e-04 -6.2453859536055513e-03 -1155 5.2867294868279742e-03 -7.9556123372144152e-03 1.1005959600172706e-02 -1594 1.2683177461211828e-03 -2.4311368193638645e-03 -1.3565790517228453e-03 -1813 -4.0924825895688665e-03 -3.9381830993441246e-03 -1.9592356373734250e-03 -2849 -1.1362750538618085e-02 -1.2171876986730498e-02 1.4409435886513028e-02 -1863 -6.3864621842001550e-03 6.7735358323452056e-03 3.1719599132016057e-03 -2746 -1.5469425405131782e-03 2.7363996734022862e-03 5.1398616888283719e-03 -2670 -1.3812864362881367e-02 2.1705535354043872e-02 1.3509027925839443e-02 -2747 1.1974414150024660e-02 -1.1969197143667895e-03 2.2629408875996047e-03 -1386 6.2671623183169238e-03 2.4823914988914196e-02 6.5677823047085443e-04 -653 -5.1599573752387443e-03 -2.5493478546624680e-02 -6.5434448413505038e-03 -926 7.2669998577159162e-03 1.1446462082948267e-02 -2.1255557636207765e-02 -2965 -6.9717412272180326e-04 -1.5368196713071822e-03 -4.3560463796663363e-03 -2559 -5.9996820377555375e-03 1.0522945102561269e-02 -1.8210455002597035e-03 -2557 -1.3106592683408856e-03 5.1658193362862266e-03 1.1587316076454362e-03 -568 -2.3608167565354280e-03 -5.2891448811488641e-04 4.4025337252297046e-03 -2748 8.2119798044088636e-03 -1.3059140903982263e-02 -6.6157756836727928e-03 -2193 9.7989066353472995e-04 -1.7457755249689455e-03 4.2140914094622346e-03 -2855 -1.8113109673810319e-02 8.0300149462006979e-03 -7.1238616914684558e-04 -1148 2.6451299519906542e-03 -1.8956974803580984e-02 1.7202121014611712e-02 -2835 -2.1664020609240115e-03 -3.7618378045891604e-02 1.1606139127262736e-02 -2854 -5.2915164672356115e-04 4.2915813221700830e-04 -7.5013314811170332e-05 -1895 -1.1479718292546390e-02 9.9463855459351030e-03 1.0601862516128443e-03 -1811 -1.8511299900154887e-02 3.3244944758598631e-03 -3.3711726593162739e-02 -701 1.5346043080904532e-02 2.3562039497479318e-02 3.3422187716060384e-02 -702 -1.4022093162415972e-02 -7.6166831318805759e-03 -1.0644566458015300e-02 -1199 -2.4052163011099952e-02 -6.7151932404091157e-03 -8.0741611036268929e-04 -2922 1.0405846370253661e-02 1.1586910639070554e-02 -2.1674633280361704e-03 -1951 -8.4343392013454049e-04 -4.7799410025748485e-03 -3.1879787442645586e-03 -1953 -3.0491765182806108e-02 -4.2130665850787820e-03 -1.6714681590483338e-02 -1471 -5.4470112012293282e-03 2.0032216409475397e-03 -4.7889757388173482e-04 -1473 1.9042045839505518e-02 2.4700418287907804e-02 1.4933854117461074e-02 -1472 -2.0083231353600047e-03 -1.1545034424755319e-02 -5.2798487075402956e-03 -2848 2.3890484902998653e-03 3.3175821137516482e-03 6.5327339718523696e-04 -2823 6.2875642236274332e-03 -3.5187101840121770e-03 6.3327171050380198e-03 -729 2.0840388706297258e-02 -1.5180749229182331e-02 -1.9362824520812810e-02 -727 4.8850686303507113e-04 5.3985817997914826e-03 -2.4574835335361149e-03 -700 1.3397691204924892e-03 2.2719336711681179e-03 -4.1923598971101844e-03 -1598 1.7061025530195183e-02 3.2222793877908461e-02 -1.0283921833569964e-02 -1597 -3.6497232316577378e-03 -3.1269149254987642e-03 -1.1029988864271244e-03 -2895 1.3514161725960401e-03 2.6090965453763645e-02 9.7900966149702395e-03 -728 -3.9598907649491796e-02 -2.7189973581232887e-02 4.3738079386143238e-03 -812 1.1046023324337564e-02 -1.5971502464727092e-02 1.3310767468809659e-02 -1262 -1.5374242010029232e-03 -1.4763338086030424e-03 2.7304112720278599e-02 -2893 -5.4948038397422601e-05 -3.1230716259123144e-03 -1.8280388127044243e-03 -687 1.1133644362356041e-02 1.4884444941389885e-02 1.8131008183894237e-02 -1261 1.5886816390263596e-03 1.4529604172914599e-04 -6.0133323025452160e-03 -1599 1.5549299797864066e-02 -1.9942922602794243e-02 -4.1801360972183619e-03 -2894 1.8427617353611756e-03 7.6344855353184691e-03 5.3077184126877949e-03 -2920 -1.8255942177424142e-03 -5.0166236414160635e-04 -8.0998813872550069e-04 -1300 2.1068028706022505e-03 -3.4279307890623641e-03 2.0485299054017986e-03 -1302 -4.3217708117377742e-03 -8.9748573564506322e-03 2.9920705703221414e-03 -1149 -2.6583197256627215e-03 1.4660647838653913e-02 -1.1191967427990600e-02 -1916 1.6188153560370774e-02 -1.6659346144415527e-02 -4.9039728423040238e-03 -1915 2.5431057728170572e-03 7.0924300541493571e-03 3.2769957751829387e-03 -1964 8.9409735506434246e-03 -1.9951108263702791e-02 7.1203742374692980e-04 -1909 -1.5786094510882407e-03 -1.0163593447824527e-03 1.4566949236926767e-03 -1923 -1.7572379894547650e-02 -5.6737027189433572e-03 1.5771285922736539e-02 -2939 -4.8117369612183415e-03 1.7125803692995760e-02 2.4777195824699835e-02 -2484 7.3840188390934883e-03 -5.6176473123056153e-03 8.2202001263530465e-03 -1652 -1.7707485788751275e-02 -2.5772373806989914e-02 -2.1162574911061053e-02 -2174 1.3843353726400765e-02 5.0189199014080404e-03 -1.3905398913004168e-03 -1391 -1.7976892064541724e-02 -8.2164763151726106e-03 -3.1155327372177754e-03 -2358 1.1962389517431130e-02 -9.7271836499997939e-03 1.9363457235311177e-02 -2833 3.3048215188704521e-03 7.6705961270973014e-03 3.5948080591960440e-04 -2552 -5.5544587407584728e-03 7.4122175527886521e-03 -1.8313577158800800e-02 -2551 4.3408217803329544e-03 7.8200534552903009e-04 -5.3350187765316426e-04 -2671 2.6790167214135489e-03 -2.0248975073625321e-03 -5.0151848159576224e-03 -2553 1.9007600181814376e-02 -4.3600306151209784e-03 2.0901269161671416e-02 -2673 2.4015000235925170e-02 6.4278791086091573e-03 -7.7374903490316739e-03 -1339 4.8524467350900850e-03 2.8722994673092898e-03 7.0777696063644693e-04 -1340 1.8456660392412456e-02 1.5549482298136640e-02 -2.0103841732711292e-02 -1341 2.0104579822004514e-02 -3.5520744334359717e-03 -2.7578314136694877e-02 -133 -3.7601056411361712e-03 -5.3748495605671180e-03 2.9239870134701576e-03 -2288 -9.2972144649410926e-04 5.5180074157998799e-03 -2.3328951262108110e-02 -88 1.5682732986040844e-03 3.4388152718994899e-03 1.5981450983016733e-03 -2147 -2.9905487444098919e-02 1.0728812982508352e-03 -2.8650000235533036e-02 -2148 1.5464696167331300e-02 5.5414910916817715e-03 -6.5546931084799805e-04 -2146 -1.8230678416775749e-03 3.3091821081515298e-03 1.3568461825002137e-04 -654 -7.0384284164320488e-03 7.4231172912066256e-03 1.2263992988172196e-02 -1877 -3.0189855795430938e-02 1.1319730392311909e-02 5.2039456023995255e-02 -651 1.2026980906214166e-02 -1.8184435088736469e-03 6.6623644688027141e-03 -134 -1.0489711303413531e-02 1.2459192226358927e-02 -2.3887395358859172e-03 -2275 7.5864908123545713e-05 -7.2816572565102535e-03 -3.0071220118254530e-03 -2173 -2.2699626277190034e-03 -3.7104368157424711e-03 9.5110028364115264e-04 -89 1.2952534832102671e-02 -9.1357989414003714e-03 -7.6678860707874857e-03 -1392 -2.4023431454191543e-02 1.8684899429111227e-02 -2.4651396025691094e-02 -1974 9.1978048668495370e-03 5.1342609952406137e-03 3.8199554563246125e-03 -1766 8.6131175608173769e-03 -9.9931969473018144e-03 -1.8797475558107728e-02 -1390 6.1676214943951323e-03 -1.3163812664336548e-03 7.2769081339383009e-03 -14 1.3026928640914759e-02 -7.9246773232783986e-03 6.0494467999000125e-03 -13 -3.9835047316365687e-03 2.9251201719530735e-03 -1.0081952523075890e-03 -15 -1.1822559972985029e-02 1.7196540578607637e-02 3.5016015120775228e-02 -2946 3.2031810406276764e-03 2.2330375203324041e-02 1.9992521552579065e-02 -609 -5.6442614408524633e-03 -1.8295695870441765e-02 -5.7083914178542184e-03 -2114 1.6908393769684432e-03 -7.0012056213084699e-03 -2.3651258613386641e-02 -2175 1.8381909211270355e-03 -1.3868222426637884e-02 7.6081624390162564e-03 -2277 -1.7441681959977837e-03 -5.4675378293450047e-03 3.2505147678361167e-03 -607 1.0739819862379005e-04 -2.3638877570891820e-03 1.9795598522192866e-03 -1742 1.2633562364312777e-02 2.5741832023228849e-02 -4.7312365975859553e-03 -1330 7.5562476774450977e-03 4.0144115980008197e-03 5.6560647464565204e-03 -887 2.6114983004236543e-02 -3.1318367078470343e-03 -1.2081364393974751e-02 -737 -2.3309512449577355e-02 -5.3606209722661079e-03 -2.3879337765724398e-02 -835 -9.6357394082609066e-04 3.6994827230038755e-03 -2.6810490496308437e-03 -1482 -7.2801867877707077e-04 2.4225133583745818e-02 3.9651103070229739e-03 -2379 -5.1827649205566408e-03 -3.5126295115431361e-02 -1.9569675228800824e-02 -1658 6.3690880184586064e-03 -1.2977577828632772e-02 1.3896195834272668e-02 -1448 3.1206320773045505e-02 -1.4445557749052217e-02 -8.3124438857111790e-03 -1816 2.2448557394657812e-03 -5.2884912669046297e-03 1.8166688355684044e-04 -1608 4.9226919322663907e-03 -2.6451426905897558e-02 7.8749370243974531e-03 -1480 -6.1431591331264166e-03 -3.3924603235552511e-03 -2.6289784620391245e-03 -1657 2.8868254970058778e-03 2.9750208823237645e-03 -3.8682064416397208e-03 -1607 4.1081218867835091e-02 -1.6698456077938257e-02 1.3299589574638825e-02 -168 -1.6827519820442102e-02 1.5990937465839589e-02 -4.7847063284773674e-03 -890 -7.1757767064181011e-03 2.0077597733959749e-03 6.1921524535247605e-03 -2218 -8.7212137286817276e-04 7.6141030472162198e-04 -6.1874167248991852e-03 -2220 -7.6344673485804039e-03 2.8279619464767832e-03 -1.6792052462921484e-02 -1659 1.1142081125200343e-02 8.2558053236283322e-03 3.1075886422745599e-02 -891 -5.7076416844745043e-03 -2.5032367546580413e-02 -1.2083138126318770e-02 -889 -1.4028864433905406e-05 -7.3568046564499105e-04 -7.1405685859665243e-03 -2389 1.8484462270001918e-03 -1.0685866786847022e-03 1.4965562459658191e-03 -2391 1.0567130006195712e-03 9.6923368494847215e-03 1.1804070081242573e-02 -2219 -5.4041931425878416e-03 1.8065485414727887e-02 2.7700290782498603e-02 -2390 4.5789787680260968e-03 -2.8402063976887158e-03 7.0281556870322726e-03 -1606 8.3396654840339375e-03 -3.5030068268838582e-03 5.2314662496132664e-03 -824 -9.9670984808425574e-03 6.4001513331387863e-03 -1.1236214923352937e-02 -1447 1.4495492638224355e-03 -2.5435316397636929e-03 3.6685807465574168e-04 -886 3.0360613840284822e-03 -5.8238531581665835e-04 -3.3983570475139670e-03 -1449 5.3110590869433344e-03 -1.4162524518216042e-02 -1.5302302990971264e-02 -1817 1.9101591876363320e-02 5.9443753709904146e-03 9.7885750673456211e-03 -1818 -6.1139642453675730e-03 -1.6895833809356438e-02 -2.5602652471123762e-02 -836 3.8014595195686972e-03 2.7094439319730223e-02 9.2684851351664717e-03 -1619 -2.1179763776886108e-02 -1.1997011124107799e-02 -8.9522889952225650e-03 -1553 1.3470178521459373e-02 -4.1271321869352064e-03 3.1631746072947912e-03 -2888 7.3429315808743751e-03 3.0807837373089300e-02 -1.5699599641182892e-03 -1618 -1.5126857619326769e-04 -1.4541609347642383e-04 3.7041975125469643e-03 -166 -2.9711942674865246e-03 -4.7242118315528770e-04 1.2014974058077270e-03 -1481 2.3361850202435032e-03 -4.4706597699912870e-03 8.8727575767697867e-03 -1622 1.4564951687392790e-03 1.6866311793051036e-02 -1.8717583031081612e-02 -2658 -2.3277680943928885e-02 -3.8264703647800831e-02 -1.1333614387147372e-02 -2967 2.9626953243533150e-02 5.4140766839802495e-03 -7.6687857198176916e-03 -1536 1.5765348437856326e-02 1.6703381852424604e-03 -8.3856359142604302e-03 -1521 5.4527727675275405e-03 3.8690362820649131e-02 -8.2725696570238299e-03 -1581 5.1106065529625752e-03 -1.8110026453781586e-03 1.0883818751379131e-02 -1579 2.0623991107023179e-03 1.0056713944889206e-03 4.0761070632739050e-03 -1710 1.1437479822743080e-03 -1.0154292280679454e-02 3.2713436846339650e-02 -1186 -4.4492923668652132e-03 -2.4978099447640157e-04 5.9112623376066193e-03 -2543 -3.7920339455953180e-03 -1.1278866443057020e-02 -6.7693936881769072e-03 -2542 4.5684624412809099e-03 -5.6252288507880688e-03 -3.9475166201104039e-03 -1580 3.1278702068878748e-02 -6.5306513654330442e-03 -4.5551115856984910e-02 -905 -2.1610706113562247e-02 -1.7641023454758879e-02 -5.4676106399084998e-03 -904 5.4870596073826172e-03 3.8334340267238355e-03 -2.5869761477674853e-03 -2028 2.9065629897574812e-02 -5.9439719935494529e-03 1.6292367927732126e-02 -189 9.3455050144888724e-03 1.6223011900241620e-02 1.1803023150635491e-02 -1683 -1.5588761251305755e-02 1.7349800048787285e-02 -1.4155112863802298e-02 -2544 -1.1484725706440532e-02 -6.0213406621520971e-03 -1.1587995550406587e-03 -2026 -6.7174177693729467e-04 -6.8274639917647968e-03 -3.2873235538377833e-03 -167 -1.1899736032956609e-02 -3.3813559159993629e-02 8.9399937120015500e-03 -2387 -2.0498951015763805e-02 3.3070147324670028e-02 -1.1536069561105847e-02 -99 -3.6422574582121330e-03 1.4410587002252751e-02 -2.3169665791118517e-02 -2700 -9.8698076580403943e-03 1.1669578561339206e-02 -2.4075068295725546e-02 -97 -1.4259165313439340e-04 1.9864840344682605e-04 -6.3361191010914758e-03 -800 1.5061612237736164e-02 -9.3639123126403861e-03 2.6973830024849036e-03 -98 -1.4043943277813459e-02 -9.0233893106779692e-03 -1.6266721167136802e-02 -1682 3.3186116026496952e-02 1.6873428612490880e-02 -1.4751852747390663e-02 -1746 1.9370748354841344e-02 1.0693060217845799e-02 -1.4022120992820183e-02 -1681 7.4804799448721627e-04 1.2684448023950934e-03 -1.7982536208747332e-03 -1745 -9.8449829181270821e-04 1.2047647672748579e-02 -1.5135790876533807e-02 -1744 2.8565473494863648e-03 -3.4354100272685783e-03 -3.2757673554232240e-03 -2656 -1.5803407598866236e-03 -2.6226238111290907e-03 5.0147401161574452e-04 -2657 -2.3773271768188779e-03 1.4851273097540009e-02 2.4945189384359200e-02 -1708 -1.7454933959636367e-03 2.7230579478355757e-03 2.7681578215379963e-03 -1769 -2.2150434325185213e-04 1.2800346054513372e-02 -4.0997035634553453e-02 -1814 2.5497426143630212e-02 -4.8379934368294464e-03 -8.5211316838654464e-03 -1704 2.0611114420260802e-02 -2.4094672410232030e-02 -2.9428329010090194e-03 -1026 1.0393414551170047e-02 1.7204066873845788e-02 2.2321970886898850e-02 -1815 -1.1623604680088741e-03 -2.4502695455224200e-02 -1.0166107032548071e-03 -1532 -1.8589180206606121e-02 -3.7683767982198014e-03 7.3408523469477996e-03 -941 -8.3825494768812684e-03 9.9999303876464728e-03 -6.9499019071926123e-03 -1960 -7.4980777992030168e-03 1.8218392156243172e-03 1.0305119054155908e-03 -1187 -2.3207213824781643e-02 1.8324303642024357e-02 -1.9512725562694424e-02 -1263 9.0095679256390910e-04 2.1113231544984578e-02 5.0741815917023864e-03 -1025 -2.2685204600766559e-02 -5.9409436351966194e-04 2.5400427094079803e-02 -1887 -7.1682012560271907e-03 7.4540113685597157e-04 1.4793695785930188e-02 -1024 -3.4909289285892884e-04 -1.3744843554525108e-03 7.5840286467743993e-04 -530 6.5610172805093115e-05 7.7921971566953952e-03 1.2723326909335976e-03 -2668 2.0093851164334213e-03 1.3473227859328711e-03 -6.1841440271114328e-03 -1154 2.9017277025639544e-02 -1.8424705722040128e-03 1.0253748715918411e-02 -2027 -1.4101026826825130e-02 1.3318100599771896e-03 -1.7879809522154132e-02 -1140 1.7952081732834982e-02 -2.6578429355565449e-02 -3.3163820913784761e-03 -964 -6.2637932763444691e-03 2.2697828982891049e-04 3.1960778652555255e-03 -1625 -6.7962566664625940e-03 2.3143046254819220e-03 -7.8118615485094373e-03 -2620 3.3514384494377808e-03 -8.0082387486889097e-04 -1.8026791008197982e-04 -2622 2.1265500524111507e-02 -2.9223037508775643e-02 3.1429656434015813e-03 -965 -2.4555711287906757e-03 1.3166039011577190e-02 -1.5683609226585273e-02 -966 -5.2507666805404109e-03 5.3647720979581748e-03 -3.9133241781422164e-03 -2621 2.5206089477555807e-03 -9.1487089172616895e-04 1.6795997177734194e-03 -546 -1.8878533086607845e-02 2.0284769431783214e-02 5.4454986423508513e-03 -1109 2.5991504133722872e-02 1.1459035917877004e-03 -4.5513567366134138e-03 -544 -8.9185457072545413e-03 3.9545568535896583e-04 -5.9386787890071630e-04 -2521 -1.8748184898586418e-03 -4.9628261331029410e-03 3.8564656912990123e-03 -529 2.3017454297977816e-03 4.3384343762957285e-03 1.2943506674875115e-03 -531 1.7737180080370896e-02 -2.9707971184129785e-03 2.3616173972178221e-02 -2570 -8.3164784385752911e-03 2.2589664102287348e-02 -5.8302546347285414e-03 -2021 -1.6052517939689249e-02 8.3126478698856456e-03 4.5506003660358684e-03 -2523 -1.5427539924853094e-02 -6.9991637567759632e-04 4.4854991416398201e-03 -1256 1.6252594354645551e-02 2.6279680211593277e-02 1.6975445098858125e-02 -1454 -6.0120340233957813e-03 8.2897290874828378e-03 -1.1604999728104280e-02 -1255 4.0033737888359334e-03 -1.1865658780993548e-03 4.1961828660972318e-03 -2083 -4.0605675827162105e-03 -2.2160671866707248e-03 1.2179370646058260e-03 -1624 -1.2288900492367137e-03 8.8366401501007927e-03 -4.1496489117759860e-03 -1138 -2.8390875001824268e-03 -4.7205309489500068e-03 3.8194383310805446e-03 -2474 -1.0465297105351256e-02 1.1827291972687719e-02 -1.8680767327970357e-02 -1626 4.4713884252401094e-03 -2.0348484951513493e-02 -1.4920295898928956e-02 -2669 -7.5033221511527125e-03 -1.2115458517024684e-02 -2.4870059375358668e-02 -1901 1.5507212203683984e-03 1.7944925069605721e-02 -1.6020299233706063e-02 -1136 2.9659716361680757e-03 -8.9958232917538121e-03 1.1148170313409630e-02 -1176 -1.9115449879438900e-02 -2.6566205884449547e-04 -5.3905805849683601e-03 -1174 2.3097779537460182e-03 2.1605933086635029e-03 -2.7526896589443518e-03 -1286 -1.1987489538586180e-02 -1.5157339873929313e-02 -1.1985104806533855e-02 -1175 2.0291712874048952e-03 1.9308077413153577e-03 1.6394991073711701e-03 -1651 -3.9660967028469253e-03 -4.0410690417234246e-03 -4.2575830185507587e-03 -626 9.8203145978388601e-03 1.2964043265818776e-02 -1.8117987902298975e-03 -1992 -3.2760255572068728e-02 -2.7833620839539238e-03 -1.4762448218411404e-02 -686 5.0411302128315983e-03 1.9290942334199306e-02 -6.3019151181231215e-03 -2079 -2.0906316934799853e-02 1.4169030627427808e-02 -4.1063926240393303e-02 -1932 2.8919413009722308e-02 -5.3975426858170680e-03 -8.1956889687488429e-03 -2094 7.4002525969647922e-03 -3.9630629609563499e-03 3.0645013654591480e-02 -2085 -5.9991905395898630e-03 9.9889086781168226e-03 3.7523079642248322e-03 -1930 4.4755273070923237e-04 -1.6801639558135175e-03 -1.7017419800244451e-04 -2861 6.2364969517422954e-03 -2.7587151886822319e-03 -1.5926190592981646e-02 -1493 3.5468013024929517e-03 -2.3123934854023045e-02 7.1190960913778412e-03 -2645 9.8106603432352012e-03 1.1153432316985852e-02 -1.5557888567599768e-02 -2646 -2.1747134292652341e-02 1.1392616622577458e-02 -7.8243538097423522e-03 -2644 2.7253443142858545e-03 7.5369652336583970e-04 3.7132727978373835e-04 -2000 2.0249815959291421e-02 -6.1775629292141780e-03 6.8312027941316803e-03 -2001 -4.2192856264672701e-03 5.1560208308850993e-03 1.3229412237777032e-03 -1999 -6.6173922921111622e-03 -5.3963946296385762e-03 4.9945327249833437e-05 -1501 4.0574460852904495e-04 3.6687828646074865e-03 -5.6002358004467127e-03 -1503 1.9992929393917069e-02 -2.0190728972733135e-02 -2.3446286352340868e-03 -87 -5.5805028220772181e-03 6.3376370605538988e-03 8.3548445481990644e-03 -714 -1.8892656166012912e-02 1.6340969775473398e-02 -1.4916860985876162e-02 -1494 1.4642280623333132e-02 5.8148157196664888e-03 -1.4222414671233875e-02 -1492 -5.9711398069812443e-03 2.8492232445737325e-03 -6.9933638102367057e-03 -712 -1.2154816970288568e-03 -5.4846227419674759e-03 4.2120761913251340e-03 -1502 1.1611771754558752e-02 1.5979389529503191e-02 7.5254213186472380e-03 -1979 6.4246773154461772e-03 3.0649054518736160e-02 1.1978009329909377e-02 -788 1.1404113579614685e-02 -1.5093205626450397e-02 2.1657219752338489e-02 -940 6.8097500831952200e-05 -3.8834596199981836e-03 -5.4053606940202090e-04 -1477 -5.4342400203765320e-03 -1.4927924219040936e-03 -1.2137235036763828e-03 -2092 -1.3333186908874998e-03 -8.5845315110784654e-03 5.6190673259629929e-03 -1884 -5.0404253826363491e-03 1.3651989175295426e-02 1.4742877533498752e-03 -2093 1.6184917345460108e-02 -2.4912547127474913e-02 -2.8503638202172586e-03 -2660 -6.1486348772794627e-03 8.6669691068985439e-03 -9.4095612089894424e-03 -1334 1.5051472985026155e-03 -1.0189389042827658e-02 2.7140398704626829e-02 -1487 3.2296772065214864e-03 -4.2364529959056825e-03 -8.6364428364256243e-03 -1764 1.5867142999034980e-02 6.9459907449376593e-03 2.5010169483545858e-02 -2251 -1.2576655749042566e-03 -2.2932448355914483e-03 -1.4155615348433750e-03 -1312 3.5211604522548978e-03 -2.1147848919840033e-03 4.1708311466285702e-03 -1313 1.2791362596996363e-02 -2.2647721200362819e-02 1.1667593266450442e-03 -1425 -1.1512703776168096e-02 5.4541634148625078e-03 9.8839281355888094e-03 -1423 3.9325689857588203e-05 -5.4500097748778004e-03 -2.4423909069249015e-03 -2859 -1.8072762596591466e-02 -8.7186634061604193e-03 -9.7993513907090584e-03 -1314 -2.1822341995167808e-02 -6.6883902681705064e-03 -1.1360226365352173e-02 -85 3.3177842798946902e-03 -3.5620695097239355e-03 -2.0965001881358782e-03 -86 -3.7451529106182265e-03 1.4109880052992105e-03 4.5955410142622466e-03 -2857 -2.9042313825193848e-04 3.4279782771837056e-04 -2.5790157162998138e-03 -2858 -1.0293332927166674e-02 -1.1949414352055796e-03 1.4892826846348361e-02 -2860 5.8918983395338251e-03 8.5621517095547169e-04 8.0009093193368023e-03 -2329 7.8503986371060051e-04 3.7651014696640671e-03 -8.8096921499679034e-04 -210 -3.8995278840220624e-02 -3.6988882840969218e-03 -1.7872861346306724e-03 -2959 -9.1493939665495700e-03 1.5778302813127794e-03 3.6777360127864568e-03 -2960 8.4888424995535963e-03 -4.2614688587300342e-03 -6.6517091829582662e-03 -1257 -8.1638675477717117e-03 1.7274112483939071e-02 -1.5405634046206176e-02 -2862 -1.8844381478340579e-02 4.0529387535081620e-03 -1.5852721234555996e-02 -1922 3.4671185015904556e-02 -5.0299850702608890e-03 1.8823106725760264e-02 -655 1.9971090755080247e-03 6.3647936705711720e-03 -2.5217320638763838e-03 -2961 -5.4661955660261956e-03 2.6164529856192682e-02 2.6949639525874786e-04 -1239 6.7497601078422556e-03 -1.7600895963764268e-02 -4.7563380338314344e-02 -1980 -1.0021813476428994e-02 -1.6463847757667179e-02 1.7711517140407074e-02 -2828 2.8488384474874121e-02 7.3664169068486109e-04 5.4129823631492054e-03 -1989 -3.4896411705386959e-03 -1.2982690741283295e-02 6.2993522183554364e-03 -1978 -3.0136635411696206e-03 3.8892575451199489e-03 -1.2570805054460494e-04 -2885 6.1526077450895882e-03 -6.5247482399896010e-04 -2.9049218685122478e-02 -656 -2.0028932203482959e-02 9.0947054061512960e-04 2.0661865614516127e-02 -657 1.6060660794104432e-03 -3.2278095255562134e-02 -1.3334324599306382e-02 -2884 4.3092314427858441e-04 5.6415576483911309e-03 2.8635212330520700e-04 -1948 4.4824140290747527e-03 -3.8878906752376494e-03 5.1929666041794524e-03 -1385 -8.0666022450985916e-03 2.4497427270559952e-02 -1.0775290059456549e-02 -1384 1.1874379634186506e-03 7.8859057506141183e-04 1.1495811420182116e-03 -2253 -1.8427937202867607e-02 -9.4231292630929751e-03 1.0062524433543749e-02 -1990 -3.9903611927717400e-03 1.5557490271412549e-03 -3.3903500804924494e-03 -504 8.6156939694731114e-04 -3.0019377258835842e-03 9.9608527880819878e-03 -2947 -2.2494451333655695e-03 3.9709346871107127e-03 -8.5077340404236153e-03 -1424 1.6467485867311081e-02 8.0289210623968165e-03 -1.3904620539186726e-02 -2886 -1.6151454303584677e-02 9.5483198136790352e-03 6.2468002834204107e-03 -1237 -2.1865509741698344e-03 1.9225590793508635e-03 -8.0694197202142888e-03 -1952 -1.2959767136412250e-02 -9.0031378297066224e-03 7.7075806026554909e-03 -2952 1.2072176510561134e-02 -1.6338803685475644e-02 -1.1807376917881328e-02 -2982 -8.4523843753564702e-03 2.2348935717295119e-02 -1.7683017960233208e-02 -738 -1.6217590131628842e-03 6.9829013036488985e-04 4.0342151071480229e-03 -2527 1.4193712931817532e-03 5.8974329471811627e-03 -2.9210716468840263e-05 -2385 -4.1482441316837374e-03 -1.3719230840093962e-02 -1.2993517996470607e-02 -2425 -1.4465098352066167e-03 -3.1111907730388493e-03 -4.4047216814153871e-03 -2044 -5.7620546817443250e-03 6.8306432892621090e-03 2.0609598912435388e-03 -2349 1.9391258899283982e-02 -3.4769271219619994e-03 -3.9315195617987972e-03 -1670 -4.3529296927155223e-03 2.7433286891155182e-02 2.7134500326757575e-02 -2993 -1.2075783965207920e-02 -2.2649466541515145e-03 9.3294725571147208e-03 -2185 -2.0419679927965060e-03 -3.5288042892134197e-03 -5.1013473002737356e-03 -2427 1.1439697242711081e-02 -1.1523784404420387e-02 1.9680980494661219e-02 -2186 1.1554440818858569e-02 6.1275728438624855e-03 -3.0221221616227156e-03 -662 1.1498970714949603e-04 1.3669531507158210e-02 -1.5061526632790191e-03 -1669 -4.3143104222277597e-03 -4.1587383444198975e-03 1.4332476284705830e-03 -661 3.3232007319750095e-04 -3.7415135949772025e-04 -1.3010094397358839e-03 -1671 -3.2024124338063654e-03 4.9430186346865919e-03 -1.3697346108782662e-04 -639 5.5142690702038363e-03 2.5047034398931734e-02 4.6617380314428105e-03 -638 7.7259018467292677e-04 2.6375378689120845e-02 -3.7873988779694319e-03 -2609 7.3288922141688615e-03 -8.8635387548343780e-03 3.3564440493432136e-03 -637 6.0843122870206552e-03 3.1852778301610183e-03 1.3331449205977917e-03 -1781 -3.1848323909691868e-02 1.9591745223898005e-02 4.7192171753129564e-03 -1782 -5.8085873793759417e-03 6.7043702103595174e-03 1.4191463765063115e-02 -1780 5.6803632960420198e-03 -3.4922124025565888e-04 -2.0135285504820550e-03 -8 -6.1347785391437501e-03 -3.7957117580024661e-03 4.8700267800762783e-03 -2373 -1.9186788710903412e-02 -7.9872897010848966e-03 1.6353218680276321e-02 -2347 -1.8167617521787737e-05 1.0740160861728773e-03 6.1572600381359253e-03 -663 2.1866261249891241e-02 3.2394559805505492e-03 -1.9113436719187738e-02 -2985 2.0256862894007206e-02 -1.7619128904851982e-03 1.2796833451606707e-02 -2980 2.7157904987847780e-04 5.1409374670719167e-03 1.5853018615600022e-04 -2348 -9.4360817863006069e-03 1.2711446469767910e-03 1.3760560863694152e-02 -1332 2.9447240959921449e-03 -1.1292287006881077e-03 -1.8476615933539699e-02 -2970 -1.3360332783387011e-02 3.4366592390317321e-02 2.6989461221024223e-02 -1164 -1.7970846674422138e-02 1.9607302049298165e-03 4.3865140682806747e-03 -877 7.0919619657580854e-03 -8.7498351349779672e-03 1.5382274440219575e-03 -1373 2.1565272995753670e-02 3.1567455947589668e-02 -3.2216997860528812e-02 -878 -1.9905936947146468e-02 -1.3793035566378394e-02 1.6713196570238804e-02 -1855 -3.0137567913753453e-03 5.9184630584518680e-03 4.0209079046145324e-03 -789 -1.5651113485634353e-02 -1.3640026184329393e-02 1.2693829599915550e-02 -1008 3.4324003785802578e-03 -6.4961232398511601e-03 2.3068944142486260e-02 -1007 1.7843139638216463e-02 -1.9702300228568882e-03 -9.2852864941197176e-03 -2046 -9.8380559799232520e-03 4.4123362420771223e-02 2.0147384335746639e-03 -1368 7.5567381408305834e-04 3.6388250261282243e-02 7.1282592503638074e-03 -854 -3.2591894507711560e-04 1.4235217034221087e-02 -1.5835883486857383e-02 -2580 -1.5000539907721221e-02 -1.2600499762412015e-02 -9.7000986694905263e-03 -2984 1.1292754701215268e-02 -2.0758090676613043e-02 1.2430059030797101e-02 -787 1.0930024748110486e-03 2.5662992388281909e-03 -2.7461001166114540e-03 -2372 1.4560256354344847e-02 8.4749083215523713e-03 8.5620936712883452e-04 -2933 1.9720022985934900e-02 -2.8403073815115993e-02 1.0642084229532167e-02 -2371 3.3630150442003496e-03 -1.2404841399544738e-03 -1.3413919276386919e-03 -2579 3.1538076664978992e-03 2.7128870448755997e-02 -2.6133312296309094e-02 -816 -2.1849721394838362e-02 -7.8352844763325442e-03 -1.2873139988035199e-03 -814 -4.9996682481093962e-04 3.1024422426413488e-03 -8.9656879466663720e-03 -1006 -9.6676326637389098e-04 3.7070764340178365e-03 9.8348373813139048e-04 -815 9.5340040708662126e-03 6.3949428423990210e-03 -1.4291591267641800e-02 -929 -8.6680851353929545e-03 -2.9685260697141181e-03 -3.3408832286985178e-02 -2517 3.9932933347445597e-02 6.9745513928402550e-03 -7.2776182542882845e-03 -2516 3.2654919396984748e-02 -2.5364355220571760e-02 -2.2458418405441289e-02 -2515 8.2064475014944683e-04 -5.5729357525570872e-03 -4.1298307539968148e-03 -928 1.1510809522234143e-03 -7.9041921509348154e-04 -5.6703367411747368e-03 -930 -2.8339679620701674e-02 1.3962001541633816e-02 3.3465698682638871e-02 -411 1.6867807451046241e-02 -2.6940235321116064e-02 1.8597126539226957e-02 -409 -2.2691097579089739e-03 3.4762052682971514e-03 -1.2268941204142942e-04 -270 -9.9298944248082058e-03 -3.1615812478606634e-02 -1.2836619194925313e-02 -268 -2.4245617153595580e-03 1.3291013869772285e-03 3.8502047601950756e-03 -269 1.6692589187694333e-02 3.8573991809424451e-03 8.2950159226812641e-03 -10 9.0612933356886631e-04 -9.8463242993221357e-04 -2.4680862165826585e-03 -2578 -7.7734375134742601e-04 -2.4284230431597586e-03 9.2934376874279495e-03 -277 1.8934085544837715e-03 5.7513774035594266e-03 -2.3881683458945322e-03 -1139 1.2809138481804195e-02 -1.8251801132982869e-02 3.7401989843629274e-02 -11 2.8724363087525833e-02 -1.7834107092794052e-02 2.1993714222431210e-02 -279 1.6872980563974221e-02 -1.6805168260860415e-02 3.7320365594069746e-02 -1845 2.8524718344366682e-02 -3.7008834894691235e-02 1.1659911340780241e-02 -969 -5.4182123964237596e-03 -8.2199892324610305e-04 -2.2999704489420337e-02 -967 -5.4214588183167263e-04 -5.4888104482941130e-03 -9.3140711060519512e-04 -2020 -7.2266209586910575e-03 7.6899910305559588e-04 6.0015374794730094e-03 -2330 1.9136191325610327e-02 -1.6361245051474141e-02 -3.2029244767997130e-02 -1562 -6.4482368188386440e-03 -1.2643906628160957e-02 5.5154197669909479e-03 -2340 -4.9109023308153846e-03 -1.4020027166438864e-02 3.1874235166669325e-02 -2333 -3.8982260371771896e-02 -4.8079067430752782e-03 -2.6778514642756897e-03 -1838 3.2077792284754325e-02 -2.2831856695098178e-02 1.1503099919450818e-03 -2921 2.3238675163168138e-03 6.9563381416115535e-03 -2.4966566900033845e-02 -736 -5.3153745372996296e-03 -1.2836279494514600e-03 -3.6420696900000926e-03 -410 -4.8250850319841755e-02 -9.6571801000597604e-03 -1.2095578027595658e-02 -2249 1.3071523225811836e-02 -1.8875430172716565e-02 6.5603065747398930e-03 -2248 7.3939674558973221e-03 2.9466238637292723e-03 1.9118319389903650e-03 -2804 2.1991886496899003e-03 2.6185844049351190e-03 8.8829016635032978e-03 -2803 -8.5678288705396695e-05 4.3325732666871317e-03 -3.4358076074122194e-03 -2250 1.4469636142586508e-02 -1.0413624697433021e-02 -2.2895659583799945e-02 -2582 3.3418775894465554e-03 -1.7216981618870450e-03 1.8487778776423717e-02 -563 1.2838135026371621e-02 -2.1342224406820223e-02 -6.5109637408445591e-03 -580 -3.3885710913063561e-03 5.1680156244581844e-04 3.8159960244635652e-03 -2581 -2.1830483542267421e-03 -3.6413211898174438e-03 4.4544801708353366e-03 -2606 -7.0804046259589672e-03 -2.5463931427355986e-02 -1.4843268587595982e-02 -2629 4.0691137386173444e-03 -3.3410996058390956e-03 -5.7556837710989019e-03 -2630 5.3612894307405188e-03 -2.2900170283005113e-02 7.1654641405391661e-03 -2607 7.2058683912499264e-03 1.2611808393992710e-02 -1.4808160912954442e-02 -2631 1.1946625686041917e-02 2.0111051732118402e-02 -1.2371637623552664e-02 -2763 -3.0371108751025971e-03 -7.9818449533606405e-03 1.2188117370479394e-02 -2610 -5.7918873671352154e-03 -3.8070163735703343e-03 -5.3459800601686081e-03 -564 2.5115435148730665e-02 -1.5222915712716140e-02 1.6862632566245345e-03 -562 2.9142735945118848e-03 1.6336073177392437e-04 -7.9331313637702790e-03 -1993 4.3107942625370873e-03 -1.0602818839349142e-02 -6.5076832897758468e-03 -1995 6.9464726858280527e-03 2.2964107478605920e-02 1.6110121075777098e-02 -1994 2.7267613104023279e-02 5.7487492449424223e-03 -1.2833589936111476e-02 -2608 4.5350240301549646e-04 -4.5280988686103559e-03 3.2097523142796554e-03 -2605 1.1384866735229414e-03 -9.2930426705337837e-04 -7.7765295588909985e-03 -470 9.0385036803437915e-03 -2.7533686383845450e-02 -2.2000612561629641e-02 -471 1.1683449369562761e-02 -1.0065940171042734e-02 -2.0603958145657776e-02 -469 -4.7479075372404917e-03 -3.5811449664499835e-03 -4.7011522085444292e-03 -1810 -3.2301869074242252e-04 4.8806352173278982e-03 1.3244380920423820e-03 -2771 -1.5975496817132714e-02 2.2111081620992502e-02 1.1440266598432124e-03 -204 2.2360533651612891e-02 -4.9913338931064791e-03 -1.3825289578193933e-02 -208 1.7072444315805308e-03 3.4054188495883939e-03 -2.3300243837884906e-03 -1366 -1.5058648531858622e-03 -1.7697465724066234e-03 6.8702779232516955e-04 -1147 -2.8913675402419861e-04 7.4280930351912778e-04 4.7631981076713724e-03 -2964 -1.8411843430628273e-02 -6.1225774765224592e-03 1.1361386370459395e-02 -2770 1.2388495873088979e-03 -1.0210605615763245e-02 -5.1970047940930403e-03 -2772 1.6170434372797183e-02 -1.4913630146991031e-02 6.8407410728204780e-03 -2692 1.1651459384681804e-03 -6.9183178350298489e-04 2.8001080973745853e-03 -424 9.5071031249549726e-04 -9.0416087264291950e-04 3.2613854394293942e-03 -426 1.5718393985823798e-02 8.7583116411654987e-03 1.3252310808321092e-02 -1301 6.5511122897037085e-03 -9.6225218655165163e-03 -8.5590746110072585e-03 -447 4.5058917333780750e-03 1.4105116534213286e-02 1.1892266793055221e-02 -1169 2.1829324618720516e-02 1.6251183463013752e-03 1.8183779607924937e-02 -421 2.4965091081930449e-03 8.0561541440047442e-04 2.2236407685158346e-03 -423 -1.5504667355875251e-02 -1.7634558890793227e-03 2.2782500770622188e-02 -2765 -3.7020441849798728e-03 -2.6162351347355690e-02 -5.3327621369894857e-04 -2764 2.2588223846894272e-03 -2.2521982516756881e-03 -8.1700176159493667e-04 -2766 -1.6773501955152158e-02 1.5571502849405032e-02 -2.1743366189503045e-02 -2739 -2.6061996849790943e-03 -3.3588970896403282e-03 8.7895419673679823e-03 -2737 -4.4825540188301325e-03 1.2183738406612375e-03 6.5535126431508503e-03 -2800 4.7017938120378288e-04 -2.4389648471343043e-04 -1.4908552764234166e-03 -2962 5.9889532700939723e-03 -5.2206116773141058e-03 8.1290313841076648e-04 -2963 -3.7460751637183543e-02 -1.5560668828841957e-03 1.3392245844087040e-02 -2200 3.4050892596975612e-03 -4.0223786894752960e-04 -2.0380115811644839e-03 -2202 -1.2324496667837904e-02 -1.5546505836672438e-02 9.9659607139363417e-03 -1345 -3.5843929233694448e-03 6.4932649343001192e-06 -5.2191575384143987e-04 -2738 -2.0999699837564379e-02 1.2045466540876086e-02 -4.9485816779459742e-03 -1347 2.6024046453634670e-02 5.0331418399389939e-03 1.7741477410857177e-02 -2890 -4.4121939842204300e-03 -1.7922029390286846e-03 3.5277185647007549e-03 -2194 3.9838317989455144e-04 2.6982390527567172e-03 -1.2228864154298468e-03 -2801 -1.1944498216669349e-02 6.8321034766679212e-03 7.2145825574330223e-03 -2802 4.3146818185890315e-03 1.1122097745280618e-02 9.7359805428463338e-03 -1931 -8.5514392526363104e-03 -3.4044233987424670e-02 2.2572612710152181e-03 -425 -7.8179640715121974e-03 -2.7850056512957983e-02 -2.9690536685132544e-02 -1520 -1.8507703212507096e-02 1.4182202319117782e-02 -2.1671308183254800e-02 -1163 -3.5810626176932370e-02 2.9845897733127443e-03 5.1982596346611910e-03 -2195 -2.4901830585169439e-03 -9.4962722501223153e-03 -2.0694367929935072e-03 -2787 2.7911857019605735e-02 -2.7253622539065808e-02 3.2681798087218620e-03 -1162 -7.5396517125967571e-04 -2.6076408178686924e-04 -1.9782554683549771e-03 -777 -4.6672017250899206e-03 -1.0439066508036277e-02 -3.5926487013434407e-03 -2948 -3.3320005773768255e-03 -1.1168545337848140e-02 -5.4576842302159819e-04 -1519 1.0325169886796281e-02 3.3369449409217347e-03 -9.6193420910545822e-04 -2892 -2.3440964013712599e-02 -9.6692947695777281e-03 1.7517181045731946e-02 -2891 -2.2407547031772889e-04 -2.1517850759168480e-02 -8.1197895294856780e-03 -445 1.7552100843874281e-03 -2.3645386390009140e-03 -7.0847546528061481e-03 -1346 3.3052377470249195e-02 1.3417081159682103e-02 -4.3734618231601498e-03 -1959 -7.0103311191382616e-03 1.1848256852676145e-02 -4.6074818323526834e-03 -2778 -1.3043903678797120e-02 -2.7149885111984067e-03 -4.8525158857161878e-03 -2969 -1.3552616038570300e-02 1.6765081098099838e-02 2.6123563589523578e-02 -1759 1.6041001804206075e-03 4.6941395007217366e-03 -5.4401307057699473e-03 -1761 -6.2061393794657508e-03 -9.9601048472564707e-03 1.7740182274934163e-03 -2201 -3.6951437039343545e-03 1.0547336104230934e-02 1.3854062013933530e-02 -2852 -2.7490421307640499e-03 2.5013863779119456e-03 -2.1104548472771368e-02 -2851 6.3281478835401118e-03 -5.8312731416755234e-03 1.5130448385502213e-03 -2853 -5.0724286138320749e-03 -1.4469422816908140e-03 2.4725519493617124e-02 -1760 -4.6653700456444056e-05 3.7562442147841867e-03 -1.0341116066125127e-02 -2873 1.7731770424473641e-02 1.9235455704023626e-02 -6.9846511122646851e-03 -2377 3.8250123423562116e-03 -1.7923957498220341e-03 4.6579063897563356e-03 -2368 2.9673945253503148e-03 -3.8146091771678130e-03 -5.0543170861667014e-03 -1411 -7.9466591118981529e-04 2.9485996397156573e-03 1.3168280509006110e-04 -2378 1.0878930484777592e-02 1.8000479987493299e-02 2.4901094565144007e-02 -1413 -1.7504218521966004e-03 9.1520370863042173e-03 1.8966508755408392e-02 -2366 6.2591268917139061e-03 -1.6520513397960818e-02 6.3746553810155413e-04 -1412 -1.6097189176691881e-02 -4.4473757155228675e-03 -3.1971782845782046e-02 -1333 -3.0448964133308800e-03 1.9116258112807148e-03 -1.4352134012127562e-03 -2370 -5.8754364760993764e-03 8.0175161768224808e-03 -2.6002942613139214e-03 -2365 -8.7570182172664966e-03 -2.4673396157644484e-03 -4.2235872557192652e-03 -2367 -1.8877434143938960e-02 -1.0164427036353764e-02 -2.3049569992932714e-02 -1081 8.3369045772153038e-04 -1.7515088856957834e-03 2.3362313393041679e-03 -2369 1.9795243577468820e-02 -1.4038338554434716e-02 -2.6262602949832806e-02 -2151 -1.8655588609371571e-03 -2.0041742072907914e-02 -9.5562274396900331e-03 -2968 1.3165446246534941e-03 -2.7126909264067560e-04 -7.2779655174325705e-04 -2252 4.7208267980197267e-03 -1.3613684662096238e-02 6.3828383054147396e-03 -775 1.4970174559127689e-03 6.7705913873773822e-03 -2.5343977818469013e-03 -1882 5.6052452069827955e-03 1.2237271550263792e-04 -2.8987366001939989e-03 -2363 1.1241687664282254e-02 -2.0785660121899072e-02 -2.0366916069194382e-02 -1988 -2.5049928484499238e-02 2.4129526158746914e-03 1.0562547961873102e-02 -1554 -1.4974182912209841e-02 -3.6893322071681674e-02 -1.4157780764349705e-03 -1552 3.0292258614224416e-03 -2.6138661686229119e-03 -5.8784157118391064e-03 -2617 -5.3019789076966788e-03 -5.4407651702230008e-03 -2.6537597743714705e-04 -1383 8.3924471797262572e-03 -3.5875439197127789e-03 1.8369596128440007e-02 -1483 2.6973542198317148e-03 5.4322210797668078e-03 -2.2879805732633567e-03 -1611 -1.3126377159250500e-02 -1.0586767855787872e-02 7.7721947941535802e-03 -7 -3.9462524404265988e-03 2.2353879918969310e-03 1.7325682760994613e-03 -992 1.8652873131538909e-02 2.0600623322933307e-02 1.8848644557443287e-02 -1381 7.5789670517051376e-04 -1.4901369305839625e-03 4.1388594486968314e-03 -9 2.2962301705872559e-02 2.2675018805422813e-03 3.3096194662907891e-02 -2988 1.7148724752328190e-02 -1.0771997387293133e-02 -1.0772504346944770e-02 -888 -7.4611140642857334e-04 -1.8332295705089721e-02 -1.7155707211437759e-02 -1648 -1.2334592093741264e-03 -7.5910949114879470e-04 9.1363249918808634e-03 -1650 1.9152853355494882e-03 -1.6963040661859368e-02 3.3231490606119775e-02 -1485 -1.9817235208264498e-02 -2.9946270767553906e-02 1.5717682744085153e-03 -2986 -9.5329906622012451e-03 3.3275786311113965e-03 4.1594860724443001e-03 -2529 1.6456165411418887e-02 -3.0608142522009119e-03 -1.3822325329921737e-02 -1649 1.5490468264228788e-02 9.5941695528828901e-03 2.5536854743478346e-02 -794 2.4622612409343783e-02 -6.2700744850881091e-03 -2.1648926143089147e-02 -2528 9.8874713149619542e-03 1.9112707115508604e-03 -3.9227800532555243e-02 -94 -1.5340175054824453e-03 3.1544060429976230e-04 3.0468523226393988e-03 -1961 5.9932643529161823e-03 -3.4098810171492473e-02 1.3357128665251685e-02 -96 1.1017107680624841e-02 -4.3324853280338360e-02 4.1872744874460010e-04 -1389 5.4917136612222806e-03 3.0005539683944501e-04 1.2780681162922057e-04 -2942 1.9265385547866055e-03 -1.2477711785047628e-02 -3.3350102256917867e-03 -1387 -1.8449763768039564e-03 2.2452241838271914e-03 -5.3429233037424065e-03 -2386 1.3952489443814962e-03 -4.7741223341620909e-05 2.8204388613589509e-03 -793 -2.4429548317398157e-03 -1.5414342492577338e-03 -2.9926275300676021e-03 -795 5.0939699845519671e-03 4.1575513950507731e-03 1.0121642382143374e-02 -1388 -2.1242109091115422e-03 -1.7500571257582066e-02 -2.8637515006562303e-03 -2618 2.3465494183293412e-02 -5.2908749332822840e-03 -1.1296125309016750e-02 -1382 -2.0118119947318519e-02 1.1096230625942905e-03 -7.3755679873690316e-03 -106 -7.8679384083967831e-04 -7.3218140881580462e-03 2.4602773931502371e-03 -2191 -1.8786771972690930e-03 -5.7794728270408541e-03 1.5881375143974312e-03 -2694 1.2542851250588447e-02 5.3990059598280236e-03 2.4605167794770021e-04 -2176 3.6478655331211095e-03 5.3576302066209759e-03 1.7308044895281034e-03 -925 3.9400114196699891e-03 -1.1887293538267642e-04 6.4523284474723313e-04 -927 -1.3332335111627244e-03 -1.6057957786678328e-02 -1.0887389822139182e-02 -779 -4.4146504248877977e-03 3.8476702181246773e-03 1.2100165362390249e-02 -1535 -1.6053146673404628e-02 -2.3108254886200925e-04 -1.8295670079867252e-02 -2178 -6.5841523904319752e-03 1.0501801174238034e-02 1.3233650190151157e-02 -1534 1.0342068885512889e-03 1.0106622094394899e-03 -3.0595928918705313e-03 -209 6.5958616933411637e-03 -1.1924584265599298e-02 1.5991675169803678e-02 -1694 1.3297654050877640e-02 4.0891943480136405e-03 2.2359303021562537e-03 -1693 4.0034542543752865e-03 -3.4607140427329822e-03 3.4024297628323875e-04 -2483 -1.2617739598372233e-02 -1.8679103710602121e-02 -2.0754371056067727e-02 -2983 3.3348674220437767e-03 3.7403985443298401e-03 7.4381903352609951e-03 -2590 -7.3836711851277426e-03 -2.5013946425825931e-03 6.1146919424161505e-03 -2022 -6.7972664146717073e-03 3.1892973514032084e-03 -7.6546005519813306e-03 -2388 2.7464379258621396e-02 1.4698754271014105e-02 -4.9285288563667481e-03 -778 -3.5830172133683867e-05 -7.9538615974868957e-04 9.8867540303048122e-04 -95 -4.9244591394505119e-03 9.1858527837452644e-03 1.8520715594552015e-02 -780 1.5987290799793923e-02 -6.8684541999867307e-03 2.4038956636244248e-02 -2351 -1.7681456708942785e-02 -1.1209430948786830e-02 2.0097984276120955e-02 -1900 8.4254652485697581e-04 -7.9466610413633928e-04 5.9612933832963490e-03 -1902 -3.2763090471474576e-02 -1.1419193172219538e-02 5.2957685539969978e-03 -2436 3.5515984814456676e-02 -2.3337978950653128e-02 6.8660948703957473e-03 -2434 1.0018350685939222e-03 1.2992657135898749e-03 -2.0787790782108612e-03 -2435 -1.9240076779256481e-02 -6.5561884359150785e-03 2.7585092516232710e-03 -1713 8.8465467949978456e-03 8.7499659715707112e-03 3.9684379669563058e-03 -2482 5.7918633706877075e-03 -9.5099880886616896e-03 -1.2026600408314601e-03 -1768 -1.6675142252819569e-03 -3.2415059381542188e-03 3.2661163330644479e-03 -2352 -1.1556309669852096e-02 1.8493613208948271e-02 -2.2811835234065391e-02 -986 3.1729112010405579e-03 7.1297403216896600e-03 -2.3323293873632727e-02 -985 4.7846668034116305e-03 -5.6112324877821522e-03 -3.4203424837258669e-03 -987 5.9965567307550408e-03 -2.2368450610655413e-02 2.9001651271861072e-02 -1316 5.3312703474307915e-03 -1.4050735520321652e-02 5.6626257567271359e-03 -2350 2.2636182381125473e-03 3.5328287089458174e-03 -3.5984998855100709e-04 -2592 8.4003168262585734e-03 1.1098829401264042e-02 -8.3310943881760580e-03 -1770 -3.3088477024367301e-03 5.2687560734128542e-03 -1.4324661941474220e-02 -606 -4.6512839157724318e-03 1.1803145984882340e-02 7.8536228601803473e-04 -2591 1.8346490509336195e-02 5.7408655982441352e-03 8.1352437498239307e-03 -1620 7.5434143732206402e-03 -2.1693377626218905e-03 -2.4814874675807789e-03 -2687 1.3263807977451348e-02 5.6464649796371755e-03 -3.2530823080081310e-02 -1647 -9.5998489983168695e-03 3.1441263270676699e-03 -2.8015535192626562e-02 -1727 -1.0281602966818489e-02 5.5423788705790044e-03 -6.3303253695683121e-03 -582 -1.1452246149666043e-02 -3.6409710770574028e-03 -9.8972750292667614e-03 -823 -8.1723791643975238e-03 5.8217462938464177e-03 1.3782764462518521e-02 -2805 -9.8339775280714969e-03 -2.5384686770735271e-02 8.6847828125276236e-03 -2810 -4.5331603125449227e-03 -3.8312826382910564e-03 2.1001738866005735e-02 -2809 1.8234545653570309e-03 -1.0818361437048889e-02 1.8624106989270856e-03 -2190 8.9568409030958227e-03 -7.1379992028638151e-03 -1.5029988213199830e-02 -2070 6.7200890557705126e-03 -1.7311215036986047e-02 -4.5283630407876680e-03 -2002 1.4893411104266922e-03 -5.8601364842106925e-03 -8.8973336049360434e-04 -2003 2.0235610184328172e-02 4.2716215889692204e-02 4.1884506806649253e-03 -2068 -5.4827499669727374e-03 2.3410154587474013e-03 2.6665373192884421e-03 -1478 -1.0123744386463516e-02 -2.8565443159634569e-02 -5.1402123287391036e-03 -2905 4.1688753587409699e-03 3.1191574324119262e-03 6.6461375347606150e-03 -2906 9.8248035429995169e-03 1.5154776666844337e-02 1.0598550139488034e-02 -2572 -1.7625671319695228e-03 5.2700912078128270e-03 2.1151865756130297e-03 -384 -1.6245380710955212e-03 -1.8657030631146997e-02 -1.4918633023680223e-02 -1285 5.1048283249084904e-03 7.5213799709658268e-03 -4.2152592889484501e-03 -1287 -1.8924815907765857e-02 -1.5436939592750594e-02 -1.9283336611656925e-02 -382 -1.0432983444236979e-03 4.8480843124547047e-04 2.4330287483555124e-03 -2313 -2.2307943133006835e-03 2.6768243359833018e-02 1.2253047799774012e-02 -1843 -3.7345040417349233e-03 4.9492801611032648e-03 -2.3669929297025377e-03 -1844 -1.0284747756927198e-02 -3.6070719390267271e-02 -9.7730720530250781e-03 -2057 5.4701922999387531e-03 8.7090784242338914e-03 -1.8790516638911312e-03 -2058 9.0672145680872219e-03 -1.0447912477102746e-02 -9.4697673840828441e-03 -2056 7.0638079750638162e-03 1.1753744772353262e-03 4.6758925113052038e-04 -387 1.0590566342351582e-02 -8.6111520013002953e-03 1.4512768012615734e-02 -2524 1.4062873559601387e-03 2.8886375550715871e-03 6.2338686960615132e-03 -2525 1.2735793989414858e-02 2.2710219522354514e-02 2.3936942108730448e-02 -2573 -1.7654522653047150e-02 -1.5881836920768992e-02 2.8594827720776570e-03 -2688 2.1167805064394207e-02 -9.8474333530697618e-03 -3.4898415403639984e-03 -1748 9.0543983345311510e-03 1.6845122377084538e-03 1.8625661856371593e-02 -2686 3.0865826403173010e-03 3.5145407491327467e-03 5.6635539304914569e-04 -2726 3.4202426333268120e-03 -3.6509381629255730e-03 4.0913582194690478e-04 -1911 5.8980712735181131e-03 -2.0382893102108928e-02 -5.7479576471118577e-03 -1856 -1.1571050853789833e-02 -2.1771322200843241e-02 2.1937654745202467e-02 -2089 -2.1928077319657915e-03 3.3109360528119748e-03 3.7386783801203108e-04 -1446 2.5173161675383016e-02 -1.4667758069494176e-02 3.7795746188780204e-03 -20 1.1273050608215760e-02 -1.3568571453264584e-02 2.9096413751964786e-03 -1645 -6.2274889726352690e-03 -1.0805270493717167e-02 -3.0534789136016818e-03 -1479 -7.2966314695926083e-03 -9.9348201726441668e-03 -1.8926812329880249e-04 -21 7.9073830973045277e-03 1.4754748531581650e-02 1.1006922287851790e-02 -19 -3.4237918839828282e-03 2.7809218192081900e-03 1.3853101260706026e-03 -2919 1.7433719444464300e-03 1.4778500671300539e-02 -5.9347733404396660e-03 -2994 1.4085714449149885e-02 -8.0280403274516805e-03 8.7030152580008808e-03 -2811 2.7185667144321971e-02 9.1282575271397319e-03 -4.2083857056650711e-04 -2950 2.3986927474144251e-03 4.9091199025676959e-03 6.2936359132393432e-03 -2725 6.5061253191386406e-03 1.4749487150760908e-03 1.1957958474925888e-03 -2727 9.9321193578098231e-03 -1.7808180098086001e-02 -1.4663159637145873e-02 -2706 5.4009058519759755e-02 -3.6303029251524206e-03 3.2029094184612243e-02 -2992 3.4761701415881351e-03 -1.0324183182760792e-04 -2.5206530873104903e-03 -385 1.1219223666300226e-03 -4.3152747514284412e-03 -1.8861910633963532e-03 -584 9.6841896710046591e-03 -4.8148599599224188e-03 -2.4676166467902803e-02 -386 9.1867603092034061e-04 -1.2535145148597692e-03 -6.6544327787191812e-03 -1646 -4.2560033853740091e-03 1.6262829681830196e-02 1.5820108351526287e-02 -2704 -1.8186603986143340e-03 -5.3826963958432698e-03 7.6347369563631935e-04 -2705 6.0897994323571856e-03 -4.1086744861450423e-03 1.1989351016388537e-02 -799 -2.3118216786526557e-03 -3.3107243216467201e-04 -1.0092202769570210e-03 -1268 3.9823718623217229e-03 -1.3743200197728211e-02 -1.6695343521262080e-02 -1986 2.1376762695962171e-03 -4.7693629140322562e-04 -9.0715571098080924e-03 -1985 -1.3236053267443955e-03 2.0626900661730112e-02 -2.8010697150860651e-02 -1984 -3.0338931048674743e-03 3.6027419679632599e-03 1.2978255434279528e-02 -1267 -2.9317324903904316e-03 1.7098609294979993e-03 -5.6068955123058392e-04 -2785 -2.2591373142622374e-03 8.5409648657612828e-04 8.3576030833949176e-03 -2786 -2.6806970679325162e-02 4.1277371658416488e-03 -9.3965703205955535e-03 -1269 3.0610505613625928e-03 -9.0602372869880883e-03 3.8728572861263339e-03 -2827 6.3441586311444866e-04 -5.2529170327444175e-06 1.6739809309584404e-03 -2951 -1.7438090660565803e-02 1.1580237938313552e-02 2.2932866169090800e-02 -1830 -1.9428037410018299e-02 2.0043152415169484e-02 -2.2537489865626228e-02 -2949 -1.2313255065673151e-02 1.9330980201016285e-02 -1.0501065762158578e-02 -2693 -3.0327667198016162e-04 -7.6804525838496916e-03 1.2882954774925444e-02 -2192 1.1367078430934449e-03 1.0310215764314924e-03 2.4716631656128280e-03 -1837 -1.5695756952759544e-03 -4.1236232269697241e-03 -1.8862802426753281e-03 -1331 -3.0266088040518890e-02 1.0556134186828202e-02 1.6110525051973600e-02 -1621 2.2007269125250040e-03 5.2601045921156532e-03 -5.5273253251765866e-03 -1367 -1.0541933302075946e-02 -6.2931494558418415e-04 -1.5802375220048497e-02 -1987 -7.8467919130005680e-03 9.0992807061206031e-04 1.6898028755791125e-03 -2938 2.2821761158522331e-03 2.5481044506645732e-03 -4.2863347083958673e-03 -1839 1.2333011365517428e-02 7.3568305506181123e-04 1.6768597352909195e-02 -1876 -2.6668690242900202e-03 5.0831166342991951e-03 3.5452495867161740e-04 -1188 1.4322255135484498e-02 -1.8013537201340836e-03 1.8653060949248117e-02 -625 -5.7279045137221521e-04 1.9741990660241391e-03 -1.9261781849669942e-03 -2324 -2.9408864881908425e-02 1.4548970317235935e-02 1.5663481245818112e-02 -2966 8.1428785528543982e-04 -4.0754092404650302e-03 5.1025126855777821e-03 -685 9.9877862064503414e-04 -3.5711466148328256e-03 -7.5074916283614397e-04 -1812 -7.7485958279774362e-03 -1.6250486748139850e-02 1.4403281259388730e-02 -2449 -6.7271224680158818e-04 -2.6675248508395140e-03 -2.0011991955542130e-03 -1609 1.7000423650560400e-03 4.0112895132058853e-03 1.9097603392632953e-03 -71 1.9145658473857477e-02 -7.4988806380283796e-03 -1.0831473894232623e-02 -811 8.3166826297705152e-04 -7.7494943810788187e-03 -5.6396005637418083e-03 -2405 -7.1769296572635945e-03 -1.5441082222525946e-02 6.3649057226098068e-03 -1253 -5.1055898619646132e-03 -1.6938509221759268e-02 -4.1901514923335090e-04 -252 -1.5132767024598899e-02 1.1167414285230676e-02 3.0568921106489684e-02 -1862 1.5694999198779848e-02 -1.0371396809043211e-03 1.5557808240791504e-02 -813 -1.9252238726656335e-03 -6.6311258167506210e-03 -1.3352624437547872e-02 +1497 2 3.8692754524846124e-01 4.4005135488793817e-01 6.8027067297961290e+00 5.5831272410063155e+00 1 1 0 +2401 1 -7.3547395604658661e-01 2.8088432936816430e+00 5.9999842940434611e+00 7.5341673350383074e+00 0 0 1 +498 2 3.0554141478230923e-01 3.1386470457186180e+00 2.2943733261485031e+00 5.1875440798585783e+00 0 0 0 +496 1 -7.5716565194584284e-01 3.8873560175490196e+00 2.3951000308343597e+00 4.5394769377363851e+00 0 0 0 +497 2 3.7474917326292168e-01 3.7024128468444144e+00 3.2217803242562795e+00 4.1929178141452947e+00 0 0 0 +141 2 3.2819006595815370e-01 2.5785003546035381e+00 5.9522998290113884e+00 5.8385480391059792e+00 0 0 0 +139 1 -7.7172999478983184e-01 2.0053458831978461e+00 5.9351684255357595e+00 4.9823207910634197e+00 0 0 0 +140 2 3.4612974959574128e-01 1.9901552204785218e+00 4.9986259421397863e+00 4.6918048080889641e+00 0 0 0 +1528 1 -7.5149674240312681e-01 1.2212058305113851e+00 3.1560995554557962e+00 5.1718212890067647e+00 0 0 1 +1530 2 3.7575023559399656e-01 1.0614876365158610e+00 2.8589915602608413e+00 4.2601977545295187e+00 0 0 1 +239 2 3.1918884951446297e-01 3.4548424578221191e+00 6.8686033008322411e+00 4.0968412335733095e+00 0 0 0 +1631 2 3.6861828487030079e-01 3.9941113970107973e+00 8.2656574262085822e+00 3.7036119701634340e+00 0 0 1 +238 1 -7.2526545622797589e-01 4.2937849132106294e+00 7.3521044049343605e+00 3.8476838702946998e+00 0 0 0 +1529 2 3.8946339762840293e-01 4.7692250699647681e-01 2.8107643958401316e+00 5.8055619177966395e+00 0 0 1 +803 2 3.6060640616141898e-01 5.1999339494958026e+00 7.1414015202400929e+00 5.2920488833458919e+00 0 0 0 +25 1 -6.8827487728119863e-01 3.0985740485415683e+01 2.1645132256403783e+00 7.1925310016229442e+00 -1 0 0 +27 2 3.9080868164496113e-01 3.1038026593265343e+01 1.2354407250465411e+00 6.7561483851304862e+00 -1 0 0 +2163 2 3.6472103780410930e-01 4.6878345557312040e-01 4.4573173444597218e+00 8.2821613647545185e+00 1 1 0 +1496 2 3.6063498463225496e-01 5.7206768577255742e+00 2.4384675008031360e+00 7.1873570706862715e+00 1 1 0 +115 1 -7.4965480601589229e-01 3.9517920662385966e+00 4.5447061663723476e+00 2.6662584102276901e+00 0 0 0 +1085 2 3.3764339144646993e-01 3.9978584926219818e+00 5.4230104078563821e+00 3.1053878503627486e+00 0 1 0 +314 2 3.5708750153667096e-01 1.0310030023560768e+00 6.7316041319369146e+00 3.3734266629564154e+00 0 0 0 +819 2 3.6128343578796446e-01 4.0463343017695772e+00 7.1003506727668608e-01 3.6622194337536271e+00 0 1 0 +2403 2 3.5806910955956361e-01 3.1226344268198925e+00 5.0377455961668165e+00 7.5171760439731976e+00 0 0 1 +1574 2 3.5863203818711292e-01 4.9947645983585964e+00 1.2493041620163177e+00 5.6377122255901835e+00 0 0 1 +116 2 3.4196008866457084e-01 4.7958254257633097e+00 4.5134813120446164e+00 2.1983078109383745e+00 0 0 0 +1636 1 -7.3478551595100094e-01 5.6121875121579743e+00 9.8694416382053440e-01 6.3597906501324371e+00 0 0 1 +2065 1 -6.8215047066870260e-01 1.6875908310066173e+01 1.1238310027866776e+01 5.4081336330899350e-02 0 0 1 +802 1 -7.2240461296520764e-01 6.0892988070798753e+00 7.3641709926087646e+00 5.7407764588525003e+00 0 0 0 +59 2 3.5081337980355071e-01 1.3604526173929814e+00 2.3513564015736548e+00 2.0377862637213977e+00 0 0 0 +33 2 3.6353567283317345e-01 3.0775061814683362e+01 6.5696256871609071e+00 2.6276539222916169e+00 -1 0 0 +2127 2 3.8311301768239048e-01 3.6974335831421676e+00 2.7027373781194757e+00 1.4961865571696141e+01 1 0 0 +550 1 -7.4281091881652961e-01 2.3465162274577466e+01 9.3744257059057343e+00 1.5241859744894187e+01 0 0 0 +309 2 3.7176965299895415e-01 1.4990887604490121e+01 2.5382454665563348e-01 2.1346503640246048e+00 0 0 0 +2232 2 3.4815014742283323e-01 8.5202267262527187e-01 5.3847185145336800e+00 4.3093648474523089e-01 1 0 1 +226 1 -7.4722095769484009e-01 6.0692884597532881e+00 2.3731132049765241e-01 1.3056780543916178e+00 0 0 0 +1637 2 3.6806353395792374e-01 6.5164572239659728e+00 8.5646744910183303e-01 5.9444090391217541e+00 0 0 1 +260 2 3.5228697506239837e-01 5.8972736974633246e+00 7.8289186664455324e+00 6.5863339763837985e+00 0 0 0 +1086 2 3.2722459596763726e-01 7.0330455928520674e+00 5.8850176611591190e+00 6.8095906828009625e+00 0 1 0 +1840 1 -6.9152209464673109e-01 7.3245865814791085e+00 7.9057953792723765e+00 1.2980778971057452e+00 0 0 1 +2612 2 4.1176928679744829e-01 7.0756137615931474e+00 8.4166252144604954e+00 2.1531585977535128e+00 0 1 1 +1842 2 3.6725157545857429e-01 8.3748740565416746e+00 7.8690080028348319e+00 1.3560226011424448e+00 0 0 1 +963 2 4.1022870020113211e-01 9.9106967870758638e+00 8.0146702338176699e+00 7.2466157795297530e+00 0 0 0 +1084 1 -7.4044322693270392e-01 7.6057467080876133e+00 5.0781976218288616e+00 6.7743760963270709e+00 0 1 0 +1663 1 -7.1834560936369407e-01 9.9879391215874271e+00 8.0388811719689492e+00 1.2917807541733919e+00 0 0 1 +821 2 3.5209674216131409e-01 6.9247313199235387e+00 4.3047612584180914e+00 6.9943975000286365e+00 0 1 0 +1791 2 4.0841331548659748e-01 7.7878722270508298e+00 5.3818187244858136e+00 5.1636842205127689e+00 0 0 1 +2023 1 -7.3605189371990465e-01 1.1063137080072600e+01 6.0098264472003251e+00 4.7345199683786516e+00 0 0 1 +1664 2 3.6238506868933806e-01 1.0108354841357976e+01 8.8072390044573137e+00 1.9305013188119438e+00 0 0 1 +1767 2 3.6100076072975557e-01 1.1741733648682450e+01 5.8658042545439084e+00 5.4513143091575005e+00 0 0 1 +2311 1 -7.3005291084991386e-01 8.3020764393069832e+00 5.1948566338776221e+00 4.3179489922325596e+00 0 1 1 +2312 2 3.9274744365696557e-01 9.1759366291491578e+00 5.5291322309174307e+00 4.3792866152146628e+00 0 1 1 +303 2 3.8608151180006473e-01 1.2482611497403401e+01 1.6658621953141555e+00 7.1576373240832911e+00 0 0 0 +1853 2 3.8557910794412215e-01 6.6913261295433673e+00 8.6875135976398994e+00 4.3705239171971151e+00 0 0 1 +1852 1 -7.6091540778352407e-01 6.8668361281846897e+00 9.2238953384065479e+00 3.5736208524521458e+00 0 0 1 +829 1 -7.3432390170804673e-01 1.2651767705075731e+01 2.5248313732060534e+00 7.4965512157935255e+00 0 1 0 +2875 1 -6.8813502015404293e-01 9.1874051384777449e+00 7.6860288086314632e-01 7.6608447591038757e+00 1 1 0 +2759 2 3.7682339456265845e-01 8.5249450804126656e+00 3.3731054837881027e+00 4.0641841504019780e+00 0 1 1 +249 2 3.6791165233171941e-01 7.2214553136648609e+00 4.7206182695467334e+00 2.3723286638248067e+00 0 0 0 +993 2 3.9800531948136814e-01 7.9893180393450729e+00 1.2276942134777038e+00 4.9666634620494534e+00 0 1 0 +401 2 3.6396631747563196e-01 7.2262707803170203e+00 5.8369412728614911e+00 1.3803763554044857e+00 0 0 0 +247 1 -7.0764043316735903e-01 7.0942828324841241e+00 4.9106461584568386e+00 1.4288882775766745e+00 0 0 0 +1103 2 3.7230345163383838e-01 1.1235962979488763e+01 5.4404357695885279e+00 3.9635214837262134e+00 0 1 1 +2876 2 3.9583804731902583e-01 9.0582611669642077e+00 1.2231093581437821e-01 8.4012470775560555e+00 1 1 0 +1011 2 3.1959728574581830e-01 1.2437946514638131e+01 1.8732979306873965e+00 3.6181266905009841e+00 0 1 0 +1893 2 3.7036844773404975e-01 1.1900156966658409e+01 7.4502596457796590e+00 3.8797921320454436e+00 0 0 0 +2877 2 3.7223487628956575e-01 1.0152687605106527e+01 7.0850125780251816e-01 7.3676117410643789e+00 1 1 0 +1841 2 3.9790957842087205e-01 9.8835907129974281e+00 8.4957358744048488e+00 4.8066780575509332e-01 0 0 1 +203 2 3.6407021234816317e-01 9.4391284270869331e+00 2.2161312855505408e+00 3.4466407008994877e+00 0 0 0 +2466 2 3.9557744289353053e-01 1.0478382294700539e+01 1.9034549670425855e+00 1.1912053570753032e+00 0 1 0 +1700 2 3.4174585658026774e-01 7.6681567751202886e+00 4.9737131302251258e+00 8.6429890150973634e+00 0 0 0 +218 2 3.9489709747944879e-01 1.0903840596118812e+01 5.9682168503065460e+00 7.8542237295695791e+00 0 0 0 +202 1 -6.9246227426584595e-01 8.5034914220925781e+00 2.4316557415608751e+00 3.8001377954723088e+00 0 0 0 +1104 2 4.1528548950455579e-01 8.3645436315872566e+00 3.1379844007295282e-01 6.1604329151249164e+00 0 1 1 +991 1 -7.6182583273993854e-01 8.0263667515679185e+00 3.4744605461058575e-01 5.2922470899230607e+00 0 1 0 +102 2 3.6492516758405213e-01 8.0013989365832714e+00 1.4028078508187747e+00 1.5379165763135083e+01 0 0 0 +2029 1 -7.8283617067763300e-01 1.2424136860279537e+01 5.4791209410548314e+00 7.1612535440534977e+00 0 0 1 +2025 2 3.5494230815894440e-01 1.2591724131934392e+01 4.5209311627752200e+00 7.2145026163518384e+00 0 0 1 +2031 2 3.9304550594436322e-01 1.3267174250891356e+01 5.8828315339307844e+00 7.3758229847280052e+00 0 0 1 +1111 1 -7.5194924903800975e-01 1.1789258909767749e+01 4.2473893606497439e+00 2.7973156311830794e+00 0 1 0 +1112 2 3.8149161266254628e-01 1.1325719951844707e+01 3.5140850737691274e+00 2.4518247585030761e+00 0 1 0 +1009 1 -6.7933790730634036e-01 1.2973399971679061e+01 1.2394482882933624e+00 4.1644406722513532e+00 0 1 0 +1113 2 3.2793652825314779e-01 1.2508853849264057e+01 3.8651741180754389e+00 3.4664525276051128e+00 0 1 0 +983 2 3.8034871224020939e-01 1.6372200409886108e+01 3.2828243758410647e+00 5.8612475722303015e-01 0 1 0 +982 1 -7.3826897087316046e-01 1.6538672856583677e+01 2.3344314174687226e+00 3.5593412007078301e-01 0 1 0 +196 1 -7.4549107934801362e-01 1.2855296474912164e+01 5.4732616414580368e+00 3.3990948313494568e-01 0 0 0 +379 1 -7.5307613958567499e-01 1.7194559173341730e+01 6.4295472504929743e+00 3.1166682064054481e+00 0 0 0 +954 2 3.2002351836232878e-01 1.5888333805783443e+01 5.3623905112413706e+00 1.6366381459492292e+00 0 0 0 +197 2 3.9353316471972760e-01 1.2366235949554447e+01 5.2689950079443948e+00 1.0819343253779545e+00 0 0 0 +308 2 3.8053566932308219e-01 1.5827400649134340e+01 1.5102383139749007e+00 1.6944312751168922e+00 0 0 0 +2674 1 -7.5251563708889002e-01 1.6616504346881126e+01 3.8056411956327221e+00 3.9613426800009357e+00 0 1 0 +2675 2 3.6376048259316174e-01 1.5794339487607786e+01 4.0211703398579264e+00 4.4872213323852286e+00 0 1 0 +381 2 3.7093646473040048e-01 1.6989489495356811e+01 5.5370106263854231e+00 3.4535566149823853e+00 0 0 0 +2676 2 3.5623982090771111e-01 1.6485199958957558e+01 2.9341789231643403e+00 3.5795848239229255e+00 0 1 0 +221 2 3.1224109180106219e-01 1.3507875971913872e+01 5.1731003897988455e+00 4.2683251224427101e+00 0 0 0 +220 1 -7.3383156196182264e-01 1.3725487235521911e+01 4.3585589872930308e+00 4.6808284626942935e+00 0 0 0 +222 2 3.2778663941490466e-01 1.3273816959634512e+01 4.4026137329898694e+00 5.5445678182165032e+00 0 0 0 +958 1 -7.4610017930944261e-01 1.5663290274330219e+01 4.9796893426559716e+00 7.5150390905448938e-01 0 0 0 +960 2 3.7551283813146968e-01 1.4736666783744411e+01 5.3254716418768213e+00 7.1438023451097432e-01 0 0 0 +320 2 3.4147571367646573e-01 1.4548277543914198e+01 7.7726612206472465e+00 8.6200265130584590e+00 0 0 0 +380 2 3.8288888396260523e-01 1.8086680823606102e+01 6.6958699296408941e+00 3.4346868318853470e+00 0 0 0 +319 1 -7.5289236146249161e-01 1.4504190487958663e+01 6.8302827431032336e+00 8.3585598210513634e+00 0 0 0 +2078 2 3.6896467802253480e-01 1.9837126505526836e+01 9.4872638994601708e+00 1.4545504814288625e+01 0 0 0 +2042 2 3.8133266548460326e-01 1.8632936926135795e+01 1.8847209418642434e+00 1.0661866182918509e+00 0 0 1 +525 2 3.5767804986002788e-01 1.6044729651565728e+01 7.7152962602539885e+00 4.9279045177504499e-01 0 0 0 +526 1 -7.1675182179051944e-01 1.7338617473894164e+01 3.9073780698890020e-01 4.3862477545242067e+00 0 0 0 +527 2 3.7606096783862469e-01 1.6471133582835396e+01 6.4871802983856663e-01 3.9292007431044085e+00 0 0 0 +534 2 3.5687435904323250e-01 1.8050783975465485e+01 3.7181143555290390e+00 5.1537709798264908e+00 0 0 0 +119 2 3.7458680445139569e-01 2.0487263421233615e+00 5.4481575893417078e-01 1.3498519365226000e+01 0 0 0 +307 1 -7.5313456861153183e-01 1.5516325859493993e+01 1.0041223608999403e+00 2.5148439529207085e+00 0 0 0 +434 2 3.6060382443901440e-01 2.8318372247716162e+01 6.0000350790735746e-01 1.3039033487948334e+01 0 0 0 +2538 2 3.7038237727101675e-01 1.5873081510603580e+01 7.3431633253088568e+00 4.2151889384124237e+00 0 1 0 +362 2 3.5138788653950254e-01 1.3822311947328766e+01 1.2399332735227380e+00 3.7058472510950380e+00 0 1 0 +1773 2 3.7574693015917909e-01 2.4710555149281316e+01 1.1915637515904558e+01 8.9573752514615723e+00 0 0 0 +1441 1 -7.3263272810282853e-01 2.6976878393661949e+01 3.0627092401548633e-01 6.9616920124764707e+00 0 0 0 +2049 2 3.5088136504355405e-01 2.7431266984046175e+01 1.4851721772360399e+01 4.7815946067125177e+00 0 0 1 +1311 2 3.5918535518609329e-01 1.1906016994206430e+01 1.4181562861585023e-01 5.7126228122925715e+00 0 1 0 +1194 2 3.4995179923095754e-01 1.7833416122412100e+01 1.5436461184933348e-01 9.0760596623794463e+00 0 1 0 +1144 1 -7.2894009311541352e-01 2.1625386814021507e+01 5.4650300718290135e+00 6.7230254595329866e+00 0 0 0 +2043 2 3.8805213934516697e-01 1.9877585541745020e+01 1.0369100917515413e+00 9.1741760286022211e-01 0 0 1 +532 1 -7.0517978497245426e-01 1.8491368955069976e+01 3.5217019209699156e+00 6.0490036778759615e+00 0 0 0 +533 2 3.9142658940071773e-01 1.8144895666077264e+01 4.3371633326148933e+00 6.6153233851801607e+00 0 0 0 +2041 1 -7.1168345284775480e-01 1.9352240103205951e+01 1.5571033521169870e+00 1.5405407560902771e+00 0 0 1 +1905 2 3.6418908688370261e-01 2.1605773287702167e+01 4.2765165277270425e+00 5.1106621918495518e+00 0 0 1 +1903 1 -6.9792797977161336e-01 2.1748551405429989e+01 4.0998926315357895e+00 4.1658099232003689e+00 0 0 1 +1217 2 3.7913386240549446e-01 2.2836463194848776e+01 5.2406299294258698e+00 2.9961168585826239e+00 0 1 0 +1904 2 3.6724890029640833e-01 2.1010627209303685e+01 3.3761847111544125e+00 4.0045156441401977e+00 0 0 1 +1216 1 -7.2604871901178580e-01 2.3447202645475159e+01 5.5920326273056826e+00 2.2944876098746829e+00 0 1 0 +248 2 3.3978223300435040e-01 2.3198037218540914e+01 7.6326540121433748e+00 2.6633349332777576e+00 0 0 0 +1146 2 3.4792706746670926e-01 2.1431062769332790e+01 6.3968311439957963e+00 6.5873809264560750e+00 0 0 0 +515 2 3.7066235504587541e-01 2.3336985121668135e+01 4.9569713602477519e+00 1.5211960503752682e+00 0 0 0 +1116 2 3.5646923248294565e-01 2.0298081690348930e+01 5.4854204901743469e+00 3.5506637971694550e+00 0 1 0 +1114 1 -7.0395571779608335e-01 1.9907703230303699e+01 6.1513486169178977e+00 3.0110646253217355e+00 0 1 0 +1115 2 3.8069079044468124e-01 1.9945826625468705e+01 5.9246211790915924e+00 2.0351856889836997e+00 0 1 0 +579 2 3.9547297628369682e-01 2.3996070039116375e+01 1.0529411602750995e+00 1.1165198143647250e+00 0 0 0 +585 2 3.7096507480798313e-01 2.3767754484183236e+01 2.6411712385066539e+00 1.1225288846698618e+00 0 0 0 +1196 2 3.5072559348999632e-01 1.9373676533195667e+01 2.4530216578494639e+00 4.7668697348213600e+00 0 1 0 +1714 1 -7.0802398477202177e-01 1.9900350884093399e+01 5.2222678995018956e+00 3.7497577490663969e-01 0 0 0 +2814 2 3.9150922204105332e-01 1.6699795914991270e+01 9.4769974678379248e-02 5.7930995252327664e+00 0 1 1 +2819 2 3.3914466909902691e-01 2.3808226622202906e+01 1.4027657188514016e+01 1.5194174847249243e+01 0 0 0 +583 1 -7.3812607951190867e-01 2.4143811703288495e+01 1.9114222006859189e+00 1.6122127404924802e+00 0 0 0 +624 2 3.5387842445422352e-01 2.4421069009592568e+01 6.6814349771311372e+00 7.2476246528316957e-01 0 0 0 +1195 1 -7.0634180393460455e-01 1.9969889729479270e+01 1.9322909693732215e+00 4.0979444083531487e+00 0 1 0 +1197 2 4.0772620806047699e-01 1.9396653865507815e+01 1.5237357262145894e+00 3.3353295837171375e+00 0 1 0 +418 1 -7.0399715143996378e-01 2.4418330292019323e+01 1.7532752213027898e+00 4.5070628850662953e+00 0 0 0 +420 2 3.8368844685430692e-01 2.4262150970924750e+01 7.7767358985760937e-01 4.5882878553516822e+00 0 0 0 +419 2 4.1155198449350688e-01 2.4460738669155493e+01 2.0224169088874415e+00 3.6037300525953690e+00 0 0 0 +1145 2 3.3232971594426863e-01 2.4543873230681669e+01 6.5476103457458166e+00 6.4993358688362211e+00 0 0 0 +1171 1 -6.8843097609044668e-01 1.3127471808587817e+01 1.5430342606026111e+01 5.2162038862750935e+00 0 0 0 +503 2 3.5852519131886351e-01 2.3431171518107213e+01 5.6038697706205145e+00 5.8644913703225265e+00 0 0 0 +1280 2 3.5376168279638437e-01 2.1067713619991196e+01 1.5516513195141689e+01 3.1292364926754366e+00 0 0 0 +502 1 -7.3571741856961170e-01 2.4383876101821894e+01 5.6246216646123770e+00 6.2255871204360247e+00 0 0 0 +884 2 3.3705342906758395e-01 2.0831958439525298e+01 8.4319099928220318e+00 1.4983513705461160e+01 -1 1 0 +2161 1 -7.2741868531417841e-01 3.1002324428745287e-01 5.3902843230030770e+00 8.4582030730450217e+00 1 1 0 +32 2 3.7224714013611548e-01 2.8969088068039767e+01 5.8853613725276244e-01 1.3415063196894363e+00 -1 0 0 +31 1 -7.0701682996664361e-01 2.8861481885382837e+01 1.6305346253392183e+00 1.2125555964014341e+00 -1 0 0 +1397 2 3.7287783474065178e-01 2.9021060975786416e+01 5.8230468622467777e+00 1.1493524979364806e+00 0 1 0 +615 2 3.8565372047805646e-01 2.4926495528292843e+01 2.4681537292063078e+00 6.2171953534894255e+00 0 0 0 +302 2 3.6922138072184107e-01 3.0448744544102141e+01 6.4864682511493870e+00 6.6729371988181709e+00 -1 0 0 +2901 2 4.2376035006718926e-01 3.0021935022741616e+01 2.3328327033627505e+00 7.4094868457492877e+00 0 1 1 +301 1 -7.8432242912457006e-01 3.0600037180261197e+01 6.9519317345137130e+00 5.8723762844978475e+00 -1 0 0 +58 1 -6.9908992171353024e-01 6.3748292073836732e-01 2.0463572721280681e+00 2.6294907465286599e+00 0 0 0 +240 2 3.3485166879456130e-01 3.0843398181986625e+01 2.1919511746150593e+00 2.1074553862407970e+00 -1 0 0 +2007 2 3.6413535825084464e-01 2.7884518960634296e+01 6.6614101874550382e+00 2.9471974124708211e+00 0 0 1 +622 1 -7.5750477464126409e-01 2.5145684392649883e+01 7.1849543661857584e+00 3.5392257365769353e-01 0 0 0 +1298 2 3.3441853145114819e-01 2.7818478639726820e+01 3.3144672824362722e+00 4.0335774579265600e+00 0 1 0 +448 1 -7.0318713721338333e-01 2.8097674324043851e+01 2.4598468287538888e+00 4.1297936159472464e+00 0 0 0 +2004 2 3.7851807512870878e-01 2.8277280394440744e+01 2.1676827663847433e+00 3.2511065976651894e+00 0 0 0 +1415 2 3.5501881145054931e-01 2.7398178513195557e+01 4.8176197476632554e+00 8.1955155867095399e+00 0 0 0 +935 2 3.7926192283897481e-01 2.7867354921700084e+01 2.3163446476640237e+00 7.1464374500543952e+00 -1 1 0 +934 1 -7.0550798053293162e-01 2.8514066684769428e+01 3.0309372866169420e+00 6.9865725072981961e+00 -1 1 0 +936 2 3.5802385594781078e-01 2.8350968993500395e+01 3.1826801669888085e+00 6.0233873348596116e+00 -1 1 0 +1654 1 -7.2778148499228823e-01 2.6000151339640546e+01 6.2984732742535758e+00 3.9240473831981197e+00 -1 0 1 +1656 2 3.8027277584560176e-01 2.5187286537297961e+01 6.1459731664565673e+00 3.3539954771306548e+00 -1 0 1 +1416 2 3.7533076508460606e-01 2.7486061051601464e+01 6.1751659468413065e+00 7.6778011869943370e+00 0 0 0 +1284 2 3.7296810722231194e-01 2.5695725667684769e+01 6.1010097723828309e+00 4.7757707803728042e+00 -1 1 0 +1282 1 -7.2633138156117139e-01 2.6533195522991019e+01 3.0430789772738978e+00 9.4074079366307362e-01 -1 1 0 +395 2 3.7194150494052364e-01 2.0721686406351484e+01 1.4825699905520535e+01 6.7864002498783798e+00 0 -1 0 +315 2 3.9182710238531726e-01 2.7194063305354611e+01 2.3585563875597009e+00 7.3548938961926469e-01 -1 0 0 +2005 1 -7.3670581211206421e-01 2.8797406268766185e+01 6.8426764115822305e+00 2.7028840681739510e+00 0 0 1 +1283 2 3.8989794328252242e-01 2.5720251978925841e+01 2.5003236123211270e+00 1.1432158812361251e+00 -1 1 0 +2454 2 3.5521705336813136e-01 5.1507876412977160e-01 1.3637905550535947e+01 1.3746168208106381e+01 0 0 0 +143 2 3.6506930274778204e-01 2.8548886820557613e+01 7.1302593790984945e+00 5.5261781302066835e+00 -1 0 0 +322 1 -7.1522081979271412e-01 2.7851815251966961e+01 1.1251230139737199e+01 1.0598254784622664e+01 0 0 0 +2006 2 3.8260586691915549e-01 2.8793657450713877e+01 7.7546719844509173e+00 2.2997713633332033e+00 0 0 1 +144 2 3.6242795555462648e-01 2.7062070631452631e+01 7.2243739405285794e+00 5.1544861901002568e+00 -1 0 0 +142 1 -7.4158746208401738e-01 2.7655742999010020e+01 7.0029279966475046e+00 5.9266458450432316e+00 -1 0 0 +128 2 3.6493793175219513e-01 2.9251866054560224e+01 1.8128122219449998e+00 2.9835519613040862e-01 -1 0 0 +893 2 3.7946920482746471e-01 2.0789415683959433e+01 5.0171134231841330e-01 4.9622184914003116e+00 -1 1 0 +613 1 -7.2930970719515864e-01 2.5354487785368573e+01 2.9206965939664045e+00 7.0171052428807306e+00 0 0 0 +1854 2 3.6046538469487516e-01 6.0186383954012292e+00 9.6181536881972463e+00 3.3021872686892668e+00 0 0 1 +313 1 -7.2860828500242214e-01 6.6309818808902365e-01 6.8670236808095488e+00 2.5073334000482266e+00 0 0 0 +489 2 3.8242671450949917e-01 3.2789655077764341e+00 1.0335182590066815e+01 3.1661711981267127e+00 1 0 0 +1582 1 -6.9633133541634928e-01 3.9175816189525694e+00 8.8798388320891473e+00 6.6440531322343496e-02 0 0 1 +1583 2 3.8330519894733267e-01 3.7157303505667616e+00 9.3075520118682071e+00 9.5043849871585739e-01 0 0 1 +1545 2 3.3547912585773454e-01 1.7513554097617570e+00 1.4264802299774038e+01 1.3255855811745821e+01 0 0 0 +487 1 -7.5962823214403985e-01 4.0623364446220558e+00 1.0069168258611036e+01 2.6871955226819590e+00 1 0 0 +488 2 3.3513510512049199e-01 4.4047292342860924e+00 1.0884175221904872e+01 2.3609347733608774e+00 1 0 0 +236 2 3.3992074273664707e-01 5.8140865525284569e-01 1.0447318523122952e+01 4.6983525142782989e+00 0 0 0 +1087 1 -7.7121238428502759e-01 2.2878236686215194e+00 1.0794053515937286e+01 4.6705075461661476e+00 0 0 0 +876 2 3.7577555404776669e-01 2.6906293270298849e+00 1.0167016969107877e+01 5.3443139055192077e+00 0 0 0 +1089 2 3.5301346996899213e-01 2.4523046410709441e+00 1.1721309434211925e+01 5.0512172834935525e+00 0 0 0 +988 1 -7.3980602252790906e-01 3.0605477789577495e+00 8.6425406263411908e+00 6.3050430950897791e+00 0 0 0 +989 2 3.5221983851749666e-01 2.7372684251186699e+00 7.7380758558943352e+00 6.3162320630704851e+00 0 0 0 +351 2 3.5476259391158621e-01 4.9008643683721811e+00 1.3370829450075949e+01 1.4978719937142511e+00 0 0 0 +349 1 -7.2438225240095444e-01 3.9668742629788083e+00 1.3106368663758122e+01 1.3619716573037230e+00 0 0 0 +2204 2 3.3502436980086803e-01 1.3133732729193814e+00 1.1046095576944669e+01 7.3879940582274928e-01 1 0 1 +2090 2 3.1416504629569597e-01 3.5713442770377184e+00 1.3601010630849697e+01 2.1393200249164996e+00 1 0 0 +2165 2 3.6187320847216919e-01 3.0809439330817803e+01 1.3842330112549433e+01 4.6223282175213347e+00 0 -1 1 +2822 2 3.8410087331911397e-01 7.0484164184591402e-01 8.6201759024897981e+00 2.2996257689948187e+00 1 0 1 +2821 1 -6.9317519523929871e-01 1.0510035515236795e+00 9.5837781336614452e+00 2.2453884041254644e+00 1 0 1 +2838 2 3.4514550685245993e-01 9.6234805605568241e-01 9.9084729669537506e+00 3.1471571998744992e+00 1 0 1 +2164 1 -7.5352117053148004e-01 3.0047419170952306e+01 1.3303786185264741e+01 4.3623085402350235e+00 0 -1 1 +975 2 3.7682730648664148e-01 4.1159794867671584e+00 1.3015015958314439e+01 5.9005683034394236e+00 0 0 0 +2066 2 3.8742997998029072e-01 1.6019479085528225e+01 1.1685737415708365e+01 2.1333527031933200e-01 0 0 1 +2935 1 -7.3059112897193779e-01 1.3639244652625697e+00 1.1859835077454461e+01 1.5196214658237747e-01 1 0 1 +2244 2 3.5548258327564458e-01 2.1573034557559936e+00 1.2211891396818533e+01 4.2478770601766352e-01 1 0 1 +990 2 3.5068291930645673e-01 4.0201368215177693e+00 8.5826932481606466e+00 6.5452969738789379e+00 0 0 0 +2149 1 -7.4148447957628705e-01 1.2019739267070590e+00 1.4672260592254840e+01 5.5630992204181284e+00 1 0 1 +973 1 -7.8775790214207508e-01 3.2808598996908067e+00 1.2848526359195688e+01 6.2732967928043202e+00 0 0 0 +762 2 3.6025664654146405e-01 1.9056954910051354e+00 1.4057376445312965e+01 5.5313206816203708e+00 0 0 0 +2795 2 3.9224283641486529e-01 2.6521176460952926e+01 4.6186126865153296e+00 2.5126444848059759e-01 0 1 1 +122 2 3.6819491116834224e-01 2.3324552592077765e+01 3.5796379652413099e-02 7.4527908359156143e+00 -1 0 0 +358 1 -7.4765682452255755e-01 5.4380659569255423e+00 1.3878425473942585e+01 4.4473440250118168e+00 0 0 0 +417 2 3.7382189272773941e-01 1.7560447634827046e+01 1.5143597939000566e+01 8.1699992837828930e+00 0 0 0 +961 1 -7.6642246769839772e-01 1.0042308679106254e+01 8.9584766183836724e+00 7.1840235780789001e+00 0 0 0 +962 2 3.6857664079591451e-01 9.1568370079591368e+00 9.4753221975802866e+00 7.3013392451650754e+00 0 0 0 +2030 2 3.8077556991114592e-01 1.1274953341341806e+01 9.1756604772778196e+00 8.2615689499298348e+00 0 0 1 +296 2 3.8390767271087611e-01 8.3870652149458866e+00 1.0498040232468407e+01 4.1447572130468879e+00 0 0 0 +1684 1 -7.2814409094719501e-01 7.3903507455065967e+00 1.1071556853951039e+01 1.2250354825262861e+00 0 0 1 +295 1 -7.5867788325900443e-01 8.3606792224635225e+00 1.1198565313529352e+01 4.7578819239418824e+00 0 0 0 +297 2 3.8050488962837858e-01 8.1992673935332281e+00 1.0810184886840672e+01 5.5982050466612767e+00 0 0 0 +752 2 3.7058099998233940e-01 6.9641895936893086e+00 1.2308111468798824e+01 6.9658155757407219e+00 0 0 0 +751 1 -7.4278412639228442e-01 6.8317676886338417e+00 1.3225459031894374e+01 6.7438315667638911e+00 0 0 0 +333 2 3.2594448957973510e-01 1.0940086812021329e+01 1.0907622350149609e+01 2.3696570893195164e+00 0 0 0 +1721 2 3.6555965852011851e-01 1.0108207122612409e+01 1.2939405571008342e+01 1.8138351188170265e+00 0 0 1 +1720 1 -6.7979005435637685e-01 1.0139115176726332e+01 1.2619264235791288e+01 9.1494055886703352e-01 0 0 1 +1722 2 3.1408722434581637e-01 9.3407660548652700e+00 1.3012442918969811e+01 4.6724181254637065e-01 0 0 1 +513 2 3.5331149898951131e-01 6.1258136386977373e+00 1.3650690886881765e+01 5.1785295600723549e+00 0 0 0 +359 2 3.3369997701578780e-01 5.9767384049249790e+00 1.3598746260467328e+01 3.6815405445583935e+00 0 0 0 +1686 2 3.5240375771748844e-01 6.9460097646681369e+00 1.1918500061515987e+01 1.4366910383412708e+00 0 0 1 +2280 2 3.7119825856449817e-01 7.2401035636003090e+00 1.4224140737357329e+01 1.1984115186101394e+00 0 0 1 +332 2 3.4834558761665085e-01 1.0853174350853518e+01 1.0627732179932620e+01 6.3333012192419424e+00 0 0 0 +994 1 -7.1059773710688490e-01 1.1083273692355830e+01 1.1613748775864417e+01 6.4686656234184738e+00 0 0 0 +341 2 3.3735279609069491e-01 7.0764838609572767e+00 9.4518567379441283e+00 7.8554150256115385e+00 0 0 0 +340 1 -7.5518289903745917e-01 7.6864902765107814e+00 1.0199138450529055e+01 7.5550827779115322e+00 0 0 0 +2278 1 -7.8009249592433916e-01 6.8004361878348911e+00 1.3720896671082105e+01 1.9284680084598940e+00 0 0 1 +331 1 -7.3418890315657181e-01 1.0267332256594415e+01 1.0457999131588730e+01 2.9030361238710336e+00 0 0 0 +1272 2 3.1651297923855615e-01 1.0320620493004430e+01 1.1044707571318979e+01 3.6633258241542537e+00 0 0 0 +2279 2 3.0287135476369220e-01 7.5119692850690356e+00 1.3642877563459185e+01 2.5709230452345122e+00 0 0 1 +552 2 3.1157287016550422e-01 2.2611381264759519e+01 9.5628153947696610e+00 1.4801127234723051e+01 0 0 0 +1071 2 3.6370197009760108e-01 9.2109793110600613e+00 1.2678296857439486e+01 4.1086137374479605e+00 0 0 0 +753 2 3.8398429683529961e-01 7.6805428689642357e+00 1.3657573344140784e+01 6.9011137950325541e+00 0 0 0 +996 2 3.7894194562482475e-01 1.2011414776837247e+01 1.1748453532754196e+01 6.1451088221579040e+00 0 0 0 +649 1 -7.3435592382189663e-01 1.3706413328780920e+00 1.3953920709658846e+01 1.4118039306937186e+01 1 0 0 +1069 1 -7.7126130153104555e-01 9.6710350248297203e+00 1.3461439256148447e+01 3.6996363509544015e+00 0 0 0 +698 2 3.8485248110641607e-01 1.0125965419176254e+01 1.2973195546590683e+01 7.2780509680289356e+00 1 0 0 +2720 2 3.5902734372621675e-01 2.5263573307082972e+01 1.4868669781495987e+01 9.8064356926907124e+00 0 1 0 +806 2 3.6058437088561074e-01 1.0569862483970079e+01 1.3309830973784278e+01 3.9004031613580823e+00 0 0 0 +524 2 3.7925251782370911e-01 1.7318664733722265e+01 7.6410073785404355e+00 1.4165581848616602e+00 0 0 0 +523 1 -7.2080194552706012e-01 1.6846011175578873e+01 8.1855784635332398e+00 8.6426136208733129e-01 0 0 0 +1892 2 3.3559177520446359e-01 1.2031997034331688e+01 8.9284412640576942e+00 3.4755052150328223e+00 0 0 0 +977 2 3.5661278293438609e-01 1.2923340356870726e+01 1.3924500954723241e+01 2.8572605709043160e+00 0 0 0 +1270 1 -7.6167366620956856e-01 1.3625015813317914e+01 1.1635889254372275e+01 5.3936156072980204e+00 0 0 0 +1271 2 3.2283997763176686e-01 1.3363419589478919e+01 1.2055222357868308e+01 4.5025536195181903e+00 0 0 0 +1891 1 -7.1511451722943142e-01 1.2546260930801695e+01 8.1678258594311988e+00 3.7054756391045220e+00 0 0 0 +374 2 3.7100735648407795e-01 1.4671305077239150e+01 8.4693641702357034e+00 6.5010617381468663e+00 0 0 0 +999 2 3.7673389148422226e-01 1.6858188839617025e+01 1.3260840101787142e+01 3.6536277097279157e+00 0 0 0 +976 1 -7.6500251118257601e-01 1.2495194270294981e+01 1.3064141836183607e+01 2.9073867924432082e+00 0 0 0 +2537 2 3.4154322829704103e-01 1.4449902508342412e+01 8.1164653714006967e+00 4.4858453812232160e+00 0 1 0 +945 2 3.5756763237003220e-01 1.2874768239465711e+01 1.2619148926920694e+01 2.2110146519842866e+00 0 0 0 +1925 2 3.4095981919838175e-01 1.5692511942686176e+01 9.6147015634048660e+00 3.3486570916909053e+00 0 0 0 +1924 1 -7.2404266196428380e-01 1.5221695559658110e+01 1.0459664212803514e+01 3.1680209738104517e+00 0 0 0 +1926 2 3.1717212270082579e-01 1.4608794019453144e+01 1.0494730065994817e+01 3.9453561254685292e+00 0 0 0 +1128 2 3.7402235582157090e-01 1.5045005346193431e+01 1.3260823429527811e+01 1.1281503733802314e+00 0 0 0 +1126 1 -7.7268408356808438e-01 1.4601781128230201e+01 1.2432780275579875e+01 1.0212338110373231e+00 0 0 0 +1127 2 3.4268230352755635e-01 1.4871898918240923e+01 1.1922153454176515e+01 1.8370952174557196e+00 0 0 0 +997 1 -7.5019155484829303e-01 1.6185721333585239e+01 1.2897821630729570e+01 4.2814784430507942e+00 0 0 0 +1962 2 3.3676684637680410e-01 1.5928223210051311e+01 1.2042646060180729e+01 3.8470288527138665e+00 0 0 1 +373 1 -7.3021666868400825e-01 1.4189227303820456e+01 9.1725985459417014e+00 7.0508923828249097e+00 0 0 0 +558 2 3.4524258190978491e-01 1.7275618272182506e+01 1.1647239440605443e+01 5.1520170782588597e+00 0 0 0 +2536 1 -7.3118747489834701e-01 1.5339710978302147e+01 7.8541542818862613e+00 4.8443859035052554e+00 0 1 0 +1758 2 3.6338525820394019e-01 1.4247358999328338e+01 1.2307757516201359e+01 5.7088167338458087e+00 0 0 0 +2450 2 3.8953285002764459e-01 1.5772388334175179e+01 1.3474992876695412e+01 6.0753715007786573e+00 0 0 0 +1060 1 -7.7834296710778439e-01 1.5161746436035390e+01 1.3765190928991137e+01 6.7030838997542705e+00 0 0 0 +1052 2 3.7091095558428605e-01 1.8874535562468576e+01 1.0112325706223350e+01 4.9605214777657274e+00 0 0 0 +952 1 -7.4211657418473165e-01 1.5899211349038151e+01 1.4813070298548183e+01 3.5141057336039394e-01 0 0 0 +1160 2 3.5794340822123361e-01 1.2922128370188350e+01 1.5070432297648827e+01 4.3865123063701645e+00 0 0 0 +1061 2 3.9340394586448718e-01 1.4686691678917770e+01 1.4503427917135310e+01 6.3605934765078400e+00 0 0 0 +2157 2 3.4733707346504189e-01 1.2826235656375388e+01 1.5424466508002052e+01 1.4236822660756496e+00 0 0 1 +271 1 -7.3284933903259986e-01 1.9797012417861556e+01 1.0198648564118789e+01 2.1808724178878028e-01 0 0 0 +2843 2 3.6286479239287156e-01 2.5028410449812743e+01 1.3224309494639456e+01 1.5379719493730903e+00 0 0 1 +2865 2 3.8321205054164886e-01 2.4981110364415954e+01 1.1787790131490294e+01 1.0665015240334432e+00 0 0 1 +2336 2 3.4760543734255200e-01 2.6794298776418618e+01 4.7204019993334845e-02 1.1493774722804988e+01 -1 1 1 +560 2 4.1327771374331596e-01 2.4698030269425669e+01 1.4859157153438852e+01 6.4557658311544310e+00 0 0 0 +1002 2 3.6831536018504235e-01 9.0709264057027355e+00 1.5175519125043248e+01 4.0706270566276270e+00 0 0 0 +556 1 -7.1120261122680717e-01 1.8023493016279513e+01 1.1324096084893167e+01 5.7339965207913473e+00 0 0 0 +557 2 3.7278171676663396e-01 1.8744556612773923e+01 1.1998961480393996e+01 5.7709015871253806e+00 0 0 0 +1051 1 -7.5106068386773239e-01 1.9463097868557114e+01 9.4375597435248260e+00 4.4429166969099612e+00 0 0 0 +1141 1 -7.0865497417696000e-01 2.3622330297184394e+01 8.0976140201513047e+00 3.4823814250952703e+00 0 0 0 +1143 2 3.5276029334045467e-01 2.3877297116691985e+01 8.4869227450750060e+00 5.9959241109173318e+00 0 0 0 +1142 2 3.8480780230000083e-01 2.4009491806606366e+01 8.8987499849634037e+00 3.1807848067586919e+00 0 0 0 +1344 2 3.4431754370412976e-01 2.2031646719938472e+01 8.3703161142980598e+00 4.7295540868584167e+00 0 0 0 +1342 1 -6.8308981538894631e-01 2.4624194584247398e+01 8.6718279784660304e+00 6.4315465104822378e+00 0 0 0 +1279 1 -7.2047636044830288e-01 2.1194438088659144e+01 1.4655113145176898e+01 3.5599068905706899e+00 0 0 0 +1323 2 3.2231289034768323e-01 2.4319336433573465e+01 1.2486041030298008e+01 3.4344236859922881e+00 0 0 0 +749 2 3.4257377797706601e-01 1.8165041987963619e+01 1.4215742191736197e+01 2.0663913242721450e+00 0 0 0 +750 2 3.4918107205585291e-01 1.9293946610269717e+01 1.3944062873668372e+01 3.0360673982438584e+00 0 0 0 +1053 2 3.7355122674223473e-01 1.9981613596945731e+01 1.0142044406269951e+01 3.6721064556180352e+00 0 0 0 +1364 2 3.6485201855729510e-01 1.9318564114233528e+01 1.1646004194054118e+01 2.7559119559059511e+00 0 0 0 +1343 2 3.7323439077733678e-01 2.5272702753623754e+01 8.8444474476632546e+00 5.6789401336957352e+00 0 0 0 +1363 1 -7.2813137446444254e-01 2.0174853811185752e+01 1.1180685316542265e+01 2.6899483744839250e+00 0 0 0 +1365 2 3.9713794882029002e-01 2.0227614540723657e+01 1.0639849292957415e+01 1.8135908162679584e+00 0 0 0 +1294 1 -7.5872247108158186e-01 2.1586974012361846e+01 8.5220006770698973e+00 5.6332414905894312e+00 0 1 0 +1229 2 3.6559621130358355e-01 2.5796342575252574e+01 1.0434659060781394e+01 3.9758072329309679e+00 0 0 0 +1296 2 3.6607457751404843e-01 2.0366112239366135e+01 9.1572924816627204e+00 5.1228506915628627e+00 0 1 0 +2934 2 4.0311508896507325e-01 2.3942267593843457e+01 1.4796025914797434e+01 1.3442222386508997e+00 0 0 1 +2850 2 3.8315464193520832e-01 2.4620142727404136e+01 1.4909320955578064e+01 2.7131452306888910e+00 0 0 1 +2932 1 -7.8039979922039138e-01 2.4013594742696309e+01 1.4359470428390750e+01 2.2266960707494654e+00 0 0 1 +748 1 -7.3018650304512345e-01 1.8427046215860823e+01 1.3583293653000359e+01 2.7271658023086571e+00 0 0 0 +1321 1 -6.5864153984116669e-01 2.4268201200445308e+01 1.1986392490174696e+01 4.2974713873037711e+00 0 0 0 +1281 2 3.5433692469751338e-01 2.2077395306594351e+01 1.4348392712373405e+01 3.1790452010726651e+00 0 0 0 +2780 2 3.6847894214086452e-01 2.0657071677182085e+01 1.3437978308603224e+01 5.0024740459382340e+00 0 0 1 +1295 2 3.8008842647280749e-01 2.2075169149491696e+01 9.3884094689527533e+00 6.0161724973545869e+00 0 1 0 +1177 1 -7.2133807426964403e-01 2.0445471297606030e+01 1.3020624667663823e+01 5.9033396771857563e+00 0 0 0 +1178 2 3.8760922709331613e-01 2.1123036439837861e+01 1.2364993781325525e+01 6.1885183465221001e+00 0 0 0 +2228 2 3.4804715633184741e-01 2.4810796102968023e+01 9.2674126213427019e+00 1.1286540554542459e+00 0 0 1 +1322 2 3.3033554877197840e-01 2.4605511059419875e+01 1.2673089397605336e+01 4.8771040732884554e+00 0 0 0 +224 2 3.5080382579655595e-01 1.9820240129964642e+01 7.6595505302338704e+00 6.4471005405667841e+00 0 0 0 +2227 1 -7.2929343957952986e-01 2.4726632068728112e+01 9.9745764484836581e+00 1.7381256100416549e+00 0 0 1 +2229 2 3.2258576344761747e-01 2.5640140643847204e+01 9.9550075705358392e+00 2.1361854473283866e+00 0 0 1 +507 2 3.4073756485913104e-01 2.2660158628013029e+01 1.4128931869446916e+01 1.4168782827577042e+01 0 0 0 +2080 1 -7.1497924938304980e-01 2.1835153667262524e+01 1.0736491192306897e+01 6.9156177707814352e+00 0 0 0 +2082 2 3.6731570280412973e-01 2.2588381513180167e+01 1.0893927333057611e+01 7.5772875029759232e+00 0 0 0 +431 2 3.6489346980624221e-01 3.0534173399577149e+01 8.3380848420287279e+00 6.5163502149762520e+00 0 0 0 +1632 2 3.8167188596816054e-01 3.0422394593164292e+01 1.1494413603359128e+01 4.6230591406290511e+00 -1 0 1 +1630 1 -7.2546998377165361e-01 3.0594866062596974e+01 1.0538283577190228e+01 4.6956648343540257e+00 -1 0 1 +2166 2 3.6335358282092878e-01 2.9345361139250041e+01 1.3735034155610570e+01 4.8968147581269275e+00 0 -1 1 +1917 2 3.2831460205591412e-01 1.9266198291343610e+01 1.5112588328716638e+01 2.2304837569120856e-01 0 0 1 +2203 1 -7.5258231877874160e-01 2.9176683859194647e+01 1.3163150997103514e+01 8.3128994673950860e+00 0 0 1 +1180 1 -7.0673420754785987e-01 2.6303583275596061e+01 9.8250799245261149e+00 4.5254814934012977e+00 0 0 0 +127 1 -7.1578102381674791e-01 2.7732456825143593e+01 9.2933380246859176e+00 7.6714896220953657e+00 -1 0 0 +12 2 3.6193354459566540e-01 2.7540038293111024e+01 8.4959479214118510e+00 7.0545459217828670e+00 -1 0 0 +2095 1 -7.0831593411319604e-01 3.0349609271392325e+01 9.2925902847310340e+00 7.0978653600088935e+00 0 0 1 +2096 2 3.5281360484553997e-01 3.0398418861229050e+01 1.0051212924202549e+01 6.2213252553154827e+00 0 0 1 +623 2 3.5880766260311747e-01 2.9201482049435800e+01 9.2244346653423044e+00 7.4358684922306608e+00 0 0 0 +2159 2 3.3823564268491546e-01 3.0803202576366676e+01 1.1920531603542944e+01 1.3415442326919869e+00 0 0 1 +2158 1 -7.6119678411316760e-01 2.9918961599720525e+01 1.2338436941275864e+01 1.5832925508022093e+00 0 0 1 +2130 2 3.2749563037318280e-01 2.7349919815107906e+01 8.4101723016108476e+00 5.8452461182870985e-01 0 0 1 +1182 2 3.6320659557072082e-01 2.6759606122075066e+01 1.0434746236492805e+01 5.1603883516707372e+00 0 0 0 +2128 1 -7.4887991140858612e-01 2.8193494970906894e+01 8.7573589475964475e+00 9.2231447524737176e-01 0 0 1 +2129 2 3.4655998913080804e-01 2.7963380512288413e+01 9.6628989688977480e+00 1.3165453879185831e+00 0 0 1 +2870 2 3.8236049531283289e-01 2.8378756069119923e+01 1.1602593554863265e+01 2.0292751474858477e+00 0 0 1 +1328 2 3.8257873680038068e-01 2.8970511947163111e+01 1.4437357976968004e+01 7.0268108477778783e+00 0 0 0 +2869 1 -7.2788703577564851e-01 2.7464457162804660e+01 1.1234554557070336e+01 2.0922560348112369e+00 0 0 1 +610 1 -7.5670187498919206e-01 2.7428196957311773e+01 1.1811720209771533e+01 6.5291027444831045e+00 0 0 0 +611 2 3.8633155299559213e-01 2.7984044401595391e+01 1.2201081873390617e+01 7.1949645419678045e+00 0 0 0 +2160 2 3.5874055738087113e-01 3.0072740007557556e+01 1.2736754349937966e+01 2.4906916468330875e+00 0 0 1 +612 2 3.4738415209155832e-01 2.6702794741356012e+01 1.2389274641474589e+01 6.3231656173156452e+00 0 0 0 +759 2 3.9616694464984792e-01 2.7539456960359395e+01 1.0156517527325532e+01 7.2848106393189465e+00 -1 0 0 +559 1 -7.6802716399825677e-01 2.5314039050599870e+01 1.4074321651001933e+01 6.4730245007519622e+00 0 0 0 +561 2 3.7947197609714545e-01 2.5773924435289068e+01 1.4104908221359842e+01 7.3426255188206442e+00 0 0 0 +2048 2 3.3591653857891007e-01 2.6130737768723165e+01 1.3963141533124302e+01 4.6591233878349740e+00 0 0 1 +1623 2 3.3553535013638147e-01 2.3138636559317027e+00 8.9397229842037773e-01 1.2855145624292841e-01 0 0 1 +2047 1 -7.0776349214812362e-01 2.6594343953738139e+01 1.4706967508049495e+01 4.1879832928810821e+00 0 0 1 +2871 2 3.5675816071708077e-01 2.6911060654405620e+01 1.1711113956614183e+01 1.4175830917304237e+00 0 0 1 +1379 2 3.7241022699859389e-01 2.9281223062034392e+00 3.6528369544011947e+00 1.5515745498743394e+00 1 1 0 +2863 1 -7.2210570654265871e-01 2.5501068128887301e+01 1.2537161650963242e+01 8.9119591835198164e-01 0 0 1 +1327 1 -7.9225778065681240e-01 2.8811271119403859e+01 1.4901043031405694e+01 6.2030426088140684e+00 0 0 0 +228 2 4.0263595287173426e-01 5.9708137404961015e+00 1.0298900434273990e+00 7.7292692797755957e-01 0 0 0 +1495 1 -7.4698069194326755e-01 5.7133136422425741e+00 3.3509113292494890e+00 7.7236616434180014e+00 1 1 0 +1706 2 3.5283818767689318e-01 2.3690454189175880e+00 3.2404197638510954e+00 6.8417722693677980e+00 0 0 0 +1707 2 3.4478117026980820e-01 3.6857667798295326e+00 3.0473906768742740e+00 7.4777849585167786e+00 0 0 0 +1100 2 3.7628027277296727e-01 6.1575532700915261e+00 3.1089099103660129e+00 8.5453585887206884e+00 0 1 0 +117 2 3.9455890049263220e-01 1.8833110884786941e+00 5.9475010730976550e+00 7.8668284206495871e+00 0 0 0 +6 2 3.4014153576746908e-01 6.6653646394599662e+00 1.7006186811850021e+00 1.0874927030134137e+01 0 0 0 +4 1 -7.2571111880246442e-01 6.7333840652394521e+00 2.3787727470738345e+00 1.0219750954424841e+01 0 0 0 +1527 2 4.0100653288494820e-01 5.4528014673772898e+00 1.3956758948560801e+00 1.5307386648498444e+01 0 0 0 +151 1 -7.2910801690274551e-01 2.7262298784151353e+00 4.2955663940398221e+00 1.0510748319366119e+01 0 0 0 +153 2 3.7237597048485871e-01 2.6371530330396142e+00 4.0278556956960045e+00 9.5908798943605404e+00 0 0 0 +1119 2 3.8835260883331613e-01 4.4268410355053716e+00 4.7329718288267433e+00 1.0728787081880176e+01 0 1 0 +147 2 3.7708792650528411e-01 7.5267048627925659e-01 2.3059348787375873e+00 1.3112627078656976e+01 0 0 0 +1117 1 -7.5142747813406152e-01 5.1387664257184182e+00 4.9803723392331127e+00 1.1342304349160040e+01 0 1 0 +1118 2 3.6271966363746028e-01 5.4984890411492540e+00 5.8908091924721653e+00 1.1127059252087154e+01 0 1 0 +1123 1 -7.4006805555028954e-01 6.3042443441123792e+00 7.2148468774146242e+00 1.0319917218624509e+01 0 1 0 +5 2 3.0950048252677159e-01 6.1984768332792770e+00 3.0689625281473445e+00 1.0689680908331225e+01 0 0 0 +2433 2 3.6790902828033573e-01 4.1653063962835608e+00 6.3273345186813721e+00 1.3999319382857966e+01 0 1 0 +2431 1 -7.3438271689388468e-01 4.7187226779524876e+00 5.4769634480967486e+00 1.3945376600475882e+01 0 1 0 +2432 2 3.9084393881077384e-01 4.7398138108415253e+00 5.1990830606188325e+00 1.2995460855747162e+01 0 1 0 +152 2 3.3992824104581582e-01 2.4155991985277527e+00 3.5382690774085708e+00 1.0987691593868808e+01 0 0 0 +857 2 3.8124271137402527e-01 2.4747479270569568e+00 6.6203061567186445e+00 1.0887159393930956e+01 0 0 0 +923 2 3.2869068578915284e-01 6.3697320057901470e+00 6.6784125010570463e+00 1.3501034206207150e+01 0 1 0 +1525 1 -7.5992241024094487e-01 4.5103057463138860e+00 1.1475765232913371e+00 1.5133305617863787e+01 0 0 0 +856 1 -7.2800469554517955e-01 2.2942863580243062e+00 7.5346055017169800e+00 1.0829874489228526e+01 0 0 0 +858 2 3.4450384066690903e-01 2.7729168460391116e+00 7.8972231176541925e+00 1.1679026265479433e+01 0 0 0 +120 2 3.5154660324048509e-01 2.3446515644617008e+00 1.6742848679669022e+00 1.4471381758370747e+01 0 0 0 +118 1 -7.1973118402817282e-01 1.6337449119010632e+00 1.1435179646868354e+00 1.4125673846681433e+01 0 0 0 +1705 1 -7.4619529430445708e-01 2.8020966808238748e+00 3.3596387585687006e+00 7.6862162452808773e+00 0 0 0 +792 2 3.8162134395491909e-01 4.7476299851296516e-01 7.5080694733013980e+00 1.1117422277791169e+01 0 1 0 +145 1 -7.2456733119125016e-01 9.7035303704488512e-02 2.8037480815284308e+00 1.2502648753185213e+01 0 0 0 +146 2 3.6960101144384100e-01 3.3213958954874911e-01 3.7881333174906344e+00 1.2651781996324514e+01 0 0 0 +885 2 3.6343115339204518e-01 3.9216228535512293e-01 5.7211140002981447e+00 1.2421215920920250e+01 0 1 0 +733 1 -7.2939243403239429e-01 1.0591558935808338e+00 5.2316792952360576e+00 1.3040137299130430e+01 1 0 0 +734 2 3.7885173336262007e-01 7.7356250970958040e-01 5.2155320245704964e+00 1.3943828663846643e+01 1 0 0 +2326 1 -7.5959298392515695e-01 3.4747639361285931e+00 7.7758768787384263e+00 1.3523957449850817e+01 0 1 0 +2118 2 3.7032656930185393e-01 7.7843948181891809e-01 6.7423516357047797e+00 1.4849541735561921e+01 1 0 0 +1871 2 3.7742868774015342e-01 1.2907370063895211e+01 4.4263912919383808e+00 1.5492392870088166e+01 0 0 0 +2205 2 3.5816460566448205e-01 2.8946845771120604e+01 1.2627751108813840e+01 9.1250146354086610e+00 0 0 1 +1641 2 3.4073380398166719e-01 7.1111993645099947e+00 1.1366622304192653e+01 1.5359188902057735e+01 0 0 0 +1208 2 3.6388529937889968e-01 2.5056081596788722e+01 1.4584530002965888e+00 1.1020268642399330e+01 0 1 0 +1125 2 3.5950591727482978e-01 6.8748449510385647e+00 6.4533818108221057e+00 9.8958183731961320e+00 0 1 0 +1124 2 3.6079497036949704e-01 6.8670303828595243e+00 7.5817382274248049e+00 1.1016727356105484e+01 0 1 0 +75 2 3.8204465030924051e-01 7.1142711055162033e+00 7.4286205407604458e+00 1.4657265748022505e+01 0 0 0 +1699 1 -7.2931258945533617e-01 8.0658743106840500e+00 5.4073124961907117e+00 9.4539036839712871e+00 0 0 0 +1701 2 3.7159147156970163e-01 8.2335210912987247e+00 4.7266377202255532e+00 1.0177642672103413e+01 0 0 0 +830 2 3.5956669984241846e-01 1.3400883293480890e+01 2.3588279160837056e+00 8.0615325900692927e+00 0 1 0 +73 1 -7.5694911019102484e-01 7.2938075580930937e+00 6.8554873823714217e+00 1.3873973895860502e+01 0 0 0 +848 2 3.5315011637445082e-01 7.6614448452830199e+00 8.0302126081544554e+00 1.2642514058156374e+01 0 0 0 +101 2 3.6642454244934813e-01 7.2517605405166901e+00 1.2005813022855081e+00 1.3975943969519834e+01 0 0 0 +217 1 -7.0702430479286171e-01 1.0085707824014888e+01 6.5561230328896141e+00 8.0915255535996220e+00 0 0 0 +219 2 3.7622741341933796e-01 9.2985003663325791e+00 6.0191502568826607e+00 7.8377760739129236e+00 0 0 0 +820 1 -7.2553446153842394e-01 1.1880570912905165e+01 3.4432634914317197e+00 1.0382975998786526e+01 0 1 0 +822 2 3.4320117180500115e-01 1.2011507734689886e+01 3.1042560325459547e+00 9.4523576660266677e+00 0 1 0 +2937 2 3.2429534466538423e-01 2.9647128738089414e+01 1.5235459388641615e+01 5.9945384093753304e+00 0 0 1 +2293 1 -7.2726234223499353e-01 8.0404399513760083e+00 4.3439217238147378e+00 1.3755030513215200e+01 0 1 0 +2585 2 3.7659831892793261e-01 9.7960146545419313e+00 4.6050109223523279e+00 1.3951856085888535e+01 0 1 0 +2586 2 3.5592816744559364e-01 1.1356255901199329e+01 4.4804001893060894e+00 1.4228130964569861e+01 0 1 0 +2295 2 3.5623744243767957e-01 7.6461122285125604e+00 3.7650915357505688e+00 1.4455339332419513e+01 0 1 0 +567 2 4.0714735396839730e-01 2.1459914129644218e+01 9.0359099877329443e-02 1.1951506949480251e+01 0 0 0 +100 1 -7.1917012813285031e-01 7.1710414426954534e+00 1.5952229176299946e+00 1.4910248227520436e+01 0 0 0 +2300 2 3.7659586689290209e-01 1.0875148664424408e+01 3.5493398962347711e+00 1.0616015335094025e+01 0 1 0 +1559 2 3.5039867302626498e-01 1.0884136499129305e+01 7.0708785770579992e+00 1.3919477973256607e+01 0 0 0 +1522 1 -7.5891955514033194e-01 1.0306342379913511e+01 8.2620202951080319e+00 1.0775546187730539e+01 0 0 0 +1524 2 3.7292101546655892e-01 1.1131579343509493e+01 8.4596096396323102e+00 1.0284470239703452e+01 0 0 0 +53 2 3.6921541695409194e-01 8.8009057386326699e+00 3.9237712801575633e+00 1.1939014204161996e+01 0 0 0 +54 2 3.9677587277412490e-01 8.2006061888405046e+00 2.9551428942942040e+00 1.0984331249647768e+01 0 0 0 +52 1 -7.5399507143701594e-01 8.9736740142172291e+00 3.4644949499441897e+00 1.1129417096795120e+01 0 0 0 +1558 1 -7.0982689216245853e-01 1.0736636700935271e+01 8.0392435980254859e+00 1.3677296770396085e+01 0 0 0 +1523 2 3.5617246436127509e-01 9.8246901650007672e+00 7.7074572213170116e+00 1.0195397330490612e+01 0 0 0 +1560 2 3.7060906657481996e-01 1.0622419309330631e+01 7.9885487528953618e+00 1.2739077872884986e+01 0 0 0 +1035 2 3.5430395266288411e-01 1.1755990067763298e+01 1.5531919009169568e+00 1.4699794161400284e+01 0 1 0 +1033 1 -7.4239732885452370e-01 1.1462755227583308e+01 6.4250326314457440e-01 1.4811198729257669e+01 0 1 0 +849 2 3.2588457826761136e-01 8.4494469543540944e+00 8.7386137534629054e+00 1.1506531414782774e+01 0 0 0 +2584 1 -7.5666937390064370e-01 1.0587786945850189e+01 5.0905357888490519e+00 1.4303284175726585e+01 0 1 0 +193 1 -7.1287083432825538e-01 7.8382265342042690e+00 2.3779209227304340e-01 1.2514005498705270e+01 0 0 0 +1692 2 3.6522500943951181e-01 1.3534655771838898e+01 7.4176192148884805e+00 1.6295776923088712e-01 0 0 1 +1547 2 3.9166368478328889e-01 7.8127611458585022e+00 5.2785968207496676e+00 1.4085507762735677e+01 0 0 0 +1443 2 3.8374231033145811e-01 2.5998019544678456e+01 2.8394336364644585e-01 7.0548265690801184e+00 0 0 0 +832 1 -6.9673257579541992e-01 1.2840610249101658e+01 1.3841791945474853e+00 1.2181402975252579e+01 0 1 0 +833 2 3.5884040781426424e-01 1.2376086065692428e+01 1.8667618491299727e+00 1.1456946786471265e+01 0 1 0 +2642 2 3.6981504723344494e-01 2.7071245340385886e+01 1.2004734280878186e+01 1.3941196865662315e+01 0 0 0 +603 2 3.5243032749698672e-01 2.1323013615519361e+01 3.1366377295372072e-01 6.9373111750742895e+00 0 0 0 +1949 2 3.5927253244587376e-01 1.7627695566807684e+01 6.7390027859976085e+00 1.5169383768081236e+01 0 0 1 +56 2 3.5460786295729047e-01 1.5430802090070969e+01 6.6069356227314815e+00 8.0459831895907676e+00 0 0 0 +1998 2 3.8092999858822763e-01 1.3629256348678762e+01 6.2081487222913481e+00 9.7558929481132246e+00 0 0 0 +1996 1 -7.2640888473934240e-01 1.3165107561590442e+01 6.0337852110526731e+00 1.0569893871710724e+01 0 0 0 +2394 2 3.7955176869700491e-01 1.6528327719850296e+01 1.1576886767317813e+00 1.1896604473667898e+01 0 1 0 +2392 1 -7.6881336977051029e-01 1.5632143431262186e+01 9.0429830282334211e-01 1.2183148993929432e+01 0 1 0 +1997 2 3.6663644849215593e-01 1.2759100558626701e+01 5.0750909933917931e+00 1.0464243508742552e+01 0 0 0 +2393 2 3.8419389942242832e-01 1.5542558701553912e+01 1.1696011527051366e+00 1.3102245564015671e+01 0 1 0 +831 2 3.2987354907166927e-01 1.3756734760099002e+01 1.4251576584910015e+00 1.1767007872056187e+01 0 1 0 +343 1 -6.7059247534451183e-01 1.5178509152001014e+01 2.0862989205225126e+00 9.1205032185698958e+00 0 0 0 +345 2 3.3546865276217364e-01 1.5593169009727291e+01 1.8614151463305353e+00 9.9543209648358513e+00 0 0 0 +492 2 3.2163642474231885e-01 1.5072739477871830e+01 2.9379796849983619e+00 1.4599114764632004e+01 0 0 0 +490 1 -6.8923155762771027e-01 1.5870664080705264e+01 2.2946748312771486e+00 1.4622540169784720e+01 0 0 0 +344 2 3.2709224677898363e-01 1.5260077170758947e+01 1.1881908703163702e+00 8.7864480986886573e+00 0 0 0 +520 1 -7.1909122473513598e-01 1.7196179393454212e+01 5.3160814081286532e+00 7.4190619249913814e+00 0 0 0 +521 2 3.9324981174881513e-01 1.7515121661074613e+01 5.2364937919488321e+00 8.3752986681744126e+00 0 0 0 +522 2 3.7366943836384536e-01 1.7659531806788582e+01 6.1391560605467985e+00 7.1304365771098972e+00 0 0 0 +1756 1 -7.5920068941129171e-01 1.4658426527003499e+01 5.4131185264803490e+00 1.3029751411629096e+01 0 0 0 +1747 1 -7.6977085098305553e-01 1.2951722182284975e+01 3.4261101982938764e+00 1.3951502709799188e+01 0 0 0 +1749 2 3.8069646076011232e-01 1.3031148144009412e+01 2.5934113104381828e+00 1.3420560270630570e+01 0 0 0 +267 2 3.6472195954212816e-01 1.3423192309218713e+01 4.1516343738345025e+00 1.3468895058772269e+01 0 0 0 +356 2 3.4386349506320291e-01 1.6552260029851563e+01 4.3293187167755542e+00 1.2745163994997455e+01 0 0 0 +2478 2 3.3570330258088549e-01 1.5751225260829186e+01 1.5326252644421219e+01 1.3452394066409243e+01 0 0 0 +292 1 -7.6930786348559488e-01 1.7498856879713266e+01 4.4234803340157081e+00 1.2821595326717844e+01 0 0 0 +293 2 3.7740954655498354e-01 1.7626170157134943e+01 5.0554943057059312e+00 1.3559100941008857e+01 0 0 0 +1107 2 3.7509855283061289e-01 1.8344004032485415e+01 9.7556653751391431e-01 1.5364596329616360e+01 0 1 0 +1105 1 -6.7518709531011267e-01 1.8723242139432877e+01 4.3558395874367029e-01 1.4634747326163616e+01 0 1 0 +2125 1 -7.2564151296795454e-01 3.2825009797657576e+00 3.5620178750378977e+00 1.5105453773350597e+01 1 0 0 +43 1 -7.6895660931875232e-01 1.4525041166807853e+01 7.6337968708818593e+00 1.5062981791735449e+01 0 0 0 +1757 2 3.3649682619480270e-01 1.4240228224212217e+01 5.6841728368902089e+00 1.2158828663489908e+01 0 0 0 +509 2 3.5271511808719580e-01 1.4800378720215621e+01 6.2276266425671079e+00 1.3420897004972213e+01 0 0 0 +1380 2 3.5419580005962442e-01 1.8629586546026868e+00 3.5734243636620358e+00 4.3615791560615447e-01 1 1 0 +578 2 3.9713960387532932e-01 1.9423597927993939e+01 2.9087318733399328e+00 7.5262129406817797e+00 0 0 0 +367 1 -7.2710051161364753e-01 1.2416579314956541e+01 1.3715613318069197e+01 1.4282946030400939e+01 0 0 0 +511 1 -7.4512171403837524e-01 2.4803930176844077e+01 1.5302413347388612e+01 1.1822671179344709e+01 0 0 0 +2011 1 -7.4709735292318813e-01 1.8293031422855183e+01 5.9346095513880632e+00 1.5000140911255304e+01 0 0 1 +1475 2 3.7317206201114816e-01 1.8722213765556745e+01 1.6548596530678135e+00 1.1537800875257661e+01 0 1 0 +601 1 -7.3361955356670383e-01 2.1503320401422290e+01 5.9271631056304008e-01 7.9231840338727277e+00 0 0 0 +2187 2 3.9199351910503838e-01 2.0383710913812656e+01 1.8097855837437467e+00 8.0543115564475762e+00 0 0 1 +577 1 -7.1127677377745213e-01 1.9771472487393350e+01 2.5487891083800212e+00 8.3316328506980515e+00 0 0 0 +614 2 3.7407505471021024e-01 2.5086527208419309e+01 3.8100320200869837e+00 6.9347479762894189e+00 0 0 0 +2866 1 -7.1838721784639314e-01 2.2238867143818478e+01 6.6206143565943476e-01 1.4928980901267295e+01 0 1 0 +1474 1 -7.3385455535695043e-01 1.7918285931244117e+01 1.8130464925742915e+00 1.0997306604195431e+01 0 1 0 +1476 2 3.4120536749794717e-01 1.7757211567132394e+01 2.7166985286889385e+00 1.1133431815624004e+01 0 1 0 +1218 2 3.8295664823557690e-01 2.1369664604147701e+01 5.2399459239212680e+00 7.6448964751219899e+00 0 1 0 +688 1 -7.2755518245297979e-01 2.4293169407784752e+01 3.9273309354706862e+00 1.0643415684716048e+01 0 0 0 +1499 2 3.8499485474923101e-01 1.9764920848695187e+01 2.0728330953581264e+00 1.3749685454709892e+01 0 1 0 +1498 1 -7.2744822404421194e-01 1.9745330612381039e+01 2.5562014222464264e+00 1.2927390608295685e+01 0 1 0 +1258 1 -7.5280235702916753e-01 2.1617875467307812e+01 4.7266631525898264e+00 1.2180684242899421e+01 0 1 0 +1259 2 3.6065897597166990e-01 2.2531985320522988e+01 4.5834971460310134e+00 1.1847305831217536e+01 0 1 0 +1260 2 3.7948299592490964e-01 2.1251128340378809e+01 3.9240324328407725e+00 1.2406167656940005e+01 0 1 0 +516 2 3.6355959192629644e-01 1.8963523036386565e+01 4.9644183039953784e+00 9.8160073701109241e+00 0 0 0 +450 2 3.6319861548005317e-01 1.7848789498040787e+01 4.7885244433410792e+00 1.0916461708628269e+01 0 0 0 +514 1 -7.5075433757592747e-01 1.7987631123439659e+01 5.1223746744036243e+00 1.0033030945088347e+01 0 0 0 +543 2 3.4132266198773081e-01 2.3867112800622952e+01 1.6422617546848621e+00 1.5138059691781502e+01 0 0 0 +477 2 3.6838885712128094e-01 2.1428327513080283e+01 6.0937984323510017e+00 1.3625290474690019e+01 0 0 0 +1500 2 3.5740794308851537e-01 1.8960890627387890e+01 3.1658381752513125e+00 1.3002813973944345e+01 0 1 0 +540 2 3.8842943715533584e-01 1.9969925118498818e+01 6.1533798695849091e+00 1.4036472502277128e+01 0 0 0 +475 1 -7.2524608520236422e-01 2.0721609429132087e+01 6.7240774213857311e+00 1.3843706035189133e+01 0 0 0 +519 2 3.6530567454443974e-01 2.0367391722149197e+01 3.7827098785259343e+00 9.4710867505824847e+00 0 0 0 +518 2 3.8659561321700209e-01 2.0835639071694882e+01 4.8767936584255667e+00 1.0505604454054886e+01 0 0 0 +517 1 -7.2066827505495823e-01 2.0646024547525908e+01 4.7807012491235161e+00 9.5878601215390802e+00 0 0 0 +1463 2 3.7001165460315288e-01 2.5059579336733343e+01 4.2763792425139195e+00 1.2290755791753025e+01 0 0 0 +690 2 3.6693302663680660e-01 2.4310976815310109e+01 4.7688926171791550e+00 1.0023589800306729e+01 0 0 0 +305 2 3.7494168538359440e-01 1.8241266517473772e+01 7.0521986669749470e+00 1.0514820728488631e+01 0 0 0 +1427 2 3.6857040212391262e-01 2.3981080670517841e+01 7.8018909703968005e+00 1.4881169962592374e+01 0 0 0 +705 2 3.8425099015734254e-01 2.2158210635817589e+01 1.0129117115909334e+00 1.2994618483866436e+01 0 0 0 +541 1 -7.2403593484458073e-01 2.4818789731263312e+01 1.9865041075917433e+00 1.5121754790064486e+01 0 0 0 +1899 2 3.5006908968893219e-01 2.4629951035817367e+01 5.8571271246248955e+00 8.3141505342192570e+00 0 0 0 +1426 1 -7.3252070929554536e-01 2.4364470171787243e+01 7.0626678839497599e+00 1.4261751884869325e+01 0 0 0 +1428 2 3.8811277937038174e-01 2.5314987960777852e+01 7.3058943500301545e+00 1.4178682086942812e+01 0 0 0 +1414 1 -7.3360064589594565e-01 2.7550993312303770e+01 5.6656193425421897e+00 8.5318781731843671e+00 0 0 0 +1927 1 -7.1226092232480398e-01 1.9729614667682423e+01 1.5424098996174450e+01 1.4474084736050346e+01 0 -1 0 +689 2 3.5766754950756602e-01 2.5048967802606384e+01 3.5056094159587645e+00 1.0381098217008788e+01 0 0 0 +435 2 3.7931327983461433e-01 2.9446989394442696e+01 1.6218432754743712e+00 1.3276518359438416e+01 0 0 0 +2162 2 3.4970524972792255e-01 3.0881876535836799e+01 5.3481350682064557e+00 9.3333566602071443e+00 0 1 0 +542 2 3.5429491755211329e-01 2.4853376276356393e+01 2.6291827450099525e+00 1.4360183767796540e+01 0 0 0 +1462 1 -7.5273842885691056e-01 2.4961405255763978e+01 4.3820559262979417e+00 1.3252482556716789e+01 0 0 0 +1464 2 3.6588036398348228e-01 2.4675418213377018e+01 5.2665533818946253e+00 1.3521796518492849e+01 0 0 0 +433 1 -7.4496846761722701e-01 2.8815112296954197e+01 1.1197361386327909e+00 1.3787799256087547e+01 0 0 0 +790 1 -7.5639345045353734e-01 3.0908502199854400e+01 7.2335211641266817e+00 1.1809308959148076e+01 -1 1 0 +791 2 3.6378133514370009e-01 3.0163753828671656e+01 6.7203935794026775e+00 1.1419903438246410e+01 -1 1 0 +1898 2 3.5604854841982447e-01 2.5893725848115270e+01 5.6819508484033321e+00 9.2472145514554978e+00 0 0 0 +932 2 3.8928443975686011e-01 2.8884150973543537e+01 5.1476857725271996e+00 1.1737063860324186e+01 -1 1 0 +1897 1 -7.4283557466891181e-01 2.4963791994829780e+01 6.0131427661728312e+00 9.2015076259513453e+00 0 0 0 +65 2 3.6082840563451934e-01 2.6885396675267820e+01 4.6028681473046484e+00 1.3481959750039932e+01 -1 0 0 +931 1 -8.1088513364181436e-01 2.9255858784630693e+01 5.3273925909343962e+00 1.0897493567716483e+01 -1 1 0 +619 1 -7.1897738960383728e-01 2.6129680901438498e+01 1.9080919771772891e+00 9.4393291344901300e+00 0 0 0 +621 2 3.4805877891152026e-01 2.6709713348679507e+01 1.1306369025534946e+00 9.4562024416560426e+00 0 0 0 +149 2 3.9863672181096071e-01 2.9710227484758057e+01 3.7273264779773094e+00 1.0386017198568913e+01 -1 0 0 +620 2 4.0245852268132121e-01 2.5757537478202931e+01 2.0588464877755692e+00 8.5413076989905914e+00 0 0 0 +64 1 -7.1031165311971567e-01 2.7835584228745912e+01 4.5979208713487276e+00 1.3304429629555900e+01 -1 0 0 +933 2 3.7767524248048312e-01 2.8529341729640390e+01 5.6097797335513393e+00 1.0327938664820277e+01 -1 1 0 +66 2 3.8410634538348182e-01 2.8208691812263652e+01 4.3345433020500499e+00 1.4146818622807317e+01 -1 0 0 +150 2 4.0268078220208936e-01 3.0587651121091721e+01 2.4562019655713105e+00 1.0913608954452620e+01 -1 0 0 +148 1 -6.3523680236714652e-01 3.0014261231985849e+01 2.8296976555733773e+00 1.0158711234295309e+01 -1 0 0 +1410 2 3.6647851066022674e-01 2.7488614868809975e+01 7.1557091370555070e-01 1.5224526324660104e+01 0 1 0 +565 1 -7.0889569352593951e-01 2.2228996263999704e+01 6.0238629867093429e-01 1.2108798677536178e+01 0 0 0 +632 2 3.6323187105566485e-01 2.5144041786703801e+00 9.4766086883921563e+00 8.2812127516801031e+00 1 0 0 +2361 2 3.4036869030220601e-01 2.9674900959485498e+01 1.4554021886093295e+01 1.2414896945940716e-01 -1 0 1 +175 1 -7.1256654098368699e-01 5.0510690378808478e+00 1.4054240563036581e+01 1.5192545137924117e+01 0 0 0 +2328 2 3.7945131769037721e-01 3.9755357360033243e+00 8.3278810059172610e+00 1.4157480598329165e+01 0 1 0 +176 2 3.9534833332635477e-01 5.3966204843848313e+00 1.3142753310221739e+01 1.5262334948571340e+01 0 0 0 +330 2 3.8113145336997034e-01 5.8265739962506391e+00 1.4525990156178503e+01 1.4974835903439269e+01 0 0 0 +2327 2 3.3778404717192428e-01 2.6210714833892559e+00 7.6150242495597000e+00 1.4009654743941478e+01 0 1 0 +62 2 3.9022171798512079e-01 2.4270912233213426e+00 1.4619355445812479e+01 1.0945158420731445e+01 0 0 0 +1041 2 3.9381067712012852e-01 4.1247444702289715e-01 1.5282437437760446e+01 1.0247937301268676e+01 0 0 0 +1351 1 -7.1844759922879664e-01 3.2647902595068965e+00 1.5019216694508511e+01 1.1275636723095214e+01 1 0 0 +2198 2 3.8695732532320609e-01 9.3302114669402680e-01 1.1426457102712940e+01 8.4224985261841550e+00 1 0 1 +974 2 3.6570859822813900e-01 3.4743395439333682e+00 1.2715522170313381e+01 7.1995715196440289e+00 0 0 0 +631 1 -7.3454660884554557e-01 2.3473583134333067e+00 9.9816407567125189e+00 9.0883602162905728e+00 1 0 0 +1088 2 3.4986801754381086e-01 2.3658031539947602e+00 9.2965667631731783e+00 9.7881976239072763e+00 0 0 0 +2199 2 3.3300954549302841e-01 1.4942537249128416e+00 1.2277814561966592e+01 7.3708249797022791e+00 1 0 1 +235 1 -6.9185039046371155e-01 2.7858714028179783e+00 1.1373552859314389e+01 1.1473971760379191e+01 0 0 0 +898 1 -7.1546013722357327e-01 4.5728877373402117e+00 9.7356503938037537e+00 1.5228266034106058e+01 0 0 0 +900 2 3.8551458325678650e-01 4.0662714882203721e+00 1.0534941764101706e+01 1.4941000064104637e+01 0 0 0 +600 2 3.7616842927993599e-01 3.8592090106160084e+00 1.1258886749178458e+01 8.8955421940629442e+00 1 0 0 +69 2 3.5437298951555540e-01 3.0175793727847826e+00 1.1344702898904723e+01 1.3249419028151904e+01 0 0 0 +1353 2 3.6261572656089902e-01 3.8907736665690482e+00 1.4969924434423264e+01 1.0517398272303460e+01 1 0 0 +67 1 -7.5721933547325304e-01 2.7977829457583492e+00 1.1595097936647573e+01 1.4202652389008371e+01 0 0 0 +598 1 -7.4548411408638593e-01 4.6085102326547531e+00 1.1671350202005954e+01 8.5945596401325108e+00 1 0 0 +2097 2 3.2616634809562145e-01 5.1932452087937717e+00 1.1628802911703145e+01 9.4141628986432853e+00 1 0 1 +2402 2 3.3232902575633561e-01 2.9203238072282449e+00 1.0537214466214817e+01 1.0955919204746792e+01 0 0 1 +237 2 3.6117813687213041e-01 3.7306249546188499e+00 1.1674842950233487e+01 1.1600395594646823e+01 0 0 0 +68 2 3.7369642806847442e-01 2.3291316493498266e+00 1.2501622035907316e+01 1.4144076842591076e+01 0 0 0 +2116 1 -7.7467702004768768e-01 8.2509460147234337e-01 7.7332871707655277e+00 1.4708910945969693e+01 1 0 0 +1040 2 3.6824975972104207e-01 6.7726099912866222e-01 1.3934154697437014e+01 9.4292664487016502e+00 0 0 0 +1039 1 -7.1915875524611683e-01 7.7061219812285620e-01 1.4407170423297879e+01 1.0281047320349066e+01 0 0 0 +2117 2 3.4165987529066466e-01 6.8809203875384128e-01 7.7099421116350584e+00 1.3707451004693933e+01 1 0 0 +2825 2 3.3634351290587594e-01 4.5731908619027911e-01 1.0013474287264552e+01 1.3886569726088378e+01 1 0 0 +706 1 -7.7577799668990832e-01 5.3402842681625984e+00 8.8242451468595107e+00 8.0314052894323549e+00 1 0 0 +707 2 3.6197410070447383e-01 5.4133691767784029e+00 8.1890158701469744e+00 8.7881009544477156e+00 1 0 0 +416 2 4.0897508337024036e-01 1.8938881161337186e+01 1.5423961340711873e+01 7.4916310555025651e+00 0 0 0 +1515 2 3.4854657550425927e-01 5.2407497151329068e+00 9.7038874935259685e+00 8.3966252068746865e+00 0 0 0 +2197 1 -7.3270182105120618e-01 8.3638097207326800e-01 1.2301219737199974e+01 8.1123058565547019e+00 1 0 1 +342 2 3.6869306631487608e-01 7.9752491031405643e+00 1.0593815814522161e+01 8.4267344213652517e+00 0 0 0 +1820 2 3.4835300792302981e-01 7.9080190360120870e+00 1.3742529101460926e+01 1.4836547168486410e+01 0 0 0 +1396 1 -6.8160967262519656e-01 2.9199425610566159e+01 5.1557316302804956e+00 4.6058973490166810e-01 0 1 0 +1971 2 3.4378221006170773e-01 4.2691464692347942e+00 4.2911180777030433e-01 1.3541214377972180e+01 1 1 0 +864 2 3.6221396727336957e-01 5.4011107038344548e+00 1.3622666988440319e+01 8.6630142516521040e+00 0 0 0 +862 1 -7.2312990450742654e-01 5.3164288643742870e+00 1.4508037162843033e+01 9.1832503475579799e+00 0 0 0 +179 2 3.6983465043738645e-01 8.3681498642717074e+00 1.5287477348211810e+01 1.0932559507091939e+01 0 0 0 +368 2 3.7384765574432249e-01 1.2113975015615358e+01 1.4373441936166605e+01 1.3613044619767901e+01 0 0 0 +847 1 -7.4625410459184238e-01 7.6114411201264192e+00 8.8345758186914498e+00 1.2031997872207691e+01 0 0 0 +1556 2 3.4607933991430101e-01 8.4894321682405600e+00 1.3260036097534050e+01 1.3453906753586784e+01 0 0 0 +1849 1 -7.5826327946819061e-01 8.2219713509954904e+00 1.0534883720263394e+01 1.4261587656728096e+01 0 0 0 +875 2 3.4628831556292750e-01 6.2036199822241187e+00 1.0816092574783342e+01 1.1756085309391285e+01 0 0 0 +874 1 -7.6721271103192745e-01 5.5006746482693147e+00 1.1429298196254583e+01 1.1461487068386344e+01 0 0 0 +1850 2 3.4368576799360379e-01 8.5532727468126719e+00 1.1371405936897432e+01 1.3878305151510423e+01 0 0 0 +1352 2 3.6099020013418986e-01 5.8634257921349411e+00 1.2273479037391111e+01 1.1527736381924981e+01 1 0 0 +697 1 -6.7372755743035562e-01 9.5368907373516105e+00 1.3728358780387213e+01 7.5879373029887853e+00 1 0 0 +1819 1 -7.2384686721009794e-01 7.7749767883787735e+00 1.3744469529055349e+01 1.3854457093015277e+01 0 0 0 +863 2 3.7101867574652236e-01 6.0616787569562973e+00 1.4440997872349303e+01 9.8370058480532414e+00 0 0 0 +1889 2 3.7154349698977801e-01 1.0569027162466815e+01 1.2225452339569722e+01 1.2187159933206958e+01 0 0 0 +259 1 -7.3907422426271996e-01 9.2212299334563479e+00 1.1011001983258442e+01 9.5277153321190706e+00 0 0 0 +261 2 3.3123664523105278e-01 1.0019057265055931e+01 1.0799423178478612e+01 8.9854322204571613e+00 0 0 0 +995 2 3.1441156819427241e-01 9.2962010878406485e+00 1.0252617092324030e+01 1.0084691998616259e+01 0 0 0 +1034 2 3.8202031942421089e-01 1.2236019915196165e+01 2.0685842576854424e-01 1.5127120751213184e+01 0 1 0 +699 2 3.9128160412870866e-01 1.0226361816213313e+01 1.4417677632816389e+01 7.8262147116734138e+00 1 0 0 +2623 1 -7.8518436937249569e-01 7.3251743975931358e+00 1.3703751981950591e+01 1.1060579822248586e+01 0 1 0 +1888 1 -7.5230914550575378e-01 9.5714256225588858e+00 1.2192901377913387e+01 1.2098450530410913e+01 0 0 0 +1890 2 3.7826304768593366e-01 9.4246157725069910e+00 1.1844281426848662e+01 1.1243283609994752e+01 0 0 0 +2624 2 3.6799455844006079e-01 7.2220783572003864e+00 1.3822915732590209e+01 1.1987387143676774e+01 0 1 0 +2625 2 3.7047237374636399e-01 8.2147933065206811e+00 1.3487682189002763e+01 1.1022853040391489e+01 0 1 0 +1851 2 3.7557884113773271e-01 8.0098905038594843e+00 9.9884053512695825e+00 1.3496647955433131e+01 0 0 0 +2299 1 -7.4935019161293304e-01 1.2108997577930463e+01 9.3578992994288690e+00 8.8624506400222973e+00 0 1 0 +1703 2 3.5213714684172709e-01 1.2600364127449541e+01 1.2378754731062484e+01 1.3174034048480326e+01 0 0 0 +1702 1 -7.3445128669028947e-01 1.2352568694707379e+01 1.1536266125690561e+01 1.2635485852958809e+01 0 0 0 +1797 2 3.9086193618279358e-01 1.2929499620837738e+01 1.0904275148930514e+01 1.3028315991352713e+01 0 0 0 +335 2 3.8436601110728097e-01 1.2790915079262431e+01 1.0950884681179991e+01 9.3226942830891133e+00 0 0 0 +336 2 3.7749356398398981e-01 1.2994880735222880e+01 1.1519746584911347e+01 1.0834419198523271e+01 0 0 0 +334 1 -6.9194193699388473e-01 1.3070709353243952e+01 1.1736784095631251e+01 9.8966579973736319e+00 0 0 0 +1685 2 3.6794997010952657e-01 7.7724225295432223e+00 1.0794020274007613e+01 1.9980259744134663e+00 0 0 1 +537 2 3.7617949555891889e-01 3.0352608007898755e+01 1.5292762429650033e+01 1.3611914768050639e+01 0 0 0 +375 2 3.5985771637074726e-01 1.4050934342318588e+01 9.8507658621470711e+00 6.3699004785784918e+00 0 0 0 +436 1 -6.9628992781636767e-01 1.7861427948118685e+01 1.4005275285175220e+01 1.0087469238618057e+01 0 0 0 +2465 2 4.1049144451903985e-01 1.1053064864600064e+01 7.9770982711656047e-01 2.2060582074997805e+00 0 1 0 +2477 2 3.5334407817839336e-01 1.6983953987250555e+01 1.4789005891330811e+01 1.4000184816240790e+01 0 0 0 +1207 1 -7.2685808496485005e-01 2.5068993021377405e+01 7.1517949332431752e-01 1.1646346191865806e+01 0 1 0 +2301 2 3.5587697542778574e-01 1.2899300625474321e+01 9.0347428312602815e+00 8.2532099987662626e+00 0 1 0 +2464 1 -7.6547446209804382e-01 1.0803626904458927e+01 1.7415316898854185e+00 2.1278171410067301e+00 0 1 0 +1049 2 3.7618877708325776e-01 5.6525939448965365e+00 1.5470483925689594e+01 4.3424559501640170e+00 0 0 0 +2508 2 3.6626666131299679e-01 1.2419309659202666e+01 8.9877037724421296e+00 1.3186787138226194e+01 0 1 0 +347 2 3.8832070273161101e-01 1.7536610563872866e+01 8.6584416778594342e+00 1.4864686067386366e+01 0 0 0 +1378 1 -7.2407938002267280e-01 2.5198976932286881e+00 3.0459831679154385e+00 8.4447489177580748e-01 1 1 0 +2507 2 3.4796346709787190e-01 1.3415241860187432e+01 8.9266991728841596e+00 1.2056842476039316e+01 0 1 0 +491 2 3.6802830129143027e-01 1.6546261003130770e+01 2.8622352328216270e+00 1.4957035963695160e+01 0 0 0 +44 2 3.5170765723501285e-01 1.4233628718958199e+01 8.2605359337797601e+00 1.4352839044873956e+01 0 0 0 +2506 1 -7.6317509688909824e-01 1.3307926903842354e+01 9.2412988590119980e+00 1.2980159702996358e+01 0 1 0 +2445 2 3.8910472272986035e-01 1.4150829933315288e+01 1.4082554114346150e+01 8.3164131937419423e+00 0 0 0 +2444 2 3.7597674789307645e-01 1.3410647645922783e+01 1.3800511309957566e+01 9.5912670583587065e+00 0 0 0 +2443 1 -7.0695820898623263e-01 1.3591216817836305e+01 1.4508245843689529e+01 8.9772679054738855e+00 0 0 0 +1679 2 3.9415597946906744e-01 1.7002627673007073e+01 1.2643479626950681e+01 9.1738436528182632e+00 0 0 0 +294 2 3.7677434630057410e-01 1.7499630436375082e+01 1.0050748771611607e+01 1.2911418550692350e+01 0 0 0 +2322 2 3.2454267056843245e-01 1.4418146245027749e+01 7.7528064629374400e+00 1.0603328670803052e+01 0 1 0 +1236 2 4.1591465031405017e-01 1.7038090739215136e+01 1.0212083559286407e+01 8.8210327502874826e+00 0 0 0 +1234 1 -7.0181594927675783e-01 1.6910844522357635e+01 9.3334833730111821e+00 9.0614270710616918e+00 0 0 0 +2320 1 -7.7995955009736828e-01 1.4564659966903978e+01 8.7119669984032271e+00 1.0394426096987834e+01 0 1 0 +2321 2 3.2706515324009028e-01 1.3914541178163393e+01 8.9283197438642361e+00 9.7040632582504482e+00 0 1 0 +1235 2 3.6000161630653205e-01 1.5922382217166840e+01 9.2636062839886115e+00 9.4017718976185218e+00 0 0 0 +192 2 3.7863753918516846e-01 1.5795994234107379e+01 1.0013697455798233e+01 1.1414632202568395e+01 0 0 0 +225 2 3.5900476150387772e-01 1.8424084703550506e+01 8.1329111016575091e+00 6.1039447215342895e+00 0 0 0 +190 1 -7.6440824714737277e-01 1.6212701087864936e+01 1.0753573118072811e+01 1.1800204804492413e+01 0 0 0 +191 2 3.6426841542444666e-01 1.6096934002153485e+01 1.1390818153436520e+01 1.1117083763735293e+01 0 0 0 +464 2 3.3345857964535902e-01 1.6533493286225973e+01 1.2100672942793659e+01 1.3391494518708470e+01 0 0 0 +1678 1 -7.4542523415333728e-01 1.6340555987389582e+01 1.1993857169746310e+01 8.9562111676013973e+00 0 0 0 +1680 2 3.7797532836806036e-01 1.5890575282685097e+01 1.2281921236486545e+01 8.2100808005516992e+00 0 0 0 +265 1 -7.2792815830226498e-01 1.8053227773245663e+01 9.3399328369175585e+00 1.3341691701114369e+01 0 0 0 +1629 2 4.0207408133331468e-01 3.7525524134059589e+00 4.1945307319817848e+00 1.4528339249235058e+01 0 0 0 +463 1 -7.1928622889755167e-01 1.7248864875875505e+01 1.2664574242922360e+01 1.3819109714817531e+01 0 0 0 +1821 2 3.5318199884344503e-01 1.7987912599434498e+01 8.5728177173768749e+00 1.2695167140692295e+01 0 0 0 +465 2 3.9282018413119174e-01 1.8038071129362386e+01 1.2682127503630825e+01 1.3205666115817445e+01 0 0 0 +438 2 3.6262695588460714e-01 1.8639554917877131e+01 1.3557804478367318e+01 1.0588356249900754e+01 0 0 0 +437 2 3.8069747748786925e-01 1.7632612931389684e+01 1.4850547478971897e+01 1.0657604169213638e+01 0 0 0 +348 2 3.5849033921804402e-01 1.6076875177668288e+01 8.1604527645670508e+00 1.5325095379922852e+01 0 0 0 +2684 2 3.8165231504517405e-01 2.0370591487101755e+01 1.3046331621233044e+01 1.2442167957333156e+01 0 0 0 +2685 2 3.6716241882986833e-01 1.9444306985277990e+01 1.4237067004688502e+01 1.2986582256910832e+01 0 0 0 +2683 1 -7.2729365554285530e-01 1.9407295761853856e+01 1.3405376665675909e+01 1.2416062788389333e+01 0 0 0 +1299 2 3.5662067612573489e-01 2.1511128828889710e+01 8.3664829944472050e+00 1.2878807838265264e+01 0 1 0 +1297 1 -7.8038793636572479e-01 2.2133032912490517e+01 9.0628496499327920e+00 1.2664604505005762e+01 0 1 0 +369 2 3.7700999843324917e-01 1.1680050854260362e+01 1.3674395632821453e+01 1.4869813829585434e+01 0 0 0 +223 1 -7.0432946310929068e-01 1.8854239159834265e+01 7.4548083806965701e+00 6.5982823053108541e+00 0 0 0 +306 2 3.9116104018299891e-01 1.8137828835965667e+01 8.5378840045810875e+00 1.0171322109686470e+01 0 0 0 +216 2 3.7407262888710491e-01 2.1851238764469500e+01 1.3498802481852247e+01 1.0073563374735084e+01 0 0 -1 +2903 2 3.6697304517318297e-01 2.4754134515445305e+01 7.5329058594875944e+00 1.0809023206215731e+01 0 1 1 +2818 1 -7.5464418300264435e-01 2.3178456689671755e+01 1.4653008311281141e+01 1.4783164273894650e+01 0 0 0 +304 1 -7.4900016640674760e-01 1.8546635977164048e+01 7.9079602000544309e+00 1.0824929005761328e+01 0 0 0 +215 2 3.6461639849292388e-01 2.2384672803760374e+01 1.2353447380936000e+01 9.3456918184227487e+00 0 0 -1 +1771 1 -6.9945300201792360e-01 2.4046967718602335e+01 1.2121887617509843e+01 8.2376687707388125e+00 0 0 0 +2091 2 3.5092494554714743e-01 3.8290290067108770e+00 1.4667353589554441e+01 4.7654658315901333e-01 1 0 0 +357 2 4.0003205593279401e-01 2.4928996728156832e+01 9.8558011994321664e+00 1.0980002832701787e+01 0 0 0 +2060 2 3.8162999792195684e-01 2.2000437013527819e+01 1.1863156510915559e+01 1.5190051362214954e+01 0 0 0 +476 2 3.6931796488627072e-01 2.2944145117267688e+01 8.8501336859294213e+00 1.3082555903369343e+01 0 0 0 +539 2 3.9721062311427563e-01 2.0116610008006489e+01 8.2230001853087984e+00 1.0482880295579346e+01 0 0 0 +2081 2 3.7162549465230527e-01 2.1033819751188460e+01 1.0438444646746214e+01 7.5940513801972971e+00 0 0 0 +566 2 3.2754303058235495e-01 2.1625340373215931e+01 8.4916514376649364e+00 1.0841286836116350e+01 0 0 0 +2661 2 3.6520916481788801e-01 2.1794398977913627e+01 1.1205390879030327e+01 1.2742696462033910e+01 0 0 0 +2659 1 -7.3199643929306590e-01 2.1766278273622181e+01 1.2062785442966065e+01 1.3228902446727293e+01 0 0 0 +538 1 -6.8738599585666416e-01 2.1051957186109437e+01 8.2330807363867518e+00 1.0062721727541366e+01 0 0 0 +2679 2 3.4337609102700573e-01 2.2697596936349349e+01 1.2351395432047699e+01 1.3024946648562894e+01 0 0 0 +743 2 3.6321216341445989e-01 2.0637042975477872e+01 1.1283999243175000e+01 9.2446869920364598e+00 0 0 0 +744 2 3.6492990438233003e-01 2.0790529728540090e+01 9.6768202240555077e+00 9.4545415539637307e+00 0 0 0 +742 1 -6.9910926044188471e-01 2.0249225932928244e+01 1.0460038352663576e+01 8.9427573607720099e+00 0 0 0 +214 1 -7.3819453976054428e-01 2.1833412337973130e+01 1.2574418146008139e+01 1.0066659124827012e+01 0 0 -1 +2904 2 3.3747869463845837e-01 2.3456844808901081e+01 8.4346530516689331e+00 1.1340364575618912e+01 0 1 1 +2902 1 -6.9652996043492099e-01 2.4444775969407988e+01 8.2713960771545221e+00 1.1410153869487301e+01 0 1 1 +2150 2 3.6355431465394411e-01 1.5401705396129437e+00 1.5483672391355634e+01 6.0537436598866821e+00 1 0 1 +599 2 3.8656076985198329e-01 2.9626195230369184e+01 9.6166167997728706e+00 1.2407232060777559e+01 0 0 0 +508 1 -7.2566005372054387e-01 2.7060530829894191e+01 1.2321907068767443e+01 1.2980927125187613e+01 0 0 0 +633 2 3.7572529492007356e-01 3.0110266392792226e+01 1.2993961531209360e+01 8.1571098017301349e+00 0 0 0 +2545 1 -7.6549095752588614e-01 2.4501785395416483e+01 1.2539484283209120e+01 1.2322059640204825e+01 0 0 0 +2547 2 3.8334195697522183e-01 2.4458562167604533e+01 1.3459791514414610e+01 1.2019234351476994e+01 0 0 0 +360 2 3.6567013913170665e-01 2.6034319251757939e+01 1.0866260586438253e+01 1.0615698441911004e+01 0 0 0 +2546 2 3.8204766713781108e-01 2.4448820912791941e+01 1.1928747533378550e+01 1.1509976079495136e+01 0 0 0 +1371 2 3.7922816854004460e-01 2.8892033986313628e+01 1.3296748843700371e+01 1.3139676194859646e+01 0 0 0 +324 2 3.7804058289877623e-01 2.8045388837938837e+01 1.0362956781269546e+01 1.0966335639341752e+01 0 0 0 +1513 1 -7.2430023342488414e-01 2.8881320118970088e+01 9.1041277390575210e+00 1.1994439370381899e+01 -1 0 0 +1209 2 3.6441290231988888e-01 2.4074791303539190e+01 8.2571344459664209e-01 1.1862709696153372e+01 0 1 0 +2867 2 3.3367087750989155e-01 2.1933261226144282e+01 1.4430897465590604e+00 1.5337873311969894e+01 0 1 0 +726 2 3.6686138816262709e-01 2.6720980896046598e+01 1.4626232759462358e+01 9.2802711162368201e+00 0 0 0 +2842 1 -7.8624468131457681e-01 2.7232480962626724e+01 1.0845559515884709e+01 1.5373328913467384e+01 0 0 0 +696 2 3.6054808539297123e-01 2.7793969361930291e+01 7.6259855775402254e+00 1.4944171960632884e+01 0 0 0 +1369 1 -7.4256077125336828e-01 2.9803870731787580e+01 1.3305936847377534e+01 1.3411588260019409e+01 0 0 0 +694 1 -7.1706463366983519e-01 2.7156586492888376e+01 7.9883996773441774e+00 1.4295256096137743e+01 0 0 0 +323 2 3.7195855152570956e-01 2.7748777322164095e+01 1.1830503224226787e+01 1.1382950676740167e+01 0 0 0 +695 2 3.7124602497091064e-01 2.7719706022336297e+01 8.4919202452640921e+00 1.3681935636205370e+01 0 0 0 +1514 2 3.3933637568221964e-01 2.9244700970521720e+01 8.5963009096932481e+00 1.1263828767558987e+01 -1 0 0 +510 2 3.8828823839584120e-01 2.6075368031705707e+01 1.2310988791367421e+01 1.2640872847247850e+01 0 0 0 +724 1 -7.4511947281101720e-01 2.5808929774370789e+01 1.4484311885958050e+01 9.0710492431024345e+00 0 0 0 +2826 2 3.4887634552912389e-01 5.9193304107028055e-01 1.1066701119073434e+01 1.2820465662405345e+01 1 0 0 +2824 1 -7.5927476105466352e-01 3.1028903563827427e+01 1.0527702429881463e+01 1.3263943547969522e+01 0 0 0 +2820 2 3.7680495638587247e-01 2.7198103327062668e+01 1.0007304625255401e+01 1.5022055025560837e+01 0 0 0 +355 1 -7.4087532910863818e-01 2.5065694721935749e+01 1.0732818529069602e+01 1.0531887179220396e+01 0 0 0 +1370 2 3.4983799635826440e-01 3.0024031504195523e+01 1.2365774545705298e+01 1.3552683999184932e+01 0 0 0 +1772 2 3.6575589708809214e-01 2.4452498441039850e+01 1.2881998712136237e+01 7.7199011432608176e+00 0 0 0 +770 2 3.0514881990206211e-01 2.7043323742653396e+00 1.5385836115352269e+01 3.7684308975494005e+00 0 0 0 +1928 2 3.6744256412349430e-01 1.9015268991040973e+01 1.5328149726063067e+01 1.5092092926297921e+01 0 -1 0 +618 2 3.8371631137463069e-01 1.7283132603655634e+01 1.1639274473160445e+01 1.5411448380872919e+01 0 0 -1 +1398 2 3.6170274436740163e-01 2.8344713847646990e+01 4.6570878052941138e+00 4.1436624389794313e-01 0 1 0 +2077 1 -6.9112585706452034e-01 2.0332731357558455e+01 9.1701180155735926e+00 1.5371016053672376e+01 0 0 0 +2760 2 3.5269778250415618e-01 1.3919531869932301e+01 3.9832781067599221e-01 3.3263240469941745e-02 0 1 1 +2360 2 3.4047980808683631e-01 3.0925661301778430e+01 1.3754547587631775e+01 2.4433814371848030e-02 -1 0 1 +1716 2 3.4898581950663687e-01 2.0414648143923635e+01 6.0070979551118855e+00 2.2458159776908376e-02 0 0 0 +2495 2 3.8380415923813643e-01 1.2140772796270996e+01 1.5044179570579624e+01 1.9111398600325018e+01 0 0 0 +1510 1 -7.5087682457039318e-01 3.0366012304851388e+01 6.1425731923167015e-01 2.2613501028601558e+01 -1 0 0 +1399 1 -7.3768371946575073e-01 1.6036239048419159e+00 4.0672114579694050e+00 1.7352383834671262e+01 1 1 0 +1400 2 3.9908454065479759e-01 2.2469667070937702e+00 3.8278551127389129e+00 1.6637850643092481e+01 1 1 0 +1512 2 3.7789271319007245e-01 1.1188339514775696e+00 3.1944434011273817e+00 1.7370035174685299e+01 0 0 0 +721 1 -7.5018429578768908e-01 1.8031644249929522e+00 1.6133111032942060e-01 2.0247364996942810e+01 1 0 0 +667 1 -7.3286889311415315e-01 5.3080738250166161e-02 5.2318713355838966e+00 1.5585876800557909e+01 1 0 0 +1489 1 -7.3908919336096490e-01 1.9485635399818588e-01 4.3228418464458418e+00 2.0155165992122306e+01 1 1 0 +1491 2 3.4964605628851708e-01 4.6497595408908804e-01 4.0032993099037570e+00 1.9282687909750742e+01 1 1 0 +2182 1 -7.5543509374757967e-01 2.3278267931767402e+00 5.2002967180338544e+00 2.2910361225889229e+01 1 0 0 +1490 2 3.1827242776042053e-01 7.3452297627354446e-01 5.1186662985752998e+00 2.0350056541337807e+01 1 1 0 +1731 2 3.5388933782086229e-01 5.5843392737237787e+00 6.0418140928456792e+00 1.8155919825881185e+01 0 0 0 +1076 2 3.5925501011934230e-01 3.1067739134570624e+00 4.4736987664420358e+00 1.9385540613216282e+01 0 1 0 +1628 2 3.5683532717327937e-01 3.5001120784175699e+00 2.7890180412728469e+00 2.1700652288420351e+01 0 0 0 +1627 1 -7.2273125880781386e-01 3.9835327298466581e+00 2.3352342284873102e+00 2.0971434826072894e+01 0 0 0 +2302 1 -7.0671176857821183e-01 4.5156038197760315e+00 7.2556119695501851e+00 1.7102214893634791e+01 0 0 0 +2304 2 3.5902776632376993e-01 5.2375754720243934e+00 7.8796653845499849e+00 1.7042413429928562e+01 0 0 0 +1730 2 3.9122348771072701e-01 1.6159253099446187e+00 8.9409708084989450e-02 2.1191345524475746e+01 0 0 0 +2123 2 3.3328495684696835e-01 4.5959361664854512e+00 1.7706380801194286e+00 2.1455895706505316e+01 1 0 0 +18 2 3.8131770931075393e-01 5.1566534214106134e+00 5.9981878488765989e+00 2.2151131964849540e+01 0 0 -1 +1576 1 -6.6410084264859059e-01 4.9727258709300983e+00 1.8421900885191604e+00 1.8310105025334661e+01 0 1 0 +834 2 3.7529924274621479e-01 3.1009809600866177e+01 1.0638446673244799e+00 1.7570565363985121e+01 -1 1 0 +1077 2 3.4357885518072762e-01 2.7970410402511705e+00 4.9459460775930140e+00 2.0859845990047440e+01 0 1 0 +2768 2 3.6062790576513026e-01 2.2580455379630944e+01 1.5438392406888545e+01 2.3954633004980806e+01 0 0 0 +1075 1 -6.5499093433895306e-01 3.3425664832525501e+00 5.1337538522957633e+00 2.0064116071962964e+01 0 1 0 +1737 2 3.2572362065507643e-01 1.3956370612838672e+01 1.1413512973612010e+01 1.5719743085265273e+01 0 0 0 +74 2 4.0732383282033274e-01 2.4941039528789433e+00 7.1950484067293354e+00 1.7528595974246507e+01 0 0 0 +723 2 3.4337683920961237e-01 2.5369430889723623e+00 8.0466266280131649e-01 2.0218306108728594e+01 1 0 0 +1557 2 3.8836367816662498e-01 5.9625076694271373e+00 5.5946436522259386e+00 2.0021845571050747e+01 0 0 0 +2012 2 3.9584671272080552e-01 1.8504646269966113e+01 5.5234091503868079e+00 1.5831704470793509e+01 0 0 1 +1548 2 4.0123598128015719e-01 3.0197131138107711e+01 3.4014120288545215e+00 2.1337687711589620e+01 -1 0 0 +1526 2 3.9376431680434920e-01 6.2004220365499518e-01 5.0247897242583619e+00 1.6469455493334944e+01 0 0 0 +1736 2 3.7869480886154222e-01 1.4153874689421853e+01 1.0455895969520149e+01 1.6859976886356076e+01 0 0 0 +199 1 -6.7259345207262222e-01 2.9625432202375613e+01 3.1774571783918465e-01 2.5277794518370417e+01 -1 0 -1 +2183 2 3.6123631159819070e-01 1.6309647867153443e+00 5.4154992990929900e+00 2.3558477513813042e+01 1 0 0 +2184 2 3.8107882408386001e-01 3.0588474354809465e+00 5.8777943718182781e+00 2.2862340992754000e+01 1 0 0 +2119 1 -7.4899778242209114e-01 4.7974041303109329e+00 6.4643051584335076e+00 2.2932352779587710e+01 1 0 0 +1029 2 3.6357343930949232e-01 1.0078126475917001e+01 8.7976628401234347e+00 1.5612421301471080e+01 0 1 0 +1578 2 3.8019150424600251e-01 4.5729134334226602e+00 1.9775568967392523e+00 1.9183033038538440e+01 0 1 0 +922 1 -7.6797331029097093e-01 1.0613199336801812e-01 1.8392220094765086e+00 1.6955856193145575e+01 0 1 0 +350 2 3.9969535736414824e-01 4.2232535021455782e+00 9.6529713555406857e+00 3.0589992691307742e+01 0 0 -1 +1642 1 -7.7104691105573120e-01 7.1216189276687381e+00 8.5579228135051810e+00 1.6037020459541761e+01 0 0 0 +1729 1 -6.6244722620080421e-01 6.1710446796733072e+00 5.2596730581611482e+00 1.8140015691845608e+01 0 0 0 +2126 2 3.5311034071653336e-01 7.0485537923870947e+00 5.6017835615675446e+00 1.7967951239720950e+01 1 0 0 +1577 2 3.9541432552641215e-01 5.9262676715720231e+00 1.5610599273080601e+00 1.8455505913264496e+01 0 1 0 +1555 1 -7.3418059770973620e-01 6.4224173297836087e+00 6.0320937360710563e+00 2.0795048533013787e+01 0 0 0 +2314 1 -7.9322023620712423e-01 1.0212451950467653e+01 5.8943355257454169e+00 1.6846163435672906e+01 0 1 0 +2316 2 3.8255374431915579e-01 1.0435619686776985e+01 6.7699402674077769e+00 1.6634658656641051e+01 0 1 0 +2339 2 3.1113846851151389e-01 2.6091183348311787e+01 4.9385471341871062e-01 2.9379533922411643e+01 -1 1 0 +1717 1 -7.1024551195204777e-01 9.2922541148218230e+00 3.8731526996218681e+00 1.8644298699628731e+01 0 0 0 +1718 2 3.5988581904060296e-01 9.7409871077917689e+00 4.6725087736830675e+00 1.8356994294703249e+01 0 0 0 +2535 2 3.5412795516933754e-01 1.2501075646043335e+01 1.2303266899416381e+00 2.1214372309792267e+01 0 1 0 +2533 1 -7.4481726688147765e-01 1.2729300494112945e+01 8.7889801182680549e-01 2.0342171106077370e+01 0 1 0 +1719 2 4.1339726876671729e-01 9.1805256363796293e+00 3.3409469153405462e+00 1.7842810847455642e+01 0 0 0 +461 2 3.7726726364868329e-01 8.3678538140723067e+00 7.2070804720138582e-01 1.9084968957537004e+01 0 1 0 +880 1 -7.0455425675989003e-01 9.0706567727846608e+00 7.5666569765700542e-01 2.1495416000911337e+01 0 1 0 +837 2 3.7100411902490354e-01 7.3307541717727309e+00 5.7493044868988967e+00 2.0771777886484315e+01 0 1 0 +1858 1 -7.1356101893345791e-01 1.8882085367805807e+01 1.9447505818290339e-01 2.9729080610363102e+01 0 0 0 +1846 1 -7.6289544618688920e-01 9.1645125578645530e+00 5.0563505558921547e+00 2.0942052309907574e+01 0 0 0 +1847 2 3.5549954169923575e-01 9.7280416466814685e+00 5.8085850743355287e+00 2.0675028731634548e+01 0 0 0 +1848 2 4.0206265312287748e-01 9.3577279611524169e+00 4.3049481912625627e+00 2.0324157244908037e+01 0 0 0 +2291 2 3.3105650807375864e-01 7.5104327653658300e+00 4.7204814139978444e+00 2.2338331590732952e+01 0 1 0 +257 2 3.9862677946627079e-01 9.6857126567886525e+00 2.2661911053678696e+00 2.2317133889285383e+01 0 0 -1 +1600 1 -7.7841198332143224e-01 1.0978388164408370e+01 7.2062613921027374e+00 2.0334591348240288e+01 0 0 0 +1408 1 -7.8153555295219479e-01 2.7185838954793191e+01 4.7608085410496626e-01 1.6110115042871087e+01 0 1 0 +2667 2 3.4731250093441185e-01 1.1969979438032301e+01 3.2406400264920188e+00 2.2709076063911297e+01 0 1 0 +1643 2 3.4577566703734625e-01 7.6991171113266104e+00 8.5537351952302174e+00 1.6767266852350037e+01 0 0 0 +112 1 -7.3610922477869090e-01 8.4272358017205349e+00 7.1874247759227625e+00 1.8618264431273410e+01 0 0 0 +113 2 3.4931817850272084e-01 8.7785893529198038e+00 6.9264238927739203e+00 1.7788660050224067e+01 0 0 0 +114 2 3.5828579006050776e-01 9.2406203148625465e+00 7.3636187921657461e+00 1.9081630997881891e+01 0 0 0 +460 1 -7.3306959425209728e-01 7.6627785111790834e+00 9.2440600318877042e-01 1.8509786915145462e+01 0 1 0 +258 2 3.6302959621720760e-01 9.3931026087409464e+00 3.6926457562881869e+00 2.2942698180548238e+01 0 0 -1 +256 1 -7.5529004157831792e-01 9.9800909169102798e+00 2.8944128097040145e+00 2.2977757183128457e+01 0 0 -1 +1602 2 3.5748374023611279e-01 1.1280991547179148e+01 7.1947121243517644e+00 2.1216792306881498e+01 0 0 0 +2274 2 4.0329908767829520e-01 1.0109249958114512e+01 1.3266344584526082e+00 1.6492584063196652e+01 0 1 0 +2273 2 3.6199572830753601e-01 8.6868378772880988e+00 1.3846988131221662e+00 1.7122059713194172e+01 0 1 0 +2534 2 3.7698533762185865e-01 1.3096741541861098e+01 1.5668244608297690e+00 1.9858419662881357e+01 0 1 0 +2723 2 3.2966014241342950e-01 1.2865507327929111e+01 5.7657970636332880e+00 2.0284696859934535e+01 0 0 0 +2429 2 3.9890142939534395e-01 1.3235520029327782e+01 3.2610660365757540e+00 1.7720558094505961e+01 0 1 0 +2722 1 -7.5583929838210839e-01 1.3495328152854746e+01 5.0761740639646380e+00 2.0358024376679783e+01 0 0 0 +2428 1 -7.6321343601412650e-01 1.3533255260984459e+01 3.0064324184348932e+00 1.8594329457124999e+01 0 1 0 +2430 2 3.8238974683830995e-01 1.3348108069065720e+01 3.7717196700134994e+00 1.9169076795662715e+01 0 1 0 +2724 2 3.7014591264750768e-01 1.4334658657550106e+01 5.5309074417988855e+00 2.0165644432206360e+01 0 0 0 +212 2 3.7507533078296590e-01 1.0233641220443133e+01 3.1196638769055820e+00 3.0299391052978574e+01 0 0 -1 +2666 2 3.3253925871032169e-01 1.2922329552277349e+01 3.3585087518611449e+00 2.1577677162873119e+01 0 1 0 +311 2 3.9680860625847059e-01 1.5196069416190609e+01 2.4210270875749567e+00 1.8369710823338629e+01 0 0 0 +310 1 -7.4297434057977974e-01 1.6061178007015329e+01 1.9236080127837125e+00 1.8463774077714241e+01 0 0 0 +312 2 3.6296563152846356e-01 1.6698036888593922e+01 2.0918846528450246e+00 1.7695322844206643e+01 0 0 0 +2512 1 -7.1447877135425020e-01 1.5524816726500596e+01 5.5154840880220801e+00 1.6820872483234677e+01 0 1 0 +1726 1 -7.2647410965505543e-01 1.7930496079099601e+01 1.1801658182298256e+00 2.2675462098797091e+01 0 0 0 +2807 2 3.9615037625287181e-01 1.5827065749399567e+01 5.9932610940907418e+00 1.8317301659279494e+01 0 1 0 +2806 1 -7.8077159178042066e-01 1.5937665797146234e+01 6.4601060475095720e+00 1.9216312302800269e+01 0 1 0 +2808 2 3.8432282399363588e-01 1.6407095299361821e+01 7.3023239614847881e+00 1.9138853514357827e+01 0 1 0 +1450 1 -7.4552673337158848e-01 1.8015211860067204e+01 2.5793663608097672e+00 1.6536654630651896e+01 0 1 0 +2522 2 3.7573333389898150e-01 1.7008007562356166e+01 8.3125790408370193e-01 2.2682063203603214e+01 0 1 0 +1728 2 3.5557836099406387e-01 1.7873561001581070e+01 1.8783684370156675e+00 2.1924094861675691e+01 0 0 0 +2514 2 3.5704297687646563e-01 1.4538382969196579e+01 5.6581887698343438e+00 1.6731770621130298e+01 0 1 0 +597 2 3.6838808546295970e-01 1.6892303638410976e+01 2.4377488271971202e+00 1.9823131554774847e+01 0 0 0 +596 2 4.0008098263286890e-01 1.7742449623088444e+01 3.7497354081613237e+00 2.0074349183211687e+01 0 0 0 +2531 2 3.4504061612994036e-01 1.4704173681135734e+01 1.5898811908156958e+00 2.2475550075454489e+01 0 1 0 +2665 1 -7.6326543782505774e-01 1.2865065253930233e+01 2.8924017149285000e+00 2.2427091762386485e+01 0 1 0 +1452 2 3.7139220650702942e-01 1.8355035776373093e+01 2.0120135709890774e+00 1.7232858667620217e+01 0 1 0 +595 1 -7.5682276478538346e-01 1.7713875025393552e+01 2.8242178713402324e+00 2.0273752811152491e+01 0 0 0 +1906 1 -7.6790724115151865e-01 1.8341767584286075e+01 5.3612836502727008e+00 2.0360793250683866e+01 0 0 0 +1907 2 3.3404104676695939e-01 1.8861098063299817e+01 5.7846346208771955e+00 1.9777399107098045e+01 0 0 0 +1908 2 3.4389498527733947e-01 1.7405974075624133e+01 5.7316539539647691e+00 2.0086768232486353e+01 0 0 0 +2568 2 3.4334428892311453e-01 1.4215814597672862e+01 3.6419862833665153e+00 2.3353777878700900e+01 0 0 0 +2696 2 3.5191086878952516e-01 1.8628729439088247e+01 1.6129994331342259e+00 1.9167948805470086e+01 0 1 0 +1870 1 -7.4807001377895854e-01 1.2794565283042013e+01 4.5672901877578393e+00 1.6439936121378878e+01 0 0 0 +1451 2 3.7505732443904505e-01 1.8483153648502871e+01 3.4552827083940656e+00 1.6699691043118662e+01 0 1 0 +1807 1 -7.1708389979514675e-01 1.1987311595652530e+01 7.8876023479661930e+00 2.2974062537851768e+01 0 0 0 +1809 2 3.7001576738569475e-01 1.2779299470376676e+01 8.3474837865414813e+00 2.2651068126240350e+01 0 0 0 +1872 2 3.6143177469791959e-01 1.1913393176631594e+01 4.9047426120171140e+00 1.6548088241326184e+01 0 0 0 +2513 2 3.3544440426149241e-01 1.5874352219267594e+01 6.1609623454137710e+00 1.6158974870228228e+01 0 1 0 +2750 2 3.4844332937132061e-01 1.8939834789518464e+01 5.3548506879791899e+00 2.2370157376858458e+01 0 0 0 +2751 2 3.9710958952960085e-01 1.8684430037259045e+01 4.6166519135821122e+00 2.3720840532831094e+01 0 0 0 +2548 1 -7.2500975173994919e-01 2.4398141217717630e+01 1.5066201235548282e+00 2.0648397575609916e+01 0 0 0 +2549 2 3.5942198542886616e-01 2.4686865774467350e+01 5.4185048008071712e-01 2.0416649887435781e+01 0 0 0 +704 2 3.4397990125970002e-01 2.3961476301029190e+01 4.6775175986420106e+00 1.6620366843348158e+01 0 0 0 +703 1 -7.3657177238484384e-01 2.3387012202217360e+01 5.5971433300209910e+00 1.6307873022207598e+01 0 0 0 +2104 1 -7.2165781836774701e-01 2.1070590376772099e+01 4.1265734082450702e+00 2.0151961866413032e+01 0 0 0 +2106 2 3.8891137084512883e-01 2.1047646402560087e+01 3.3271412204592914e+00 2.0651031825938972e+01 0 0 0 +1933 1 -7.5489489567222001e-01 2.1875744765757279e+01 2.1549335059777008e+00 2.1804583009605864e+01 0 0 0 +1935 2 3.6546947997464563e-01 2.2641662767210502e+01 1.9008251074049098e+00 2.1285876124251484e+01 0 0 0 +1934 2 3.5167752337170388e-01 2.1399382466953121e+01 1.3372657622763970e+00 2.1935226252481069e+01 0 0 0 +2105 2 3.4956828454256972e-01 2.0169494826853967e+01 4.5086360521536966e+00 2.0164080891958633e+01 0 0 0 +2703 2 3.6169134714827844e-01 2.0208159180265085e+01 4.6500351603551247e+00 1.6949289521344458e+01 0 1 0 +1977 2 3.6227389483556977e-01 2.2183570585073195e+01 6.1160173341246171e+00 2.2732505571545655e+01 0 0 0 +2897 2 3.9101094604738995e-01 2.2569417337313467e+01 5.1153011905446846e+00 2.0674231920968779e+01 0 1 0 +1214 2 3.5605487665142194e-01 2.2972347386857596e+01 1.9764508001142294e+00 1.9183797150727944e+01 0 1 0 +2701 1 -7.5285041152992094e-01 1.9355181725869073e+01 5.0502109475701635e+00 1.7318465661457108e+01 0 1 0 +2898 2 3.5698439783817099e-01 2.4078240794210586e+01 5.4371706745556576e+00 2.0403872106911571e+01 0 1 0 +1215 2 3.6300774567522309e-01 2.2846492228884660e+01 1.1444733804903375e+00 1.7838640945562048e+01 0 1 0 +1213 1 -7.4232847802753166e-01 2.2801287712195730e+01 2.0652893763025508e+00 1.8239584983223260e+01 0 1 0 +1539 2 3.8153948636053286e-01 2.4246725550188323e+01 2.9062001202492209e+00 1.7819079045324681e+01 -1 0 0 +2212 1 -6.8484229727562052e-01 2.6950220419873258e+01 1.5337925523512927e+01 3.0036170495158427e+01 0 -1 0 +2695 1 -7.3148367832924932e-01 1.9017859654628392e+01 9.3497112919308378e-01 1.8553987369009768e+01 0 1 0 +1806 2 3.4073944927022032e-01 2.1967495412854674e+01 4.2722321976073747e+00 1.5870916188327204e+01 0 0 0 +1805 2 3.7311057201484432e-01 2.1692745419053487e+01 3.3331048050995826e+00 1.6978789820814846e+01 0 0 0 +2697 2 3.8948678557809024e-01 1.9737028295240538e+01 5.2044300784260122e-01 1.9013732817730865e+01 0 1 0 +2896 1 -7.4113625020590856e-01 2.3264285650263719e+01 5.7579241525589371e+00 2.0744568373963073e+01 0 1 0 +1804 1 -7.3710896232291279e-01 2.1341741017368161e+01 3.5531996306732743e+00 1.6157283372022793e+01 0 0 0 +2749 1 -7.3934220363961434e-01 1.9180677327347432e+01 5.3621157473836289e+00 2.3337307400779466e+01 0 0 0 +2702 2 3.6865003712290911e-01 1.9644798397915739e+01 5.8729888340691696e+00 1.7698178978855907e+01 0 1 0 +1976 2 3.5068974077975706e-01 2.1047799730702469e+01 5.8336483315295267e+00 2.3633413249403770e+01 0 0 0 +1752 2 3.8216632993801475e-01 2.3509631005766302e+01 6.6028333833886999e+00 1.7646409570393065e+01 0 0 0 +1750 1 -7.6521898331383797e-01 2.3204144681456928e+01 7.2658169328883657e+00 1.8338490258449397e+01 0 0 0 +2110 1 -7.2712249954507657e-01 2.0446505703884430e+01 7.6793514021836842e+00 1.7914955076678705e+01 0 0 0 +2844 2 3.7070022365367028e-01 2.1392755482132475e+01 7.6314899521161124e+00 1.7776830958570969e+01 0 0 0 +1751 2 3.6520478085553282e-01 2.3363740043900894e+01 6.8549653838828606e+00 1.9198634912467842e+01 0 0 0 +1511 2 3.9674404770742960e-01 2.9848200302601587e+01 3.1208543954542306e-01 2.3360153157430634e+01 -1 0 0 +883 1 -7.7564575432904614e-01 2.4804116676098811e+01 3.6079442952052045e+00 1.7333517725433307e+01 -1 1 0 +2231 2 3.9317639957322165e-01 3.1022236881941787e+01 5.1339060816356730e+00 3.0358312375049980e+01 0 0 0 +2294 2 4.0147134126849410e-01 2.9655604965329509e+01 2.1048628903381141e+00 2.2044797311289138e+01 -1 1 0 +2550 2 3.9377724350660276e-01 2.5251613938761700e+01 1.9507494572765729e+00 2.0507750845162786e+01 0 0 0 +1404 2 3.6701323517805917e-01 2.6548106773200796e+01 3.2730252276319405e+00 2.2331832672943985e+01 0 1 0 +840 2 3.8477945967648181e-01 2.8179795711856599e+01 3.8997593520209257e+00 1.6598188317460181e+01 -1 1 0 +2532 2 3.4193596019526312e-01 1.4647043611781461e+01 1.7112687857158618e-01 2.2996742722587530e+01 0 1 0 +1546 1 -7.3697581911800814e-01 2.9407543317472097e+01 3.0108394092492485e+00 2.1648362692686568e+01 -1 0 0 +1921 1 -7.0795569268367298e-01 2.8564919201177538e+01 2.5314864439847811e+00 1.7537579598910398e+01 0 0 0 +555 2 3.3248409601433471e-01 2.6744569832249603e+01 5.4427023589553167e+00 1.8716092392999588e+01 0 0 0 +2913 2 3.7305112269939156e-01 2.8117182390276444e+01 1.1023792109791506e+01 1.5678664589960315e+01 0 1 0 +919 1 -7.5312632732781148e-01 2.7435504978866611e+01 6.9693469538572668e+00 1.7082550528432016e+01 -1 1 0 +2317 1 -7.7753729142573613e-01 2.6755851186055377e+01 3.1192083142036604e+00 2.0751177018989626e+01 -1 1 0 +650 2 3.8278606702436219e-01 2.6594103028328075e+01 1.5235512573629876e+01 1.6332700020294890e+01 0 0 0 +2103 2 3.7175421364097755e-01 2.7442110799564006e+01 7.4066067766033852e+00 2.0304558513852822e+01 0 0 0 +735 2 3.4788674624738092e-01 2.9801781278393399e+01 6.6569554526966952e+00 2.0872480829592039e+01 0 0 0 +553 1 -7.4782725985236120e-01 2.5956786594272085e+01 5.2975849808341522e+00 1.9293645257456657e+01 0 0 0 +2319 2 3.9489058500456531e-01 2.6554217595761138e+01 3.9746118866937090e+00 2.0361220289471241e+01 -1 1 0 +2318 2 4.2090532594699959e-01 2.7663195235437865e+01 3.0520259558939564e+00 2.0950808479327208e+01 -1 1 0 +2069 2 3.8520960585906278e-01 2.9492776324890073e+01 2.3249704609938795e+00 1.7309738064352466e+01 0 0 0 +2419 1 -7.3422594626442594e-01 2.9166648949061670e+01 6.3295584508809082e+00 2.0326894663149726e+01 -1 1 0 +2234 2 3.6200217424902098e-01 2.9620827851563043e+01 5.6241594721068067e+00 1.9889138605458310e+01 0 0 0 +1910 2 3.7325564203044420e-01 2.8029843119160535e+01 1.8398773393439074e+00 1.7109689773618754e+01 0 0 0 +554 2 3.6177414155192317e-01 2.5403050813272564e+01 4.8638310169205461e+00 1.8661833567443907e+01 0 0 0 +2101 1 -7.4354647583889499e-01 2.7049435147623811e+01 8.2649551915291948e+00 2.0456272993052767e+01 0 0 0 +3000 2 3.4785770740465199e-01 2.6210375496757404e+01 6.7848535079359031e+00 2.1685381552879406e+01 0 1 0 +2998 1 -7.3773180866674382e-01 2.6145236639145288e+01 6.3639748409843007e+00 2.2595101808948755e+01 0 1 0 +2799 2 3.7811775266067665e-01 2.4541392918600117e+01 8.5129640455712625e+00 1.8461787021149501e+01 0 1 0 +1920 2 3.5570745040804447e-01 2.5378429261221580e+01 1.5300887016718237e+01 1.9431652897793192e+01 0 0 0 +2338 1 -7.1501232389933123e-01 2.6256861330951718e+01 3.2990508597986612e-01 3.0302262984548694e+01 -1 1 0 +2196 2 3.8258434810517011e-01 2.6064007265534816e+01 8.4756018837624509e+00 1.9017440862832462e+01 0 0 0 +2562 2 4.0191351957169247e-01 1.6809195589802684e+01 1.4839059328887014e+01 3.1029300751958736e+01 0 0 0 +2086 1 -7.0559567942719459e-01 2.7198142309122478e+01 8.9600562750331358e-01 2.3297509165240378e+01 0 0 0 +920 2 3.7154519453671969e-01 2.6561931439292728e+01 7.2884432772868220e+00 1.7452219151581595e+01 -1 1 0 +2102 2 3.7410167064637262e-01 2.7839258537780733e+01 8.8715341427024317e+00 2.0475072649422199e+01 0 0 0 +2088 2 3.7972293168842208e-01 2.6840489778526059e+01 1.7359779465611900e+00 2.3492552448470118e+01 0 0 0 +2375 2 3.5605642667339016e-01 4.7553421563886396e+00 1.4945748775937680e+01 1.7959394986209002e+01 0 0 0 +30 2 3.7313644596893036e-01 4.2771687146128468e+00 1.4050519690115335e+01 2.1557218113291022e+01 0 0 0 +131 2 3.7244563299825334e-01 3.8402269884191518e+00 1.4014381408215009e+01 1.6545257947265270e+01 0 0 0 +722 2 3.8550484114095246e-01 1.0438902264090224e+00 7.2769105915557564e+00 1.9538693570107075e+01 1 0 0 +2071 1 -7.4691105578504957e-01 9.9468678528572518e-01 7.7473030574023767e+00 2.0386510264149848e+01 1 0 0 +1566 2 3.7786243872903308e-01 3.0685101118112281e+00 1.0480663574424261e+01 1.8908756792250706e+01 0 0 0 +164 2 3.7792787876025169e-01 3.5406694169400783e+00 1.0520195357463011e+01 2.1264898369459136e+01 0 0 0 +165 2 3.7301593364406482e-01 2.1602686002361025e+00 1.0949361589932771e+01 2.1607132517587605e+01 0 0 0 +163 1 -7.4278167096018366e-01 2.6183894521599580e+00 1.0226351915179732e+01 2.1119894608589568e+01 0 0 0 +2073 2 3.9523756184886205e-01 1.5856240291663786e+00 8.4210206141675084e+00 2.0534899210785877e+01 1 0 0 +1564 1 -6.8777965339655978e-01 3.7286159460637016e+00 1.0573973436499173e+01 1.8271110370858004e+01 0 0 0 +1565 2 3.6122715307603448e-01 3.6653418311743171e+00 1.1534373972218873e+01 1.8050695846568338e+01 0 0 0 +28 1 -6.5552817048155709e-01 4.8640724442328418e+00 1.3599606162402642e+01 2.0901920218534155e+01 0 0 0 +843 2 3.7183929016315392e-01 2.0932244124097892e+00 1.0722102311402404e+01 1.5613065539209638e+01 0 1 0 +841 1 -7.4100986848281925e-01 1.4860346424824933e+00 1.0124927516662728e+01 1.6161875387129459e+01 0 1 0 +136 1 -7.1055350980855814e-01 1.6305260131994366e+00 7.5049545131389452e+00 1.7704559019254795e+01 0 0 0 +29 2 3.8035511303910141e-01 4.9500953483716792e+00 1.2710906172512630e+01 2.1331309043466288e+01 0 0 0 +138 2 3.7747680868513417e-01 1.5667395929956487e+00 8.3358720892168101e+00 1.7221829972434470e+01 0 0 0 +161 2 3.7199682962507802e-01 6.8264417361419110e+00 9.5788332517440296e+00 1.9064913935596906e+01 0 0 0 +1543 1 -7.6039189059221568e-01 6.6284958159658460e+00 1.0356187588597551e+01 1.8422421673149088e+01 0 0 0 +1544 2 3.7261321575622547e-01 5.7041060006714996e+00 1.0202409702968264e+01 1.8185324009578295e+01 0 0 0 +2989 1 -7.3744979863482263e-01 5.2002482597871955e+00 1.1050179517214810e+01 2.1900544583151135e+01 1 1 0 +132 2 3.3749949997674528e-01 2.4392963953691109e+00 1.3600652152954888e+01 1.7022357287869010e+01 0 0 0 +130 1 -7.0935056090895865e-01 3.3857884751847749e+00 1.3631600125067159e+01 1.7332633598652475e+01 0 0 0 +2460 2 3.5030606816395526e-01 5.2120122006547154e-01 1.2096326668225956e+01 2.2373234552819920e+01 0 0 0 +2458 1 -6.9003921263218182e-01 1.2088702059821916e+00 1.2377476885679373e+01 2.1676674104669765e+01 0 0 0 +2261 2 3.4529986508138705e-01 1.8628227882398931e+00 1.2725199218329593e+01 2.2315669124116550e+01 0 0 0 +2990 2 3.7725943655815275e-01 5.9585430320242487e+00 1.0425576974017529e+01 2.1758287172653681e+01 1 1 0 +2836 1 -7.2338594604304973e-01 3.0881772568642623e+00 1.4036975629414393e+01 2.3162135742500073e+01 1 0 0 +2991 2 3.0982451582420384e-01 5.2280013586330387e+00 1.1203024874281757e+01 2.2920463007595512e+01 1 1 0 +1785 2 3.8281471486206287e-01 6.6167742260554228e+00 1.3612536459776695e+01 1.9313609737248520e+01 0 0 0 +2121 2 3.8585698851848321e-01 4.4807308426661656e+00 7.3066901447446870e+00 2.2606766608759379e+01 1 0 0 +2837 2 3.7013465404632945e-01 3.5954162742032376e+00 1.3873516136223056e+01 2.3965882799467401e+01 1 0 0 +937 1 -7.3314223531008127e-01 2.9009549042530489e+00 8.4066590110596824e+00 2.3065122293270981e+01 0 1 0 +938 2 3.7193465068244991e-01 2.5191766273619289e+00 8.9434038738914126e+00 2.2299129294937106e+01 0 1 0 +2900 2 3.7818319167858133e-01 2.7415196699207897e+01 8.5499633253260967e+00 2.7845323239798631e+01 0 1 0 +405 2 4.0057701173858695e-01 1.2084678057047451e+01 8.9585126757363334e+00 1.6877323855921205e+01 0 0 0 +2794 1 -7.1956077419890807e-01 2.6712684139134382e+01 5.2906405574568689e+00 3.0610308369025347e+01 0 1 0 +2407 1 -7.2798611750345976e-01 7.3061596056138445e+00 9.1177404986389856e+00 2.0833418652341557e+01 0 1 0 +2408 2 3.6041671248831952e-01 7.3585132166454654e+00 8.2126653276617905e+00 2.0557345700254629e+01 0 1 0 +2409 2 3.6349064748110360e-01 8.2029129887498033e+00 9.3373021614919374e+00 2.1047308869552040e+01 0 1 0 +1640 2 3.5413656085315520e-01 6.7125397866169587e+00 1.1556501214790561e+01 1.6890357199937188e+01 0 0 0 +207 2 3.5322247205880647e-01 1.0524607756799654e+01 9.3693843752394290e+00 2.0792799719310164e+01 0 0 -1 +551 2 3.1596334670470599e-01 2.3139540645992245e+01 9.1643025932865942e+00 1.6085846237278776e+01 0 0 0 +1028 2 3.6283021390048514e-01 9.9820280890318642e+00 9.4050140382677920e+00 1.6941434255403038e+01 0 1 0 +1573 1 -7.2522851749844286e-01 9.3058726890929240e+00 1.1238508275232054e+01 1.7770799164061348e+01 0 0 0 +129 2 3.5259057163977803e-01 8.3037113370707765e+00 1.1287229704106414e+01 1.7808208870495932e+01 0 0 -1 +1575 2 3.6052169880570617e-01 9.4943013114788730e+00 1.1281399552467397e+01 1.8757265704033799e+01 0 0 0 +2423 2 4.1237379394554557e-01 1.0186267108735564e+01 1.2482543054700727e+01 1.6924064738290593e+01 0 1 0 +2422 1 -7.5528864189308997e-01 1.0617722992488041e+01 1.3201662366329364e+01 1.6503243095375066e+01 0 1 0 +1233 2 3.8200896233481607e-01 2.9020145946440103e+01 9.4345824693544422e+00 3.0586678472936867e+01 0 0 -1 +1533 2 3.9295894415255977e-01 1.0589356890099278e+01 1.1009283924992937e+01 2.0983954036008033e+01 0 0 0 +1531 1 -7.0374484297774720e-01 1.0106263090408950e+01 1.0226083225003583e+01 2.0595863319388489e+01 0 0 0 +2357 2 3.8210603736161919e-01 9.3430479690853403e+00 1.4443269291071177e+01 1.6225834414127757e+01 0 0 0 +2567 2 3.8669808384358728e-01 1.1333563966860329e+01 1.3333851376525297e+01 1.7201856579169146e+01 0 0 0 +1784 2 3.6121546867068344e-01 6.6624094012602990e+00 1.2176837629813919e+01 1.8723857648926369e+01 0 0 0 +2923 1 -7.3571394649167221e-01 1.1882439002847120e+01 1.2312812451221372e+01 2.1406602358155876e+01 1 0 0 +2561 2 3.9705462740753311e-01 9.4233693390889908e+00 1.4297828641073684e+01 2.1471400197495001e+01 0 0 0 +2560 1 -7.1032641792680462e-01 8.6943397986103594e+00 1.3755425443541210e+01 2.1178575676550675e+01 0 0 0 +1869 2 4.0682694563708804e-01 8.3710478606434258e+00 1.4164576937614921e+01 2.0375780486508098e+01 0 0 0 +206 2 3.3829609616742795e-01 8.7602454773378078e+00 5.9344065142883000e+00 2.2942854230873522e+01 0 0 -1 +2181 2 3.6130387415390852e-01 8.0414942997850325e+00 1.3458170888224247e+01 2.2923758503112353e+01 1 0 0 +2924 2 3.3776533563465239e-01 1.1654790831468008e+01 1.3105746318028583e+01 2.1920772281945446e+01 1 0 0 +2053 1 -7.3766684215097889e-01 2.5145602703224867e+01 8.6541961282170412e+00 2.3799760133041396e+01 0 0 0 +1644 2 3.5429954575230982e-01 7.3141820210076478e+00 9.3631445469736505e+00 1.5554808430099202e+01 0 0 0 +1027 1 -7.7401990553758282e-01 1.0388384085254383e+01 8.6584800868084262e+00 1.6539136615228763e+01 0 1 0 +278 2 4.0489742409491369e-01 6.9938898484793306e+00 1.5173297331096748e+01 2.4008993477712167e+01 0 0 0 +1783 1 -6.7335777806983732e-01 7.0430888152495594e+00 1.3106370436589541e+01 1.8618614099721668e+01 0 0 0 +2230 1 -7.5263543177058245e-01 8.5774186803729857e-01 5.1195093617962808e+00 3.0600357686081662e+01 1 0 0 +2018 2 3.6679909686347079e-01 1.6956245911637073e+01 8.9418921168532250e+00 1.7658439969659675e+01 0 0 0 +403 1 -7.4516078083489978e-01 1.2992692192882428e+01 9.0005766882634362e+00 1.7173322065859242e+01 0 0 0 +1401 2 3.8626833829586898e-01 4.4637530188548071e+00 2.7502724249676175e-01 1.5697870538564095e+01 1 1 0 +1754 2 3.8391964633410047e-01 1.1764550375668628e+01 1.3032705248164630e+01 1.9772788204968641e+01 0 0 0 +1665 2 3.4798518694100483e-01 1.1773395057063254e+01 7.0581714244376617e+00 1.9806056777995511e+01 0 0 0 +2925 2 3.7387206093991754e-01 1.2787584030668560e+01 1.2116691670547677e+01 2.1790460177572896e+01 1 0 0 +1753 1 -7.5022387562627957e-01 1.2039905378946813e+01 1.3351891586988085e+01 1.8873350966911072e+01 0 0 0 +2017 1 -7.3492391394875911e-01 1.6665501964712966e+01 8.9550052987174027e+00 1.8602274889064965e+01 0 0 0 +404 2 3.8301311901100599e-01 1.3055490172705039e+01 8.6872601889770351e+00 1.8165908713344329e+01 0 0 0 +1755 2 3.8871816627699718e-01 1.3049313906018305e+01 1.3321481532767583e+01 1.8928877974205388e+01 0 0 0 +2019 2 4.1561876716004592e-01 1.7365685743876266e+01 9.3759140561039285e+00 1.9039778589444754e+01 0 0 0 +1739 2 3.8801784154160446e-01 1.3642089513094440e+01 8.3609359204199958e+00 2.0178747887490413e+01 0 0 0 +1738 1 -7.8914970851668176e-01 1.3572069606153219e+01 7.7633324407689921e+00 1.9475132354984773e+01 0 0 0 +2730 2 4.0251827972944865e-01 1.7263138369980986e+01 1.3637637118825557e+01 2.0534207733959761e+01 0 0 0 +1740 2 3.8191172211745650e-01 1.4495710456273171e+01 7.4828978210185149e+00 1.9191910649208896e+01 0 0 0 +1210 1 -7.3635400562140607e-01 1.4286356936194165e+01 9.2377315162547564e+00 2.1969271672374305e+01 0 1 0 +2519 2 3.9450616331243338e-01 1.5532727974393639e+01 1.2716095898468238e+01 1.9005980741709461e+01 0 1 0 +2518 1 -7.0020767951093255e-01 1.4748998304438500e+01 1.2980336604099989e+01 1.8479994559915177e+01 0 1 0 +2520 2 3.8806503026240069e-01 1.4704854582895956e+01 1.2369733460036672e+01 1.7698543367203715e+01 0 1 0 +2728 1 -6.9651091995638481e-01 1.7074355541895120e+01 1.2813235371684920e+01 2.0142623733808158e+01 0 0 0 +2672 2 3.7300178188927147e-01 1.7804755750171203e+01 1.2681357261096485e+01 1.9532548952210597e+01 0 0 0 +616 1 -6.9174492598625059e-01 1.7435581503971978e+01 1.1433822824662480e+01 1.6367465338872680e+01 0 0 -1 +1212 2 3.8335884669842629e-01 1.4147485685425524e+01 1.0050674626063481e+01 2.2532174256149407e+01 0 1 0 +1211 2 4.0778944741854067e-01 1.4969405215963242e+01 8.7025602838862657e+00 2.2381354008202933e+01 0 1 0 +1037 2 3.9083726566379051e-01 1.3766844118198629e+01 1.4210140240142200e+01 2.2786501057899198e+01 0 1 -1 +1836 2 3.9187442257055055e-01 1.8979423247115456e+01 1.2009427785390942e+01 1.7407244710259985e+01 0 0 0 +2940 2 3.4632860432638313e-01 1.8451600439801506e+01 1.4839552720185747e+01 1.7368561537060227e+01 0 0 0 +842 2 3.4119337800122618e-01 1.3170436151882294e+00 9.4108747050476378e+00 1.5543224130927058e+01 0 1 0 +1516 1 -6.7068126500296144e-01 1.1425229800113051e+01 2.6455517175375637e-01 1.7762034538861357e+01 0 0 0 +1639 1 -7.2373086427851052e-01 6.3764181916873843e+00 1.1759659047129542e+01 1.5981229637569374e+01 0 0 0 +1038 2 3.7926588337572753e-01 1.5156959038847516e+01 1.3698403096322609e+01 2.2897074520829197e+01 0 1 -1 +388 1 -7.5510394342290132e-01 1.4111550559310265e+01 1.1560434211278997e+01 2.3443295473973926e+01 0 0 -1 +390 2 4.0655347049402102e-01 1.5039516853489459e+01 1.1720980918698904e+01 2.3307150086746127e+01 0 0 -1 +2595 2 4.1713439738631469e-01 1.7555658074944745e+01 1.2046788493534205e+01 2.3228099335612924e+01 0 0 0 +1036 1 -6.7551293206049901e-01 1.4561103067342792e+01 1.4032165389974502e+01 2.2296849078877067e+01 0 1 -1 +617 2 3.7623215020866863e-01 1.6543106285011845e+01 1.1407863625327440e+01 1.6695487415549007e+01 0 0 -1 +1735 1 -7.5113409137827258e-01 1.4590044443041155e+01 1.1218354811374031e+01 1.6427683357216281e+01 0 0 0 +1991 2 3.8459332332863760e-01 1.9497277727423661e+01 1.0578887237316250e-02 2.2458156727385099e+01 0 0 0 +899 2 3.8127010516342885e-01 5.3391559075200679e+00 9.9804570387332223e+00 1.5720359735406319e+01 0 0 0 +398 2 3.2004491336324487e-01 2.1495986442264993e+01 7.6050513166391003e+00 2.2363098294672028e+01 0 0 -1 +2680 1 -7.3202861077267689e-01 2.2066768893607218e+01 1.5375730708080813e+01 1.9415608440359819e+01 0 0 0 +2170 1 -7.6349686183636911e-01 1.8865824155187205e+01 9.4916039563870118e+00 1.9805581370270467e+01 0 0 0 +716 2 3.5632299047840366e-01 1.9357449724098466e+01 9.0020272700128974e+00 1.9135097158884438e+01 0 0 0 +2678 2 3.4951967851345100e-01 1.9495817439363719e+01 1.0952223438296004e+01 2.2143519070705047e+01 0 0 0 +354 2 3.5916029308246983e-01 2.0956698347810864e+01 1.1783208277501810e+01 1.9587783079463009e+01 0 0 0 +352 1 -6.8878961535675709e-01 2.0550706516505961e+01 1.1663387875887267e+01 2.0534690899852240e+01 0 0 0 +353 2 3.5776060615036392e-01 1.9734667085056032e+01 1.1066395062612594e+01 2.0358463217175814e+01 0 0 0 +2172 2 3.2563405921591260e-01 1.8971789304714186e+01 8.9767862096464004e+00 2.0605374764272497e+01 0 0 0 +506 2 3.7336604353172415e-01 2.1243934859328998e+01 1.3067633517947597e+01 2.1722114689046712e+01 0 0 0 +397 1 -7.0203789006736461e-01 2.1272215741460059e+01 8.4190413649576481e+00 2.1923024798635119e+01 0 0 -1 +2112 2 3.5749643675307025e-01 2.3277342972110947e+01 1.0273506654345852e+01 1.9746190274072337e+01 0 0 0 +399 2 3.8529248043220982e-01 2.2095981443530921e+01 8.9608436992017477e+00 2.1882225118690091e+01 0 0 -1 +669 2 3.5241719615984168e-01 2.3835092940756191e+01 1.1028890441661733e+01 2.1590790738013276e+01 0 0 0 +1939 1 -7.2135771505377078e-01 2.2966671549940813e+01 1.0008086922405964e+01 1.8897908893064958e+01 0 0 0 +715 1 -7.2997705047380057e-01 2.3653015785898301e+01 1.0098747871485116e+01 2.1824770265916694e+01 0 0 0 +1940 2 3.5160598280934757e-01 2.2669112888586351e+01 9.0908235054689985e+00 1.9073113742305335e+01 0 0 0 +717 2 3.8320793146871557e-01 2.4311519990824511e+01 9.7755906645591999e+00 2.2462924941857636e+01 0 0 0 +459 2 3.8416886073134027e-01 2.3070896264022778e+01 1.2452390151392521e+01 1.9315406632261965e+01 0 0 0 +1834 1 -7.2161997489727125e-01 1.9381599658981891e+01 1.2659658978319085e+01 1.8015457035261701e+01 0 0 0 +505 1 -6.9860310377840651e-01 2.1642858799412103e+01 1.3937964923486071e+01 2.1816452323103469e+01 0 0 0 +1835 2 3.7207914288685157e-01 2.0278979344207215e+01 1.2638224531969829e+01 1.7854801478038407e+01 0 0 0 +458 2 3.8212115507743072e-01 2.2372624989832556e+01 1.2229091079374045e+01 1.7903894019546094e+01 0 0 0 +457 1 -7.6499416451080382e-01 2.2343098067345160e+01 1.2805355870533806e+01 1.8699219400743679e+01 0 0 0 +1956 2 3.4339814167844712e-01 2.4186106360868280e+01 1.2969190144837924e+01 2.2301851785400849e+01 0 0 0 +2729 2 3.7703957361105783e-01 2.2081585098562567e+01 1.4464589638277989e+01 1.8968631374295192e+01 0 0 0 +1941 2 3.8549314621537878e-01 2.1944326659494948e+01 1.4125339370548296e+01 2.0896046712774201e+01 0 0 0 +2111 2 3.5065550630186537e-01 2.0214586295971163e+01 8.2482085452366718e+00 1.7099343233387046e+01 0 0 0 +2303 2 3.3566251428324961e-01 4.7982086445837524e+00 6.5562331072971682e+00 1.6506782621679776e+01 0 0 0 +882 2 3.5386422755678792e-01 9.7165959201112670e+00 1.5169399558564750e-01 2.1823152404527185e+01 0 1 0 +185 2 3.4046379682562783e-01 4.3305035655275319e-02 1.2912647970572984e+01 1.7031286717738347e+01 0 0 0 +2384 2 3.7660846054579272e-01 2.9465405847905281e+01 9.2655430068648865e+00 2.2725072426645035e+01 -1 1 0 +1068 2 3.8476208951181273e-01 1.3329215191795530e+01 1.1354157060663415e+01 3.1042205074704174e+01 0 0 -1 +2987 2 3.6560553509206023e-01 2.7464957672870540e+01 1.1248565497139367e+01 2.3809506566471352e+01 0 1 0 +346 1 -7.3391986676753573e-01 1.7056858454851412e+01 8.2180755585903089e+00 1.5626796727305591e+01 0 0 0 +184 1 -7.2609578154427024e-01 4.9464161798220929e-01 1.3770931023181264e+01 1.6871790013461275e+01 0 0 0 +2469 2 3.9352264166164758e-01 1.4823853627918639e+00 1.5415517317916478e+01 1.7290114940775041e+01 0 0 0 +921 2 3.9567342613304785e-01 2.7976820586123839e+01 7.6241864611821573e+00 1.6669910450292988e+01 -1 1 0 +730 1 -7.5440831141625975e-01 2.9940507767907427e+01 1.1024414260594568e+01 1.6465650387139668e+01 0 0 0 +732 2 3.6608217473124127e-01 3.0900323309008844e+01 1.0756077083335166e+01 1.6365877614743567e+01 0 0 0 +2132 2 4.0049444066124251e-01 2.4976244607438534e+01 1.3260747334438147e+01 2.0221675044683380e+01 0 0 0 +2131 1 -7.7945494920877012e-01 2.4472214704824960e+01 1.2409196296592279e+01 2.0203897211372077e+01 0 0 0 +2133 2 3.8570991198323573e-01 2.4943570048139250e+01 1.1853053597824776e+01 1.9524475894365100e+01 0 0 0 +640 1 -7.4773484071651031e-01 2.5532342776021249e+01 8.6043278685170712e+00 1.8213454212182754e+01 0 0 0 +2225 2 3.7750922652840646e-01 2.6069108746220927e+01 1.0262117383019357e+01 1.8267611041747067e+01 0 0 0 +2226 2 3.4778060237024450e-01 2.6239382865318579e+01 1.1685965248509371e+01 1.7749768533991165e+01 0 0 0 +2246 2 3.7627811404600109e-01 3.0297260992956371e+01 8.6714161509651131e+00 2.0389554356097957e+01 0 0 0 +160 1 -7.3033074976895529e-01 2.9624109555854151e+01 9.2807951844092678e+00 2.0695257535476276e+01 -1 0 0 +162 2 3.6796053651740235e-01 2.9490886980093705e+01 1.0053299858495222e+01 1.9995802359191931e+01 -1 0 0 +731 2 3.6711482998338107e-01 2.9715292499906422e+01 1.1173930209302149e+01 1.7425157563527797e+01 0 0 0 +2136 2 3.7353312060824306e-01 3.0456462227425714e+01 1.3397929850443866e+01 2.0727463330593576e+01 0 0 0 +2135 2 3.7707725039739515e-01 2.9083332776355398e+01 1.3250228537723050e+01 2.1409642910163022e+01 0 0 0 +2134 1 -7.2738501400538580e-01 2.9500436262165433e+01 1.3543525387246625e+01 2.0629409301244063e+01 0 0 0 +2072 2 3.8891740371251265e-01 2.8010580003273464e+01 1.1290754689919872e+01 1.8919865387757891e+01 0 0 0 +2122 1 -7.6644048790081043e-01 2.8976243521620926e+01 1.1401425816808537e+01 1.9049523031513747e+01 0 0 0 +2224 1 -7.6287182875028514e-01 2.6302186259578878e+01 1.1200627055575357e+01 1.8558007066340860e+01 0 0 0 +2124 2 3.8177232409347289e-01 2.9162220178382157e+01 1.2281700072770796e+01 1.9590310578059650e+01 0 0 0 +2247 2 3.7278880601710385e-01 2.6732418424088859e+01 1.3375916691502859e+01 2.2948704244468736e+01 0 0 0 +2912 2 3.5654891863482036e-01 2.8478781872414316e+01 1.4628254342701968e+01 1.8070471132846095e+01 0 1 0 +2911 1 -7.3296770724997251e-01 2.7562138940867662e+01 1.4686028519329875e+01 1.7771090994399270e+01 0 1 0 +2245 1 -7.3198965470550681e-01 2.7613387979096714e+01 1.3034627827881975e+01 2.3073332631836262e+01 0 0 0 +2732 2 3.6399052841284724e-01 2.8474495064115239e+01 1.0035090529339035e+01 2.4089533533768773e+01 0 0 0 +1405 1 -7.1712130024312082e-01 2.4909497949203029e+01 1.2417893636624896e+01 1.6247143313584463e+01 0 1 0 +1919 2 3.8535487605174684e-01 2.7056171148481642e+01 1.4437251107957492e+01 1.8535957281679362e+01 0 0 0 +137 2 3.6010823860519475e-01 2.8070308191720184e+01 1.3668673401282824e+01 2.3632800567763915e+01 -1 0 0 +2797 1 -7.4053306465865087e-01 2.7531406994413494e+01 1.0337524702304648e+01 2.4187314942978201e+01 0 1 0 +1407 2 3.3584572053128925e-01 2.4134739719232172e+01 1.1828768930389478e+01 1.6211473199796917e+01 0 1 0 +2887 1 -6.6686361361738655e-01 1.7366594829490911e+00 3.8184872265588798e-01 3.0534326547643687e+01 1 1 0 +2356 1 -7.3218856391362297e-01 8.7508872956418760e+00 1.5223406319860592e+01 1.5987431167238142e+01 0 0 0 +1135 1 -7.1096791971419460e-01 2.6483728833226294e+01 1.5402925392905622e+01 2.7411168513907231e+01 0 0 -1 +45 2 3.6392287941140833e-01 1.4006717062920890e+01 7.9881129827318178e+00 1.5817203648188739e+01 0 0 0 +652 1 -7.1326045703175078e-01 1.7940745850141756e+01 1.5517649835166518e+01 2.0664114896539090e+01 0 0 0 +1605 2 3.5111781404263770e-01 2.6299486851682459e+00 1.9084394243801095e+00 2.6702910352040490e+01 0 0 0 +156 2 3.7815022812234889e-01 2.8944617535136126e+00 3.7000780234493660e+00 2.3375635489162701e+01 0 0 0 +2576 2 3.6944053787329784e-01 4.5306460799063819e+00 6.8045844706988023e-01 2.3882858342485843e+01 0 1 0 +1603 1 -7.2352326684273671e-01 2.0925608534674192e+00 1.4994002789243699e+00 2.6053898871459438e+01 0 0 0 +1604 2 3.5784239543508978e-01 2.6558924493573683e+00 1.6491644984747833e+00 2.5285569030322147e+01 0 0 0 +768 2 3.5889503483555663e-01 2.6155775692569061e+00 6.2952737954860494e+00 3.0069361965627756e+01 0 0 -1 +959 2 3.4847682532600549e-01 3.3896562876093910e+00 5.3534311883952777e+00 2.8301965994702510e+01 0 0 -1 +154 1 -7.1845298746042896e-01 3.0060271800735214e+00 2.6906180589790232e+00 2.3485835681460074e+01 0 0 0 +155 2 3.6310940125395524e-01 3.9564133801821355e+00 2.4997700481529299e+00 2.3608032808913929e+01 0 0 0 +746 2 3.3452565110090060e-01 4.6091031750912199e+00 2.0564926734150242e+00 2.8598566794230077e+01 1 0 -1 +745 1 -7.4957206719184666e-01 4.6446472830542271e+00 2.0601499171929896e+00 2.7656284147156228e+01 1 0 -1 +747 2 3.3876187850410905e-01 5.5986980737654228e+00 2.2173410774498237e+00 2.7463488941283973e+01 1 0 -1 +2140 1 -7.5910771445322278e-01 4.6072371158375891e-01 5.6894736955241223e+00 2.7002676169462639e+01 1 0 0 +760 1 -7.2383900700149562e-01 3.0124918542978749e+00 4.9031052564718873e+00 2.7509888261364623e+01 0 0 -1 +761 2 3.3007493639865093e-01 3.3127594365808206e+00 4.0046170422366432e+00 2.7669968488879821e+01 0 0 -1 +766 1 -7.8191702293143428e-01 3.4450228601390331e+00 6.6501573073070226e+00 2.9746624243370210e+01 0 0 -1 +2142 2 3.8289699939760330e-01 1.3174004643759945e+00 5.1965945452085469e+00 2.7210580526167202e+01 1 0 0 +104 2 3.5380180318457871e-01 5.5198701162709645e+00 6.8752345186909745e+00 2.6249799741025491e+01 0 0 -1 +55 1 -6.9427182695468448e-01 5.9577817224673000e+00 6.4368574169994650e+00 2.5509779416469595e+01 0 0 -1 +2243 2 3.7410388442771397e-01 1.2034232408547305e+00 7.1972306827937826e+00 2.7274449960386374e+01 1 0 0 +57 2 3.7136024885638275e-01 5.2676968644264459e+00 6.2372575723454098e+00 2.4839309811753004e+01 0 0 -1 +1610 2 3.7631132379252363e-01 4.0437390210148987e+00 3.2407764692770552e-01 2.8154713224445732e+01 0 0 0 +231 2 3.7991147877901293e-01 6.1647893646658352e+00 5.0583850605738689e+00 3.0835566349958654e+01 0 0 -1 +2575 1 -7.3924682246274653e-01 5.6104836585269391e+00 2.2948051186240721e+00 2.4068361492403909e+01 0 1 0 +229 1 -7.3142249570417361e-01 5.6897214367236337e+00 5.0771683978045949e+00 2.9988809681094182e+01 0 0 -1 +2242 1 -7.5275488968526127e-01 1.6121977001859173e+00 8.0621852338332864e+00 2.6927327677845390e+01 1 0 0 +1709 2 3.7759477195007612e-01 2.3009551945892234e-01 2.9054335778181983e-01 2.2910480586009719e+01 0 0 0 +230 2 3.7105478337597031e-01 4.9008827539773936e+00 5.7163105546997963e+00 3.0041707584755315e+01 0 0 -1 +1437 2 3.4991221351340213e-01 2.9437131111781120e+01 9.2616161897067162e+00 1.6312167778586037e+01 0 0 0 +2257 1 -7.3155476328684443e-01 2.7783557954778793e+01 1.5400060019718380e+01 2.4781951177859217e+01 -1 0 0 +2141 2 3.4741712872681252e-01 3.8863220752417565e-01 5.7522035734289352e+00 2.6005208355033556e+01 1 0 0 +1506 2 3.7428710536178583e-01 3.4616250200203041e-01 2.2811146231229431e+00 2.5588369112161367e+01 0 0 0 +2341 1 -7.6276413519313246e-01 8.7773055780748210e-01 7.1913810433029584e+00 2.4444154580846838e+01 0 1 0 +604 1 -7.3234327216229211e-01 9.7533281522530437e+00 8.0503141526497166e-02 2.8715255588762510e+01 0 0 -1 +1668 2 3.8204713336037099e-01 7.0998155724257650e+00 7.6432442203046289e+00 3.0448364884145068e+01 0 0 0 +2470 1 -7.1006127391757046e-01 5.8392836050614196e+00 1.9472392741888216e+00 3.0045369550134733e+01 0 1 0 +1698 2 3.7835501800116833e-01 1.0620223823987079e+01 2.0039196363086931e+00 2.4380001590043584e+01 0 0 0 +2505 2 3.9505263210629882e-01 7.7472986644074577e+00 1.6450692330334811e+00 2.7092945216945559e+01 0 1 0 +1790 2 3.9959303180025546e-01 8.6149533170788413e+00 1.3639145340245475e+00 2.8480885121536478e+01 0 0 0 +1667 2 3.4316804129203538e-01 6.7094284903958750e+00 6.4608432582388646e+00 2.9436238510216565e+01 0 0 0 +2471 2 3.8693552030295769e-01 6.6157992859761992e+00 1.8301818197673485e+00 2.9397771245472452e+01 0 1 0 +828 2 3.6959373561806791e-01 7.9730749989243206e+00 5.3762975343585486e+00 2.6510240742923454e+01 0 1 -1 +827 2 3.8533812346834262e-01 9.1098967293564321e+00 5.7867348203768900e+00 2.5415050302772961e+01 0 1 -1 +2290 1 -7.2311861325806781e-01 7.1990819250561247e+00 4.4161739407096965e+00 2.3214107095139333e+01 0 1 0 +2292 2 3.5282785373504333e-01 6.6043512343042048e+00 5.1504590610166359e+00 2.3369187485954960e+01 0 1 0 +826 1 -7.7327279910532365e-01 8.8852591236397522e+00 5.3907166658805066e+00 2.6321780757862346e+01 0 1 -1 +2462 2 3.8127918981240727e-01 1.1106926559939263e+01 3.2142510335419128e+00 2.6313151503225818e+01 0 0 0 +2577 2 3.9111127420726477e-01 6.1737599263758964e+00 3.0920245359822180e+00 2.3754152255765142e+01 0 1 0 +1676 2 3.4671941264342054e-01 9.3309146799038558e+00 6.0605507641258232e+00 2.7918826665849195e+01 0 0 0 +2463 2 3.5797165668398834e-01 1.0529963878015691e+01 4.6798321049604681e+00 2.6604494471453545e+01 0 0 0 +2461 1 -7.6672260309278528e-01 1.1330983766945398e+01 4.1107424917779500e+00 2.6588347801866334e+01 0 0 0 +1675 1 -7.5495380454948657e-01 9.6517566920452396e+00 6.6463425202929249e+00 2.8643151899383643e+01 0 0 0 +1677 2 3.7929200748761688e-01 8.7702547003611944e+00 6.8687629380470234e+00 2.9126412959566544e+01 0 0 0 +1612 1 -7.3815051531118636e-01 1.1246395560967327e+01 4.4466625634810439e+00 2.9348903503134387e+01 0 0 0 +1695 2 3.5770006483896866e-01 8.2820740425731127e+00 1.5367669740626146e+00 2.5115092014407637e+01 0 0 0 +1613 2 3.6211581024232170e-01 1.0586182661907189e+01 5.1683886359094950e+00 2.9192950691679115e+01 0 0 0 +1614 2 3.6663082131535712e-01 1.1360675801485524e+01 4.1186753637637681e+00 2.8426967799714145e+01 0 0 0 +2504 2 3.9006410078894199e-01 6.1686030868556090e+00 1.8484193377472726e+00 2.4856211741934199e+01 0 1 0 +1666 1 -7.4804678719134265e-01 7.2295609345927812e+00 7.3725389976496345e+00 2.9498489434899135e+01 0 0 0 +1789 1 -7.0789100849723052e-01 7.8347032250510464e+00 1.8745090856575120e+00 2.8150593435894123e+01 0 0 0 +1102 1 -7.2484897577735463e-01 7.4954160196154804e+00 1.3475667352039538e+00 2.5622737359185873e+01 0 1 0 +1950 2 3.8211414353034612e-01 2.6318576396838196e+01 6.2005906232047820e+00 3.0926365845374470e+01 0 0 0 +201 2 3.8505026476286963e-01 2.8875311946310578e+01 1.0486113117526268e-01 2.5903813880384430e+01 -1 0 -1 +213 2 3.5331547354572462e-01 1.0094350323601551e+01 1.6355217338086478e+00 2.9902040913462724e+01 0 0 -1 +1697 2 3.5665869442543852e-01 1.1812417085794502e+01 1.4179132341840108e+00 2.5349575673031623e+01 0 0 0 +1696 1 -6.9906214495727226e-01 1.0816648011309034e+01 1.5732587734711427e+00 2.5266034404801520e+01 0 0 0 +2784 2 3.8284675805091112e-01 1.1800505099415970e+01 5.3980783829212857e+00 2.5506553022148633e+01 0 1 0 +200 2 3.5498199675316910e-01 2.9860072104936709e+01 1.2613231033752976e+00 2.5515978975457060e+01 -1 0 -1 +2087 2 3.8132925818039848e-01 2.7079357627333255e+01 3.9538809364147370e-01 2.4125426836104438e+01 0 0 0 +2055 2 3.9062362437675457e-01 2.6027125624982066e+01 9.0056621598958237e+00 2.3815178340636532e+01 0 0 0 +2715 2 3.8679293265460046e-01 1.7672954384457459e+01 2.4689610820071568e+00 2.3791118220408435e+01 0 1 0 +2530 1 -7.4476748089193567e-01 1.5164226625356950e+01 9.7577773171138671e-01 2.3001443303076130e+01 0 1 0 +2713 1 -7.7496637692445991e-01 1.7483805518372101e+01 3.3746191935728023e+00 2.4103637805231486e+01 0 1 0 +1879 1 -7.2581626411596223e-01 1.6079187392870164e+01 7.7491964483766420e+00 2.3322678776045596e+01 0 0 0 +198 2 4.0416597710417085e-01 1.2339982134060692e+01 5.2958185199224834e+00 3.0553713530058854e+01 0 0 -1 +383 2 3.6816002057937336e-01 1.3718608800421432e+01 2.2539414034241911e+00 2.4632719231922977e+01 0 0 -1 +2189 2 3.7184577153859505e-01 1.3697004879830212e+01 7.4745839213884258e-01 2.5202791018715246e+01 0 0 0 +1808 2 3.5707964716517671e-01 1.2164030559487436e+01 7.3814702824088050e+00 2.3810382629409432e+01 0 0 0 +412 1 -7.2247844298604080e-01 1.4280465766839763e+01 2.0154595068977179e+00 2.9596266300365343e+01 0 0 -1 +2188 1 -7.4594174866031282e-01 1.3533969980129937e+01 1.6527397343918953e+00 2.5395849873291269e+01 0 0 0 +1794 2 3.8659034471889031e-01 1.4463252385309664e+01 5.6746620476312488e+00 2.8245119598851449e+01 0 0 0 +1691 2 3.9863451050656573e-01 1.4288471439622102e+01 7.7356083129237740e+00 2.9938865219573312e+01 0 0 0 +2782 1 -7.4311594708760220e-01 1.2401050650869941e+01 5.7841873787684888e+00 2.4847262494224694e+01 0 1 0 +2714 2 3.8020034689892418e-01 1.6508369862393078e+01 3.4988704682037368e+00 2.4208899519999502e+01 0 1 0 +1867 1 -7.2703398778301620e-01 1.4320172044433900e+01 6.6061317379975737e+00 2.8590330500386656e+01 0 0 0 +1860 2 3.6259354613133710e-01 1.3682191928063379e+01 7.0944660188658855e+00 2.7989646814815874e+01 0 0 0 +1801 1 -7.4395001518338510e-01 1.4524362524969639e+01 3.9127560792567242e+00 2.7574044750927154e+01 0 0 0 +24 2 3.1572007617749354e-01 1.5629619413419856e+01 5.6405255910187329e+00 2.5727182980490600e+01 0 0 -1 +23 2 3.3802191421555616e-01 1.5125566437350948e+01 6.7160073750058054e+00 2.6620021779098007e+01 0 0 -1 +22 1 -7.3055579090838396e-01 1.5891352345289096e+01 6.5418138309028828e+00 2.6029168877611063e+01 0 0 -1 +2424 2 3.5056989389545112e-01 1.4175089634680990e+01 4.8223776090127233e+00 2.4370479728181770e+01 0 1 0 +1802 2 3.4706211476779852e-01 1.5261195821634548e+01 3.4496911264633634e+00 2.7077869109044276e+01 0 0 0 +1822 1 -7.3869738211977010e-01 1.6945727137725200e+01 2.3665741269187799e+00 2.6754995542136687e+01 0 0 0 +2566 1 -7.2238086286676650e-01 1.4732018505396947e+01 4.0616910904253132e+00 2.4184656701567210e+01 0 0 0 +1824 2 4.0099874000931812e-01 1.6361263160538176e+01 1.5433515087414060e+00 2.6681694995932268e+01 0 0 0 +1823 2 3.5259860836217050e-01 1.7004232190130114e+01 2.7659484071560354e+00 2.5864238730984031e+01 0 0 0 +413 2 3.8194871278859543e-01 1.4493083830094669e+01 2.6915599088621218e+00 2.8964653139671135e+01 0 0 -1 +1132 1 -7.8684514788307447e-01 1.8113618383064782e+01 6.6564105624918390e+00 2.7825846085913078e+01 0 0 -1 +1023 2 3.9654087966533347e-01 1.7443075465581735e+01 5.7488500582853614e+00 2.9150612393490185e+01 0 1 -1 +1803 2 3.5226628335139892e-01 1.3736252433620466e+01 3.4577806895413277e+00 2.7297176176563575e+01 0 0 0 +1881 2 3.7309282547796940e-01 1.5960450825911897e+01 7.1685773230358913e+00 2.4089572576216767e+01 0 0 0 +2783 2 3.4352357034503550e-01 1.2988656095323929e+01 6.3854497952466618e+00 2.5318059663795211e+01 0 1 0 +1021 1 -7.5456799263442131e-01 1.7525918910477358e+01 4.9951615398262001e+00 2.9759290956075663e+01 0 1 -1 +1134 2 3.6239482331144030e-01 1.7462744899850858e+01 6.5074837269233123e+00 2.7077778836775249e+01 0 0 -1 +1793 2 4.1572512658299882e-01 1.8073425223065041e+01 3.3575067534915588e+00 2.9207373212601954e+01 0 0 0 +2796 2 4.2213039093411159e-01 1.8179336613522949e+01 2.4919400463894288e+00 2.7864552441067762e+01 0 1 0 +1792 1 -7.3738376359606139e-01 1.8620994317729217e+01 2.7171006406247078e+00 2.8759393908495117e+01 0 0 0 +1880 2 3.6330696047818717e-01 1.6995808128896741e+01 8.1279433991093537e+00 2.3311703301759788e+01 0 0 0 +2061 2 3.2537907809503785e-01 2.2440273268792474e+01 1.0964887291422052e+01 1.6297516466307698e+01 0 0 0 +839 2 3.8027724849319211e-01 2.7759267097755888e+01 5.4301314090060684e+00 1.6279486475935325e+01 -1 1 0 +1308 2 3.4652344809115321e-01 2.7376399502770262e+01 1.2686836450099335e+01 3.0847557279745700e+01 0 1 -1 +414 2 3.5026080502107043e-01 1.3610820703506388e+01 1.3989815362903599e+00 2.9152424176363148e+01 0 0 -1 +838 1 -7.4661124037097937e-01 2.8336958586340820e+01 4.6545977211036629e+00 1.5985798359172170e+01 -1 1 0 +2040 2 3.4841893979641375e-01 2.3116508880722311e+01 2.2742405108769868e+00 2.3248279285215204e+01 0 0 0 +408 2 3.3615325000522034e-01 2.1886245219915821e+01 1.4620116047737040e+00 3.0305882116767531e+01 0 0 -1 +1319 2 3.6377511606203944e-01 2.2679173557773613e+01 3.8312650465522329e+00 3.0337714197555496e+01 0 0 -1 +1725 2 3.5999155580158826e-01 1.9396800376357625e+01 2.8517078784890120e+00 2.4770633049667293e+01 0 0 0 +1723 1 -7.0291368591368775e-01 2.0031609566505022e+01 2.3100487504592011e+00 2.5236743027128966e+01 0 0 0 +2039 2 3.8601830871155030e-01 2.4689986385242818e+01 2.7333703199245574e+00 2.3533497119533202e+01 0 0 0 +1975 1 -7.7479016530442568e-01 2.2035449930098789e+01 5.9817972726034707e+00 2.3596815989300730e+01 0 0 0 +1133 2 4.0552689273242359e-01 1.8982058003137158e+01 6.2605938973427699e+00 2.7616583004620413e+01 0 0 -1 +251 2 3.7998342573887978e-01 2.0934339493891319e+01 1.3052873225415755e+00 2.6503990225166806e+01 0 0 -1 +2013 2 3.9423272690181710e-01 1.8631629587743380e+01 1.1303446468208378e+00 2.9505706772310898e+01 0 0 0 +2221 1 -7.5996622342131370e-01 2.4433660816953392e+01 3.1920332351693292e-01 2.7233526334968218e+01 0 0 0 +2038 1 -7.2477816625334268e-01 2.3890510211906154e+01 2.1946548833974879e+00 2.3908604479720488e+01 0 0 0 +1918 1 -7.4155527600601256e-01 2.5926359835059351e+01 1.4698996019020885e+01 2.0016330192932870e+01 0 0 0 +2015 2 3.6363809299288735e-01 2.2778312640167730e+01 3.1461983364573145e+00 2.5033216009192092e+01 0 0 0 +2016 2 3.7478891531000047e-01 2.2657166473054961e+01 4.6844022674643870e+00 2.4869835982086411e+01 0 0 0 +2014 1 -7.1214110885986637e-01 2.2571366834895294e+01 3.9748534047102417e+00 2.5540547659930525e+01 0 0 0 +1724 2 3.4134589759837836e-01 2.0842203093187724e+01 2.8239487034057364e+00 2.5299412584682365e+01 0 0 0 +2615 2 3.8528317315514266e-01 2.1777207634367581e+01 2.5957189027018090e+00 2.8075641756680287e+01 0 1 0 +2616 2 3.5940547383941868e-01 2.0785643999831347e+01 3.1781194810922901e+00 2.9152301692711102e+01 0 1 0 +2614 1 -7.6820777209436375e-01 2.1692978096403248e+01 3.1748162583595714e+00 2.8848176403157424e+01 0 1 0 +250 1 -7.3931312868170040e-01 2.1673960370643645e+01 9.5121953101989898e-01 2.7056977704243231e+01 0 0 -1 +2223 2 3.7247416059367261e-01 2.3541408786793877e+01 6.6017054320870006e-01 2.7434862837779910e+01 0 0 0 +1938 2 3.6279674091145114e-01 2.1096445250826850e+01 4.8628377591166805e+00 2.8083029348299146e+01 0 0 0 +2975 2 3.8381030301725305e-01 2.3805159178106493e+01 5.0293373259224659e+00 2.6723716857786389e+01 0 1 0 +2974 1 -7.2344779356769162e-01 2.4633119241402110e+01 5.4403491464787317e+00 2.6950581463737869e+01 0 1 0 +1936 1 -7.0856542248055776e-01 2.0701215126028124e+01 5.7697851570504719e+00 2.7901223821110477e+01 0 0 0 +2208 2 3.9722107295347597e-01 2.1984122819343177e+01 6.9208006527616437e+00 2.5149997722782850e+01 0 0 0 +1944 2 3.7009164707375797e-01 2.1452746854380685e+01 6.4137866829722237e+00 2.7642214835097100e+01 0 0 0 +2222 2 3.7668046195695482e-01 2.5040740162029486e+01 1.0461749322270053e+00 2.6946065048380657e+01 0 0 0 +2767 1 -7.4337786974117792e-01 2.1742307820327344e+01 1.5134418643722100e+01 2.4366126454495504e+01 0 0 0 +371 2 3.6116972247229417e-01 2.0271230995454754e+01 7.1271787017209522e+00 2.9462320916362494e+01 0 0 -1 +2268 2 3.8457219349314065e-01 2.5980819952702472e+01 1.3714583291187926e+01 2.7282890283323162e+01 -1 0 0 +1232 2 3.4413758709031472e-01 2.9137567040215881e+01 1.0949202512858209e+01 3.0188781454335743e+01 0 0 -1 +1505 2 3.3551538791325869e-01 3.0317430235107839e+01 2.9847883207742885e+00 2.6452510489649907e+01 -1 0 0 +2272 1 -7.1071342598118648e-01 9.3835958734398410e+00 1.9561492285590161e+00 1.6622592390969427e+01 0 1 0 +1402 1 -6.9090595601270877e-01 2.6153445107788702e+01 3.6986035008505143e+00 2.3233331582584253e+01 0 1 0 +642 2 3.9542601294035035e-01 2.5957914270746148e+01 4.6662342532055536e+00 2.3026093473662279e+01 0 0 0 +406 1 -7.2490031864237825e-01 2.1528688902268865e+01 7.9429199794798822e-01 3.0885245286492957e+01 0 0 -1 +2258 2 3.9486945463227829e-01 2.7359054985104358e+01 1.5436089924173725e+01 2.5637251930300373e+01 -1 0 0 +1431 2 3.9006331304254127e-01 8.2659253456867976e+00 1.1522236767241642e+01 3.0860983968750393e+01 1 0 -1 +2976 2 3.9887145224155784e-01 2.4517444990185002e+01 6.3712412588653491e+00 2.6740258769931579e+01 0 1 0 +2100 2 3.6322920647257073e-01 2.9629275158220981e+01 4.5700023648180492e+00 2.2808902444718804e+01 0 0 0 +2999 2 3.5082069769033863e-01 2.7040992222736573e+01 6.3552519615497500e+00 2.2920612554283686e+01 0 1 0 +1220 2 3.4087260111907031e-01 2.9682593014266931e+01 6.7623466501355862e+00 2.7401651354898359e+01 0 1 -1 +881 2 3.7611075813075673e-01 8.2941119941425061e+00 2.4507050696816179e-01 2.1775686689633140e+01 0 1 0 +2120 2 3.5975526793042684e-01 2.9234149746931653e+01 8.3374100951964962e+00 2.3985806198816153e+01 0 0 0 +2098 1 -7.1624302267277173e-01 2.9462080781502500e+01 4.7667433676649136e+00 2.3739855004374014e+01 0 0 0 +1943 2 3.2804604961872091e-01 2.6167227951336340e+01 2.7451899980758090e+00 2.7322560420098402e+01 0 0 0 +2910 2 3.7101859261354220e-01 2.8735247220914726e+01 6.3319590384294813e+00 2.4458525183914798e+01 0 1 0 +2908 1 -7.2716197609036148e-01 2.8378839276950643e+01 7.2498675408571609e+00 2.4719567635135576e+01 0 1 0 +1942 1 -6.8838152630748339e-01 2.6379132025647991e+01 2.0205581695014101e+00 2.6642795589277483e+01 0 0 0 +2420 2 3.3319989750073198e-01 2.7128680562758586e+01 1.5534418813685780e+00 2.7085445017186270e+01 -1 1 0 +1504 1 -7.3813947165875382e-01 3.0614709508732197e+01 2.8938895549518966e+00 2.5526870002667810e+01 -1 0 0 +2168 2 3.7507212316829724e-01 2.9040012568709660e+01 4.0195686600996305e+00 2.8053508071473072e+01 0 0 0 +1306 1 -7.3274483043115135e-01 2.8188220391426622e+01 1.2863624903147597e+01 3.0372057121312960e+01 0 1 -1 +2868 2 3.3936535350076769e-01 2.2235497459102703e+01 1.2320692327513624e-01 1.5742347904127183e+01 0 1 0 +2798 2 3.3851635523595636e-01 3.0527506010436827e+01 4.0585061296507003e+00 2.8051268696236018e+01 0 1 0 +2167 1 -7.4174741026786273e-01 2.9775876264620848e+01 3.5160377555752933e+00 2.8311356739956437e+01 0 0 0 +2909 2 3.7305397904399157e-01 2.8652845000281829e+01 7.5003064417264893e+00 2.5670730788252705e+01 0 1 0 +2889 2 3.9806029509204588e-01 2.9654465761888165e+01 3.9558254468869434e+00 2.4258640376803672e+01 0 1 0 +2733 2 3.7517338274961209e-01 2.7028842914118083e+01 4.6824780691510828e+00 2.8824592225694200e+01 0 0 0 +2731 1 -7.1900772137801938e-01 2.7122895792893566e+01 4.7338574122783506e+00 2.7849286889968994e+01 0 0 0 +671 2 3.8169834079412152e-01 2.9864196120943340e+01 1.7126153484504640e+00 2.9226896633769105e+01 0 0 -1 +1403 2 4.0132675187727163e-01 2.6224451088274588e+01 5.1348426597395056e+00 2.7597014274458878e+01 0 1 0 +670 1 -7.4002040050912421e-01 2.9874692231980340e+01 1.0162881596271729e+00 2.9897001642592940e+01 0 0 -1 +1221 2 3.7142453933153258e-01 2.8279180522399930e+01 6.3082051403849597e+00 2.7253072575456311e+01 0 1 -1 +1219 1 -7.4636223009135871e-01 2.8758138158755816e+01 7.1096213158585195e+00 2.7330644076947245e+01 0 1 -1 +672 2 3.6210127057263714e-01 3.0760197576931898e+01 1.0466490121463978e+00 3.0247980756380638e+01 0 0 -1 +1435 1 -7.2190580097339840e-01 2.9452542875187081e+01 8.3672546868835571e+00 1.5906688128526630e+01 0 0 0 +2059 1 -7.3637836147899527e-01 2.1998281203684527e+01 1.1770994523966618e+01 1.6128556252963122e+01 0 0 0 +1542 2 3.5572588517955095e-01 4.9678608395711095e+00 1.4496217192802565e+01 2.7229720314445228e+01 0 0 0 +1540 1 -6.9617458328670623e-01 5.6494376971442675e+00 1.4712315230056680e+01 2.7937831813085410e+01 0 0 0 +39 2 3.5861234707695044e-01 4.2242415429574915e+00 7.1689718685924051e+00 2.7971694427089329e+01 0 0 -1 +37 1 -6.8293218877967798e-01 4.2243836444752185e+00 7.8731720250773298e+00 2.7244136020901131e+01 0 0 -1 +38 2 4.0408897137400679e-01 3.2693517614548901e+00 8.0355786580291166e+00 2.6892708490084008e+01 0 0 -1 +2169 2 3.7283530489617012e-01 1.4461182609017900e+00 7.9806912796887701e+00 2.5962933797040051e+01 1 0 0 +2267 2 2.9668086831985852e-01 2.5218640424788600e+01 1.5265070169491409e+01 1.5671407808032143e+01 -1 0 0 +72 2 3.7026895866173609e-01 1.3867832616450693e+01 1.4159720159449840e+01 3.0646427607190635e+01 0 0 -1 +2864 2 3.2700706478367164e-01 2.2260451793554332e+00 1.4487314715567837e+01 2.3536880541097752e+01 1 0 0 +2359 1 -6.8370245709145028e-01 3.0582305117577373e+01 1.4674977867580935e+01 3.0856409602959928e+01 -1 0 0 +462 2 3.4300757633537127e-01 7.4140687869223365e+00 2.7094644349793407e-02 1.8276899988028021e+01 0 1 0 +2362 1 -7.2627827420049385e-01 5.1300680550884314e-01 1.4918816875037386e+01 2.5135838730051187e+01 0 0 0 +1592 2 3.7139105979830456e-01 2.9400588249469295e+00 1.4517999193433587e+01 2.9001036244968251e+01 0 0 0 +2941 1 -7.4462083103699006e-01 9.3610162932407676e-02 1.0181900578098317e+01 2.7565106823884161e+01 1 0 0 +1591 1 -7.2882083130276931e-01 2.5307453373854911e+00 1.4151414661377173e+01 2.8248997847423023e+01 0 0 0 +2396 2 3.6784498076161737e-01 3.0646037543374511e+01 1.0246317877433162e+01 2.8449760965429725e+01 -1 0 0 +2298 2 3.6457852508912042e-01 2.9919726624970487e+01 1.0961711742085427e+01 2.3895181447391430e+01 -1 0 0 +2284 1 -7.4986487750855080e-01 4.2221351932768503e+00 1.4512571687982078e+01 2.5577301509529715e+01 0 0 0 +906 2 3.5494463352187366e-01 5.0623581615972464e+00 1.4834750370470212e+01 2.5110075858927122e+01 0 0 0 +1593 2 3.6294671123359029e-01 2.6911123838420017e+00 1.4729274599255127e+01 2.7500072314648300e+01 0 0 0 +2286 2 3.4001321138576840e-01 3.6077027164224593e+00 1.5354396474631793e+01 2.5659230906477365e+01 0 0 0 +1588 1 -7.0224825924218082e-01 3.9396362933366968e+00 1.1180257810114183e+01 2.9672092199664018e+01 0 0 0 +1541 2 3.6634528701174501e-01 6.4232917626113029e+00 1.4045427369791419e+01 2.7798968297227240e+01 0 0 0 +1590 2 3.9299471288102078e-01 3.8439067244240359e+00 1.1182704270701278e+01 2.8725760042884541e+01 0 0 0 +939 2 3.7889554677963672e-01 3.1308990689371603e+00 9.0706579105645471e+00 2.3825276035668782e+01 0 1 0 +590 2 3.4099858381779224e-01 3.9079268612007989e+00 1.1023233719783413e+01 2.4416295019901721e+01 1 0 -1 +589 1 -7.3055710272660168e-01 3.1588868788990050e+00 1.0521774667455457e+01 2.4794251812079033e+01 1 0 -1 +591 2 3.9640569180812241e-01 3.0069035000148943e+00 1.0819166199861776e+01 2.5720713444941524e+01 1 0 -1 +2209 1 -7.4058726174786715e-01 2.4651844894301518e+00 1.1450756359328805e+01 2.7442975570571651e+01 1 0 0 +2210 2 3.9054443342471989e-01 2.4574421765046113e+00 1.2399789697648865e+01 2.7692287455894533e+01 1 0 0 +2342 2 3.8362119674916201e-01 1.5551610000962601e+00 7.4983921792818649e+00 2.3810325756597745e+01 0 1 0 +2211 2 3.9427357191716933e-01 1.5470960743010029e+00 1.1073827292825166e+01 2.7570238020110391e+01 1 0 0 +2943 2 3.9514820652904376e-01 5.5471627542911661e-01 9.3388406833634612e+00 2.7614604490374539e+01 1 0 0 +2296 1 -7.1236628613563036e-01 3.0288038992894748e+01 1.1891617541030371e+01 2.3785810801441983e+01 -1 0 0 +2285 2 3.8843422502513547e-01 3.0504430738562395e+01 1.2277686589018002e+01 2.4639067344550650e+01 -1 0 0 +2936 2 3.7592630022093781e-01 3.0495347353597253e+01 1.1796023505393366e+01 2.6730913591147498e+01 0 0 0 +1589 2 3.5585578732322409e-01 3.0769313060266446e+00 1.1401326177486144e+01 3.0019014162730830e+01 0 0 0 +1715 2 3.6592154707217900e-01 1.9119631631711794e+01 5.0957894691655037e+00 3.0856115566946080e+01 0 0 -1 +2179 1 -7.3576805836275816e-01 7.6428581120790291e+00 1.3649075742178995e+01 2.3868015950000178e+01 1 0 0 +1430 2 3.6962577028369970e-01 9.5114639211613827e+00 1.1146345127838069e+01 2.9896118744479889e+01 1 0 -1 +2099 2 3.5590240159484249e-01 2.5165549541140205e+01 3.2366734523813196e+00 1.6492967667691268e+01 0 0 0 +2400 2 3.6240394614890403e-01 7.8397507555831805e+00 1.0390370612433033e+01 2.8804495886785038e+01 0 0 0 +51 2 3.6426344024945895e-01 6.9484764865737683e+00 1.1903531431972809e+01 2.7865028600320933e+01 0 0 -1 +49 1 -7.3441038539718639e-01 7.4046816950252339e+00 1.2688289530083246e+01 2.7514386835899902e+01 0 0 -1 +50 2 3.7680649087463575e-01 8.0628416188075249e+00 1.2839291690922069e+01 2.8189651996597505e+01 0 0 -1 +1223 2 3.7553084906304313e-01 1.0410741065457357e+01 9.2462147121461822e+00 2.9222646529105592e+01 0 0 -1 +1222 1 -7.5752147116263280e-01 1.0437140477975637e+01 9.5239762304402991e+00 3.0109463093526308e+01 0 0 -1 +2613 2 3.9209503293121073e-01 1.1379096832794138e+01 1.4210732760283307e+01 2.3982189963442210e+01 0 1 0 +2399 2 3.9151086462139789e-01 7.2864631937944306e+00 9.0003713345648766e+00 2.8539637167125836e+01 0 0 0 +2421 2 3.4816273159019728e-01 5.4747690850977886e+00 1.2595299279229106e+01 2.5700338326658262e+01 0 1 0 +2398 1 -7.2570165141514331e-01 7.1952936871103788e+00 9.8829171701046032e+00 2.8215888078479619e+01 0 0 0 +1568 2 3.6834063502975911e-01 6.1560165127909396e+00 8.6181010067783088e+00 2.5506608774633765e+01 0 0 0 +1601 2 3.2358122622373536e-01 1.0116384061065309e+01 6.4982652262942358e+00 2.3451422880453226e+01 0 0 0 +2233 1 -7.6861675710023625e-01 5.6161524871326440e+00 1.1981694313675961e+01 2.4969285341615876e+01 1 0 0 +2235 2 3.9836520947625603e-01 5.9696953497278322e+00 1.1198915402289865e+01 2.5328621473404599e+01 1 0 0 +205 1 -7.3186253672978274e-01 9.1783924588759973e+00 6.4329403599104618e+00 2.3715969238286270e+01 0 0 -1 +807 2 3.5677813942826919e-01 9.9407577011290922e+00 1.4762319948506670e+01 2.7529406079765664e+01 0 0 -1 +1567 1 -7.4318531449877401e-01 6.5885014905525283e+00 9.4150600556692012e+00 2.5476266167280151e+01 0 0 0 +1569 2 3.6287698509635291e-01 6.7669684753976611e+00 9.4857954369291981e+00 2.6478231281362799e+01 0 0 0 +2589 2 3.5864712440984275e-01 1.0246386261049768e+01 7.8905920035178907e+00 2.7693668999369891e+01 0 0 0 +1963 1 -7.2978146437310099e-01 9.6480234711128237e+00 1.4230304675408638e+01 2.9304354275696895e+01 0 0 0 +2588 2 3.6545566104495525e-01 1.0189190853122922e+01 8.8750228438218208e+00 2.6352546802691119e+01 0 0 0 +2587 1 -7.5162454275216706e-01 1.0621484814575963e+01 8.8277177881974023e+00 2.7310532994428019e+01 0 0 0 +1616 2 3.6508060642397017e-01 9.3888884268851331e+00 8.1908006786719412e+00 2.4337339212077602e+01 0 0 0 +2180 2 3.7049505703944913e-01 6.8335782900938487e+00 1.3124442268860719e+01 2.3943252330511189e+01 1 0 0 +1615 1 -7.0195211258738544e-01 9.3235833086111803e+00 9.0148562976188611e+00 2.4907497399279741e+01 0 0 0 +1617 2 3.7299194053441515e-01 8.3115161854827040e+00 9.0772445471886716e+00 2.5030182288118073e+01 0 0 0 +243 2 3.6943960457661101e-01 9.4431053783938257e+00 1.3073690124272256e+01 2.4435309877965214e+01 0 0 -1 +241 1 -7.3550207460185191e-01 1.0290879811508914e+01 1.3246509965238314e+01 2.4894754291299218e+01 0 0 -1 +242 2 3.6986133431240209e-01 1.0029662483541564e+01 1.3570438681856572e+01 2.5776338519097621e+01 0 0 -1 +845 2 3.6759904222954809e-01 1.1049604233757004e+01 1.0679185969056464e+01 2.7182404461721596e+01 0 1 -1 +846 2 3.5444703164848623e-01 1.0943196758053141e+01 1.1821319200125513e+01 2.6187538408398886e+01 0 1 -1 +844 1 -7.4646953513523773e-01 1.1514640541826521e+01 1.1481770936844777e+01 2.6901606791767986e+01 0 1 -1 +2775 2 3.7189529593826987e-01 9.6988915608867696e+00 1.3351926321439610e+01 2.9685155487054431e+01 0 0 0 +1965 2 3.6027082664024102e-01 1.0314724453905713e+01 1.4828627074189509e+01 2.9724633244913335e+01 0 0 0 +1251 2 3.6390514371470745e-01 1.2230601788389780e+01 8.3549891292779392e+00 2.6763176312018071e+01 0 0 -1 +1429 1 -7.3755387147500051e-01 8.6603756157886309e+00 1.1672256841694081e+01 2.9893916338742375e+01 1 0 -1 +1320 2 3.3984712578852078e-01 2.3740494180871607e+01 4.9289179891238080e+00 3.0337682886309828e+01 0 0 -1 +2611 1 -7.5168904395737246e-01 1.2046618954313910e+01 1.4815922679415843e+01 2.3515391494775386e+01 0 1 0 +1031 2 3.5255696149622395e-01 1.7590652400127311e+01 8.6111658574123950e+00 3.0280038245601290e+01 0 1 -1 +1030 1 -7.2090796210714692e-01 1.7485945167936734e+01 9.0101215506177201e+00 2.9374939950931687e+01 0 1 -1 +1032 2 3.6059340406568469e-01 1.7487395933041739e+01 8.2511054003332962e+00 2.8731636288112234e+01 0 1 -1 +70 1 -7.1908880074910375e-01 1.3003035662536277e+01 1.4573046134768324e+01 3.0478907896603410e+01 0 0 -1 +1224 2 3.7002032248760303e-01 1.1387284486344816e+01 9.7508752883121659e+00 3.0176246699077293e+01 0 0 -1 +1584 2 3.7338278298850380e-01 1.3122218925873353e+01 1.2560458414712578e+01 2.7609016300242700e+01 0 0 0 +1690 1 -7.3261588728269289e-01 1.4154750551460582e+01 8.0613976631500730e+00 3.0842115453033625e+01 0 0 0 +254 2 3.5400767882879891e-01 1.2975355583524246e+01 1.4358504881096881e+01 2.9535505531545841e+01 0 0 -1 +1318 1 -7.3829241788275757e-01 2.3440934652973024e+01 4.2173310504361314e+00 3.0884664709329645e+01 0 0 -1 +2067 2 3.7086266746562369e-01 1.6722170400844732e+01 1.0332129788727764e+01 3.0773577145031442e+01 0 0 0 +1249 1 -7.7176614437156921e-01 1.3149845842827069e+01 7.9479961653192213e+00 2.6533201295297772e+01 0 0 -1 +924 2 3.5926130269895179e-01 2.9777519518003594e-02 1.4642647413850332e+00 1.6076274244652478e+01 0 1 0 +1067 2 3.7555348424999740e-01 1.3474248871970975e+01 9.7777321119930694e+00 3.0871291345861994e+01 0 0 -1 +943 1 -7.3885981148809010e-01 1.3863022926984286e+01 1.2933914663542650e+01 2.8029602427302923e+01 0 0 -1 +944 2 3.2645766721847108e-01 1.4443815595593499e+01 1.2100364985372689e+01 2.8041591777057892e+01 0 0 -1 +1066 1 -6.9308342418200730e-01 1.3135376072575207e+01 1.0617038722820512e+01 3.0444555921833498e+01 0 0 -1 +2927 2 3.7231504642579638e-01 1.5948584908909615e+01 1.4366848905157598e+01 2.6497351790989303e+01 0 0 0 +2594 2 4.0942350427212904e-01 1.6866727123626671e+01 1.2447822063546607e+01 2.4504944623641542e+01 0 0 0 +2254 1 -7.5741993894989923e-01 1.7095129243139990e+01 1.3053068219190285e+01 2.6276042650491018e+01 0 0 0 +2256 2 3.5747611263439277e-01 1.6693942847611886e+01 1.2495350543941456e+01 2.6964518466576436e+01 0 0 0 +1250 2 3.9928654224103322e-01 1.3695812340575733e+01 8.7092802031819048e+00 2.6316681143940126e+01 0 0 -1 +2712 2 3.6740706677397278e-01 1.7836994135747865e+01 8.2973909185965731e+00 2.6855371731050841e+01 0 1 0 +389 2 3.8863285554926197e-01 1.4013644500234198e+01 1.1318805993758266e+01 2.4364338635282653e+01 0 0 -1 +2926 1 -6.5518108624343618e-01 1.5139904684103225e+01 1.4944574250370017e+01 2.6750834006912438e+01 0 0 0 +321 2 3.8839805196292321e-01 1.6721185856088599e+01 1.0384302981084428e+01 2.6905157017976478e+01 0 0 -1 +2593 1 -7.5584351346392065e-01 1.6711446642201821e+01 1.2177172868582511e+01 2.3635182926111757e+01 0 0 0 +2540 2 3.4933343827043423e-01 1.4559659276007043e+01 1.0699755814390009e+01 2.6618881822839249e+01 0 0 0 +2539 1 -7.6176399300844888e-01 1.3904482413237840e+01 1.0382490274097279e+01 2.5944402258811312e+01 0 0 0 +2541 2 3.6100473826910701e-01 1.3035262101429341e+01 1.0780955213044482e+01 2.6195143018200525e+01 0 0 0 +1765 1 -7.6838144694002819e-01 1.6196733211797753e+01 1.0792165979655469e+01 2.7606348291129120e+01 0 0 0 +1868 2 3.8260134982473554e-01 1.6638121121890155e+01 1.0537277543388669e+01 2.8449834790504301e+01 0 0 0 +2710 1 -7.4938284365397201e-01 1.7957536039248932e+01 9.0813264746525473e+00 2.6314605390941097e+01 0 1 0 +2711 2 3.7844864974130921e-01 1.7833608760430423e+01 8.8493325068138926e+00 2.5338943437270476e+01 0 1 0 +2255 2 3.6204341783161703e-01 1.7953977765971938e+01 1.3350999568023578e+01 2.6603482321664856e+01 0 0 0 +1831 1 -7.2163466401533338e-01 1.9864072191461105e+01 1.3829159726081066e+01 2.7797560797020392e+01 0 0 0 +2928 2 3.7733032487063167e-01 1.4608448925878156e+01 1.4235562836990999e+01 2.7195367897781161e+01 0 0 0 +1252 1 -6.9337922552946130e-01 2.3505755663332447e+01 1.5479486650063775e+01 3.0861932010713211e+01 0 0 -1 +273 2 3.6615962090347254e-01 2.0184349969732065e+01 1.0907384134317995e+01 3.0720161079963741e+01 0 0 -1 +2677 1 -6.9606850966630252e-01 1.9150644739527728e+01 1.1067304574358163e+01 2.3043684317980041e+01 0 0 0 +1954 1 -7.4644189057264454e-01 2.4607064663740783e+01 1.3434072305963191e+01 2.3021391544329379e+01 0 0 0 +1955 2 3.2345829415543931e-01 2.3977466272082573e+01 1.4196279372107945e+01 2.3030159411875562e+01 0 0 0 +767 2 4.1803269378989694e-01 3.4008874571419883e+00 7.5149829030921094e+00 3.0161455750068082e+01 0 0 -1 +1326 2 3.8458355610183048e-01 2.2657037909937561e+01 7.6952793130615769e+00 2.9808736186645596e+01 0 0 -1 +2769 2 3.6816651155703489e-01 2.1552111681654665e+01 1.4328644005991656e+01 2.3808756107552878e+01 0 0 0 +2050 1 -7.3036464236562093e-01 1.8830612616867469e+01 8.2123081028284890e+00 2.3776564335254232e+01 0 0 0 +26 2 3.7663516946512482e-01 2.4817458855973054e+01 7.3213029642390079e+00 3.0418530560350298e+01 -1 0 -1 +2052 2 3.6415991144659277e-01 1.9219186731828366e+01 8.7662510600245618e+00 2.3129451374004418e+01 0 0 0 +372 2 3.8267756729165803e-01 2.0361196230764332e+01 8.3608907289740912e+00 3.0460856817817696e+01 0 0 -1 +2777 2 3.2745849681104400e-01 1.8908100590978659e+01 1.3938658983239886e+01 3.0327175040705690e+01 0 0 0 +2051 2 3.5322405173020199e-01 1.9063977438781244e+01 7.3429362850749094e+00 2.3399643835257663e+01 0 0 0 +1203 2 3.7315442065106896e-01 2.1086677563589795e+01 9.0475313492608436e+00 2.6567582880722401e+01 0 1 -1 +2717 2 3.4179291281142737e-01 2.4586366501334876e+01 1.2450697874123701e+01 2.5943500249323172e+01 0 1 0 +2716 1 -6.9790408596402775e-01 2.3764414856222807e+01 1.2402371316352536e+01 2.5274239075029751e+01 0 1 0 +1202 2 3.8767203412495160e-01 1.9570007757344687e+01 9.6544295887039659e+00 2.6438772204238230e+01 0 1 -1 +2554 1 -6.8587633698067185e-01 2.0779628128122603e+01 1.1863751647131176e+01 2.5075524504922058e+01 0 0 0 +2555 2 3.5006620922183168e-01 2.1670502603019280e+01 1.2225748680662123e+01 2.5372392535752759e+01 0 0 0 +1459 1 -7.6091546577333902e-01 2.4531265931752326e+01 8.1992126418417346e+00 2.6382772014022091e+01 0 1 -1 +2207 2 3.5787456165345188e-01 2.2789831114430680e+01 7.7197335845105206e+00 2.6196582206987429e+01 0 0 0 +1461 2 3.7987848336558844e-01 2.4270378568134412e+01 8.9804879511398408e+00 2.6871767299035508e+01 0 1 -1 +1460 2 4.1084175724619054e-01 2.4805603355334107e+01 8.4977119717592196e+00 2.5504322743398028e+01 0 1 -1 +1355 2 3.4231126247334248e-01 2.3242726330565116e+01 1.3762550164577764e+01 2.6881000678053365e+01 0 0 -1 +1354 1 -7.4744912752367210e-01 2.2612918195537944e+01 1.4476063968319004e+01 2.6985247795495919e+01 0 0 -1 +1201 1 -7.3438678231092258e-01 2.0526505684678551e+01 9.7863294327368511e+00 2.6871752271518481e+01 0 1 -1 +1833 2 3.5221933723432480e-01 1.9520488894503714e+01 1.4695159899882913e+01 2.8146904442089273e+01 0 0 0 +1832 2 3.5840937381944460e-01 2.0727904841758630e+01 1.4146571997584156e+01 2.7369774764842777e+01 0 0 0 +2556 2 3.7015980766861267e-01 2.0683038594399971e+01 1.1134619056060622e+01 2.5773062888891904e+01 0 0 0 +2718 2 3.7227306718111819e-01 2.4028020235307523e+01 1.2991715491341429e+01 2.4525292676997790e+01 0 1 0 +1937 2 3.9163086699743588e-01 1.9867652757001487e+01 1.1566317364903790e+01 2.3543602668840418e+01 0 0 0 +2206 1 -7.4319344325428016e-01 2.1930675435890773e+01 7.3225352759222107e+00 2.6024055205952003e+01 0 0 0 +2743 1 -7.1454330024061097e-01 2.3732929529155555e+01 1.0421216441480366e+01 2.8057495220151395e+01 0 0 0 +2744 2 3.5522423066547987e-01 2.3002132804534881e+01 1.0738322689970936e+01 2.8655016353926133e+01 0 0 0 +2032 1 -7.1670809265970581e-01 2.1126484323243023e+01 1.1618053907314316e+01 2.9094188912910383e+01 0 0 0 +2033 2 3.7232309926473756e-01 2.0649257627967469e+01 1.2323094889572433e+01 2.8618072444528572e+01 0 0 0 +2034 2 3.6058725589811036e-01 2.0936902186625044e+01 1.0893590056556416e+01 2.8474466449709357e+01 0 0 0 +370 1 -7.7486139711504487e-01 2.0772648527146977e+01 7.5909672370584884e+00 3.0118583147604571e+01 0 0 -1 +1324 1 -7.4575661471423416e-01 2.3502376638532120e+01 7.5262522508895060e+00 2.9415435351328117e+01 0 0 -1 +1325 2 3.5496586285518006e-01 2.3679337842730096e+01 8.2512296835829471e+00 2.8748497387054208e+01 0 0 -1 +668 2 3.9019269915085431e-01 3.0178195645804333e+01 4.8795282230790766e+00 1.5729127343218364e+01 0 0 0 +1356 2 3.4291885561066721e-01 2.2454776700784222e+01 1.4767791491579834e+01 2.6043658073713843e+01 0 0 -1 +1518 2 3.7297762471075507e-01 1.1827838269216288e+01 3.9958652087929397e-01 1.8592675856644892e+01 0 0 0 +805 1 -7.0222538880556751e-01 1.0121294060846285e+01 1.5336738420335568e+01 2.6735778368045619e+01 0 0 -1 +2054 2 3.7990930902103182e-01 2.5187909137143663e+01 7.7732309370045662e+00 2.3255653954477527e+01 0 0 0 +2397 2 3.6284896121242138e-01 2.9287473241487039e+01 1.2656625252638880e+01 2.6335525234599711e+01 -1 0 0 +2383 1 -7.7168804571121441e-01 2.9782473536317386e+01 9.1866963866927751e+00 2.3601641485033145e+01 -1 1 0 +2214 2 3.8436421972059215e-01 2.7476598450427190e+01 1.4493391223539671e+01 2.9896758921674625e+01 0 -1 0 +439 1 -7.3582490133829759e-01 2.7786009948387601e+01 1.1274913579352024e+01 2.6687825761059038e+01 0 0 -1 +2343 2 3.4907141645629958e-01 1.0064014998135919e-01 7.7754273915464154e+00 2.4326714624655818e+01 0 1 0 +440 2 3.7856671999853420e-01 2.7496780585523805e+01 1.0388428574885440e+01 2.7144276799038430e+01 0 0 -1 +211 1 -6.9206319141369588e-01 9.8551753558672086e+00 2.2881315888689069e+00 3.0620859466811371e+01 0 0 -1 +2745 2 3.7111900686371230e-01 2.4140008737882518e+01 1.1195112566037064e+01 2.7685767597761451e+01 0 0 0 +1517 2 3.5027749431956678e-01 1.2241154057467007e+01 5.4251939566346601e-02 1.7194415153076616e+01 0 0 0 +2266 1 -7.4837978412387107e-01 2.5666959854110619e+01 1.2764591897885040e+01 2.7289567559533129e+01 -1 0 0 +1231 1 -7.3512264787799930e-01 2.9224034939070627e+01 1.0032025404300111e+01 2.9819780031551147e+01 0 0 -1 +2364 2 3.7600045855482433e-01 3.8210510880160570e-01 1.4090075630453816e+01 2.5655632621486543e+01 0 0 0 +17 2 3.8404127316507997e-01 2.7814631527943114e+01 9.6136735024217916e+00 2.8908411182917405e+01 -1 0 -1 +441 2 3.6714781700274551e-01 2.7577606415934124e+01 1.1202264812631968e+01 2.5761554179009281e+01 0 0 -1 +1022 2 3.8051071504683176e-01 1.6979920708603281e+01 5.1095945580787729e+00 3.0567559173830919e+01 0 1 -1 +2899 1 -6.9839264007380397e-01 2.7047479511696213e+01 9.2972429530987988e+00 2.8330056852929889e+01 0 1 0 +1859 2 3.7662362325805243e-01 1.9790140790461642e+01 2.1025761371817378e-01 3.0018716010965100e+01 0 0 0 +2262 2 4.0773363764782983e-01 2.6457864585390475e+01 1.2222576178807852e+01 2.7284847068774752e+01 -1 0 0 +2395 1 -7.3262416296173027e-01 3.0281010264566000e+01 1.2678454819065420e+01 2.6308455438532384e+01 -1 0 0 +186 2 3.7105946236647086e-01 8.2641482539367761e-01 1.3813689264504916e+01 1.5989204090997502e+01 0 0 0 +2472 2 3.4740305439733304e-01 5.4596877340897256e+00 2.8511874469288285e+00 2.9914633676876164e+01 0 1 0 +801 2 3.9356148663602925e-01 2.4096965187295133e+01 4.3747877468416174e-01 2.4191366888096685e+01 -1 1 -1 +1406 2 3.5889338972649137e-01 2.5705908434356864e+01 1.1899739971576274e+01 1.5967572235992353e+01 0 1 0 +2776 1 -7.7032252786047339e-01 1.8546809640933855e+01 1.4709725997251729e+01 3.0780839661899606e+01 0 0 0 +984 2 3.7589816383438779e-01 1.5843834465814167e+01 2.1083921347527315e+00 3.0737484844494858e+01 0 1 -1 +549 2 3.8617949742343616e-01 2.6246523659256205e+01 1.5286360803191695e+01 2.0816859470888282e+01 0 0 0 +1409 2 3.5954437351334118e-01 2.6316954826345647e+01 8.3596162239170158e-01 1.6164716406264585e+01 0 1 0 +407 2 3.5737383026556502e-01 2.2283251894607368e+01 1.8988241314283669e-01 3.1037036210495021e+01 0 0 -1 +1436 2 3.8124932259699423e-01 3.0459601482399361e+01 8.1629619523180050e+00 1.5701157569868110e+01 0 0 0 +2315 2 3.7657760419023989e-01 1.0110963694832099e+01 5.5087374717922248e+00 1.5986441777362851e+01 0 1 0 +272 2 3.5697070015610638e-01 1.8870024361143980e+01 1.0270113656671143e+01 3.0934021587873112e+01 0 0 -1 +998 2 3.4041375882109109e-01 2.2529203339448873e+01 1.5424313822779025e+01 3.0948004844537024e+01 0 0 -1 +641 2 3.5967083873655054e-01 2.3950018178880701e+01 6.0083897031014279e+00 1.5646673375867737e+01 0 0 0 +2213 2 3.9905979850899792e-01 2.6919442322391607e+01 1.5391041971116845e+01 3.0992982197532420e+01 0 -1 0 +1307 2 3.4503419400871360e-01 2.8850456277268556e+01 1.2832572500657587e+01 3.1036208171232158e+01 0 1 -1 +1377 2 3.6145268451783769e-01 4.9813657775303808e+00 2.2320550475034722e+01 2.7099934555927128e+00 1 0 0 +853 1 -7.3520649994988041e-01 4.9170073315906828e+00 2.3257867726170538e+01 2.7834196547407686e+00 0 0 0 +855 2 3.3751920999950380e-01 4.0376106836924377e+00 2.3508728971170537e+01 2.3618171480494294e+00 0 0 0 +674 2 3.5579603600565934e-01 1.2556860214013086e+00 2.0526106150741324e+01 5.9429658258120099e+00 1 -1 0 +776 2 3.3687009472154289e-01 1.4706783248068886e+00 2.0558905786742393e+01 2.3812653251518192e+00 0 0 0 +673 1 -7.2362900272915021e-01 3.4837511994522152e-01 2.0906272801285638e+01 5.7322170314623753e+00 1 -1 0 +1372 1 -7.2271758732812852e-01 1.7912847373590091e+00 2.0853123244453275e+01 3.3024899636151592e+00 1 0 0 +1981 1 -6.9609525303561315e-01 4.6362217272477855e+00 2.1543939142993690e+01 5.9298228434220279e+00 1 -1 1 +1982 2 3.5423417005857399e-01 4.8233248494559646e+00 2.2400901876437732e+01 6.2940656316416410e+00 1 -1 1 +1983 2 3.3994529251158107e-01 4.4298911910204977e+00 2.1016966423129574e+01 6.7424697863375327e+00 1 -1 1 +675 2 3.7874381902779058e-01 2.8292422259293143e-01 2.1436800623913488e+01 6.5272433762437796e+00 1 -1 0 +1374 2 3.8437132747653374e-01 1.0324336606725366e+00 2.0806516582044765e+01 3.8319049933011691e+00 1 0 0 +757 1 -7.3616671509959819e-01 4.6874750191101455e+00 2.0354715515942466e+01 3.3835616648380520e+00 0 0 0 +646 1 -7.4144123425876218e-01 8.7025453204935133e-01 1.7154901642415687e+01 1.9943764351177937e+00 1 0 0 +159 2 3.8649674830675296e-01 4.9248439939546982e+00 1.8725331864425588e+01 2.6950179545756363e+00 0 0 0 +1829 2 3.5994180931204850e-01 6.9432792887059236e-01 1.8884142152934398e+01 1.1079080774231416e+00 0 0 1 +1638 2 3.8062230348106058e-01 4.9961027121403463e+00 2.0694425157453175e+01 4.2690737239142189e+00 0 0 1 +758 2 3.8396828309964637e-01 3.7331105958266262e+00 2.0398687796017889e+01 3.5267657453713932e+00 0 0 0 +2323 1 -7.6274852305224550e-01 2.3498026326552583e+00 2.3267361163564136e+01 1.5376879143867994e+00 0 0 1 +2325 2 3.4752431823370106e-01 2.3577192366623696e+00 2.2408261338078788e+01 1.8810826769061988e+00 0 0 1 +1828 1 -7.4848034676727737e-01 7.2509186761944100e-01 1.9820720269909170e+01 6.9635609507510898e-01 0 0 1 +647 2 3.7567515438289367e-01 7.7217212041441396e-01 1.6855307225520843e+01 1.0277670687743758e+00 1 0 0 +1063 1 -7.4972997294180699e-01 2.6155541595857885e+00 1.9652834438342506e+01 7.2351141013598470e+00 0 0 0 +648 2 3.9287251098806886e-01 1.5004423598965582e+00 1.6524111876337756e+01 2.4057361341437544e+00 1 0 0 +284 2 3.5571294393081432e-01 6.4723685388158412e+00 2.4046843767698931e+01 7.2967991662829155e+00 0 0 0 +1469 2 3.9157260047427511e-01 1.8261870932432822e+00 1.8105497356444744e+01 6.9670943039550810e+00 1 0 0 +1161 2 3.7109842714260582e-01 3.0372744217846197e+01 1.7310936015586805e+01 2.9052826757659362e+00 0 0 0 +61 1 -7.1915143019389238e-01 1.3363841992223695e+00 1.7256173542343735e+01 6.9219532237645982e+00 0 0 0 +629 2 3.6430377284430215e-01 2.7666966959922707e+01 1.6191976253238945e+01 1.1247802121718347e+01 0 0 0 +769 1 -7.2123717759963757e-01 3.0109812974123065e+00 1.5711230291228754e+01 2.9040336704797705e+00 0 0 0 +63 2 3.7142418395045473e-01 4.4983797778331253e-01 1.7472544962885404e+01 6.6776918650778168e+00 0 0 0 +1050 2 3.6714562210961105e-01 7.1388233943708697e+00 1.6112352566344853e+01 4.2313041986695437e+00 0 0 0 +771 2 3.7258146496478006e-01 3.7316712625305466e+00 1.6361190068378601e+01 3.0630773900297892e+00 0 0 0 +1563 2 4.1764023920004645e-01 5.6080931932543310e+00 1.7679970861929892e+01 9.2803632980923589e-01 0 0 1 +1376 2 3.6977779659685683e-01 5.7197066795083931e+00 2.3780967597645137e+01 1.2296966461755161e+00 1 0 0 +756 2 3.8410200377464593e-01 4.4558187871718351e+00 3.0902352253980968e+01 7.8893910456925500e+00 0 0 0 +1966 1 -7.0598282933888645e-01 5.3096400138651019e+00 1.6830081332719470e+01 7.3101300579635629e+00 0 0 1 +157 1 -7.1852766204986152e-01 4.9965924192637718e+00 1.7733210415195334e+01 2.5305017691771026e+00 0 0 0 +968 2 3.6864860655895504e-01 7.2260313769063620e+00 1.7160115849981331e+01 7.8612679593019088e+00 0 0 0 +978 2 3.4986502112660256e-01 7.9275384818267343e+00 1.7719364540471958e+01 4.9012074046812275e+00 0 0 0 +1395 2 3.8751010940669467e-01 8.2803290542441648e+00 2.2765814222040678e+01 6.8693729585362027e+00 1 1 0 +1393 1 -7.1667431449545782e-01 8.8268657696462469e+00 2.1900326918391897e+01 7.0214400681588991e+00 1 1 0 +710 2 3.8204186445849492e-01 1.0699059845911856e+01 1.7320806794375553e+01 1.1490876880746872e+00 1 0 0 +709 1 -7.5321336572864950e-01 1.0444807988191570e+01 1.7684165446842222e+01 1.9980504265104064e+00 1 0 0 +711 2 3.9573447825273195e-01 9.7634280482867908e+00 1.7198902060796360e+01 2.4525433116984074e+00 1 0 0 +914 2 3.6570555465416504e-01 9.4192667289396574e+00 2.1390780987711626e+01 4.3185523755436481e+00 0 0 0 +913 1 -7.1670755031685385e-01 8.7160834201292410e+00 2.0870860704238282e+01 3.9473108248769453e+00 0 0 0 +915 2 3.3325441535579370e-01 8.4587211579727430e+00 2.1483250627735611e+01 3.2518553923524829e+00 0 0 0 +1633 1 -7.2967170646070356e-01 8.0249309258073449e+00 1.7710066368264414e+01 8.0415827931283541e+00 0 0 1 +1634 2 3.6922227284171938e-01 8.3880104158869067e+00 1.7952667106814701e+01 7.2003370000277949e+00 0 0 1 +158 2 3.6212477811519911e-01 5.5624038279547827e+00 1.7342266159888847e+01 3.3244638776128386e+00 0 0 0 +255 2 3.9945035103287385e-01 8.3726833799828295e+00 1.9159780066566611e+01 4.6380088784972724e+00 0 0 0 +253 1 -7.3064485694220160e-01 8.4636628127450440e+00 1.8432518368979274e+01 5.2534317602531377e+00 0 0 0 +300 2 3.9278983387251859e-01 1.2211583075443677e+01 1.8308153178609142e+01 2.8481793951727798e+00 0 -1 0 +299 2 3.7112922158200323e-01 1.2390232669788634e+01 1.9683585280398020e+01 3.4887153261137840e+00 0 -1 0 +466 1 -7.1422478660756383e-01 1.1616077541404199e+01 2.1282199185173962e+01 4.4329056239141291e+00 0 0 0 +298 1 -7.2626548321767859e-01 1.2832446032106636e+01 1.9025129120453343e+01 2.9586214158007391e+00 0 -1 0 +467 2 3.6203011900252402e-01 1.1865914035605504e+01 2.0712154076544468e+01 5.1898747520501836e+00 0 0 0 +376 1 -7.1708573736543113e-01 8.6796789707301993e+00 2.3041581569487683e+01 1.5959958738004092e+00 0 -1 0 +468 2 3.7447843004189912e-01 1.1441213216390041e+01 2.2134915574767909e+01 4.7981128824413162e+00 0 0 0 +825 2 3.4630967272985691e-01 2.1197232843194344e-01 2.8713454432196624e+01 1.5483466792302057e+01 0 0 0 +377 2 3.7212022234201986e-01 9.0373040176840576e+00 2.3708963367673398e+01 2.2690007717434857e+00 0 -1 0 +1000 1 -7.3075902181300656e-01 8.8241006118171370e+00 1.5980038269830017e+01 3.5121983696177663e+00 0 0 0 +232 1 -7.1935170015693795e-01 1.1367553560120852e+01 1.7516519173910190e+01 5.6761280474775750e+00 0 0 0 +233 2 3.4226764711242119e-01 1.1898861494789887e+01 1.8274103967755945e+01 5.8575518320184585e+00 0 0 0 +1827 2 3.6739977489158565e-01 9.2695819534435913e+00 1.8947109939364175e+01 1.2313570492272501e+00 0 0 1 +378 2 3.5953680091615808e-01 7.7504438216404017e+00 2.3309109273166122e+01 1.4701159156616048e+00 0 -1 0 +2156 2 3.5288614482338343e-01 1.4195606824246877e+01 1.5748332130239204e+01 1.9522680503923120e+00 0 0 1 +2155 1 -7.2784982031232393e-01 1.3309945026149416e+01 1.5663186859160566e+01 2.2458465690781058e+00 0 0 1 +1070 2 4.0242104758192254e-01 1.0006055434826775e+01 2.2517434463010623e+01 3.1681549946571791e-01 0 0 0 +326 2 3.5832493697816448e-01 1.1127549304803788e+01 1.6543194716164390e+01 7.6372198514959058e+00 0 0 0 +1375 1 -7.4927306637055235e-01 6.3028905287973434e+00 2.3818550343574532e+01 4.8334017342298796e-01 1 0 0 +234 2 3.7825226719218280e-01 1.0479958888869660e+01 1.7831446085302030e+01 5.5878089957823871e+00 0 0 0 +2036 2 3.5369298257878984e-01 1.8681615045565923e+01 2.5975415925228504e+01 1.4251153185668935e+01 0 0 1 +1018 1 -7.2439776916941612e-01 1.5892501420849426e+01 1.7492846658111773e+01 1.7508411496471137e+00 0 1 0 +1001 2 3.3909750762120677e-01 8.5641147014040602e+00 1.5626323085028652e+01 2.5934128640939740e+00 0 0 0 +1734 2 3.9457443469475756e-01 7.5708272703449246e+00 1.6166234064061459e+01 2.1036261985416574e-01 0 0 1 +2654 2 4.0551930439273709e-01 2.1430068337843018e+01 1.5666862495041043e+01 9.1464694810108362e+00 0 0 1 +2108 2 3.9155488189778465e-01 1.2193729622687782e+01 2.1354313648387450e+01 1.3470153925190623e-01 0 0 1 +264 2 3.6564111674887212e-01 1.7673966571112715e+01 1.7627586751788339e+01 2.2440087393477479e+00 0 0 0 +2602 1 -6.8614742265344086e-01 1.4432720337189108e+01 1.7444494884489686e+01 7.1784998360576218e+00 0 0 1 +2603 2 3.5698512136306798e-01 1.4709102782461828e+01 1.7568248262367678e+01 6.2459637273994781e+00 0 0 1 +1779 2 3.3985153746115848e-01 1.5687134238333501e+01 1.9215619068629838e+01 4.7656307265499152e+00 0 0 1 +1777 1 -7.4066667392284058e-01 1.5378966614260536e+01 1.8295687903210123e+01 4.5755077699244522e+00 0 0 1 +1778 2 3.4014268234240580e-01 1.4675150959373795e+01 1.8459946822448480e+01 3.9176536532953761e+00 0 0 1 +287 2 3.5039465808115899e-01 1.8113691747200303e+01 2.0060417150142214e+01 4.0336772632706479e+00 0 0 0 +2699 2 3.5658869902554957e-01 1.7045221706542904e+01 2.1243239634684162e+01 5.6504909865542352e+00 0 0 1 +263 2 3.6438294586849768e-01 1.8758382578204067e+01 1.6931341260971163e+01 3.1798251567598235e+00 0 0 0 +286 1 -7.6165748766751817e-01 1.7222009916791567e+01 2.0396474110331589e+01 4.0313883751197555e+00 0 0 0 +262 1 -7.2823142892947978e-01 1.8663339692989990e+01 1.7318436972944184e+01 2.2481973037115304e+00 0 0 0 +472 1 -7.2246774265653502e-01 1.4859840152567269e+01 2.1703317100897223e+01 2.2646897112240119e+00 0 -1 0 +288 2 3.6969993895661685e-01 1.7096807551701581e+01 2.0612969563678334e+01 3.1348586740129982e+00 0 0 0 +473 2 3.5534630248855253e-01 1.4119522026342489e+01 2.1624548652242922e+01 1.5907673026202556e+00 0 -1 0 +1054 1 -7.1438246754363388e-01 1.8000415380923481e+01 1.6590534036017306e+01 4.7929580919444321e+00 0 0 0 +1047 2 3.6859773747118585e-01 1.9450792925014401e+01 1.8689814418698880e+01 2.9105364289327329e+00 0 0 0 +1056 2 3.7972920279152972e-01 1.8068273313537087e+01 1.6118909737492015e+01 5.6538388426608721e+00 0 0 0 +1055 2 3.5434411621069151e-01 1.7149159665531318e+01 1.7071601037677752e+01 4.8690919800673997e+00 0 0 0 +1045 1 -7.0293424130799842e-01 2.0021137538127160e+01 1.9417567576000515e+01 3.2798849706518540e+00 0 0 0 +2107 1 -7.6803008473882806e-01 1.2894033700069791e+01 2.0780694317680165e+01 4.4461162369517926e-01 0 0 1 +2109 2 3.6841735157903299e-01 1.2660882750074881e+01 2.0419982003297214e+01 1.2868677436593952e+00 0 0 1 +2008 1 -7.1318891054517020e-01 1.9292810974277945e+01 1.9680409529617517e+01 7.3021180621858344e+00 0 0 1 +2010 2 3.5334322178545902e-01 1.9187070899602020e+01 2.0589178624453609e+01 7.4972637017281363e+00 0 0 1 +2009 2 3.5536776640230716e-01 1.9823854152400973e+01 1.9739432156923204e+01 6.5219768413870769e+00 0 0 1 +1020 2 3.3127327304395382e-01 1.5574217964576853e+01 1.8026514498970883e+01 2.5181160795807540e+00 0 1 0 +316 1 -7.4815326075891353e-01 1.9875574708927214e+01 2.2652294952884365e+01 6.9949471767612046e+00 0 -1 0 +2762 2 3.6473029481672714e-01 1.8011403601994317e+01 2.2227818382757981e+01 6.4517076410616871e+00 0 0 1 +2761 1 -7.2161175182531923e-01 1.7108541332627954e+01 2.1814193989420232e+01 6.4863221826620752e+00 0 0 1 +2604 2 3.6235838320129088e-01 1.5199163409273311e+01 1.7793512563824805e+01 7.6803759701187477e+00 0 0 1 +1173 2 3.8368206485428941e-01 1.2943958626291606e+01 1.6369286720717454e+01 5.0782558942964409e+00 0 0 0 +1082 2 3.5725621479485065e-01 9.7386332081614473e+00 2.5847739683697721e+01 3.0199412287553579e-01 0 0 0 +2426 2 3.9014084542948613e-01 2.5495827285938022e+00 1.9879954791275928e+01 9.1683484210780722e-02 0 0 1 +415 1 -7.4273174337580183e-01 1.7984642542152642e+01 1.5662715761200037e+01 7.4796355027689359e+00 0 0 0 +817 1 -7.1145364412181644e-01 4.2354448228157642e+00 3.0848445715791712e+01 3.3839673941147135e+00 0 0 0 +2916 2 3.6399216254522349e-01 2.8527549939068741e+01 2.2982156707672967e+01 1.5125922027046085e+01 0 0 0 +474 2 3.5946108003884264e-01 1.5585386092548063e+01 2.1297359866573657e+01 1.7853527206108262e+00 0 -1 0 +1442 2 3.6679915682077535e-01 2.7221890162594967e+01 3.0853919684972876e+01 6.1243939656359307e+00 0 -1 0 +1254 2 3.7116456490628669e-01 1.9903998895337349e+01 1.6863986572931733e+01 6.9883015347164001e-01 0 0 0 +2698 1 -7.7545314652810560e-01 2.0751473797956866e+01 1.6577546390906658e+01 3.8264404035562399e-01 0 0 1 +1046 2 3.3090073244898099e-01 2.0682372662886369e+01 1.8912763850781221e+01 3.8454542391287196e+00 0 0 0 +1264 1 -7.2501064617946076e-01 2.1225916960923009e+01 1.7535298367536335e+01 5.5677304474970235e+00 0 0 0 +1265 2 3.8861293293972260e-01 2.1581212645253736e+01 1.7378937365868804e+01 4.7279840652965044e+00 0 0 0 +1337 2 3.9398402977175517e-01 2.1618854942506662e+01 1.6992289865591182e+01 1.9134674148175284e+00 0 0 0 +1336 1 -7.4809738809572190e-01 2.2030322781316251e+01 1.7124505222988510e+01 2.7901659756519441e+00 0 0 0 +1338 2 3.5523440927157107e-01 2.2918824229141876e+01 1.6810185363119171e+01 2.8803359625463010e+00 0 0 0 +2973 2 3.5662738462216725e-01 1.9750967425155022e+01 2.2071027511600928e+01 1.3468505637329373e+00 0 0 1 +1181 2 3.8669363153730546e-01 2.0497904262864228e+01 2.0855345671695488e+01 2.0295683681128875e+00 0 0 0 +1444 1 -6.7983985437307159e-01 2.0660403082660956e+01 2.1694479298420354e+01 1.4981017531780987e+00 0 0 0 +1266 2 3.3490672568000618e-01 2.1205180224436369e+01 1.8487007364140478e+01 5.7101158472741185e+00 0 0 0 +1152 2 3.3518450908748509e-01 2.4607771167812295e+01 1.9098215836157074e+01 4.1644282019576258e+00 0 0 0 +2792 2 3.5645632223712637e-01 2.3811596018003996e+01 2.1772904285268641e+01 3.5193565043609900e+00 0 0 1 +1150 1 -7.3448599933983960e-01 2.4174942243319673e+01 1.8472201560677753e+01 4.8064359269327177e+00 0 0 0 +1151 2 3.6173027062307733e-01 2.4631029813175591e+01 1.8777135583269391e+01 5.6171733288673451e+00 0 0 0 +2239 1 -7.2632553814212819e-01 2.3535212426259740e+01 1.9391810674588768e+01 5.6148807017238223e-01 0 0 1 +2815 1 -7.5921315886160734e-01 1.7322369678780067e+01 2.1176214739859290e+01 9.9251420043365424e-01 0 0 1 +2793 2 3.6814816264716388e-01 2.2827068686348145e+01 2.2270420408963805e+01 4.6038852890958992e+00 0 0 1 +2791 1 -7.3411323787394145e-01 2.3661302057971419e+01 2.1797114259170954e+01 4.4620874578380727e+00 0 0 1 +2958 2 3.9869887384734931e-01 2.2037354955409469e+01 2.3029625186168452e+01 1.6343787412115072e+00 0 0 1 +1776 2 3.6598667331034290e-01 2.3796208094450865e+01 1.6731675507024480e+01 5.7878693083929980e+00 0 0 1 +1329 2 3.3682459528125397e-01 2.5163739092720778e+01 2.0039229827629349e+01 1.9971688019433658e+00 0 0 0 +2643 2 3.7039716155372293e-01 2.4005426832710164e+01 1.6883467101414865e+01 7.2585554753636066e+00 0 0 0 +2641 1 -6.9686577930997284e-01 2.3682191509139411e+01 1.6204045066788964e+01 6.5846470466215825e+00 0 0 0 +396 2 4.1276130184906729e-01 2.0710935025950135e+01 1.6315062407657329e+01 6.8768805697910933e+00 0 -1 0 +394 1 -7.4723122441974044e-01 2.0553974271751926e+01 1.5531023924465099e+01 7.4352891013540221e+00 0 -1 0 +1549 1 -7.4392899159898218e-01 2.1672389607847645e+01 2.0809118504881202e+01 6.3541899075774024e+00 -1 0 0 +1550 2 3.5945013029116596e-01 2.2542571367412574e+01 2.1013787675957762e+01 5.9220420381194936e+00 -1 0 0 +1551 2 4.1060863188637420e-01 2.1330489734613465e+01 2.1626659968350339e+01 6.6775362251154462e+00 -1 0 0 +187 1 -7.7813433155291212e-01 3.0629567383459374e+01 2.2349531182527997e+01 1.3106795010648782e+00 -1 0 1 +2956 1 -7.1975927288017838e-01 2.2969793790523482e+01 2.3274776937938221e+01 1.7329227562475202e+00 0 0 1 +2816 2 3.4857152547439851e-01 1.7938857836385989e+01 2.1887289565757339e+01 7.8913321311638884e-01 0 0 1 +1826 2 3.5131187006748366e-01 8.4871140865779715e+00 1.9845720950741924e+01 2.0876645559329297e+00 0 0 1 +1099 1 -6.9245925144271170e-01 9.3002347019241700e+00 2.9470099295486769e+01 9.4771488928205834e+00 0 0 0 +1968 2 3.5002912170804579e-01 5.4424501973759787e+00 1.6419735534746611e+01 6.4468743340494390e+00 0 0 1 +1101 2 3.8034542462663312e-01 8.6966209881750913e+00 2.8780268425854455e+01 9.8509552114970287e+00 0 0 0 +796 1 -7.6356758328059560e-01 3.0215616057761050e+01 1.8391562042156171e+01 5.5932390542907511e+00 -1 0 0 +785 2 3.7719159679540409e-01 3.0050279273838523e+01 1.7871046061179989e+01 4.7605021226753914e+00 -1 0 0 +798 2 3.8060827618580106e-01 3.0576128526967441e+01 1.9235076886677490e+01 5.3247599533504140e+00 -1 0 0 +1585 1 -7.5609350866441949e-01 2.5145848426927081e+01 1.6619583364866354e+01 3.2512741471091666e+00 -1 0 1 +1335 2 3.6406464562030649e-01 2.6924950711764712e+01 2.2237393389778372e+01 1.0603876694350756e-01 0 0 0 +1348 1 -7.0635988222156298e-01 2.5159386132018302e+01 2.0392735171655779e+01 6.6450934451745853e+00 0 0 0 +444 2 3.3828325895694944e-01 2.7152581004088272e+01 1.8070604250208053e+01 6.1986010373904472e+00 0 0 0 +1587 2 3.8717230332882896e-01 2.4667244445900156e+01 1.7358649022974628e+01 3.5902595082440349e+00 -1 0 1 +1958 2 3.4750670392093480e-01 2.5975965102195794e+01 2.1277684110578061e+01 2.4206277869909694e+00 0 0 1 +873 2 3.1868802911634969e-01 2.8633462779342647e+01 2.0517570475789476e+01 3.3335919208908167e+00 -1 0 0 +1159 1 -7.7572408792043468e-01 2.9455854341629912e+01 1.7414096877590630e+01 3.2748314182030911e+00 0 0 0 +1957 1 -7.4849215787623302e-01 2.5755082132922745e+01 2.0397617040553790e+01 2.6539947284113619e+00 0 0 1 +871 1 -7.2491846090039058e-01 2.9303288630042982e+01 2.0273558593566285e+01 2.6924407197774194e+00 -1 0 0 +872 2 3.5136777056847912e-01 2.8909917813692108e+01 2.0494952099178477e+01 1.8973854517534583e+00 -1 0 0 +725 2 3.3914469235875599e-01 2.9159598682642795e+01 1.8214232649007428e+01 2.8065079374735773e+00 0 0 0 +2574 2 3.4201563348160202e-01 1.4032700329541004e+01 2.8549289790869707e+01 2.1474732824375395e-01 0 0 1 +2647 1 -7.2024053252758780e-01 2.8538682072227818e+01 2.1743916327673524e+01 5.8701307170169423e+00 0 0 0 +2649 2 3.4358497053525161e-01 2.8045385974852564e+01 2.0981637591051292e+01 5.4298704226482748e+00 0 0 0 +665 2 3.5305853508755336e-01 2.6979306174346227e+01 1.9352140153524548e+01 3.9292242612989323e+00 0 -1 0 +664 1 -7.8841843197891370e-01 2.7339837485437041e+01 1.9393692225357313e+01 4.8217610350826288e+00 0 -1 0 +666 2 3.1811072911639759e-01 2.8041975216625044e+01 1.8715353160840547e+01 4.7705137308304275e+00 0 -1 0 +2648 2 3.6605147746802935e-01 2.9020127084912680e+01 2.1270468194655194e+01 6.5272024221862948e+00 0 0 0 +2237 2 3.7220065703801902e-01 2.7812236339658551e+01 2.3147771180011524e+01 2.5697292726629897e+00 0 0 1 +443 2 3.4321107080293883e-01 2.7504681470452226e+01 1.6587348560493052e+01 6.4303691298121546e+00 0 0 0 +2236 1 -7.4880377933505970e-01 2.7061391083183960e+01 2.2953538180791025e+01 1.9584560473446697e+00 0 0 1 +2238 2 3.7461551146678662e-01 2.6276593836533486e+01 2.3473135113858529e+01 2.2487234772842988e+00 0 0 1 +804 2 3.3695247389241156e-01 2.9142729113998104e+01 1.8888349146889784e+01 7.4401440261450098e+00 -1 0 0 +1350 2 3.2500553590188297e-01 2.6005415593871284e+01 2.0251910327118924e+01 6.1428755909562414e+00 0 0 0 +763 1 -7.2747918331602002e-01 2.7642890874322660e+01 1.6132854156133028e+01 1.5556380831984231e+00 -1 0 0 +446 2 3.5165162287066154e-01 2.4438707841526330e+01 2.4093521045468258e+01 3.2996980383076164e+00 0 0 0 +2972 2 3.5247552467731330e-01 2.8352596590607352e+01 1.7838706440295422e+01 6.0488676938640140e-01 0 0 1 +442 1 -7.5114971124189256e-01 2.6778107822442283e+01 1.7219671343742117e+01 6.4628477112242662e+00 0 0 0 +1349 2 3.6114445952234586e-01 2.4698492598411597e+01 2.0984318466605792e+01 6.0422378284532252e+00 0 0 0 +765 2 3.6208454850760396e-01 2.8398811893585471e+01 1.6402717004884696e+01 2.1133989973714336e+00 -1 0 0 +2971 1 -7.3196870955371129e-01 2.8231612660602035e+01 1.8735577785299540e+01 1.9526986467594393e-01 0 0 1 +1421 2 3.9576670460776053e-01 2.9843760768094970e+01 2.2642998135001282e+01 2.7809764274651592e+00 0 0 0 +2813 2 3.9045064072069613e-01 1.6818862999193140e+01 3.0636748373919648e+01 7.4078079950149327e+00 0 0 1 +2756 2 3.8522715794908158e-01 2.6726131045149369e+01 1.7606633943005193e+01 8.0233800141051237e+00 0 0 1 +2493 2 3.9213588031692331e-01 1.0169793168637511e+01 2.9342042721051328e+01 9.8527422093009402e+00 0 0 0 +879 2 3.2785034107277450e-01 2.3348181239792245e+00 2.3904096531269140e+01 2.3367199282102691e+00 0 0 0 +2840 2 3.4798658194914389e-01 4.9818343995013414e+00 2.3980847604744433e+01 8.8539376179718499e+00 1 0 0 +2839 1 -7.2406655632900985e-01 4.7987895158893972e+00 2.4245798731400420e+01 7.9210270429145648e+00 1 0 0 +2270 2 3.5180632221951880e-01 1.2487564152629931e+01 1.6776588591782190e+01 1.4364622660177345e+01 0 0 0 +588 2 3.6382858618720820e-01 1.2481492240218066e-01 2.5567804657932296e+01 5.8748362921325308e+00 1 -1 0 +586 1 -6.8760572962081024e-01 4.6575643504128111e-01 2.4676195316062618e+01 5.7331297077847241e+00 1 -1 0 +587 2 3.2122886990444466e-01 3.0791763299208480e+01 2.4128552393353107e+01 5.3121763358150123e+00 0 -1 0 +2601 2 3.5315584237641190e-01 4.1827610340272390e+00 2.7260559638215234e+01 1.8526553638829770e+00 0 0 1 +692 2 3.7362055851118586e-01 4.4139458218055143e+00 2.5083851016904752e+01 8.1330493377444135e+00 1 -1 0 +1508 2 3.9599296208801193e-01 9.8041773896469875e-01 3.0734807974689989e+01 6.1378302216299980e+00 0 -1 0 +644 2 3.6427481137337370e-01 3.9749017453391904e+00 2.7561951457261120e+01 5.5955676542483062e+00 1 0 0 +643 1 -7.3790222776002778e-01 3.0097151535489699e+00 2.7451438691890679e+01 5.6724899440070162e+00 1 0 0 +645 2 3.6022422275627614e-01 2.7461488108542951e+00 2.7356497435064306e+01 6.6245942559451088e+00 1 0 0 +2790 2 3.6811668594800584e-01 1.6692992236350936e+00 2.4930875235632854e+01 4.5043410701156485e+00 1 0 1 +755 2 3.8339690242043317e-01 3.2639043585156537e+00 2.9996356350344904e+01 7.4858828427149966e+00 0 0 0 +754 1 -6.4682773214593459e-01 3.8305525219460512e+00 3.0293721502029669e+01 8.2417777190370050e+00 0 0 0 +2416 1 -7.5357092565344552e-01 2.5812219145837716e+00 3.0205564775295734e+01 5.8572418349209361e+00 0 0 1 +2417 2 3.8341513321457343e-01 2.7699560100156813e+00 2.9233052460452900e+01 5.7902141164142336e+00 0 0 1 +2418 2 3.4445164203891443e-01 2.8562295425717061e+00 3.0679757101358874e+01 5.0015581499621131e+00 0 0 1 +2788 1 -7.0321027099045230e-01 2.3442477061084475e+00 2.5317247752129028e+01 3.8363861884046484e+00 1 0 1 +2789 2 3.7914725817921408e-01 2.7763855350319124e+00 2.6075294597664179e+01 4.3788785634425063e+00 1 0 1 +680 2 4.0283841723983022e-01 5.8203615544809295e-01 2.6764007370292994e+01 7.8694081214223246e+00 1 -1 0 +1509 2 3.8770948720614790e-01 2.0034500066489502e-02 3.0034440585611247e+01 7.1254400770143738e+00 0 -1 0 +1507 1 -7.5437694527071142e-01 3.7022571074369785e-02 3.0666165280521902e+01 6.3857002569780912e+00 0 -1 0 +1653 2 3.5883296888623417e-01 2.8474263742866501e+00 2.9495322724824696e+01 2.4680526617736120e+00 0 -1 1 +16 1 -7.2949093288191802e-01 2.5958855517257855e+00 2.8592930499102319e+01 2.2199622917335491e+00 0 -1 0 +108 2 3.6168532880153298e-01 2.4820354224226322e+00 2.4655039907155640e+01 4.3932622392821898e-03 0 -1 0 +2596 1 -7.3884773905394074e-01 5.6845506450879366e+00 2.8179861155318306e+01 5.6133334243432298e+00 0 0 1 +2598 2 3.6510608759941843e-01 6.2632055888284510e+00 2.8826680396986436e+01 5.1770222846244129e+00 0 0 1 +2917 1 -7.3092209538063713e-01 2.9999889001514347e+01 2.6751046624975530e+01 7.1138141231407346e+00 0 0 1 +2619 2 3.4575735632172039e-01 2.3651954241411102e+00 2.8667144260223125e+01 1.2163286206696953e+00 0 0 1 +2599 1 -7.5488422254164322e-01 4.8841104236752351e+00 2.6925542396030586e+01 1.2838580867329015e+00 0 0 1 +2979 2 3.4397986483063014e-01 8.1965699631026423e-01 2.5376454781663146e+01 2.5295589716767419e+00 1 0 1 +2977 1 -7.4518508058038901e-01 3.1035985845318130e+01 2.5570830792796205e+01 2.0267725385352917e+00 0 0 1 +2240 2 3.5078401128980990e-01 2.4308205531827095e+01 1.8898609856773312e+01 1.4167813111160538e-01 0 0 1 +1537 1 -7.3777883422486357e-01 2.8183611068164300e+01 2.8021526755735568e+01 1.4909216079243803e+01 -1 -1 0 +1078 1 -7.1161377304581475e-01 1.0603164880436095e+01 3.0287962315273230e+01 1.2742050479495079e+01 0 0 0 +2381 2 3.5399757106050078e-01 6.1067728487761750e+00 2.4781064959124869e+01 3.6336376148565597e+00 0 0 1 +283 1 -7.5672796575542789e-01 7.3340276396581530e+00 2.4120587328236045e+01 6.7334638335770185e+00 0 0 0 +2382 2 3.4011467000542039e-01 5.6781126010134022e+00 2.6154821192660336e+01 3.3820129454259331e+00 0 0 1 +285 2 3.4574003908113682e-01 6.9889042977657487e+00 2.4462488098381062e+01 5.8661198873599929e+00 0 0 0 +2380 1 -7.0966788174009432e-01 6.1891249826381323e+00 2.5677801265080234e+01 4.0114929462837150e+00 0 0 1 +866 2 3.7974762058817363e-01 1.1437161451323156e+01 2.3935483643544291e+01 6.4844741141495179e+00 0 0 0 +865 1 -7.5045270964496991e-01 1.1684542206206830e+01 2.4034220174916079e+01 5.6087450809481565e+00 0 0 0 +713 2 3.8100618498572247e-01 2.2784688436261732e+01 2.8067384693091206e+01 1.5168157765466054e+01 0 -1 0 +2651 2 3.7134754646185764e-01 1.0564932711540903e+01 2.4417224439023801e+01 3.9821442280327397e+00 0 0 0 +2497 1 -7.8008249791842177e-01 1.0146781899866344e+01 2.4716450193775763e+01 3.1827349450385665e+00 0 0 0 +2499 2 3.9519385266339480e-01 9.8251259176630352e+00 2.5593636191229397e+01 3.3708764163336000e+00 0 0 0 +947 2 3.9253924940428797e-01 1.0263825030224725e+01 2.7852683659544994e+01 4.0455615741418205e+00 0 0 0 +948 2 3.9725362218035121e-01 9.1515364235489809e+00 2.8305362413977200e+01 3.1159321237190047e+00 0 0 0 +946 1 -7.0669887383965291e-01 9.6698379933881409e+00 2.7491147131501222e+01 3.3837868622275784e+00 0 0 0 +2415 2 3.9085663853667518e-01 7.8214692137169388e+00 3.0262367492327279e+01 3.6417069179902399e+00 0 0 1 +2413 1 -7.3042635851030735e-01 7.8611977585993138e+00 2.9503130536524999e+01 3.0631082528549514e+00 0 0 1 +2414 2 3.6257527513306098e-01 7.5130039510401589e+00 2.9877260365777943e+01 2.2557876138095705e+00 0 0 1 +2597 2 3.4847208100918808e-01 5.9287756755990690e+00 2.7333902335473979e+01 5.1899307770680885e+00 0 0 1 +1595 2 3.6244592889370902e-01 1.2433936904412802e+01 2.1934965053416544e+01 1.4992406370894184e+01 0 0 0 +2271 2 4.0909570526419575e-01 1.3522451860086692e+01 1.6951634432715593e+01 1.5508375253755103e+01 0 0 0 +327 2 3.8759023730211123e-01 1.2050978705537872e+01 1.5573452653055504e+01 8.2784716132267206e+00 0 0 0 +35 2 3.4845842899276164e-01 1.1812588280128036e+01 2.9385188020711290e+01 2.5041572044769072e+00 0 -1 0 +46 1 -7.1593692545468413e-01 1.1232403277271668e+01 3.0168149651200153e+01 2.3303314562343735e+00 0 -1 0 +1059 2 3.6824864110585426e-01 1.1638504469448538e+01 2.5099123254431568e+01 2.0648781431552830e+00 0 0 0 +48 2 3.1878107605473444e-01 1.0347514158940282e+01 2.9690768110446829e+01 2.1037573159972309e+00 0 -1 0 +2306 2 3.6730774642582426e-01 1.1677638270183767e+01 2.7832135131347837e+01 5.4673888184085717e+00 0 0 0 +867 2 3.1370858253756073e-01 1.2192252410484890e+01 2.4874949039818269e+01 5.6579771234908787e+00 0 0 0 +1240 1 -7.5180796299280950e-01 1.2327087450360994e+01 2.6722712144246813e+01 7.0555309702582889e+00 0 0 0 +970 1 -7.3146600161462005e-01 1.1248152038688696e+01 2.8611069856538506e+01 5.1499323635329528e+00 0 0 0 +797 2 4.0297523845729272e-01 4.7530543081548977e+00 1.5871585490732055e+01 2.8057350832087859e-02 0 0 0 +2907 2 3.3000121827207451e-01 1.4254911479743537e+01 2.5045975715533139e+01 2.5261004334418780e-01 0 0 1 +1310 2 3.6912627891884631e-01 1.1435715601608260e+01 3.0051416679416132e+01 6.5685756635319086e+00 0 0 0 +194 2 3.4139849350075085e-01 7.1415094141566895e+00 3.0604232298233732e+01 1.2211017372962626e+01 0 -1 0 +2404 1 -7.2918970427923557e-01 7.7443173631668092e+00 2.6595939568484972e+01 3.4140147144317651e-01 0 0 1 +2241 2 3.9659912662053765e-01 2.2799435060564139e+01 1.9066923564805702e+01 6.9285759649524839e-02 0 0 1 +2024 2 3.2328026818693090e-01 1.2934503583841352e+01 3.0969340188993392e+01 1.0085149821386086e+00 0 -1 1 +2600 2 3.7262301809038745e-01 7.8437230034604051e+00 2.8625302519356289e+01 3.6919372515878351e-01 0 0 1 +2503 1 -7.2267250532881955e-01 8.1079081356276106e+00 2.9515055246603296e+01 2.2072243477987505e-01 0 0 1 +892 1 -7.5148672502679792e-01 2.0888208841338542e+01 3.0715669616108823e+01 5.4691140517319417e+00 -1 0 0 +2914 1 -7.6421926990744804e-01 2.9510703840073099e+01 2.3060877292649728e+01 1.5053406826873461e+01 0 0 0 +422 2 3.9557308470781993e-01 1.4958599980011073e+01 2.3266598884233236e+01 2.7100072576749090e+00 0 -1 0 +1440 2 3.3666172492882906e-01 1.5566427432003387e+01 2.3299397669057697e+01 5.7236708951045312e+00 0 0 0 +971 2 3.2567165474977544e-01 1.1929566312924079e+01 2.8923647751821658e+01 4.4487948302918046e+00 0 0 0 +1438 1 -7.6400355645773477e-01 1.4805332823009291e+01 2.3937420344020648e+01 5.6136468707181102e+00 0 0 0 +1439 2 3.3814215799380470e-01 1.3976209769692970e+01 2.3456528366304326e+01 5.7527473356036429e+00 0 0 0 +1165 1 -7.7180149244132290e-01 1.6892018185723501e+01 2.5179950685440588e+01 1.9553738940112357e+00 0 0 0 +2758 1 -7.2968332908530154e-01 1.3875326099665889e+01 3.0808333193614605e+01 7.2626576973725365e-01 0 0 1 +1057 1 -7.3718390505409592e-01 1.2453032324606104e+01 2.5482972853962679e+01 1.6979261521525946e+00 0 0 0 +1058 2 3.7170747392897024e-01 1.3154453168675921e+01 2.4886115881196488e+01 2.1278488278569094e+00 0 0 0 +361 1 -7.2020473249304684e-01 1.5111938052273384e+01 2.6545935198238293e+01 6.5288380534713806e+00 0 0 0 +363 2 3.7710795587665641e-01 1.4130307401196781e+01 2.6895766235910095e+01 6.7011746282590110e+00 0 0 0 +1787 2 3.6506550621193440e-01 1.6437016935767591e+01 2.8270823428873410e+01 7.1889962650727446e-01 0 0 0 +500 2 3.9563439978420145e-01 1.3139570395859357e+01 2.7125366038007243e+01 2.4405650434562336e+00 0 -1 0 +499 1 -7.4192491401160543e-01 1.3246382458096035e+01 2.7884269656775327e+01 2.9621932171635712e+00 0 -1 0 +1786 1 -7.2694685533705328e-01 1.6124079983728649e+01 2.7701169952745143e+01 1.4707548318084380e+00 0 0 0 +501 2 3.4901563025656368e-01 1.4186706205235831e+01 2.8044701640144048e+01 2.9716726018831583e+00 0 -1 0 +1788 2 3.7300324528589590e-01 1.6565487798225700e+01 2.6743546285094954e+01 1.4172319899393557e+00 0 0 0 +485 2 3.8917163444130082e-01 1.7133153268846343e+01 2.8432448855102731e+01 2.5828995953958405e+00 0 -1 0 +484 1 -7.2478139607319303e-01 1.7771011581849773e+01 2.9090312988370790e+01 3.0195170845673602e+00 0 -1 0 +719 2 3.5973544565603732e-01 1.3210824358055650e+01 2.9980253058615219e+01 6.8901163302489712e+00 0 -1 0 +1131 2 3.7398792739649861e-01 1.4972565243952641e+01 2.5615051745422370e+01 6.2364669835306543e+00 0 0 0 +1120 1 -7.6437393633003570e-01 1.7188136437858049e+01 2.7620586692659064e+01 5.2313564427111094e+00 0 0 0 +478 1 -7.7153794208645088e-01 1.4556112571796843e+01 2.4170731992946010e+01 2.8571853183454174e+00 0 -1 0 +480 2 3.7039279087856108e-01 1.4659375689306321e+01 2.4377802333564819e+01 3.8306330776186162e+00 0 -1 0 +1166 2 3.6818913917165530e-01 1.5988849046281164e+01 2.4719250714218951e+01 2.0730647480009945e+00 0 0 0 +718 1 -7.0007226663817013e-01 1.4033321826486652e+01 2.9451312566205477e+01 7.1128216935617550e+00 0 -1 0 +1167 2 3.7923338543484714e-01 1.7372547670804369e+01 2.5141492059876267e+01 2.8388481697703978e+00 0 0 0 +486 2 3.4851896327417431e-01 1.7840015927983163e+01 2.8729788861126512e+01 3.9900023789032013e+00 0 -1 0 +1122 2 3.9950948061246394e-01 1.6283452598076114e+01 2.7493752546370004e+01 5.6820739550444701e+00 0 0 0 +1004 2 3.6922321685265796e-01 1.8067819858332463e+01 2.6103514753011648e+01 4.7800600944944955e+00 0 0 0 +1241 2 3.8317209833142313e-01 1.2631762626548294e+01 2.6617459281135197e+01 7.9366488579655634e+00 0 0 0 +720 2 3.8883256719159187e-01 1.4886218006873349e+01 3.0052887370892567e+01 7.0252477601468382e+00 0 -1 0 +317 2 3.7660963558257304e-01 2.0474708064777836e+01 2.3357459428841722e+01 7.2036772262635322e+00 0 -1 0 +569 2 3.8783285696535674e-01 2.2455722248379106e+00 2.2066220204576794e+01 1.5370151484013425e+01 1 -1 0 +2269 1 -7.1752401459424253e-01 1.2711347438041340e+01 1.7352224147378934e+01 1.5155041314866999e+01 0 0 0 +1825 1 -6.9402006245137993e-01 8.4972674772146011e+00 1.9497033734637270e+01 1.1809872771074947e+00 0 0 1 +430 1 -6.5456537019421690e-01 2.0996612135100165e+01 2.3575278454644387e+01 4.4848104634520487e+00 0 -1 0 +479 2 3.5143149704121679e-01 2.0090941043366730e+01 2.3794803455930094e+01 4.1063801965498241e+00 0 -1 0 +452 2 3.7511039745343261e-01 1.8242038568261091e+01 2.4312676814993754e+01 1.2408014532412548e+00 0 0 0 +2335 1 -7.0663871699902170e-01 2.7803249955786349e+01 3.0841525302039685e+01 1.1576639981750375e+01 -1 0 1 +2215 1 -7.5759516482600286e-01 2.4044598058876268e+01 3.0499261364788985e+01 7.5098444224430383e-01 0 -1 1 +432 2 3.5321799230547979e-01 2.1099341991831480e+01 2.3978205976758272e+01 5.3721841612848751e+00 0 -1 0 +1121 2 3.6602716921762257e-01 1.7788562511675782e+01 2.7500115242099934e+01 5.9408997621475974e+00 0 0 0 +451 1 -7.7479114258616244e-01 1.8956195284318440e+01 2.3779380845961956e+01 8.1650275600510236e-01 0 0 0 +1005 2 3.7425010479579085e-01 1.9019115995034273e+01 2.5937547750436089e+01 3.5420941138403799e+00 0 0 0 +391 1 -7.1903343169706346e-01 2.0633741021534266e+01 2.9437036759946299e+01 2.7178639091630310e+00 0 -1 0 +393 2 3.5197438791556285e-01 2.1042308894894298e+01 2.9938298988577603e+01 3.4500547962865422e+00 0 -1 0 +1 1 -7.5275174968800906e-01 2.2274546567364681e+01 2.3971593227612047e+01 7.0297719550043682e+00 -1 -1 0 +593 2 3.6821692456138522e-01 2.2630094997345115e+01 2.7119253615506256e+01 5.8004682052621579e+00 0 -1 0 +594 2 3.4130618206757080e-01 2.1599167406847030e+01 2.6222489465669813e+01 4.9644171821037251e+00 0 -1 0 +592 1 -7.4558336044021079e-01 2.1854184757612302e+01 2.6584592873719430e+01 5.8904946484285450e+00 0 -1 0 +392 2 3.4369613413918820e-01 1.9697038968448663e+01 2.9724448606225398e+01 2.8358995172859380e+00 0 -1 0 +126 2 3.7422219785173821e-01 2.0285381681406673e+01 2.7775135400249162e+01 3.0427494983516028e+00 -1 -1 0 +124 1 -7.2809449525284942e-01 2.0423346277474227e+01 2.6777363351430647e+01 3.1271560553692686e+00 -1 -1 0 +1857 2 3.4776498394299105e-01 2.0266250559281630e+01 2.8889562568593252e+01 5.3890956197132767e-01 0 -1 1 +125 2 3.7886289804488649e-01 2.0661450519657514e+01 2.6403793270474445e+01 2.1939402385286337e+00 -1 -1 0 +1003 1 -7.3374260266434299e-01 1.8394082976062357e+01 2.5426417334217984e+01 4.1281055653717926e+00 0 0 0 +1358 2 3.5320920959414304e-01 2.0181884329293933e+01 2.7535391615396801e+01 6.0836395423973135e+00 0 0 0 +453 2 3.8464374378974286e-01 1.9753646988402490e+01 2.4321280695410977e+01 7.1526528408521084e-01 0 0 0 +2217 2 3.7007639929684993e-01 2.4513342179557473e+01 2.9827918774373099e+01 1.2963472561364868e+00 0 -1 1 +1170 2 3.7203639517515485e-01 2.4316477511954879e+01 2.6019812701370970e+01 2.5424985484790432e+00 0 0 0 +1190 2 3.6648816131771772e-01 2.3530990378337936e+01 2.5373947402039541e+01 1.4763190384323588e+00 0 0 0 +1168 1 -7.1726548443494753e-01 2.3669431004163265e+01 2.6222569850352421e+01 1.8849284222704075e+00 0 0 0 +774 2 3.5870976329075838e-01 2.4611646906770677e+01 2.8008246261675229e+01 2.2690190621100172e+00 -1 0 0 +772 1 -7.6998498468766385e-01 2.5231146016647635e+01 2.8697308125595963e+01 2.6048632096997633e+00 -1 0 0 +1357 1 -7.2474852232336362e-01 1.9542919602024099e+01 2.7539633386633540e+01 6.8697274120249769e+00 0 0 0 +574 1 -7.3565241237755274e-01 2.0874195857857323e+01 2.5872258837729937e+01 6.5644486888479714e-01 0 -1 0 +576 2 3.2214123564982566e-01 2.1856440541000719e+01 2.6118436770139766e+01 5.2721422664059880e-01 0 -1 0 +1561 1 -7.2442043641608134e-01 6.1478558005357398e+00 1.7351146160950446e+01 2.1199996540750790e-01 0 0 1 +2707 1 -7.4908870477242695e-01 2.3572987187960493e+01 3.0247951655633539e+01 4.2770187072569259e+00 0 0 1 +2709 2 3.7701416401847976e-01 2.4018228287972992e+01 3.0016839751672130e+01 3.4541154315762790e+00 0 0 1 +121 1 -7.2051113576138714e-01 2.4191625099975827e+01 3.0650915047544217e+01 7.4574712232716918e+00 -1 -1 0 +3 2 4.1577633930000224e-01 2.3105901992940503e+01 2.3975506485778499e+01 7.5010060338255879e+00 -1 -1 0 +571 1 -7.1341890243255535e-01 2.4930557565015704e+01 2.4176879224243887e+01 7.6865627972039157e+00 0 -1 0 +123 2 3.3569826248679580e-01 2.4039494944321241e+01 2.9712947151475923e+01 7.2580477181558241e+00 -1 -1 0 +2451 2 3.7901607775320451e-01 1.7260992719357549e+01 1.7280321903502422e+01 1.5507075495442072e+01 0 0 0 +36 2 3.2211910731470411e-01 2.8596288805862930e+01 2.8755568105638790e+01 1.2611351594675826e+00 -1 -1 0 +1420 1 -7.6839855138204449e-01 2.9369288731394516e+01 2.3152743013854376e+01 3.5229814268119322e+00 0 0 0 +1418 2 3.3332506312944232e-01 2.7799031631687289e+01 2.4206610139617137e+01 4.8937517743836914e+00 0 0 0 +1079 2 4.1202959723708116e-01 1.1017085812565135e+01 3.0958157562986710e+01 1.3435728670024270e+01 0 0 0 +77 2 4.1061427900959452e-01 1.0175736789658936e+00 2.8182432170832623e+01 2.6693340884161372e+00 0 0 0 +103 1 -7.5456901333818416e-01 2.9649161718599714e+01 2.7187899327989076e+01 1.7311454374726398e-01 -1 -1 0 +1422 2 3.7138709430363176e-01 2.9407740548480952e+01 2.2677894956409339e+01 4.3436692679758417e+00 0 0 0 +573 2 3.7154365941629924e-01 2.5535670144797308e+01 2.4038380722464264e+01 6.9828917470572112e+00 0 -1 0 +2439 2 3.6826283620290740e-01 2.4691029633893312e+01 2.7767950007339177e+01 7.2722458966768038e+00 -1 0 1 +2437 1 -7.3154265702444210e-01 2.4484744310442654e+01 2.7802548689359515e+01 6.3432053449949279e+00 -1 0 1 +2981 2 3.6511473696165159e-01 2.9588960281624633e+01 2.7115320512173195e+01 6.3101417465397853e+00 0 0 1 +76 1 -7.4446262168796229e-01 4.4347907502734367e-02 2.8083582667516676e+01 2.8106831640334979e+00 0 0 0 +1417 1 -7.0444574478905619e-01 2.7176785934000979e+01 2.4342046570308533e+01 5.6224049670235079e+00 0 0 0 +2955 2 3.7873227585346980e-01 2.5593963277319812e+01 2.4460708836016174e+01 4.2460155714017382e+00 0 0 1 +78 2 3.6862115269425916e-01 3.0742708187176721e+01 2.7191840167992034e+01 2.5352936045524888e+00 -1 0 0 +1419 2 3.5501644844363678e-01 2.7621550811901798e+01 2.3813714936953865e+01 6.3081552703764885e+00 0 0 0 +2332 1 -7.3611234651260138e-01 2.9578056580891140e+01 2.8697427284645038e+01 5.0539779490147163e+00 -1 0 1 +2334 2 4.0171294821696840e-01 3.0129444416058540e+01 2.9357390069091423e+01 5.3552591046352775e+00 -1 0 1 +2953 1 -7.7697637895686589e-01 2.5324831336060210e+01 2.4487390586951999e+01 3.3571062370488240e+00 0 0 1 +907 1 -7.2251028040591492e-01 2.7100203938797701e+01 2.6593106258267170e+01 2.4440379882400376e+00 -1 0 0 +909 2 3.3500662682571025e-01 2.7427278216403398e+01 2.6522956737287711e+01 1.5033342341908511e+00 -1 0 0 +908 2 3.7961236192047176e-01 2.6956469552165704e+01 2.5744703492226272e+01 2.6400960394064432e+00 -1 0 0 +2412 2 3.4623101210603358e-01 2.6029577309995265e+01 2.9171189633077898e+01 4.3079987642570918e+00 -1 0 1 +2411 2 3.5218645700129853e-01 2.7336288672869212e+01 2.8783519190678735e+01 5.0785014135684090e+00 -1 0 1 +2410 1 -7.6011493149154941e-01 2.6477880327746849e+01 2.9184653431160037e+01 5.2067375322384324e+00 -1 0 1 +2708 2 3.3181334848678523e-01 2.4164266597886574e+01 2.9822345617660844e+01 4.9099631442280707e+00 0 0 1 +773 2 3.7012580699728387e-01 2.6102804889668402e+01 2.8294793487265327e+01 2.4404325203689918e+00 -1 0 0 +60 2 3.6438661909224723e-01 2.9672415367119456e+01 2.8687242549486129e+01 4.0691075695933865e+00 -1 -1 0 +2438 2 3.6905390739666244e-01 2.5397596245482042e+01 2.8086722995784147e+01 5.9351200968678022e+00 -1 0 1 +1913 2 3.9777170499484688e-01 1.2445734247165840e+01 1.5994290894358539e+01 1.1900694900542913e+01 0 0 0 +105 2 3.8022186632645188e-01 3.0441932538363968e+01 2.6795585923877784e+01 5.8196599449822606e-01 -1 -1 0 +34 1 -6.9103165850333870e-01 2.9102913931594440e+01 2.9592407312246191e+01 1.5211275179373571e+00 -1 -1 0 +2918 2 3.6744823694418821e-01 2.9460198883696403e+01 2.7028527124131571e+01 7.8749192047765266e+00 0 0 1 +1655 2 3.7093515606989202e-01 2.9881610170356275e+01 2.9150987659245054e+01 1.8389359555123999e+00 -1 -1 1 +1064 2 3.3879951321891011e-01 2.5483525215636931e+00 2.0024626791342854e+01 8.1380248165505513e+00 0 0 0 +1065 2 3.6124126446920163e-01 3.4938963528843967e+00 1.9346220672408222e+01 7.2481726367541306e+00 0 0 0 +818 2 3.8826292627461073e-01 4.9533731605449649e+00 3.1001128832846643e+01 2.7089246988955824e+00 0 0 0 +781 1 -7.1053193243808477e-01 3.0918245522048736e+01 2.2210287096960165e+01 8.4999784213451690e+00 -1 0 0 +783 2 3.3829689662728679e-01 1.9347358200781137e-02 2.1413498559152941e+01 9.0284816532350796e+00 0 0 0 +897 2 3.9667986531971500e-01 3.0590078971226010e+01 1.6721897173546587e+01 1.1712801130585841e+01 -1 0 0 +896 2 3.9060271093257459e-01 7.1430249162270276e-01 1.7354038616218705e+01 1.0935784766862362e+01 0 0 0 +2978 2 3.3328822053012341e-01 3.0403075834293748e+01 2.5154780732356976e+01 2.5831932127906847e+00 0 0 1 +782 2 3.8068974490929453e-01 3.6850592315502234e-01 2.2868794731213487e+01 8.9895074290264496e+00 0 0 0 +2479 1 -7.4283161069088044e-01 4.9449624192179638e+00 2.0053044930582871e+01 8.7838756901349413e+00 0 0 0 +2480 2 3.8904952102009055e-01 4.6308351414032618e+00 2.0801035198761209e+01 9.3320441559769840e+00 0 0 0 +2481 2 3.9032107431036239e-01 5.0447721051635677e+00 1.9232398023379780e+01 9.3816456769200052e+00 0 0 0 +902 2 3.7392508857859746e-01 2.8598438701388549e+00 1.6635609298857183e+01 1.1753616607594813e+01 0 0 0 +903 2 3.8081156908654729e-01 2.3674417963906715e+00 1.8052996094063570e+01 1.2287970858182797e+01 0 0 0 +1570 1 -7.5893671651103367e-01 3.0218300902229167e+00 1.9308785499479292e+01 1.3536737357231672e+01 0 0 0 +1571 2 3.8388295512999776e-01 3.8972856227907071e+00 1.9678335988182738e+01 1.3330824242472874e+01 0 0 0 +1572 2 4.0340330515784095e-01 2.9148444381818490e+00 1.9257058322215780e+01 1.4503628319612218e+01 0 0 0 +170 2 3.8882921609954363e-01 2.9427592381579668e+00 2.1619466459223013e+01 1.1027876270810093e+01 0 0 0 +169 1 -7.7463134278409251e-01 3.8529636758273407e+00 2.1699173051760646e+01 1.0628485272851613e+01 0 0 0 +1484 2 4.0383560934081486e-01 4.2071330215285281e+00 2.2606910771010458e+01 1.0772474498839145e+01 1 0 0 +2308 1 -7.3569171940956501e-01 1.5017620852195062e+00 2.0831890139540402e+01 1.1782616700171493e+01 0 0 0 +2309 2 3.8366802113539478e-01 1.9342199150744828e+00 2.0244472854130983e+01 1.2485520341268021e+01 0 0 0 +2310 2 3.9498363709379281e-01 1.2958100040264249e+00 2.0300058783725483e+01 1.0983524237686135e+01 0 0 0 +917 2 3.7008761071742147e-01 4.8220292832352154e+00 2.0914860722736151e+01 1.1825020786045929e+01 0 0 0 +901 1 -7.1954901362842083e-01 2.4476472653585248e+00 1.7539212404128129e+01 1.1476237039039427e+01 0 0 0 +2653 1 -7.1407794147296166e-01 2.2223217817991088e+01 1.5600288137492777e+01 9.7129661428534746e+00 0 0 1 +1661 2 3.5806502752998431e-01 2.8723309707562222e-01 1.8518812070504179e+01 9.5105582699629085e+00 0 0 1 +2681 2 3.7408838542420436e-01 2.5692127879270789e+01 2.4050868588982262e+01 1.5209429065012028e+01 0 0 0 +895 1 -7.7254256646473796e-01 3.0916044323341680e+01 1.6865507987979797e+01 1.0832587972324836e+01 -1 0 0 +972 2 3.8958678083689607e-01 5.2845295544754913e+00 2.2041888025454103e+01 1.4164436092325849e+01 0 0 0 +916 1 -7.1849250243876217e-01 5.2917958307580353e+00 2.0765686248163561e+01 1.2715811801842168e+01 0 0 0 +41 2 3.4597041917537447e-01 4.5404653034810440e+00 1.7441943296259307e+01 1.0763676472309626e+01 0 0 0 +42 2 3.4625268632405820e-01 5.4911163946317982e+00 1.6955800727265036e+01 9.6416415245918454e+00 0 0 0 +40 1 -6.9298718920580493e-01 5.3586832037896297e+00 1.7668787968159918e+01 1.0272929656102887e+01 0 0 0 +918 2 3.7241349642923333e-01 6.2774434684204188e+00 2.0597766446606272e+01 1.2439943861592742e+01 0 0 0 +2817 2 3.6362109850572560e-01 1.7072551470060397e+01 2.0791821797317706e+01 1.9730653547291296e-01 0 0 1 +2473 1 -7.8376303661055080e-01 5.2329675428867226e+00 2.2926869569941765e+01 1.4508261223785039e+01 0 0 0 +1394 2 3.7561675712294307e-01 1.0066961393282048e+01 2.2137513267239317e+01 7.9241561763396282e+00 1 1 0 +182 2 3.7036336294443822e-01 2.9772454062655132e+01 2.7398338040325360e+01 1.2452158687330796e+01 -1 0 0 +1929 2 3.7304411352453759e-01 2.0571506036799700e+01 1.5843275251657795e+01 1.4902031573720491e+01 0 -1 0 +2735 2 4.0466389476064457e-01 1.3663928778675162e+01 1.7700859662394102e+01 1.1273600014757855e+01 0 0 0 +693 2 3.7355905365668080e-01 8.2924051047883438e+00 2.1211611421873101e+01 7.5605276769303620e+00 1 -1 0 +81 2 3.4643788751501525e-01 1.3437500808154157e+01 2.0858005523084625e+01 7.0855832710738369e+00 0 0 0 +79 1 -7.0472834330902390e-01 1.2891631836566249e+01 2.0075875296449333e+01 6.7214342140418841e+00 0 0 0 +1094 2 3.8663965999858252e-01 1.1538959925197428e+01 1.8805378150876944e+01 1.4242985681441615e+01 0 0 0 +2154 2 3.6420188231188699e-01 1.0521146231131416e+01 2.2524680111552552e+01 9.4763834191858258e+00 1 0 1 +1362 2 3.5824690391237357e-01 6.5921348900644317e+00 2.0394826958198973e+01 8.1492985187104168e+00 1 0 0 +1635 2 3.6460421980976943e-01 7.8791961372700694e+00 1.9437307217523852e+01 8.4551633696940574e+00 0 0 1 +691 1 -7.1634038175820036e-01 7.4457620197018342e+00 2.0340597100576886e+01 8.7188804807012357e+00 1 -1 0 +1091 2 3.5348108080554042e-01 9.2352024301846232e+00 2.3062119115273926e+01 1.0688071281129636e+01 0 0 0 +1093 1 -7.5610592836972312e-01 1.1176049494231272e+01 1.9369925143825022e+01 1.3526617279730933e+01 0 0 0 +1092 2 3.5698678780043508e-01 1.0428095081578661e+01 2.2355387862443486e+01 1.1390639381003277e+01 0 0 0 +1090 1 -7.4170775116856325e-01 9.7310897953903712e+00 2.2196116250200184e+01 1.0732220278777797e+01 0 0 0 +2297 2 3.7934871719845747e-01 1.0794042060809771e+01 2.1020294208138296e+01 1.3887529507469980e+01 0 0 0 +2488 1 -7.3192761463762990e-01 7.5729790375084214e+00 1.9966054609970051e+01 1.1495176640393668e+01 0 0 0 +2489 2 3.9010762880406841e-01 7.2457720749580972e+00 2.0103302581885902e+01 1.0563387900827802e+01 0 0 0 +2490 2 3.5552434097681462e-01 8.2903037248428042e+00 2.0628250272285275e+01 1.1486238901911690e+01 0 0 0 +177 2 3.8421024410092713e-01 7.6534694143330260e+00 1.7274206383348062e+01 1.3765775587804821e+01 0 0 0 +2355 2 3.5028584914948896e-01 1.1086995691185416e+01 2.2359508348038510e+01 1.3131526882750579e+01 0 0 0 +2344 1 -7.2028535602954824e-01 8.3422327917342951e+00 1.7749713127973955e+01 1.3166647643860570e+01 0 1 0 +2346 2 4.0082094308859451e-01 7.8805465917902895e+00 1.8433376952478259e+01 1.2752454210832761e+01 0 1 0 +1095 2 3.5064756010964881e-01 1.0277271754319097e+01 1.9081853876585306e+01 1.3359986510885417e+01 0 0 0 +2353 1 -7.7169283784575082e-01 1.0892211058050357e+01 2.2012390989266652e+01 1.3985946095630926e+01 0 0 0 +329 2 3.8245793311242204e-01 9.4294825512239715e+00 1.8375170009595195e+01 9.3862643340546743e+00 0 0 0 +328 1 -6.8284934097088801e-01 1.0364693584158644e+01 1.8694073610397169e+01 9.3369426823978721e+00 0 0 0 +266 2 3.3998906893874364e-01 1.0835107512327555e+01 1.7886338480507185e+01 9.0448861727927401e+00 0 0 0 +180 2 3.6629437370309237e-01 8.9191909014610218e+00 1.6278123394845156e+01 1.2171630277942121e+01 0 0 0 +1230 2 3.4897159507022230e-01 1.2651522049522319e+01 2.2828698079773773e+01 1.1426060156834017e+01 0 0 0 +1248 2 3.7127122779483096e-01 1.2019755864652671e+01 1.9177004225515454e+01 1.0239280429073586e+01 0 0 0 +1246 1 -7.5123810229363408e-01 1.2612701047009665e+01 1.9269563800417110e+01 1.1007569385750237e+01 0 0 0 +1247 2 3.8478602703622933e-01 1.2022865885117511e+01 1.9363862621856210e+01 1.1794799083569512e+01 0 0 0 +325 1 -7.2032755691587191e-01 1.1154565249619596e+01 1.5905196799573638e+01 8.3293449943930895e+00 0 0 0 +628 1 -7.5200533637137024e-01 2.8083405600877811e+01 1.5856571411951402e+01 1.0421546054314188e+01 0 0 0 +1228 1 -7.2454729889141289e-01 1.1852767672858807e+01 2.3488213193315296e+01 1.1719209222607425e+01 0 0 0 +80 2 3.2829440486445405e-01 1.3397101627017882e+01 1.9252574526373138e+01 6.9684973749010570e+00 0 0 0 +1763 2 3.5492558261878643e-01 1.5831304590054888e+01 2.0671522283692784e+01 1.4260462216041889e+01 0 0 0 +1762 1 -7.4836374636434422e-01 1.5674285106779241e+01 2.1536284625293433e+01 1.4858417154632580e+01 0 0 0 +365 2 3.5847440711504786e-01 1.5936511086240854e+01 1.8619360678049826e+01 1.4222218270812556e+01 0 0 0 +364 1 -7.0291574883952124e-01 1.5402952506808310e+01 1.9153946361765730e+01 1.3562568591795484e+01 0 0 0 +483 2 3.0717727600877298e-01 1.5558502772744433e+01 2.3032799019011815e+01 1.3268370468094734e+01 0 -1 0 +2774 2 3.5465290195660870e-01 1.8661662836362428e+01 1.6595386784445584e+01 1.1730397209133352e+01 0 0 0 +1865 2 3.7846677915290078e-01 1.3991602498196146e+01 2.2008668217447539e+01 9.6822988125197078e+00 0 0 0 +1864 1 -7.5619108736371377e-01 1.3832629170277741e+01 2.1805191047844094e+01 1.0672757659842960e+01 0 0 0 +366 2 3.3662957893240802e-01 1.5892497289862192e+01 1.9052851851296623e+01 1.2798893411830880e+01 0 0 0 +2045 2 3.6843327272201931e-01 1.7383148487775625e+01 1.6242664951766255e+01 1.2430622317259399e+01 0 0 0 +1866 2 3.6888569615343975e-01 1.3449574509359403e+01 2.0853571389735475e+01 1.0770810432268060e+01 0 0 0 +1048 1 -7.7850812089130550e-01 6.2519657267750040e+00 1.6287851365657861e+01 4.4681118342316779e+00 0 0 0 +2773 1 -7.0289866530104472e-01 1.7720694473769644e+01 1.6392192292685635e+01 1.1554923167460693e+01 0 0 0 +1293 2 3.5874739847185821e-01 1.7573841405063501e+01 1.8998560915984307e+01 7.8418420310689143e+00 0 0 0 +1775 2 3.7930886030505406e-01 1.7628951233281235e+01 2.1651091800331972e+01 9.6374044199956437e+00 0 0 1 +1291 1 -7.1733704230154260e-01 1.6939076932549632e+01 1.8312466969617159e+01 8.2419840513479539e+00 0 0 0 +1292 2 3.8068886773413796e-01 1.7323067967853635e+01 1.7484472713562187e+01 7.8964692417287292e+00 0 0 0 +2627 2 3.2744916934268492e-01 1.5961330693165227e+01 2.0714668578823805e+01 1.0632985837133541e+01 0 0 0 +2626 1 -7.2597635668302984e-01 1.6852985064361519e+01 2.0338225510179768e+01 1.0533847084845975e+01 0 0 0 +482 2 3.7732523695064918e-01 1.4789997302559515e+01 2.2756784640945057e+01 1.1880158544694746e+01 0 -1 0 +2064 2 3.4982189958829368e-01 1.5398745546105964e+01 2.1573632558705661e+01 7.4042228792037763e+00 0 0 1 +2636 2 3.6801504006444241e-01 1.9287424658031981e+01 1.8884583749552444e+01 1.2304592146246019e+01 0 0 0 +2635 1 -7.1930182243662977e-01 1.8721799978166800e+01 1.9031954580377946e+01 1.3056327433617250e+01 0 0 0 +2834 2 3.3904231354261710e-01 1.8011825502857707e+01 1.9571668908372096e+01 1.2729719668732258e+01 0 0 0 +2062 1 -7.5233856886005890e-01 1.4720889017106710e+01 2.2083751114041338e+01 7.9319879318777540e+00 0 0 1 +2628 2 3.6013062061877316e-01 1.6793504274382368e+01 1.9667082287731365e+01 9.8196129202630988e+00 0 0 0 +246 2 3.8223723397471004e-01 1.9677629648349928e+01 2.2659560861524234e+01 1.3470837764260315e+01 0 -1 0 +318 2 3.6460510894379844e-01 1.9391691935460369e+01 2.2632410876852376e+01 7.8743501717128872e+00 0 -1 0 +1774 1 -7.3808776636459816e-01 1.8388365856387527e+01 2.2257583029510826e+01 9.4106770166346898e+00 0 0 1 +481 1 -7.3686566666960396e-01 1.5392754018076330e+01 2.3401506948523021e+01 1.2326685474492542e+01 0 -1 0 +2690 2 3.8077933113803375e-01 1.7118700699729459e+01 2.3755057829849676e+01 1.2108509925928093e+01 0 0 0 +2571 2 3.4705504739017007e-01 1.6659729929720985e+01 2.3120707191088925e+01 1.4711938719177578e+01 0 0 0 +2345 2 3.3408049698686781e-01 1.7951003949121066e+01 1.8490666724892229e+01 1.4971765217918959e+01 0 1 0 +1458 2 3.3546848630018994e-01 2.0688532644434744e+01 1.9796632568193832e+01 1.4429771487945500e+01 0 0 0 +274 1 -7.3567961464394083e-01 2.5123966332927758e+01 2.0330798567902363e+01 1.4445848293135958e+01 0 0 0 +2930 2 3.5568366779223870e-01 3.4285721790098439e-01 2.2938730406175065e+01 1.4631219344744295e+00 1 0 1 +1456 1 -6.9123898505827908e-01 2.1672533974329593e+01 1.9919714078324510e+01 1.4400695086354490e+01 0 0 0 +528 2 3.7194736345747315e-01 1.7530553520903077e+01 3.0545144868361422e+01 3.9729845031758839e+00 0 -1 0 +1244 2 3.7478692617993181e-01 2.0273458814267748e+01 1.7990155238290292e+01 1.1160300170329492e+01 0 0 0 +181 1 -7.4730568145306686e-01 2.9430578371317857e+01 2.6588779748915744e+01 1.1961461469247768e+01 -1 0 0 +1243 1 -7.3174734640122197e-01 2.0737337468379774e+01 1.7170816955908140e+01 1.1396599161137804e+01 0 0 0 +282 2 3.8360281622256703e-01 2.1021092367318527e+01 1.9731840779446717e+01 1.0351425630162543e+01 0 0 0 +1245 2 3.9155171097875230e-01 2.1419365418185183e+01 1.7423445127614535e+01 1.2048261554259843e+01 0 0 0 +280 1 -7.6743092679418234e-01 2.0178810112504355e+01 1.9743231124767004e+01 1.0680718568691095e+01 0 0 0 +281 2 3.5842289632887275e-01 1.9688873997523658e+01 2.0308117129783962e+01 1.0090800136651925e+01 0 0 0 +2957 2 3.4592950163766484e-01 2.3289160873739561e+01 2.2883794480643740e+01 9.3265178419923145e-01 0 0 1 +2655 2 3.7064092809625354e-01 2.2037209951736987e+01 1.6169541421012749e+01 1.0582799613228202e+01 0 0 1 +1276 1 -7.5469087222565279e-01 2.3008391762653400e+01 1.7326918310159513e+01 1.2818953611288835e+01 0 0 0 +1278 2 3.3681277895958806e-01 2.2801442616324763e+01 1.7137023953533227e+01 1.3770873088966352e+01 0 0 0 +1277 2 3.6340304975251581e-01 2.3505779351600385e+01 1.8086758659667957e+01 1.2957714615811325e+01 0 0 0 +1289 2 3.6533091991039757e-01 2.2848764884322208e+01 1.9894275044266344e+01 1.2794661809258885e+01 0 0 0 +1288 1 -7.1011042439796679e-01 2.3688861487805319e+01 2.0061435833718654e+01 1.2304173525710651e+01 0 0 0 +1290 2 3.8098515036334835e-01 2.4092879824807778e+01 2.0702079761935977e+01 1.2991360251216689e+01 0 0 0 +764 2 3.7022355281977826e-01 2.6872310051988801e+01 1.6115154023736682e+01 2.1725137676795652e+00 -1 0 0 +512 2 3.8412380436018584e-01 2.4267644800078443e+01 1.5986899549558521e+01 1.2225108267747364e+01 0 0 0 +1914 2 3.8847786056277950e-01 1.0897688610698163e+01 1.5810805535212650e+01 1.2033235321975353e+01 0 0 0 +244 1 -6.9521786709554856e-01 1.9544052489598037e+01 2.2348710749988040e+01 1.4370548852622965e+01 0 -1 0 +2742 2 3.6084303049161259e-01 2.0251362377557456e+01 2.1852148622208741e+01 1.1439894558044323e+01 0 0 1 +2633 2 3.9933252227664767e-01 2.3440361873456663e+01 1.6723943395913373e+01 9.3598720620014166e+00 0 0 0 +2632 1 -7.3915576872259658e-01 2.4038034342201431e+01 1.7447894673381377e+01 9.0492303629412252e+00 0 0 0 +1179 2 3.9660368888882308e-01 2.1852866160514409e+01 1.9522164809799822e+01 7.7530687749261791e+00 0 0 0 +2781 2 4.1030647399571779e-01 2.2890591164047450e+01 1.8612554158838794e+01 8.5930560897962547e+00 0 0 1 +2779 1 -7.2727859115035309e-01 2.2073751557777175e+01 1.9198543875935329e+01 8.6298631073995491e+00 0 0 1 +1434 2 3.9851599447773650e-01 2.3506887394850455e+01 2.1020272739838518e+01 1.0948284240640614e+01 0 0 0 +2741 2 3.3678527741236330e-01 2.0181249639319986e+01 2.3318724259645538e+01 1.1561525817332308e+01 0 0 1 +2740 1 -7.4866476455259201e-01 2.0600744267511196e+01 2.2554120619800575e+01 1.1914395065903795e+01 0 0 1 +1433 2 3.8322665744508810e-01 2.2869176642482675e+01 2.0539493450712051e+01 9.5226028653044441e+00 0 0 0 +1432 1 -6.6847296558310765e-01 2.3298033615914775e+01 2.1312867632419710e+01 9.9907725484808871e+00 0 0 0 +1205 2 3.8377984232055873e-01 2.3499690111339021e+01 2.3320835146967340e+01 1.0111167479857757e+01 0 0 0 +1137 2 3.6770268558152153e-01 1.8353088651016321e+01 2.2953721785978278e+01 1.0058670775751686e+01 0 0 0 +1453 1 -7.5145082130426499e-01 2.6789096505217518e+01 2.2430587692014818e+01 1.5442910304471745e+01 0 0 0 +2637 2 3.9311219977788153e-01 2.4741204898595598e+01 1.9647113231003271e+01 1.5113791566614278e+01 0 0 0 +1468 1 -7.2068342123639539e-01 2.8966434349854417e+01 1.9154201968148524e+01 1.4979358376186727e+01 0 0 0 +861 2 4.0651075317900559e-01 2.5806411494840208e-02 2.1270450064237135e+01 1.2783883048745254e+01 0 0 0 +608 2 3.6675238729668996e-01 2.7850178787626216e+01 1.9136371441949084e+01 1.3803217393134240e+01 0 0 0 +630 2 3.6309080307885683e-01 2.9028125951237563e+01 1.6058989394956633e+01 1.0415260748932875e+01 0 0 0 +1660 1 -7.5442722379400595e-01 4.0135881704838167e-01 1.9431027012911230e+01 9.7173969865152667e+00 0 0 1 +1662 2 3.5618623031647290e-01 3.0574287542183043e+01 1.9722017819454177e+01 9.4855283779133952e+00 -1 0 1 +859 1 -7.5023654268626561e-01 3.0254978323648722e+01 2.1079628652697938e+01 1.3298100381778786e+01 -1 0 0 +275 2 3.8390079721216863e-01 2.5787637441177402e+01 1.9840094727727273e+01 1.3938347969523656e+01 0 0 0 +786 2 3.6027909744608505e-01 2.8148054126738025e+01 1.8753102315176864e+01 8.6193906780994549e+00 -1 0 0 +784 1 -7.2302511553283211e-01 2.8903658671929485e+01 1.9389477793691043e+01 8.2089807192514126e+00 -1 0 0 +195 2 3.8191353315325044e-01 8.7113363255162319e+00 3.0846212294261775e+01 1.2596785873973463e+01 0 -1 0 +953 2 3.6027044517098017e-01 1.5817598124148383e+01 1.5714005722017710e+01 5.6174108869596939e-01 0 0 0 +1189 1 -7.1544367291068811e-01 2.6921682084028351e+01 1.7789488102408793e+01 8.9711005428389168e+00 0 0 0 +1733 2 3.6895704063676416e-01 9.1963439014940320e+00 1.5831193077288665e+01 2.3916686679337407e-01 0 0 1 +2847 2 3.9835923189317363e-01 2.7640457545297767e+01 2.0910592306274317e+01 8.6418918519677383e+00 0 0 1 +547 1 -7.2312140353185683e-01 2.7105741343730866e+01 1.9177755757790784e+01 1.3031043664579730e+01 0 0 0 +548 2 3.9742500055695790e-01 2.7304498342915164e+01 2.0033877462850207e+01 1.2530677573972113e+01 0 0 0 +1191 2 3.4840538967143153e-01 2.7451330835753257e+01 1.6933755771103396e+01 9.3414820357359876e+00 0 0 0 +708 2 3.6488594194418511e-01 2.7070039735781386e+01 1.7310121484343870e+01 1.3122638800061480e+01 0 0 0 +2719 1 -7.2966322172293274e-01 2.7107813178606079e+01 1.6311703555282133e+01 1.3207549150690276e+01 0 1 0 +449 2 3.5261750338568154e-01 2.5724691297489919e+01 1.5563016208233936e+01 1.2037111339031529e+01 0 0 0 +2845 1 -6.8769288041857168e-01 2.7025491040190250e+01 2.1592881727130667e+01 8.4990628473396512e+00 0 0 1 +2846 2 3.8038735579488880e-01 2.6433602461348386e+01 2.1354419784401358e+01 7.7688668323159575e+00 0 0 1 +1743 2 3.7765073139456967e-01 7.2356872641078835e+00 1.6060498379255343e+01 1.5391384239203663e+01 0 0 0 +535 1 -6.9351140030448077e-01 3.0284127290741271e+01 1.6230269670986370e+01 1.3573916799934615e+01 0 0 0 +536 2 3.7314818964639873e-01 2.9901479008657134e+01 1.6352230165212294e+01 1.4441972570683136e+01 0 0 0 +660 2 3.7179064244987614e-01 2.8865788050204245e+01 2.1362944491574712e+01 1.2154042996054416e+01 0 0 0 +659 2 4.0432105193771761e-01 2.7791523949705152e+01 2.2456870164268040e+01 1.1704153621669375e+01 0 0 0 +658 1 -6.9223023092681224e-01 2.8012348343654654e+01 2.1448870618608790e+01 1.1715364926751253e+01 0 0 0 +2721 2 3.6108356320386598e-01 2.6732987384118097e+01 1.6118864937044048e+01 1.4054984522232740e+01 0 1 0 +2406 2 3.5759213084386299e-01 6.9917753744641971e+00 2.6618904346310060e+01 9.1981759563612431e-01 0 0 1 +2634 2 3.7251254928066418e-01 2.4933829306015355e+01 1.7281373873388898e+01 9.4288325992868725e+00 0 0 0 +852 2 3.6451835468165611e-01 2.7934010582606248e+01 2.3453446618877454e+01 9.1836728485920904e+00 -1 0 0 +851 2 3.6612875001996253e-01 2.9385911656431233e+01 2.3579932011057522e+01 8.9765043757203298e+00 -1 0 0 +850 1 -6.8714835947063957e-01 2.8609390307377367e+01 2.4166971249212075e+01 9.0063218834278285e+00 -1 0 0 +1465 1 -7.0697422021671075e-01 2.6814958960255879e+01 2.3821799842204708e+01 1.1510981608322417e+01 0 0 0 +1470 2 3.9396544034778719e-01 2.9607576814578849e+01 1.9739531833934805e+01 1.4554791256008762e+01 0 0 0 +860 2 3.9738405253143166e-01 3.0049415937613894e+01 2.1845685412330898e+01 1.3854917881241008e+01 -1 0 0 +1970 2 3.6631544657957621e-01 4.4801048982882392e+00 3.0384862741634578e+01 1.2457271286002571e+01 1 0 0 +679 1 -7.3884430294729031e-01 1.3884601581128519e+00 2.7307601184088483e+01 8.0433511615065196e+00 1 -1 0 +2138 2 3.6574522442457519e-01 6.9649678246169577e-01 2.4684228485841167e+01 1.3184934328737844e+01 1 0 0 +2137 1 -7.0704388954002095e-01 9.3231783484885575e-02 2.4368009481772123e+01 1.2452573721020419e+01 1 0 0 +741 2 3.7434885247858879e-01 2.7727092391315016e+00 2.6691716599280845e+01 8.7988528462250741e+00 1 0 0 +1445 2 3.8548131930074031e-01 2.2005697343618769e+00 2.4900957451708251e+01 1.0087717825901684e+01 1 0 0 +739 1 -7.5354058077878527e-01 3.3607101838340738e+00 2.6226518828141142e+01 9.4456856881618663e+00 1 0 0 +1689 2 3.5366450763106971e-01 4.6756331867403400e+00 2.7096660767504279e+01 8.6034060848582605e+00 0 0 1 +2664 2 3.6248914724789583e-01 3.6253351295021203e+00 2.3415664233892677e+01 1.4668228614684358e+01 0 0 0 +740 2 3.7813238114201547e-01 3.2460095888464986e+00 2.6699903299190165e+01 1.0368050223914613e+01 1 0 0 +1586 2 3.7914039895457374e-01 2.5740308199525472e+01 1.6185108114413278e+01 3.9510960135165032e+00 -1 0 1 +681 2 3.6443997307201897e-01 1.0555671798228803e+00 2.8004445704230264e+01 8.7094294737145947e+00 1 -1 0 +1360 1 -6.7480008408751069e-01 1.4882493780982777e+00 2.4269534685597151e+01 1.0097032697747219e+01 1 0 0 +2491 1 -7.4313586911541984e-01 3.7274056157859561e+00 2.7308610645775840e+01 1.1901978495234834e+01 0 0 0 +1010 2 3.5848162394431332e-01 4.3408557086198805e+00 2.8087849175057361e+01 1.1869491949944251e+01 0 0 0 +1969 1 -7.1861000860944768e-01 3.7762539101629833e+00 3.0949819758938002e+01 1.2762526107510293e+01 1 0 0 +1361 2 3.7604403072138470e-01 9.6890215047289319e-01 2.4434767575930834e+01 1.0987557222386553e+01 1 0 0 +2663 2 3.7514753484908803e-01 2.5655514490488831e+00 2.4484266788593096e+01 1.4091030504039944e+01 0 0 0 +2281 1 -7.2337854692324965e-01 8.3296510298333487e-02 2.9523357072742080e+01 9.0212914448415393e+00 0 0 0 +111 2 3.4865849155406547e-01 2.5712482674108879e+00 2.6740270841671524e+01 1.3652703216261845e+01 0 -1 0 +337 1 -7.3277063770123152e-01 5.2120488092907511e+00 2.3985492898151392e+01 1.0959719444651245e+01 0 -1 0 +338 2 3.4553558971079390e-01 6.2101215163811032e+00 2.4246202947588152e+01 1.0943827835801443e+01 0 -1 0 +339 2 3.3212807815336182e-01 4.9598037038503726e+00 2.4396189596964280e+01 1.1791023608398064e+01 0 -1 0 +2283 2 4.1823708180317992e-01 4.5748216314865070e-01 2.9633425011777803e+01 9.9150992687357231e+00 0 0 0 +2662 1 -7.4003655433427440e-01 2.6664637143622563e+00 2.3560630291725882e+01 1.4418375427170361e+01 0 0 0 +109 1 -7.5977382313663044e-01 1.9055882972700284e+00 2.6096448762336642e+01 1.4006135911992970e+01 0 -1 0 +110 2 3.5479215686412657e-01 1.3927653851935911e+00 2.6513347488364442e+01 1.4765745062724859e+01 0 -1 0 +2475 2 3.5741072622930053e-01 5.6307128342522352e+00 2.2855817075340919e+01 1.5361045007921270e+01 0 0 0 +2492 2 3.4668336412011003e-01 4.2340425669308424e+00 2.6694833106235713e+01 1.2413656554824133e+01 0 0 0 +2487 2 3.6683106593829695e-01 5.5441176634189455e+00 2.4617578699145994e+01 1.3662232150179799e+01 0 0 0 +2485 1 -7.3305340844882494e-01 5.7369451291585660e+00 2.5553291098444294e+01 1.3448761055350099e+01 0 0 0 +912 2 3.7863694181231811e-01 2.7893370743276495e+01 3.0413138803232307e+01 8.0702270047507252e+00 -1 0 0 +92 2 3.8132548215501233e-01 2.1190540495800669e+00 3.0302769407529631e+01 1.1789497509934840e+01 0 0 0 +91 1 -6.9177040178921889e-01 1.2569725004997006e+00 3.0103235284568061e+01 1.1455679813964528e+01 0 0 0 +575 2 3.3863973483648530e-01 2.0446333414633720e+01 2.6761208615750910e+01 4.0302338863605713e-01 0 -1 0 +1688 2 3.8521082307435872e-01 5.6336866786490143e+00 2.7608018581349981e+01 7.4137911714745517e+00 0 0 1 +2831 2 4.0120236849744478e-01 1.1541474163486269e+01 2.9359371686660065e+01 1.1752173950452967e+01 0 0 0 +2152 1 -7.2840395014258164e-01 1.0771233970095382e+01 2.2869455708534712e+01 8.4131440408646938e+00 1 0 1 +2153 2 3.4814834762962904e-01 1.0147816463516468e+01 2.3775620741313222e+01 8.3219357419077973e+00 1 0 1 +2037 2 3.8362085249896749e-01 1.9899847643284769e+01 2.5336370734770949e+01 1.4911183385682811e+01 0 0 1 +894 2 3.4374717299163865e-01 2.1779549416947212e+01 3.0425566677244884e+01 5.2775980603456469e+00 -1 0 0 +188 2 3.8115975079692371e-01 3.0992125779233263e+01 2.1477571266727409e+01 1.1216504440015862e+00 -1 0 1 +1687 1 -7.1719615304991724e-01 5.5991592764731992e+00 2.7338239278206903e+01 8.3617872748748301e+00 0 0 1 +1795 1 -7.6870820021542008e-01 5.9494360062101341e+00 2.8972972617046459e+01 1.2403016717369882e+01 0 -1 0 +1878 2 3.7636298385944633e-01 6.4934736890311697e+00 2.8466200272256263e+01 1.1743586516661779e+01 0 -1 0 +1242 2 3.4819153269248820e-01 1.1458703621783737e+01 2.6217662116156244e+01 7.0050228561939214e+00 0 0 0 +172 1 -7.1874989402726008e-01 9.8018782620938776e+00 2.5205555533011093e+01 7.6901266485896800e+00 0 0 0 +174 2 3.4596646801330511e-01 8.8205436118645792e+00 2.5004152451287883e+01 7.4015636926675379e+00 0 0 0 +173 2 3.0562091312378320e-01 9.5135997837157511e+00 2.5731573796909860e+01 8.5283624559504201e+00 0 0 0 +2289 2 3.4569195403219072e-01 8.3959156523212233e+00 2.4458657913821110e+01 1.2248577581774047e+01 0 0 0 +1874 2 3.4453520128448678e-01 1.1217599696795792e+01 2.5665299626114340e+01 1.4875566851880778e+01 0 0 0 +1875 2 3.0763144174779811e-01 1.1633158219400611e+01 2.6723684815386864e+01 1.3980132317917876e+01 0 0 0 +1873 1 -7.7644829978827168e-01 1.0870391602787791e+01 2.6164980504216064e+01 1.4163444117104003e+01 0 0 0 +2944 1 -7.8030950606872118e-01 2.5094625183601316e+01 2.4729624226333470e+01 1.4848347488443634e+01 0 0 0 +2287 1 -7.5971256236996898e-01 8.1613287892445463e+00 2.4424577554753924e+01 1.1296842670315336e+01 0 0 0 +1796 2 3.5652387618113229e-01 6.1658294090837220e+00 2.8629799499281052e+01 1.3291114191694442e+01 0 -1 0 +171 2 3.5455462731887888e-01 8.7845489577640645e+00 2.5037455967793871e+01 1.0824436580267422e+01 0 0 0 +2830 1 -7.4329954283332977e-01 1.1656641946018244e+01 2.8912746684218583e+01 1.0890491019252101e+01 0 0 0 +1274 2 3.3728908911554367e-01 1.0254271118106468e+01 2.6247367068049233e+01 1.1641460915073457e+01 0 0 0 +2457 2 3.1916350196148274e-01 7.4395176851492133e+00 2.6616304689440746e+01 1.0786739217533420e+01 0 0 0 +1017 2 3.4525292214042869e-01 9.9089982397385334e+00 2.7756063275864712e+01 1.4549603740398132e+01 0 0 0 +2455 1 -7.2212191390713598e-01 7.1761790177787246e+00 2.7529759230761492e+01 1.0450754065767292e+01 0 0 0 +2456 2 4.0167138987704837e-01 6.3966272305360334e+00 2.7358149110698143e+01 9.8423136660914370e+00 0 0 0 +1129 1 -7.4402689481222684e-01 9.8679871040149294e+00 2.6428557603968883e+01 1.0818379404068505e+01 0 0 0 +1130 2 3.4906253787067065e-01 1.0308848949186933e+01 2.7296657017511102e+01 1.0631858315759979e+01 0 0 0 +1108 1 -7.3509866285050496e-01 6.7819386709148510e+00 2.8350745869579519e+01 1.5157542166913336e+01 0 0 0 +2486 2 3.7124170033753284e-01 6.7668685306300000e+00 2.5639416955711489e+01 1.3452178874451207e+01 0 0 0 +1309 1 -7.7410997084759603e-01 1.1738301814259012e+01 3.0966864452431789e+01 6.6548083195092929e+00 0 0 0 +1080 2 3.5058274539291207e-01 1.0337418717062187e+01 2.9558191710750361e+01 1.3402523135697662e+01 0 0 0 +1275 2 3.6837993201431540e-01 9.0598754230804577e+00 2.5439639281251701e+01 1.4159497195899700e+01 0 0 0 +1273 1 -7.5103018929361298e-01 8.2221070722734506e+00 2.4989921683706754e+01 1.4234853006812012e+01 0 0 0 +545 2 3.7983422390290761e-01 8.3190199387179860e+00 2.4323247452721915e+01 1.4988061584299976e+01 0 0 0 +1015 1 -7.2625316751530800e-01 9.5679904653137164e+00 2.8632579762848515e+01 1.4747348448165372e+01 0 0 0 +1016 2 3.8358706448607893e-01 8.5947944756125754e+00 2.8552143838314887e+01 1.4740479930045707e+01 0 0 0 +2832 2 3.6833849269024443e-01 1.2588437322679425e+01 2.9053786834328644e+01 1.0683054358137804e+01 0 0 0 +227 2 3.8069043050140500e-01 6.7542390031189177e+00 3.0773260057919693e+01 9.1966885347387062e-01 0 -1 0 +2915 2 3.8551792146819380e-01 2.9656999864425053e+01 2.3973228441648722e+01 1.4866838077747847e+01 0 0 0 +2639 2 3.5382776357617346e-01 1.6007331995540330e+01 2.5236837403739859e+01 7.9389906345421988e+00 0 0 0 +1193 2 3.8051987740779625e-01 1.8522913699255128e+01 2.9847006931604518e+01 8.6640675735241128e+00 0 0 0 +1732 1 -7.4532839113724625e-01 8.2798027313755096e+00 1.5589978915163060e+01 6.0614107305412301e-01 0 0 1 +1538 2 3.2744579304075944e-01 2.8846945819764723e+01 2.8684559785946476e+01 1.4562564651170861e+01 -1 -1 0 +1073 2 3.5008751492266438e-01 1.3516348774983586e+01 2.7235119518117589e+01 1.5243551143419339e+01 0 0 0 +1227 2 3.8695006736496318e-01 1.6865139872453611e+01 2.5470963849060176e+01 1.4541920940672078e+01 0 0 0 +1226 2 3.7873760396994960e-01 1.5874096929113774e+01 2.6770712919022515e+01 1.4331108043844960e+01 0 0 0 +2063 2 3.8209526769738550e-01 1.4922461290486877e+01 2.3021166676742244e+01 7.9279146966643985e+00 0 0 1 +1172 2 3.5355614092858006e-01 1.2267462673473288e+01 2.4221920277934284e+01 1.2202751818008295e+01 0 0 0 +1317 2 3.6427128582856894e-01 1.7258174439809238e+01 2.8197828259110025e+01 1.4529929347731880e+01 0 0 0 +1315 1 -7.0673690633660369e-01 1.7467177185380216e+01 2.8996844434408963e+01 1.5032248418901911e+01 0 0 0 +1225 1 -7.3521269320585547e-01 1.6760428185466743e+01 2.6343852476671227e+01 1.4119017882511317e+01 0 0 0 +2307 2 4.1092433174476961e-01 1.3686499160217535e+01 2.6190888129513567e+01 1.0509522490312445e+01 0 0 0 +2305 1 -7.3363234297698821e-01 1.3801725526248331e+01 2.6425268615620343e+01 9.5587547222638403e+00 0 0 0 +1043 2 3.7488238002414792e-01 1.4224794825377835e+01 2.4795576440808638e+01 1.2407501077041029e+01 0 0 0 +1072 1 -7.5077515467102973e-01 1.4100174963763427e+01 2.7158099946067772e+01 1.4422332292510733e+01 0 0 0 +2354 2 3.7955646818807254e-01 1.4403336353317394e+01 2.5707977956498741e+01 9.0801816765774657e+00 0 0 0 +1042 1 -7.5574451851450375e-01 1.3722560202291875e+01 2.5625203017520530e+01 1.2160140075432530e+01 0 0 0 +2689 1 -7.5596613291204851e-01 1.8049130070871175e+01 2.4077677492745515e+01 1.1843914553786719e+01 0 0 0 +1044 2 3.8444265938506628e-01 1.3719370747684914e+01 2.6258494731729748e+01 1.2866591766800873e+01 0 0 0 +2638 1 -7.3946183648271491e-01 1.5838469627839384e+01 2.4793575644859470e+01 8.7445951541069427e+00 0 0 0 +2640 2 3.8000076377866066e-01 1.6482863244304806e+01 2.5165264274375453e+01 9.3536532814575395e+00 0 0 0 +402 2 3.5434434072595594e-01 1.6485829848811974e+01 2.9322011186864653e+01 1.1874800116819284e+01 0 -1 0 +2691 2 3.4324381271677640e-01 1.8497596222731573e+01 2.4288384210517094e+01 1.2685712673771203e+01 0 0 0 +456 2 4.0156213536723340e-01 1.4079078091068254e+01 2.9208691867340892e+01 8.7948409004611250e+00 0 0 0 +454 1 -7.4724607350644467e-01 1.4269704606927844e+01 2.9049367119220246e+01 9.7639277367604222e+00 0 0 0 +1157 2 3.9693621783976146e-01 1.4549899230700456e+01 3.0410698280629511e+01 1.2407421056395414e+01 0 0 0 +455 2 3.8938432504030729e-01 1.4306317791770821e+01 2.8082202413390142e+01 9.8257789927633485e+00 0 0 0 +1074 2 3.3688842220012999e-01 1.4007528479879568e+01 2.8062766023229749e+01 1.4005996237181597e+01 0 0 0 +1158 2 3.6991769068996366e-01 1.4328583456193895e+01 2.9097732895946045e+01 1.1522628580131078e+01 0 0 0 +1156 1 -7.3693579554483479e-01 1.4375724792677884e+01 2.9473555471827485e+01 1.2424077907767250e+01 0 0 0 +494 2 3.8074666430643545e-01 1.7744184738142668e+01 2.5702243032888457e+01 1.1254239154423740e+01 0 -1 0 +495 2 4.0180544917710997e-01 1.7684296342007571e+01 2.7320131652222550e+01 1.1035037616890445e+01 0 -1 0 +493 1 -7.2753012853380328e-01 1.7560127483372341e+01 2.6468309166629076e+01 1.0624576470576089e+01 0 -1 0 +400 1 -7.4414814174795618e-01 1.7364456511259320e+01 2.9156083069696830e+01 1.1409583424397898e+01 0 -1 0 +2526 2 3.8682226415933840e-01 1.7407891697735227e+01 2.9800800492857434e+01 1.0697719107152466e+01 0 0 1 +1192 1 -7.5146970683876402e-01 1.7676230764997566e+01 3.0276716962852685e+01 8.8718959354934217e+00 0 0 0 +1741 1 -7.3205757942065153e-01 6.5646294206871234e+00 1.6602793438545699e+01 1.4935295448350956e+01 0 0 0 +1019 2 3.7533566628932991e-01 1.5494448101255530e+01 1.7967393218913010e+01 9.6419364205948610e-01 0 1 0 +1457 2 3.3608578371234021e-01 2.1802152775354795e+01 1.9974146943511290e+01 1.5349502717791385e+01 0 0 0 +429 2 3.7369022834846510e-01 2.3737537351792326e+01 2.9042833884525809e+01 9.9993294061308617e+00 0 -1 0 +245 2 3.2729285075045900e-01 1.9299541545737657e+01 2.3204914995461841e+01 1.4823889772453104e+01 0 -1 0 +2945 2 3.8493052695990354e-01 2.4558820099153891e+01 2.4237362512852961e+01 1.4248491875091533e+01 0 0 0 +1110 2 3.2284115324006901e-01 5.9629587183467230e+00 2.7879547095184176e+01 1.5289372348273277e+01 0 0 0 +1946 2 3.4319387916119626e-01 2.6385533926690393e+01 2.6915266267265956e+01 1.2790122706965821e+01 0 0 0 +2035 1 -7.4850951670186616e-01 1.9522439391815791e+01 2.5501955878457565e+01 1.4044260114417856e+01 0 0 1 +2 2 3.7182616676479113e-01 2.2099257703414636e+01 2.4866968193163192e+01 6.7331328722075625e+00 -1 -1 0 +1486 1 -7.4570053510063972e-01 2.9970113727581392e+01 3.0166641069568584e+01 1.4964882298871128e+01 0 0 0 +2084 2 3.6571927225739886e-01 1.8926476090992040e+01 2.5747936370918769e+01 9.4622934725375138e+00 0 -1 0 +1885 1 -7.5905026705536827e-01 1.9492371208209629e+01 2.5436962842319616e+01 8.7592194762612987e+00 0 -1 0 +1886 2 3.9134367693637823e-01 1.9417671525079349e+01 2.6040516596834813e+01 8.0482391152251491e+00 0 -1 0 +2264 2 3.6876059672045897e-01 2.0127903249874674e+01 2.9294240185926455e+01 1.0162597224450533e+01 -1 0 0 +1359 2 3.5682764756711299e-01 2.0003498669298974e+01 2.8159304742168526e+01 7.4747609713330609e+00 0 0 0 +1014 2 3.4719095364891989e-01 2.2834738116041521e+01 2.7860297648398340e+01 7.6587750779259025e+00 0 0 0 +2736 2 3.4769891114122353e-01 1.3599245093020784e+01 1.6479025823656730e+01 1.0280685422969542e+01 0 0 0 +2263 1 -7.4090646041065489e-01 2.0305524809265258e+01 2.9319573919632511e+01 9.0448243895213505e+00 -1 0 0 +1012 1 -7.6915917651958687e-01 2.2686210632562460e+01 2.8150152827682845e+01 8.5602338989257909e+00 0 0 0 +2265 2 3.6087503388705217e-01 2.1257154507068531e+01 2.9033514336035918e+01 8.9465941849200608e+00 -1 0 0 +1013 2 3.6505715459970411e-01 2.2306724491447220e+01 2.7355122049564567e+01 9.0130000203875085e+00 0 0 0 +2954 2 3.7582232234417695e-01 2.1564640697541989e+01 2.6395567250149814e+01 1.0872246030938877e+01 0 0 1 +2755 1 -7.6148392492405548e-01 2.1799280755174109e+01 2.5846175036755039e+01 1.0063024342258730e+01 0 0 1 +1184 2 3.7014196369676028e-01 2.0509120429392205e+01 2.8869233821073585e+01 1.2145827657275872e+01 0 0 0 +2757 2 3.8709186019132275e-01 2.0979702888375712e+01 2.5586546353317935e+01 9.5932138541673204e+00 0 0 1 +1185 2 3.7230877560740350e-01 1.9055063706262271e+01 2.9462956218345347e+01 1.1831934015659300e+01 0 0 0 +2076 2 3.7915662099277253e-01 2.0567140417363138e+01 2.6485831293818670e+01 1.2865693203352905e+01 0 -1 0 +1183 1 -7.3721753404518597e-01 2.0050729408969488e+01 2.9641306532156555e+01 1.1671696178352919e+01 0 0 0 +2074 1 -7.7414661817605712e-01 2.1190928563446558e+01 2.7145357222097807e+01 1.2441861780772955e+01 0 -1 0 +2075 2 4.0285127557932976e-01 2.1963979517384846e+01 2.7248635801780097e+01 1.2960945200595175e+01 0 -1 0 +2882 2 3.4567728753195492e-01 2.3689262756956474e+01 2.6221608865749200e+01 1.3897438508303820e+01 0 0 0 +683 2 3.8850947898225768e-01 2.2287043656262462e+01 2.2710659639236084e+01 1.3159838603159599e+01 0 -1 0 +684 2 3.9098808257530643e-01 2.3339634958910594e+01 2.3402399945945756e+01 1.2344122318292756e+01 0 -1 0 +682 1 -6.9746337220353483e-01 2.3125296302024395e+01 2.3166784061331143e+01 1.3275389404967701e+01 0 -1 0 +2883 2 3.3405337731821316e-01 2.4594507691402203e+01 2.7413326810741978e+01 1.3573785439163032e+01 0 0 0 +2881 1 -7.4833507498208907e-01 2.3678702829374647e+01 2.7157308162026748e+01 1.3777877093008364e+01 0 0 0 +1206 2 4.0841236155139748e-01 2.3127446955732903e+01 2.4816037541215099e+01 1.0488707043851456e+01 0 0 0 +1204 1 -7.3831533211398614e-01 2.3666061908616861e+01 2.4028985318967081e+01 1.0766836745112006e+01 0 0 0 +572 2 3.5723901917161704e-01 2.5448062543971378e+01 2.4378839592437217e+01 8.4478213725293188e+00 0 -1 0 +427 1 -7.2658915359131349e-01 2.4338046472811751e+01 2.9165416708310708e+01 1.0751912586528359e+01 0 -1 0 +911 2 3.2269895416079913e-01 2.8199373540185583e+01 2.9038503386115810e+01 8.8708669066955714e+00 -1 0 0 +428 2 3.4990884231565705e-01 2.4398068524033910e+01 3.0172422508081215e+01 1.0810772009746300e+01 0 -1 0 +2331 2 3.5079342493493992e-01 5.2064627058065236e+00 2.7708451934664833e+01 9.4589076273547601e-01 0 0 1 +289 1 -6.8890047440900226e-01 2.5614823927510720e+01 2.7405470988437354e+01 9.0938119240594943e+00 -1 -1 0 +2143 1 -7.5804542689975407e-01 7.8745710373642239e-02 2.8267785805496505e+01 1.3067751100228358e+01 1 0 0 +2139 2 3.7928201005903961e-01 3.0523943861771443e+01 2.5123347238073457e+01 1.2286052823693883e+01 0 0 0 +2337 2 3.5914943750021483e-01 2.7982980760739459e+01 3.0361659529949762e+01 1.0725883676226925e+01 -1 0 1 +1467 2 3.5954451884135707e-01 2.5873940482334660e+01 2.3683995088923901e+01 1.1185822601501235e+01 0 0 0 +1455 2 3.7693870283650671e-01 2.6146068105875198e+01 2.1789399816838561e+01 1.5035604289235520e+01 0 0 0 +183 2 3.4828795567031207e-01 2.8557800567354928e+01 2.6376138691493416e+01 1.2266070203373703e+01 -1 0 0 +677 2 3.6396272860491191e-01 2.5712859436769588e+01 2.9030195725155021e+01 1.2128497063177194e+01 0 -1 0 +1106 2 3.9913351683679482e-01 1.8174279945828175e+01 3.0684727674107993e+01 1.4512233723842488e+01 0 0 0 +1304 2 3.6107063623748398e-01 2.8625501449869109e+01 2.7181843318364749e+01 1.0310947948550398e+01 0 0 0 +1912 1 -7.4104414153033016e-01 1.1698069005670529e+01 1.5744419460621131e+01 1.2544597663609681e+01 0 0 0 +678 2 3.3044914957682942e-01 2.6419359007871105e+01 2.9680792073147057e+01 1.3215613763102581e+01 0 -1 0 +910 1 -7.4281924048833048e-01 2.8437280336074551e+01 2.9976056974506591e+01 8.8325068950829451e+00 -1 0 0 +676 1 -7.6505901219117389e-01 2.6301827644936228e+01 2.8799583958072560e+01 1.2882579797955763e+01 0 -1 0 +1303 1 -7.8727795606889606e-01 2.8309919864935516e+01 2.7010363946789624e+01 9.4216674720800295e+00 0 0 0 +290 2 3.7043836185306966e-01 2.6565017029408050e+01 2.7390411449107006e+01 9.1249793246568327e+00 -1 -1 0 +2171 2 3.4326834663890887e-01 2.7562919121937277e+01 2.7975513531725674e+01 1.4186873036472745e+01 0 -1 0 +2145 2 3.5341020361431097e-01 5.8511868267090583e-01 2.7692818681943656e+01 1.3752232476885101e+01 1 0 0 +1945 1 -7.6402729752946219e-01 2.6695077837973667e+01 2.6000376719885502e+01 1.2969061133326520e+01 0 0 0 +93 2 3.7976280265708601e-01 9.0348566445855460e-01 2.9409424590030735e+01 1.2152921026129114e+01 0 0 0 +1947 2 3.5703833910423982e-01 2.6106173714029055e+01 2.5634024907519958e+01 1.3699848668347313e+01 0 0 0 +2282 2 3.8799513008704178e-01 3.0099826630609414e+01 2.9613146404803253e+01 8.9160193148825062e+00 -1 0 0 +291 2 3.5750723329860512e-01 2.5331940887455815e+01 2.8152410132656726e+01 9.7326543340109648e+00 -1 -1 0 +2144 2 3.3552473139954792e-01 3.0642422856655269e+01 2.8868905179467856e+01 1.3638219124658908e+01 0 0 0 +1305 2 3.9480578818462042e-01 2.8376297744365395e+01 2.6030779364580070e+01 9.3636649868968576e+00 0 0 0 +1466 2 3.9246402888933674e-01 2.6904922929046229e+01 2.4783907287116225e+01 1.1771241445637314e+01 0 0 0 +2734 1 -7.2382854903492777e-01 1.3707108314973883e+01 1.6770863409777963e+01 1.1231203325519900e+01 0 0 0 +1238 2 3.4481247578860302e-01 2.9313808677053302e+01 2.6259789677049987e+01 1.5302785766078491e+01 0 0 0 +2569 1 -7.3177289447898375e-01 1.7137009565743430e+01 2.3885095763143838e+01 1.5187813887405355e+01 0 0 0 +1488 2 3.5692691954684008e-01 2.9509775826894746e+01 3.0717097422710697e+01 1.4205998097752483e+01 0 0 0 +1967 2 3.5178852207702033e-01 5.1822116287820572e+00 1.6081427724137171e+01 7.8795791913758668e+00 0 0 1 +178 1 -6.7984691073543635e-01 9.1232380330040979e+00 1.5777570487371852e+01 1.1278161510519119e+01 0 0 0 +2216 2 3.4190717057196779e-01 2.4732804026675620e+01 3.0787678630554399e+01 6.5088003105526468e-02 0 -1 1 +107 2 3.4971144609339067e-01 3.5813792575530221e+00 2.5772053968346633e+01 2.5939715693812210e-01 0 -1 0 +1596 2 3.8907654241846407e-01 1.3932695527699384e+01 2.1276800284547537e+01 1.5421449348608080e+01 0 0 0 +2812 1 -7.0935516142550625e-01 1.6201426602723924e+01 3.1004616013418381e+01 6.7505702489044870e+00 0 0 1 +942 2 3.5904571565151733e-01 9.9603587503673836e+00 2.2884806884661739e+01 1.5325075750172157e+01 0 0 0 +2476 1 -7.5195101737034253e-01 1.6465874655471463e+01 1.5593224616913542e+01 1.3965217933360407e+01 0 0 0 +602 2 3.6704959261871023e-01 2.1035877062916210e+01 3.0977558031118289e+01 8.4737950394283104e+00 0 -1 0 +2829 2 3.8852471663730892e-01 2.2462937506558461e+01 1.5984134869706034e+01 1.5510374544909403e+01 0 0 0 +2841 2 3.6796209378854011e-01 6.3042865678625271e+00 2.2908991682961382e+01 8.0237084697705630e-02 1 0 0 +2565 2 4.0436469491963317e-01 1.2704761764209320e+00 1.6053650115450203e+01 1.9080890623613435e+01 0 0 0 +2563 1 -6.7611000077238470e-01 1.1472683325292459e+00 1.6249162632465769e+01 2.0035846446403664e+01 0 0 0 +2564 2 4.0778981150198818e-01 3.2501020578611023e-01 1.6753303182253919e+01 2.0229597294791944e+01 0 0 0 +2874 2 3.0889470933723584e-01 4.5820739533130483e+00 2.2128723260691615e+01 1.7462635147454915e+01 1 0 0 +1062 2 3.6037252280074866e-01 1.5638869745625017e+00 2.1597388647498928e+01 2.0415959146700228e+01 0 0 0 +2453 2 3.7904019657753646e-01 2.3220359130048061e+00 2.1698675539625103e+01 1.8975353307752130e+01 0 0 0 +2452 1 -7.1933244817353248e-01 1.8909493635495129e+00 2.1082951341513748e+01 1.9587431856443843e+01 0 0 0 +810 2 3.4622181872072527e-01 3.3923609315101131e+00 1.7049297110884318e+01 2.0486325237545703e+01 0 0 -1 +2467 1 -7.4410670249583011e-01 1.9985166093300266e+00 1.6134561924140069e+01 1.7564190458245303e+01 0 0 0 +2374 1 -7.5549882313366945e-01 4.9708970216671613e+00 1.5897640845727093e+01 1.8162153196036638e+01 0 0 0 +2376 2 3.4100942613539392e-01 5.3517499864409963e+00 1.6193354287035945e+01 1.7356460206206449e+01 0 0 0 +809 2 3.7578964355484112e-01 4.7014133471784998e+00 1.7027075716661063e+01 1.9863578419664893e+01 0 0 -1 +957 2 4.0200516441711215e-01 3.1711690929003957e+00 2.0435804024865750e+01 2.0366921012028225e+01 0 0 -1 +955 1 -7.8889873207496419e-01 3.9247566400771396e+00 2.0163465758259353e+01 2.0907781192972930e+01 0 0 -1 +956 2 3.8557050395591708e-01 4.0623801606004930e+00 1.9223205577425333e+01 2.0751641667477642e+01 0 0 -1 +2880 2 3.6470456104793036e-01 4.5590835487633585e+00 2.1324788166738507e+01 2.2180636558811027e+01 1 0 0 +2448 2 3.7891469717871362e-01 6.4104048348264353e+00 1.5780213047357663e+01 1.9122582220757749e+01 0 0 0 +581 2 3.7460426720235190e-01 1.5419382297134044e+01 3.0800518915771480e+01 2.6043886925557764e+01 0 -1 -1 +2872 1 -7.6269479373786953e-01 3.7009428876424453e+00 2.2413959840696482e+01 1.7771422527835437e+01 1 0 0 +2583 2 3.7327435409857357e-01 5.4441623512822481e+00 1.8249974051004482e+01 2.2056304735162637e+01 0 0 0 +2276 2 3.6149696853742197e-01 3.1288172812713939e+00 2.2351439514553785e+01 1.7001251371961878e+01 0 0 0 +1711 1 -6.8819152537359740e-01 5.8566533843091850e+00 1.8293718521491556e+01 2.2909298612410424e+01 0 -1 0 +570 2 3.7790956638870143e-01 1.0061486189159239e+00 2.2026618126685257e+01 1.6446196223609501e+01 1 -1 0 +1712 2 3.7429560628687081e-01 5.9482113502938487e+00 1.7356911971271291e+01 2.3291942335504508e+01 0 -1 0 +2997 2 3.5225437272715709e-01 6.6086757608250366e+00 2.1146860438570563e+01 1.9455868658346034e+01 1 0 0 +2995 1 -7.1265882757587440e-01 6.0246788973483776e+00 2.0382500638383885e+01 1.9229781344684003e+01 1 0 0 +2996 2 3.6650296349571998e-01 5.2499733116524041e+00 2.0470690161445592e+01 1.9880591363399045e+01 1 0 0 +868 1 -7.3205821000451254e-01 2.5958374885186419e+00 1.8850417537589575e+01 1.6354720355830807e+01 0 0 0 +2878 1 -7.1548846979217984e-01 4.9358770289344820e+00 2.2117119705858219e+01 2.2697449221692509e+01 1 0 0 +635 2 3.5961360442179929e-01 5.6901360064690110e+00 1.9633135447409259e+01 1.7042339689310896e+01 1 0 0 +634 1 -6.7563410020830350e-01 5.3605055245776070e+00 1.8786296859330406e+01 1.6629063670717017e+01 1 0 0 +2115 2 3.6239867576259466e-01 8.1957615718520105e-01 2.1726024313333614e+01 2.2120325638004008e+01 1 -1 0 +808 1 -7.5427064274521927e-01 4.2494047742010075e+00 1.7450448103663643e+01 2.0626646924584463e+01 0 0 -1 +869 2 3.8570557115870291e-01 2.5185340578773343e+00 1.7998889873837001e+01 1.6843735479251066e+01 0 0 0 +2879 2 3.7164260702824170e-01 5.8521700015176608e+00 2.2045790028891812e+01 2.2297213410798278e+01 1 0 0 +2929 1 -7.1547115163270913e-01 1.6733174735264713e+00 1.7565037739044858e+01 2.3239784168949743e+01 1 0 0 +2931 2 3.2300493004303144e-01 2.2415982955798239e+00 1.7185611160903488e+01 2.2537360933781954e+01 1 0 0 +636 2 3.5946336426886771e-01 4.4147762414063987e+00 1.9027776247970419e+01 1.6412064428481170e+01 1 0 0 +870 2 3.7872752608724825e-01 2.0905325493323708e+00 1.9511792379724071e+01 1.6829961939440512e+01 0 0 0 +90 2 3.8834987715673935e-01 3.0943079419730942e+01 2.3362929219921256e+01 1.7346239916805800e+01 -1 0 0 +2113 1 -7.4531961303516558e-01 4.7096294719936260e-01 2.2425780260519058e+01 2.1565634816952937e+01 1 -1 0 +84 2 3.4897705322751993e-01 6.4508803916872415e+00 2.3559543074305076e+01 1.9269480285743430e+01 0 0 0 +2446 1 -6.7386356744338205e-01 7.2018006619244739e+00 1.5776218241604699e+01 1.9761553973954879e+01 0 0 0 +2442 2 3.5677817428353492e-01 9.6049044051135581e+00 2.2246363140981110e+01 1.7420877969602010e+01 0 0 0 +2447 2 3.9770318677378780e-01 7.4935616608432012e+00 1.6709551456264087e+01 1.9776904052396038e+01 0 0 0 +1800 2 4.1263441495919023e-01 1.0493244043314887e+01 1.7856467585679393e+01 1.7093068535115474e+01 0 -1 0 +135 2 3.9020101999581147e-01 8.9585516768587699e+00 1.8955011839864781e+01 1.8149561907320830e+01 0 0 0 +2260 1 -7.0103070485976005e-01 9.3873721090698456e+00 1.9082381628952291e+01 1.7263300317648142e+01 0 0 0 +2459 2 4.0434139329975316e-01 9.9682070030173868e+00 1.9843076963821684e+01 1.7447146520603926e+01 0 0 0 +1672 1 -7.3253141780020958e-01 7.9840608557733734e+00 1.8482620317594353e+01 1.9685083124885651e+01 0 0 0 +1674 2 3.7607888027345554e-01 7.3596416275299301e+00 1.9230285660106546e+01 1.9813327146661464e+01 0 0 0 +1673 2 3.6415389748626503e-01 8.5081160988086832e+00 1.8502998507052023e+01 2.0514696258781356e+01 0 0 0 +2440 1 -7.2029648161625559e-01 9.6242880106291349e+00 2.1778741467411137e+01 1.8312320727913580e+01 0 0 0 +2441 2 3.4230058605961328e-01 8.8814147484251507e+00 2.2167102283532959e+01 1.8858178997559353e+01 0 0 0 +979 1 -6.7482259063424510e-01 9.3088737385903926e+00 1.8844654865070989e+01 2.2460656347640754e+01 0 0 -1 +981 2 3.2430814659994767e-01 1.0090752856278911e+01 1.8493242842363081e+01 2.3048318147233751e+01 0 0 -1 +2509 1 -7.0196068058637862e-01 1.1788754153574342e+01 2.1536558931188686e+01 2.2727285444582797e+01 0 0 0 +2494 1 -7.4134374356485211e-01 1.1760325640174159e+01 1.5944605909120598e+01 1.9376881358470484e+01 0 0 0 +1972 1 -7.0047005231308657e-01 1.0356107018540603e+01 1.5765792843229191e+01 2.1808303769585933e+01 0 -1 0 +1097 2 3.6804654533983650e-01 7.8990432043169108e+00 2.1860162981074073e+01 2.2981153842560516e+01 0 0 0 +1096 1 -7.2729234791305175e-01 7.6152216078739663e+00 2.1444382553767134e+01 2.2209500718085835e+01 0 0 0 +1098 2 3.4838062587641866e-01 8.2952355939697160e+00 2.0776200139787651e+01 2.1968914814861467e+01 0 0 0 +980 2 3.7621919366667722e-01 8.5832690427575464e+00 1.8897036762754400e+01 2.3096414297956674e+01 0 0 -1 +2511 2 3.7597610626228445e-01 1.2184327819808559e+01 2.1060047289538311e+01 2.1924792581040840e+01 0 0 0 +2652 2 3.9789000070420916e-01 1.2263660768542426e+01 2.0679378164077566e+01 1.6766552072505430e+01 0 0 0 +2650 1 -6.8409435611026848e-01 1.1940315526251053e+01 1.9971637937423427e+01 1.7402509219403665e+01 0 0 0 +276 2 3.5792728558793091e-01 1.2473518730115815e+01 1.9986571964075942e+01 1.8227032133933289e+01 0 0 0 +1883 2 3.5294858934765755e-01 2.0126515986864028e+01 2.6600416664575562e+01 1.6710503370343691e+01 0 -1 0 +2468 2 3.5615560919483652e-01 2.8654151542591384e+00 1.5740984955840435e+01 1.7791581939739004e+01 0 0 0 +47 2 3.7949325700519548e-01 2.9817534616981050e+01 2.8032334758234612e+01 3.0746086176961189e+01 -1 -1 -1 +82 1 -7.7671112964081956e-01 7.1843657320280654e+00 2.3006719761256434e+01 1.9524647308538508e+01 0 0 0 +83 2 3.7436185898904384e-01 7.7254895369175776e+00 2.3519389228185439e+01 2.0129349219977321e+01 0 0 0 +1799 2 4.0180775006962682e-01 1.1810581389420010e+01 1.7033363248374886e+01 1.6621855523625594e+01 0 -1 0 +2496 2 4.0008485730469134e-01 1.1250540164512902e+01 1.6368263642458796e+01 1.8542999428761011e+01 0 0 0 +1083 2 3.4433348874294767e-01 1.1232902323015876e+01 2.5552244869791163e+01 3.0999593987954334e+01 0 0 -1 +2259 2 3.6420374135793915e-01 2.8495310473049784e+01 1.6082096260150365e+01 2.4803330061870188e+01 -1 0 0 +605 2 3.6069102724715812e-01 1.0653259836693101e+01 3.0665436152166350e+01 2.8953516374747096e+01 0 -1 -1 +1798 1 -7.4143336877672139e-01 1.0949162989447700e+01 1.6939559656764274e+01 1.7089535490890931e+01 0 -1 0 +1973 2 3.9184314405503479e-01 1.0849543291546629e+01 1.6068095219841016e+01 2.1029731159266454e+01 0 -1 0 +2682 2 3.5444139370273653e-01 2.2872210746000949e+01 1.5823126078637777e+01 1.9045757247082200e+01 0 0 0 +2177 2 3.7577310362369815e-01 2.7328595985351306e+01 2.7745186194996887e+01 2.7380636598096508e+01 0 -1 0 +1861 1 -7.2948921739616235e-01 1.4647541013196969e+01 1.5893645690038790e+01 1.6279559372752470e+01 0 0 0 +2498 2 3.8097263973112555e-01 1.2938270040404607e+01 1.7100569370949469e+01 1.9757891409716329e+01 0 0 0 +2510 2 3.9891115678219063e-01 1.2767352583765447e+01 2.1753746710905055e+01 2.3420981789955796e+01 0 0 0 +1200 2 3.8872285951965591e-01 1.3469725203925210e+01 2.0688908003932251e+01 2.0114797967351016e+01 0 0 0 +2558 2 3.6746091393743319e-01 1.4197026966545986e+01 1.7970933823901291e+01 2.1890988724450011e+01 0 0 0 +2753 2 3.7812641223402427e-01 1.4503789050574767e+01 1.7016554098710056e+01 2.0007044748354808e+01 0 0 0 +2752 1 -7.5794476806788680e-01 1.3773058971560914e+01 1.7610063743754900e+01 2.0147381432369915e+01 0 0 0 +1198 1 -7.3785542644020652e-01 1.2722945994650141e+01 2.0178892074428340e+01 2.0412494058857920e+01 0 0 0 +2754 2 3.7953874501108459e-01 1.2955585724155942e+01 1.9237787247783668e+01 2.0402977981879534e+01 0 0 0 +2501 2 3.8591245743111002e-01 1.7069179347359253e+01 2.0427873319025792e+01 1.8107261744812714e+01 0 0 0 +2500 1 -7.6572664227792298e-01 1.7451409436569911e+01 2.0796108924863930e+01 1.7384990849850592e+01 0 0 0 +627 2 3.8642862893208907e-01 2.9111656614776731e+01 3.0905618749578579e+01 2.1355596991645790e+01 0 -1 -1 +949 1 -7.3787771051202400e-01 1.6477607738654012e+01 1.9366811648631813e+01 1.9731657372562406e+01 0 0 -1 +950 2 3.3931122396063440e-01 1.5985927502409446e+01 1.8563515801563192e+01 2.0012871080420258e+01 0 0 -1 +951 2 3.3522345570974904e-01 1.6399763962324545e+01 1.9974858343661673e+01 2.0488216687038562e+01 0 0 -1 +2502 2 3.2300893204683401e-01 1.7701586389495752e+01 1.9978779271362470e+01 1.6797287143588839e+01 0 0 0 +2856 2 3.6286740285890251e-01 1.9088413504040428e+01 2.1422083807728644e+01 1.7331561596723645e+01 0 0 0 +1896 2 3.3866811829528354e-01 1.8154982291173472e+01 2.2262265937145784e+01 1.8813822681117955e+01 0 -1 0 +1894 1 -7.3085053977240566e-01 1.8742250855955579e+01 2.2242430132658562e+01 1.9587550246900438e+01 0 -1 0 +1153 1 -7.0909725109401156e-01 1.4568212577030154e+01 2.1758084676468798e+01 1.9084218084358760e+01 0 0 0 +1155 2 3.9048148196889804e-01 1.4683212818975365e+01 2.2584919729163854e+01 1.8463305709392731e+01 0 0 0 +1594 1 -7.5416754141135045e-01 1.3083912575970864e+01 2.1704003403232615e+01 1.5708244538227005e+01 0 0 0 +1813 1 -6.9441977609673300e-01 6.3039324182827920e+00 3.0821799880495821e+01 2.1189606677534080e+01 0 -1 0 +2849 2 3.5480349581328491e-01 1.8129051651410556e+01 1.8705079174557753e+01 2.0228902761443340e+01 0 0 0 +1863 2 3.6854576007161327e-01 1.5172666627302098e+01 1.6095702708726595e+01 1.7029458334273805e+01 0 0 0 +2746 1 -7.3273328749835243e-01 1.6093205557140369e+01 1.6337803951705954e+01 1.9134412030967425e+01 0 0 0 +2670 2 3.7884885366866627e-01 1.6904941489106388e+01 3.1017946547072516e+01 1.8351426234861631e+01 0 0 0 +2747 2 3.7526896474913241e-01 1.6632130676703571e+01 1.6039388323818944e+01 1.8415729258210146e+01 0 0 0 +1386 2 3.8475593535460384e-01 2.7164340055959478e+01 3.0099801116608390e+01 1.7095499208172395e+01 0 0 0 +653 2 3.7600427557950300e-01 1.8429978363641840e+01 1.6393214087114725e+01 2.0536708163206043e+01 0 0 0 +926 2 3.3585894276326667e-01 1.1333087962713002e+01 3.0477256321291371e+01 2.4285673591173943e+01 0 0 0 +2965 1 -7.2583966210207052e-01 1.2864962032239149e+00 1.6632632849149697e+01 3.0381041687091447e+01 1 0 0 +2559 2 3.4260462364336525e-01 1.4848326918990606e+01 1.8875073679901682e+01 2.2968734193161435e+01 0 0 0 +2557 1 -7.0605139533455008e-01 1.4331764527916098e+01 1.8058309776495935e+01 2.2872018353667798e+01 0 0 0 +568 1 -7.1732389025140930e-01 1.8578047794583581e+00 2.1535792668020783e+01 1.6028395496735452e+01 1 -1 0 +2748 2 3.8168868936078065e-01 1.6471888994325148e+01 1.6105801488731093e+01 1.9974337730133673e+01 0 0 0 +2193 2 3.7234436478270250e-01 2.7998844550166559e+01 2.6328675841197466e+01 2.6367469356902838e+01 0 -1 0 +2855 2 3.6194534394557654e-01 2.0033965557468058e+01 2.1858791951418684e+01 1.6125877121497311e+01 0 0 0 +1148 2 3.4354261902983407e-01 2.5158469268152945e+01 1.6053290568144252e+01 2.3155099627088500e+01 0 0 -1 +2835 2 3.3871436051537818e-01 2.1391769693115197e+01 1.6752990314935037e+01 1.6522425972689309e+01 0 0 0 +2854 1 -7.6148130321416307e-01 2.0042981091993074e+01 2.1579410100574112e+01 1.7093249739522637e+01 0 0 0 +1895 2 3.3633802886671432e-01 1.9645176520042821e+01 2.2097828586501326e+01 1.9152440208691370e+01 0 -1 0 +1811 2 3.5609428898676954e-01 1.8707827025288051e+01 1.6952055951109241e+01 2.3651863342904992e+01 0 -1 0 +701 2 3.9222358501290394e-01 2.3503612900094463e+01 2.0341372940500914e+01 1.7687642841542818e+01 0 0 0 +702 2 3.7651346292397025e-01 2.4993255123712686e+01 2.0385384067740553e+01 1.7991898240006243e+01 0 0 0 +1199 2 3.6152846434730673e-01 2.1925673007890705e+01 2.2668013759151197e+01 1.7366330540124970e+01 0 0 0 +2922 2 3.6359369647919776e-01 2.3361693486816201e+01 1.7936969153801638e+01 1.5680260362233357e+01 0 0 0 +1951 1 -7.9328339981929941e-01 2.0314945917663909e+01 1.7053498194643307e+01 1.8136306919551057e+01 0 0 0 +1953 2 4.0646187120711424e-01 1.9964678378818739e+01 1.7591120829025456e+01 1.8830486704836559e+01 0 0 0 +1471 1 -7.0560238583825863e-01 2.1591710370264284e+01 1.9400709504333953e+01 1.7575382984451089e+01 0 0 0 +1473 2 3.6358229425505018e-01 2.0895794207685931e+01 2.0046956148602124e+01 1.7377298397087262e+01 0 0 0 +1472 2 3.5797336917149358e-01 2.1135558773815383e+01 1.8509993956440493e+01 1.7515866130752990e+01 0 0 0 +2848 1 -7.4639765540348535e-01 1.8884359102375498e+01 1.8088210388615583e+01 2.0089347304986042e+01 0 0 0 +2823 2 3.3361870878766836e-01 1.9594100684430078e+01 1.8350188943716372e+01 2.0815798117173369e+01 0 0 0 +729 2 3.7204357853523695e-01 2.5116144885662930e+01 1.7388683086282882e+01 1.8512589751641979e+01 0 0 0 +727 1 -7.5798923778031790e-01 2.4500483041448923e+01 1.6633913849547586e+01 1.8522427042114860e+01 0 0 0 +700 1 -7.2428328091107230e-01 2.4173472907905484e+01 2.0978036113664331e+01 1.7857787913545049e+01 0 0 0 +1598 2 3.5615949548720716e-01 2.4266877405299546e+01 2.1718804381820732e+01 1.9993608189643279e+01 -1 -1 0 +1597 1 -6.8879075016082236e-01 2.4547053504657136e+01 2.1460191437475498e+01 2.0842654794992228e+01 -1 -1 0 +2895 2 3.4721873723606850e-01 2.3611735806262967e+01 1.7418190978508740e+01 2.0520242610221505e+01 0 1 0 +728 2 3.2560686269065575e-01 2.4729109153127549e+01 1.6294300081678781e+01 1.7621847646784289e+01 0 0 0 +812 2 3.6544233381893815e-01 3.0350325135098089e+01 2.9852854799496011e+01 1.8855060403428610e+01 -1 0 0 +1262 2 3.9280028734695327e-01 2.3320715372853154e+01 2.2594933660546744e+01 1.8002306692272668e+01 0 0 0 +2893 1 -6.7043759366381761e-01 2.3372327680289807e+01 1.7931492806898280e+01 2.1317027953159300e+01 0 1 0 +687 2 3.8011281492684679e-01 2.2063828530596499e+01 3.0140444948093727e+01 1.8154991056672642e+01 0 -1 0 +1261 1 -7.8027245716304938e-01 2.2625684936239633e+01 2.3207155910459772e+01 1.7695133159849458e+01 0 0 0 +1599 2 3.4109075232904440e-01 2.5005131269365876e+01 2.2272712024131749e+01 2.1123917212844873e+01 -1 -1 0 +2894 2 3.8818749381521300e-01 2.2400140867531587e+01 1.8072813606607230e+01 2.1214357055362939e+01 0 1 0 +2920 1 -7.4414679730307309e-01 2.4285015990036879e+01 1.8212687527780602e+01 1.5899101547282720e+01 0 0 0 +1300 1 -7.4822613276536010e-01 2.0800383473570825e+01 1.8465849784410672e+01 2.2204085512601551e+01 0 0 0 +1302 2 3.5738914623477813e-01 2.0487439209381307e+01 1.9408482096827495e+01 2.2244477767286060e+01 0 0 0 +1149 2 4.0392969453323502e-01 2.3972783245823674e+01 1.7019307704670378e+01 2.2751918520546074e+01 0 0 -1 +1916 2 3.3613964528713897e-01 1.8997302249916039e+01 2.0878099496222401e+01 2.1543113259621361e+01 0 0 0 +1915 1 -7.6926925654261991e-01 1.9342540467916194e+01 2.0868884698068083e+01 2.2407952677753215e+01 0 0 0 +1964 2 4.0187800998034429e-01 1.9927315977925936e+01 2.1596354965791296e+01 2.2454076308555667e+01 0 0 0 +1909 1 -7.2852885325819183e-01 2.1619076440640026e+01 2.2641295424567502e+01 2.2370432722815025e+01 0 -1 0 +1923 2 3.3898145705281468e-01 2.2544854891054413e+01 2.2316554998686897e+01 2.2403423703457392e+01 0 -1 0 +2939 2 3.8223651968555239e-01 1.8668189867310097e+01 1.6390840966832787e+01 1.7277087787602792e+01 0 0 0 +2484 2 3.7307712781596902e-01 7.6359864421142936e+00 3.0975696403139899e+01 2.5643613489742151e+01 0 0 0 +1652 2 3.5794883155325735e-01 5.0427297969356157e+00 3.0832567574938459e+01 2.2775451059533083e+01 0 -1 0 +2174 2 3.8363043313262279e-01 2.6110317662816119e+01 2.0443548485530055e+01 2.1075769124118832e+01 0 -1 0 +1391 2 3.7290317354576341e-01 2.7111382834942216e+01 2.1894183992540228e+01 1.6151440859766556e+01 0 0 0 +2358 2 3.8008604609966268e-01 9.3263411365665654e+00 1.5948262579326640e+01 1.5980403394054617e+01 0 0 0 +2833 1 -7.7680805794190866e-01 2.1889033295979491e+01 1.6742009812923342e+01 1.5635214724251041e+01 0 0 0 +2552 2 3.4690752209002046e-01 3.0224935614711704e+01 1.8289187070138855e+01 2.0077458156807612e+01 -1 0 0 +2551 1 -6.9442600053127224e-01 2.9902739622371950e+01 1.7510894175084186e+01 2.0595281762567023e+01 -1 0 0 +2671 1 -7.8981279469468568e-01 2.7038448668057629e+01 1.6109327801297642e+01 2.1980652823958877e+01 0 0 0 +2553 2 3.4054194871104354e-01 2.9932848115363079e+01 1.7888113838751423e+01 2.1503092451354249e+01 -1 0 0 +2673 2 3.5462103090337649e-01 2.7642869727354125e+01 1.6345687751129560e+01 2.1314664342917510e+01 0 0 0 +1339 1 -7.1505846326089539e-01 3.0264441714750088e+01 2.0001447498995709e+01 1.8559038714274156e+01 0 0 -1 +1340 2 3.8626202073150107e-01 3.0830832560579825e+01 2.0507250999418257e+01 1.8012385725203700e+01 0 0 -1 +1341 2 3.6031343875946437e-01 3.0053357011462392e+01 2.0572482492739759e+01 1.9371104911776399e+01 0 0 -1 +133 1 -7.3076751616149360e-01 2.8186702082558806e+01 2.0605350989896191e+01 1.6998728028641448e+01 -1 0 0 +2288 2 3.6741410489919724e-01 2.8499639413149080e+01 1.9791474184393412e+01 1.6047710584435372e+01 -1 0 0 +88 1 -7.3974407319908686e-01 3.0642275184573499e+01 2.2444786654927732e+01 1.7303369220099167e+01 -1 0 0 +2147 2 3.7038335781937110e-01 2.7025335670146816e+01 1.9672959580777288e+01 1.7723089611091176e+01 0 0 0 +2148 2 3.7651016205666127e-01 2.6496805034932265e+01 1.9443354706358477e+01 1.9246338887601325e+01 0 0 0 +2146 1 -7.2104093540569658e-01 2.6280388468820234e+01 1.9237152426356072e+01 1.8293702857600966e+01 0 0 0 +654 2 3.4769438023806692e-01 1.7623658204021812e+01 1.5643832632787415e+01 2.1610894594067368e+01 0 0 0 +1877 2 3.2112080310880986e-01 1.3870985175542049e+01 2.9875449119889161e+01 1.5792307590707940e+01 0 -1 0 +651 2 3.9286800400053029e-01 2.9192664370322753e+01 1.7711724994172208e+01 1.5802045269930654e+01 0 0 0 +134 2 3.9047567034986069e-01 2.9008881684968355e+01 2.0503523319701635e+01 1.7547946173593918e+01 -1 0 0 +2275 1 -6.4774583495306726e-01 2.9360709086511637e+01 1.6935661418682951e+01 1.6403866516251814e+01 -1 0 0 +2173 1 -7.3404361623082071e-01 2.6633380646204319e+01 1.9635410283715427e+01 2.1140455287178625e+01 0 -1 0 +89 2 3.8746167291159628e-01 2.9827072030322309e+01 2.2528212416225113e+01 1.6740639784501301e+01 -1 0 0 +1392 2 3.7102612806233226e-01 2.8390741155099267e+01 2.0538409814570340e+01 2.1339382996650819e+01 0 0 0 +1974 2 3.9124312565084696e-01 1.1007641386595305e+01 1.5652532773548923e+01 2.2598675846856850e+01 0 -1 0 +1766 2 4.1012433962073519e-01 1.2093625146649675e+01 1.5616728719308202e+01 2.4139661025106957e+01 0 0 0 +1390 1 -7.4075990346411791e-01 2.8955462743157913e+01 2.1197977826611819e+01 2.0980214939671992e+01 0 0 0 +14 2 3.3216402906072906e-01 3.0807338651004379e+01 2.0010596347711214e+01 2.3173548166399449e+01 -1 0 -1 +13 1 -7.1823393407369551e-01 3.0181623694281640e+01 1.9196841376224548e+01 2.3232789797521033e+01 -1 0 -1 +15 2 3.6643141516383010e-01 3.0824115746408197e+01 1.8564929535970997e+01 2.3620467024305327e+01 -1 0 -1 +2946 2 3.5464067049253556e-01 2.8347711815742397e+01 2.1955609811562447e+01 2.0786727957214900e+01 0 0 0 +609 2 3.3726211282363161e-01 2.6722126209328781e+01 2.1864245394913599e+01 1.8227963199264458e+01 0 0 0 +2114 2 3.6294635940713710e-01 3.0569382111652988e+01 2.2092167602819217e+01 2.1384765432168759e+01 0 -1 0 +2175 2 3.6956857299387247e-01 2.6775328288934990e+01 1.9391414265406720e+01 2.2070995898872191e+01 0 -1 0 +2277 2 3.4130372475137410e-01 2.8461490696868786e+01 1.6572290727888070e+01 1.6616339409653147e+01 -1 0 0 +607 1 -6.7870281831109713e-01 2.6848217984759554e+01 2.2629066216455989e+01 1.8799515229904490e+01 0 0 0 +1742 2 3.7733924902200827e-01 6.2124954020967262e+00 1.7260377098056626e+01 1.5550962438447414e+01 0 0 0 +1330 1 -7.8496253413332018e-01 2.3270089834049863e+01 2.6534928251474859e+01 2.4065661470658988e+01 0 0 -1 +887 2 3.6946757095486138e-01 2.0040782937944233e+00 3.0061591848212984e+01 1.8686775775007728e+01 0 0 0 +737 2 3.7155224071670767e-01 3.5949238954512595e+00 2.9850888051310818e+01 1.7110461504270695e+01 1 0 0 +835 1 -7.3994905485209217e-01 1.9001215466248231e+00 3.0243246749550234e+01 2.2811929013447735e+01 0 0 0 +1482 2 3.2537375859813600e-01 1.9086213375222647e+00 2.4433742767312904e+01 1.6078242920839681e+01 1 0 0 +2379 2 3.8172034119539050e-01 1.1872760584299091e+00 2.8351728036452197e+01 1.6573683527548113e+01 0 0 0 +1658 2 3.7598090017212937e-01 4.3362350139691737e+00 2.3622345476035559e+01 1.8845548092946810e+01 0 0 0 +1448 2 3.9598335182587041e-01 2.8956507372101109e-01 2.4211592747288478e+01 2.1898365888876480e+01 1 0 0 +1816 1 -7.4039505542705264e-01 4.4548197327358166e+00 2.9048771957014083e+01 2.0364574050961149e+01 0 -1 0 +1608 2 3.8415672467719181e-01 3.4094829216785132e+00 2.4810241251644356e+01 2.3214769057767086e+01 0 -1 0 +1480 1 -7.4321766030088710e-01 1.3151549441660131e+00 2.4699572551697230e+01 1.6845119956996410e+01 1 0 0 +1657 1 -7.5391051177746882e-01 4.6406861138286324e+00 2.4411640466564599e+01 1.9369193193625961e+01 0 0 0 +1607 2 3.4950019252893449e-01 3.9391172258977307e+00 2.4668809266498091e+01 2.1762309228807219e+01 0 -1 0 +168 2 3.9778111545845751e-01 4.8475093205966653e+00 2.6357860575154756e+01 2.2702131321288228e+01 0 -1 0 +890 2 3.6811701282287895e-01 6.2511905814711950e+00 2.6600886977625279e+01 1.9000587336021255e+01 0 0 0 +2218 1 -7.7505098638268577e-01 1.6972191076454666e+00 2.7678944955362095e+01 2.0391031360233221e+01 1 -1 0 +2220 2 3.2792785896845461e-01 1.0077534081334456e+00 2.6993360710017047e+01 2.0440971238793225e+01 1 -1 0 +1659 2 3.8144052861295125e-01 4.0897156698269264e+00 2.5182641988673712e+01 1.9084729215070265e+01 0 0 0 +891 2 3.5274381077766698e-01 6.2083068484585358e+00 2.5461600949760292e+01 2.0013337957564250e+01 0 0 0 +889 1 -7.6685202371536598e-01 6.4538906183109939e+00 2.6406976884223820e+01 1.9888325559538149e+01 0 0 0 +2389 1 -7.4567975904915462e-01 2.9232523437030604e+00 2.6152195051468794e+01 1.8331498017525611e+01 0 0 0 +2391 2 3.9326254808262040e-01 2.3780527706042967e+00 2.5518835027557358e+01 1.7847227822781967e+01 0 0 0 +2219 2 3.5504751925497596e-01 1.9382781297843090e+00 2.7899885033152866e+01 2.1228752311420461e+01 1 -1 0 +2390 2 3.5492559747849900e-01 2.3951946751869384e+00 2.6463788627000607e+01 1.9098362572217635e+01 0 0 0 +1606 1 -7.8273983031529759e-01 3.5379376735739876e+00 2.5287692988003748e+01 2.2404395229677025e+01 0 -1 0 +824 2 3.5757835209464606e-01 1.6778081964300646e+00 2.8544713183763236e+01 1.8504583158296640e+01 0 0 0 +1447 1 -7.8084231982991281e-01 4.1723176459940631e-01 2.5098881068255277e+01 2.2252886266331245e+01 1 0 0 +886 1 -7.4338410648607733e-01 1.9580275389767821e+00 2.9338943355103435e+01 1.8031630550089133e+01 0 0 0 +1449 2 3.4068386353378610e-01 1.3526734389341162e+00 2.5260052242748490e+01 2.2189683785804149e+01 1 0 0 +1817 2 3.3863263823282508e-01 4.7495420765212675e+00 2.8245071703044033e+01 2.0815730761767309e+01 0 -1 0 +1818 2 3.6230976516486735e-01 3.6050574599956482e+00 2.8796585338422496e+01 2.0080230250081200e+01 0 -1 0 +836 2 3.7944051003969576e-01 1.8343953575126255e+00 2.9269659788844582e+01 2.2711957199106845e+01 0 0 0 +1619 2 3.0865492332967515e-01 5.2531346251025601e+00 2.5839475428431044e+01 1.7155063367279972e+01 0 -1 0 +1553 2 3.3759533236758055e-01 2.3331642385303124e+00 2.6798799991892459e+01 2.3233869925364218e+01 0 -1 0 +2888 2 3.7221098412170578e-01 2.1736036678608901e+00 3.0554994531806472e+01 3.0547439384624489e+01 1 0 0 +1618 1 -7.2150748307404122e-01 6.0675544812496733e+00 2.6343445561732437e+01 1.6914227835244521e+01 0 -1 0 +166 1 -7.7798256713464498e-01 5.4730584070999084e+00 2.7036778709998938e+01 2.2512398414187615e+01 0 -1 0 +1481 2 3.6273777416015407e-01 7.8842479601488002e-01 2.5379055134433440e+01 1.6393740924115864e+01 1 0 0 +1622 2 3.7958629953034284e-01 3.0355259666111596e+01 2.8912811005557533e+01 2.8734220869269837e+01 -1 -1 0 +2658 2 3.3046556022745233e-01 1.2616239059600234e+01 2.3718554088655857e+01 1.6156384330192726e+01 0 0 0 +2967 2 3.9694405617735240e-01 7.8619980381494770e-01 1.5852233150811893e+01 3.0191631415087002e+01 1 0 0 +1536 2 2.9020479076616773e-01 1.2721807801685799e+01 3.0544256463690271e+01 2.7995926123662766e+01 0 -1 0 +1521 2 3.8855343951159921e-01 2.9008050743040521e+01 2.4575896530061790e+01 2.9455934354360195e+01 -1 -1 0 +1581 2 3.4044964783745879e-01 6.6704753023468610e+00 2.2146446156744457e+01 1.7720354237761928e+01 0 0 0 +1579 1 -7.3079233402842936e-01 6.8473799725083850e+00 2.2032389149695376e+01 1.6775499150127768e+01 0 0 0 +1710 2 3.3164288297072542e-01 6.3442717039164833e+00 2.9399264140279374e+01 1.7809259870664633e+01 0 -1 0 +1186 1 -7.1762498153613963e-01 1.2061130362862064e+01 2.7710725555119232e+01 1.6303129930368414e+01 0 0 0 +2543 2 3.9132667210679384e-01 8.0328620678882103e+00 2.7360249799475074e+01 2.0200877092041747e+01 0 0 0 +2542 1 -7.4335551537365108e-01 8.8588566111759999e+00 2.7839565103082613e+01 2.0158454636607239e+01 0 0 0 +1580 2 3.6660103810031852e-01 7.7822935418275607e+00 2.2187181491108323e+01 1.6653747143274629e+01 0 0 0 +905 2 3.8125581257206370e-01 9.9809440180732878e+00 2.5058303935333765e+01 1.8708120984336677e+01 0 0 0 +904 1 -6.6718807913192824e-01 9.7640093485817729e+00 2.5881439346480942e+01 1.8157436649501598e+01 0 0 0 +2028 2 3.7288708414509059e-01 1.1465150032820725e+01 2.2959931806776911e+01 2.2204695762379774e+01 0 -1 0 +189 2 3.6496297873456091e-01 9.5150793476160480e+00 2.6576982078446441e+01 1.8746133122372619e+01 0 0 0 +1683 2 3.3609316699776010e-01 9.5418941214948010e+00 2.4143828787022262e+01 2.1454915643622822e+01 0 0 0 +2544 2 3.5925502517564772e-01 8.7192940972858128e+00 2.8455501814449036e+01 1.9433901210997096e+01 0 0 0 +2026 1 -7.6000936424524745e-01 1.1481342449937031e+01 2.4001709511526855e+01 2.1916569286833848e+01 0 -1 0 +167 2 3.5939831747318335e-01 5.8399563755352411e+00 2.6838134911364133e+01 2.1648050653970635e+01 0 -1 0 +2387 2 3.7171811309155250e-01 2.7904319420004885e+01 2.8455017550611686e+01 3.0357763291847803e+01 -1 0 0 +99 2 3.6473960429000868e-01 1.0731596183910357e+01 2.2867900148968648e+01 1.9092941586161427e+01 0 -1 0 +2700 2 3.7199849930061141e-01 2.0852448107235148e+01 1.7054906030418309e+01 3.0575464308630306e+01 0 0 0 +97 1 -7.5071721085194021e-01 1.1049890349600167e+01 2.3840135524714370e+01 1.9254247088408178e+01 0 -1 0 +800 2 3.5710118669031121e-01 2.4035493305068787e+01 3.0830422818147284e+01 2.5625406350025436e+01 -1 0 -1 +98 2 3.9763138146762189e-01 1.1341014006311463e+01 2.3953077489078169e+01 2.0157369867347231e+01 0 -1 0 +1682 2 3.5912858910436246e-01 8.3063524807804434e+00 2.3893927687367249e+01 2.2415732600795270e+01 0 0 0 +1746 2 4.0922736998545300e-01 1.0218875115844151e+01 2.7265474418666845e+01 2.1122927422688214e+01 0 -1 0 +1681 1 -7.1194996980377623e-01 8.5989116638959242e+00 2.4407703998472464e+01 2.1619795482451607e+01 0 0 0 +1745 2 3.7183887959671857e-01 1.0709595644695415e+01 2.5864885948545112e+01 2.1638167364185758e+01 0 -1 0 +1744 1 -7.3448628392948379e-01 1.0884850457999093e+01 2.6795137266220760e+01 2.1657055121225177e+01 0 -1 0 +2656 1 -7.3595319421670635e-01 1.2278339467500622e+01 2.4569208954327447e+01 1.6485816072697872e+01 0 0 0 +2657 2 3.4676392257192501e-01 1.1761127253799433e+01 2.4296052154892031e+01 1.7274728627990154e+01 0 0 0 +1708 1 -7.2804739697530674e-01 7.2541583481233065e+00 2.9027374704991516e+01 1.7779498249360810e+01 0 -1 0 +1769 2 3.6420768175652235e-01 1.0065218192421860e+01 2.4199319642198414e+01 2.4657457497983135e+01 0 0 0 +1814 2 3.4098094159333331e-01 6.6857723747746620e+00 2.9926880883147600e+01 2.1470524305880222e+01 0 -1 0 +1704 2 3.4684011316705121e-01 7.0846777559195795e+00 2.8056444158164609e+01 1.7623210577804553e+01 0 -1 0 +1026 2 3.8781539415751987e-01 1.0532268753529356e+01 2.7258597941924911e+01 2.3254135035277464e+01 0 0 0 +1815 2 3.6556475865578497e-01 5.4602084228133503e+00 3.0496894748905664e+01 2.0791504545758951e+01 0 -1 0 +1532 2 4.1676796539526711e-01 2.6985021244925864e+00 3.0332255359412574e+01 2.3328311399892229e+01 0 -1 0 +941 2 3.3011655614087365e-01 1.0235075396833105e+01 2.3914868421003952e+01 1.6431859224198476e+01 0 0 0 +1960 1 -7.4577671936548362e-01 1.0672557369495419e+01 2.2202495197016393e+01 3.0797234871241518e+01 0 0 0 +1187 2 3.5475340768696395e-01 1.2074232581338990e+01 2.6801524266253413e+01 1.6557468728805507e+01 0 0 0 +1263 2 3.6177104414988503e-01 6.8798332669191469e+00 2.8866167446549504e+01 1.6015683362064738e+01 0 0 0 +1025 2 3.4740510085813531e-01 1.3831000128405167e+01 2.9956041032301236e+01 2.0265276112271710e+01 0 0 0 +1887 2 3.4401208015117996e-01 1.3693521295342007e+01 2.9883365004670086e+01 1.8803328339921094e+01 0 -1 0 +1024 1 -7.4732187151657015e-01 1.4087397191898239e+01 2.9404061588278498e+01 1.9492453858151610e+01 0 0 0 +530 2 3.7072902686858572e-01 1.8333980877958460e+01 2.8495650933719439e+01 2.1013438094557412e+01 0 -1 0 +2668 1 -7.2586779053953332e-01 1.6468616660246916e+01 3.0200576834508450e+01 1.8107458376186266e+01 0 0 0 +1154 2 3.4661338446117257e-01 1.5147437638589933e+01 2.1087505274478012e+01 1.8824016883184473e+01 0 0 0 +2027 2 3.6997504158884464e-01 1.2396017155534320e+01 2.4352657259825314e+01 2.2151001049086265e+01 0 -1 0 +1140 2 3.4746339177485541e-01 1.3293086927379797e+01 2.8899256805032657e+01 2.1625048514514795e+01 0 0 -1 +964 1 -7.4458835564014869e-01 1.4019783567999925e+01 2.4794847815034593e+01 2.1473518938176689e+01 0 0 -1 +1625 2 3.4774047102489730e-01 1.5675859432699948e+01 2.4603413527062351e+01 1.8148153647608549e+01 0 -1 0 +2620 1 -7.0699379411909236e-01 1.4511457350057446e+01 2.6632506733136950e+01 1.9393603708328243e+01 0 0 0 +2622 2 4.0309427424184130e-01 1.4177434274016157e+01 2.7522401107493817e+01 1.9327041279340989e+01 0 0 0 +965 2 3.7670942870363838e-01 1.4795561586879975e+01 2.4239948137266012e+01 2.1598707770989751e+01 0 0 -1 +966 2 4.0283551317030708e-01 1.4130893948778615e+01 2.5315683513789242e+01 2.0618639203639322e+01 0 0 -1 +2621 2 3.7009770339032583e-01 1.5534641821589435e+01 2.6597926923867742e+01 1.9152049738736999e+01 0 0 0 +546 2 3.9382516461967920e-01 1.7478807026721604e+01 2.5575790465036320e+01 1.9552121382113413e+01 0 0 0 +1109 2 3.9603631716475218e-01 1.7587893381911218e+01 2.7037447379780758e+01 1.8842235312372665e+01 0 0 0 +544 1 -7.5072975927881780e-01 1.7106796996545597e+01 2.6158125046985724e+01 1.8868433779044160e+01 0 0 0 +2521 1 -7.4647176537913629e-01 1.6428268017121251e+01 2.3429442241142524e+01 2.2041669613978961e+01 0 0 0 +529 1 -7.0375099083884907e-01 1.8131769227280607e+01 2.8795775098271839e+01 2.1924862280486551e+01 0 -1 0 +531 2 3.5122400712037394e-01 1.8980691893033367e+01 2.9179868653899451e+01 2.2242680310203820e+01 0 -1 0 +2570 2 3.6124228882708764e-01 1.6866886169502983e+01 2.3823010403779197e+01 1.6164612093841882e+01 0 0 0 +2021 2 3.5382380688622811e-01 8.1392963818983528e+00 2.9579488267733431e+01 3.0253733617405214e+01 0 -1 0 +2523 2 3.6929354710445378e-01 1.7232548888680952e+01 2.3622220153421953e+01 2.1593006085617734e+01 0 0 0 +1256 2 3.8051453201239649e-01 1.9030161814415106e+01 2.8274253626770872e+01 1.8113350609912985e+01 0 0 0 +1454 2 3.5206106808239324e-01 1.7664833885406878e+01 2.9013449343858760e+01 1.8533401541384283e+01 0 0 0 +1255 1 -7.5347409426897416e-01 1.8438052720492330e+01 2.8456261883209745e+01 1.8922797934676712e+01 0 0 0 +2083 1 -7.0262180250070194e-01 1.8718730438484116e+01 2.4754632237447048e+01 2.0588384405181767e+01 0 -1 0 +1624 1 -7.3956337810603157e-01 1.5475438283386362e+01 2.3771735795258046e+01 1.7641629969102098e+01 0 -1 0 +1138 1 -7.6146681499474245e-01 1.3501118733959119e+01 2.9300473626089911e+01 2.2448873836361070e+01 0 0 -1 +2474 2 3.5290603632116113e-01 1.2611528613337823e+01 2.9176722611242191e+01 2.2934708093577072e+01 0 0 0 +1626 2 3.2229356468678999e-01 1.4641124069320480e+01 2.3957978604511425e+01 1.7192156142550395e+01 0 -1 0 +2669 2 3.4717046986472083e-01 1.5952070580594635e+01 2.9875827566246453e+01 1.8883612975171534e+01 0 0 0 +1901 2 3.5317885571686453e-01 1.4822065551027405e+01 3.0854677505537257e+01 1.6477916041192977e+01 0 -1 0 +1136 2 4.0767392731456431e-01 2.6442879725683227e+01 1.5660008620575594e+01 2.8388589670819208e+01 0 0 -1 +1176 2 3.9978903776553631e-01 1.6613533320728646e+01 2.8201931388980782e+01 2.2813638686767995e+01 0 0 -1 +1174 1 -7.1174938226555085e-01 1.5872914593859974e+01 2.7707197555882992e+01 2.3184198145441943e+01 0 0 -1 +1286 2 3.4628438558018088e-01 1.3704448050920417e+01 2.4838717995177532e+01 2.3350832111526049e+01 0 0 0 +1175 2 3.8363519506068650e-01 1.5078492004653695e+01 2.8150711279424037e+01 2.2899483423447752e+01 0 0 -1 +1651 1 -7.8285060938598927e-01 4.4194403360896963e+00 3.0887922791398800e+01 2.3466532786569424e+01 0 -1 0 +626 2 3.9621845435720282e-01 2.7847615437997295e+01 3.0501424331885072e+01 2.2180508767960035e+01 0 -1 -1 +1992 2 3.6051410708628318e-01 2.0626178995937018e+01 3.0100602719890823e+01 2.3131218091174588e+01 0 -1 0 +686 2 3.7421055410712623e-01 2.3659852309891750e+01 3.0028143307556778e+01 1.8342547479037314e+01 0 -1 0 +2079 2 3.9583162780992048e-01 1.9723128741721968e+01 2.4988631778753060e+01 2.0407977996557332e+01 0 -1 0 +1932 2 3.4421227945259986e-01 2.1344207544968793e+01 2.7851226360959707e+01 2.1272955535337648e+01 0 -1 0 +2094 2 3.6354366099202706e-01 2.0173786607516888e+01 2.9422326227873164e+01 1.9269407748667831e+01 0 -1 0 +2085 2 3.8122818574191608e-01 1.8605509104893063e+01 2.3830764690561470e+01 2.0277565134432361e+01 0 -1 0 +1930 1 -7.1467213111077366e-01 2.1061847246342328e+01 2.6972145939373167e+01 2.0962496030190213e+01 0 -1 0 +2861 2 3.7137108517621442e-01 2.4010162127788433e+01 2.8885012400371821e+01 2.2101341853608798e+01 0 0 0 +1493 2 3.1921227646168970e-01 2.1941377844299840e+01 2.6041777970915742e+01 1.6078635848747432e+01 0 0 0 +2645 2 3.7965892203550533e-01 2.1310205260161514e+01 2.3565953570186085e+01 2.0756286030596012e+01 0 0 0 +2646 2 3.5161030539515398e-01 2.1820045308662191e+01 2.3535148380306374e+01 1.9184269218590966e+01 0 0 0 +2644 1 -7.1520438057815272e-01 2.1191335657157019e+01 2.3965552173549941e+01 1.9868811349623044e+01 0 0 0 +2000 2 3.1274855451952654e-01 2.2624599183228213e+01 2.6435976023384825e+01 1.7772537425430986e+01 0 -1 0 +2001 2 3.6783470505669036e-01 2.2505073076895595e+01 2.5088515871338409e+01 1.8459579740222669e+01 0 -1 0 +1999 1 -7.3642715313987328e-01 2.2887589255464917e+01 2.5970513611562644e+01 1.8578068888355745e+01 0 -1 0 +1501 1 -6.9287330548869552e-01 2.0836175516565266e+01 2.5384126095132398e+01 2.3299606156038639e+01 -1 -1 0 +1503 2 3.7331495611030308e-01 2.0789067022777637e+01 2.5767747167377664e+01 2.2398845118656855e+01 -1 -1 0 +87 2 3.8326523475718316e-01 2.4548780893894236e+01 2.5925905445403366e+01 1.9298195248266229e+01 -1 0 0 +714 2 3.6404874289258238e-01 2.2611542123142179e+01 2.9062648080099102e+01 1.6401000149738167e+01 0 -1 0 +1494 2 3.6072749688955152e-01 2.1849896753612629e+01 2.4555361021431327e+01 1.6572136572799668e+01 0 0 0 +1492 1 -7.3316391226676914e-01 2.1376452327114844e+01 2.5236755111693732e+01 1.6013729069238671e+01 0 0 0 +712 1 -7.6409342265939650e-01 2.2275477138770068e+01 2.8254020254038011e+01 1.5978890268152776e+01 0 -1 0 +1502 2 3.2750900876334710e-01 2.1854605585089143e+01 2.5496881375028856e+01 2.3527282653141938e+01 -1 -1 0 +1979 2 3.5852533808203746e-01 2.1799106933111819e+01 2.6740398500441689e+01 2.0401528248955636e+01 0 -1 0 +788 2 3.6507823480155110e-01 6.4987601079497761e+00 1.5912072241343145e+01 2.7219369238076688e+01 0 0 -1 +940 1 -7.5993433492151319e-01 9.4971805038864261e+00 2.3359367531046708e+01 1.6091599198667009e+01 0 0 0 +1477 1 -7.1577442377359546e-01 2.3053780979927641e+01 2.8890241959665630e+01 2.2208804037335931e+01 0 0 0 +2092 1 -7.5466715536911633e-01 2.0846215571218774e+01 3.0087135731962384e+01 1.9428012576765440e+01 0 -1 0 +1884 2 3.5873098249391222e-01 2.0613278823251694e+01 2.8033346049140139e+01 1.6555712592891147e+01 0 -1 0 +2093 2 3.5280392882267042e-01 2.1063815814163046e+01 3.0163670223973018e+01 2.0433479183754347e+01 0 -1 0 +2660 2 3.5286436995863907e-01 2.7487043461046728e+01 1.5571799794734668e+01 2.2627831911794022e+01 0 0 0 +1334 2 2.7821251700341615e-01 2.6832516560421453e+01 2.0818061555282569e+01 3.0764535328747993e+01 0 0 -1 +1487 2 3.4957869916832085e-01 2.9561919775415696e+01 3.0500099929317116e+01 1.5755978158247848e+01 0 0 0 +1764 2 3.5788303295335155e-01 1.6073523692620853e+01 2.1330068963384001e+01 1.5693728250753868e+01 0 0 0 +2251 1 -6.5790732008145958e-01 2.7060622111411480e+01 2.3138700873311208e+01 2.2664690476658780e+01 -1 0 0 +1312 1 -7.3031361001199424e-01 2.5070922222013131e+01 3.0006153655259908e+01 1.9220975369543176e+01 0 0 0 +1313 2 3.5012392042868484e-01 2.5663626027006142e+01 2.9716243149321699e+01 1.8394812199552447e+01 0 0 0 +1425 2 3.7723369047906075e-01 2.8704011049145159e+01 2.8681496250141464e+01 1.8905034529406556e+01 0 -1 0 +1423 1 -7.6388720290780832e-01 2.9459068497605028e+01 2.8458150964772159e+01 1.9529336963744697e+01 0 -1 0 +2859 2 3.3898463393995498e-01 2.4412946085468128e+01 2.5266811427507651e+01 2.2706451280232127e+01 0 0 0 +1314 2 3.9911783707008580e-01 2.5230358647721125e+01 2.9296964356321265e+01 1.9878087884485009e+01 0 0 0 +85 1 -7.2176281150996591e-01 2.5501815796869369e+01 2.5912885136275552e+01 1.9550462972877664e+01 -1 0 0 +86 2 3.7828471673898134e-01 2.5977024907606967e+01 2.6044837885169201e+01 1.8729185148217773e+01 -1 0 0 +2857 1 -7.1861125738522080e-01 2.4810140820814162e+01 2.4609540156158999e+01 2.2135171478698584e+01 0 0 0 +2858 2 3.5289203010979869e-01 2.5210821844548992e+01 2.5198328136581399e+01 2.1434880036131528e+01 0 0 0 +2860 1 -7.5285457172525971e-01 2.5601738315333559e+01 2.8319951749867720e+01 2.1315971798595246e+01 0 0 0 +2329 1 -7.1587306170789655e-01 1.2745333444452337e+01 3.0713852883838449e+01 2.8991351654586076e+01 0 0 0 +210 2 3.6226682833164664e-01 1.4143902594545324e+01 1.9423887559536048e+01 3.0612047887587707e+01 0 -1 -1 +2959 1 -7.3013535989558320e-01 3.0237182633524661e+01 2.5890023663243380e+01 1.9740863231399143e+01 0 0 0 +2960 2 3.5622862537414779e-01 3.0299131846153013e+01 2.5693359166793037e+01 2.0688122868310288e+01 0 0 0 +1257 2 3.5933204238177729e-01 2.5657296690931656e+01 2.7455889667437290e+01 2.0917270722460326e+01 0 0 0 +2862 2 3.7250045307840729e-01 2.6255280745453227e+01 2.8288700086652774e+01 2.2064979665634123e+01 0 0 0 +1922 2 3.4362641349359224e-01 2.6976547696003230e+01 2.6801524385294677e+01 1.6077574805213192e+01 0 -1 0 +655 1 -7.3923104617492019e-01 2.8532214575804154e+01 2.4786964313114087e+01 1.7945087656029163e+01 0 0 0 +2961 2 3.8798185001293345e-01 3.0122827747604592e+01 2.6862559208414233e+01 1.9598814034183825e+01 0 0 0 +1239 2 3.4811734015773615e-01 2.9401706320264012e+01 2.5196281784305587e+01 1.6473066862725489e+01 0 0 0 +1980 2 3.5305149377366718e-01 2.5905406120992328e+01 2.5790280102005948e+01 1.6219988346805874e+01 0 -1 0 +2828 2 3.9278023582779725e-01 2.7598890178238655e+01 2.3144953493614747e+01 1.8505526299270542e+01 0 0 0 +1989 2 3.4454112243938917e-01 3.0076554704847812e+01 2.6633317441455134e+01 2.2689203245614717e+01 0 -1 0 +1978 1 -7.6844919196992867e-01 2.6583171425421828e+01 2.6293726405368989e+01 1.6752193747778342e+01 0 -1 0 +2885 2 3.9118904723554615e-01 2.8359710255059280e+01 2.7730344669396558e+01 2.2859672370126003e+01 0 0 0 +656 2 3.9255638374308610e-01 2.9045824561554294e+01 2.5362944038839306e+01 1.8596145177741722e+01 0 0 0 +657 2 3.7129585855316388e-01 2.7893426569355885e+01 2.5397429958062208e+01 1.7541061765761540e+01 0 0 0 +2884 1 -7.3268410251980332e-01 2.7413006812704335e+01 2.7529314741846104e+01 2.3251247739875684e+01 0 0 0 +1948 1 -7.4953320836361537e-01 2.8122726365632381e+01 3.0850868487460112e+01 2.7573055039574019e+01 0 -1 0 +1385 2 3.3269047709986116e-01 2.6842454196208301e+01 2.8600625368696640e+01 1.6957790706377303e+01 0 0 0 +1384 1 -7.1975854813490003e-01 2.7167743036007774e+01 2.9237737336757228e+01 1.7610578135538887e+01 0 0 0 +2253 2 3.8404855165492230e-01 2.6250991974089555e+01 2.3689503084155746e+01 2.2698207350136617e+01 -1 0 0 +1990 1 -7.5799876694940427e-01 2.0310033339867175e+01 3.0558379448676224e+01 2.2290969717053880e+01 0 -1 0 +504 2 3.2915485874146866e-01 2.7263663448182932e+01 3.0494235989220375e+01 2.7481866585701230e+01 0 -1 -1 +2947 1 -7.3195509874969900e-01 2.6441829801977150e+01 2.5826687157912477e+01 2.5428823592552760e+01 0 0 0 +1424 2 3.9331289744865816e-01 2.9214220635044462e+01 2.8921798538790245e+01 2.0328427778120837e+01 0 -1 0 +2886 2 3.7960746802718409e-01 2.7191708866374935e+01 2.8239158756923270e+01 2.3829865930469452e+01 0 0 0 +1237 1 -7.3117183968274879e-01 2.9918237329244480e+01 2.5592796656982234e+01 1.5666137887588182e+01 0 0 0 +1952 2 3.7923751450845622e-01 2.0907546181404513e+01 1.6385037666537183e+01 1.8589971419953056e+01 0 0 0 +2952 2 3.8170399981523723e-01 2.8453831402895418e+01 3.0346460350421467e+01 2.8318315062606668e+01 0 0 0 +2982 2 3.5160848176065723e-01 2.1433520797686438e+00 1.9570177324108638e+01 2.3107669594727223e+01 1 0 0 +738 2 3.3881585883435528e-01 4.3942328605555732e+00 3.0940415646398296e+01 1.7571086406364834e+01 1 0 0 +2527 1 -7.2698607350615241e-01 2.3196844427726404e+00 2.8597361533093011e+01 3.0511378841156507e+01 0 0 0 +2385 2 3.8112394632777896e-01 2.9961022611046481e+01 3.0046928320472791e+01 2.9583730813162237e+01 -1 0 0 +2425 1 -7.1482193954971462e-01 3.3532621097783730e+00 1.9839960179927040e+01 3.0697845470502060e+01 0 0 0 +2044 1 -7.6541947644699238e-01 2.4080883844593615e+00 1.6570250945378213e+01 2.6274366783401948e+01 0 0 0 +2349 2 3.4925697880558282e-01 4.2177899621053410e+00 1.8625834447867678e+01 2.8263978262672715e+01 0 0 0 +1670 2 3.5537701753545869e-01 4.3957175266996851e+00 1.8261981054295262e+01 2.4220414729432971e+01 0 0 0 +2993 2 3.5601728201365512e-01 5.9966209851872598e+00 2.1505486325908254e+01 2.9316820119416924e+01 1 0 0 +2185 1 -7.2026698964259472e-01 5.9251447342090566e+00 2.1302848211743100e+01 3.0255932247279645e+01 1 -1 0 +2427 2 3.7781551298825800e-01 3.2391788583891357e+00 1.9129839771225384e+01 3.0004605488449087e+01 0 0 0 +2186 2 3.8086033796125646e-01 5.1316614119440169e+00 2.0823693620839357e+01 3.0628727699587035e+01 1 -1 0 +662 2 3.7040438123801894e-01 5.6057775253857596e+00 2.1244164183074147e+01 2.7714058504464710e+01 1 0 -1 +1669 1 -7.7973807097322501e-01 3.7105665137867598e+00 1.8465511511109611e+01 2.4917478135107892e+01 0 0 0 +661 1 -7.4345978647853916e-01 5.4534343238070910e+00 2.2178300475985267e+01 2.7535137116941208e+01 1 0 -1 +1671 2 3.7906399431028182e-01 3.6035188306125527e+00 1.9407400904731173e+01 2.5080826225205467e+01 0 0 0 +639 2 3.4775917502865855e-01 5.0086058037080203e+00 2.1304207456058961e+01 2.5805251422869500e+01 1 0 -1 +638 2 3.7575797283131918e-01 4.8161222937691592e+00 2.1373822266418401e+01 2.4186793679858802e+01 1 0 -1 +2609 2 3.6207718172912584e-01 2.5653745886657213e+00 1.7346433081956352e+01 2.5687148876610067e+01 0 0 0 +637 1 -7.5029474511640637e-01 4.3746138153245155e+00 2.1132142902691289e+01 2.5054344794489687e+01 1 0 -1 +1781 2 3.7299382573261469e-01 1.5271124588344611e+00 2.2359489900499078e+01 2.7318293041670938e+01 0 0 0 +1782 2 3.4965800040112033e-01 4.0408778846199250e-01 2.2811477995160018e+01 2.6495021835586197e+01 0 0 0 +1780 1 -6.6727446371460963e-01 7.6765915283417141e-01 2.1982486223802791e+01 2.6826298420496851e+01 0 0 0 +8 2 4.0004543789923119e-01 3.7389007622466433e+00 2.2956485676150958e+01 2.4736635630508982e+01 0 -1 -1 +2373 2 3.4132676429244602e-01 2.2320075841095659e+00 1.7572741224824838e+01 2.3968808897901820e+01 0 0 0 +2347 1 -6.9994644078339785e-01 3.2585968610693312e+00 1.8514001117853020e+01 2.8126629022433701e+01 0 0 0 +663 2 3.8517369262463574e-01 6.2863239824351833e+00 2.2550862664264713e+01 2.7125988994371482e+01 1 0 -1 +2985 2 3.5959307243929090e-01 2.7533647909566361e+00 2.0801544070023564e+01 2.3695961648486293e+01 1 0 0 +2980 1 -7.2435082162749465e-01 1.9530433639087641e+00 2.0497439297340019e+01 2.3255410862279671e+01 1 0 0 +2348 2 3.9242028395195871e-01 3.2298511116835784e+00 1.7896940828707912e+01 2.7452545440331555e+01 0 0 0 +1332 2 3.7557528071718405e-01 2.3335505391886112e+01 2.7170785156078885e+01 2.4806508931105750e+01 0 0 -1 +2970 2 3.6688522164120557e-01 2.1392287851070968e-01 1.6775029319005199e+01 2.8400191754781204e+01 1 0 0 +1164 2 3.7203740054446527e-01 2.3420702508344302e+01 1.5916410685922342e+01 2.7892214141606132e+01 0 0 -1 +877 1 -7.2797792673171768e-01 2.7326507547330130e+00 2.3122953324870057e+01 2.8587166585888376e+01 0 0 -1 +1373 2 3.7454744342175622e-01 3.5294120548527474e+00 2.2758599641007351e+01 2.8177262459028825e+01 1 0 -1 +878 2 3.4533057748804208e-01 2.7299791782970173e+00 2.2789702867485666e+01 2.9454504281095979e+01 0 0 -1 +1855 1 -7.4413045278774148e-01 2.0109463741570114e+01 2.8384278303775087e+01 3.0775028429911707e+01 0 -1 0 +789 2 3.2201335287888250e-01 8.0366521987961370e+00 1.6295480587007585e+01 2.6943826305270736e+01 0 0 -1 +1008 2 3.6199647950362324e-01 1.1433061008357118e+01 2.0584924781475298e+01 2.4739606332638903e+01 0 0 -1 +1007 2 3.3963757848030784e-01 1.1848870115635458e+01 1.9859120995618696e+01 2.6036267103374858e+01 0 0 -1 +2046 2 3.7504334709875575e-01 1.6784148202346003e+00 1.6097212511656824e+01 2.5866521603033110e+01 0 0 0 +1368 2 3.5296855135188632e-01 2.6786486543256075e+01 2.9770869533580811e+01 2.5853573431031720e+01 0 0 -1 +854 2 3.6495895283248919e-01 1.0286963693574066e+01 1.6226732856398215e+01 2.7079333688374668e+01 0 0 -1 +2580 2 3.7666573385358160e-01 8.0818711634162241e+00 1.9557816392836582e+01 3.0249395448745599e+01 0 0 0 +2984 2 3.4942380265166256e-01 7.3056665123708395e+00 2.4380438677743957e+01 2.9776738135504704e+01 1 0 0 +787 1 -7.1655311593151649e-01 7.1150450095111992e+00 1.6645050808161916e+01 2.6734791315587966e+01 0 0 -1 +2372 2 3.2708739682564875e-01 5.0403624953012516e+00 1.9460215584045418e+01 2.6762566269908149e+01 0 0 0 +2933 2 3.6884964838213624e-01 6.2588127909998352e+00 1.8712568461369344e+01 2.7358088496745232e+01 1 0 0 +2371 1 -7.6084226326464821e-01 5.7205299563339622e+00 1.9502373901037121e+01 2.7485782073226098e+01 0 0 0 +2579 2 3.7101854074803220e-01 7.3931112197157898e+00 1.9412394060699523e+01 2.8883205652423072e+01 0 0 0 +816 2 3.6774779926751000e-01 9.4885281301581639e+00 2.0502346966278203e+01 2.6628657758632169e+01 0 0 -1 +814 1 -7.4049522540214852e-01 8.9900266550976813e+00 2.0373456443070861e+01 2.7417177277438903e+01 0 0 -1 +1006 1 -7.4730406840951236e-01 1.1097194937958344e+01 2.0016171171720160e+01 2.5430917037415238e+01 0 0 -1 +815 2 3.5102478765766632e-01 9.6899271298978391e+00 2.0409386983556040e+01 2.8102725733044746e+01 0 0 -1 +929 2 3.5755448360355291e-01 1.2546024301591041e+01 2.0845001726412651e+01 2.8344045518432125e+01 0 0 -1 +2517 2 3.6053355160253997e-01 8.4146087133532834e+00 1.8066566043726258e+01 2.5923904072527709e+01 0 0 0 +2516 2 3.4208952252192504e-01 9.2010884982553840e+00 1.9021930393649431e+01 2.5203628674164495e+01 0 0 0 +2515 1 -6.8006417961155186e-01 8.3528672536724606e+00 1.8612341393371388e+01 2.5136481650863537e+01 0 0 0 +928 1 -7.4850589529028377e-01 1.1671665128308016e+01 2.0545031197013902e+01 2.8559542782304217e+01 0 0 -1 +930 2 3.5951898378706293e-01 1.1589631713643650e+01 2.0699238047084538e+01 2.9503360926302939e+01 0 0 -1 +411 2 3.6526854477137383e-01 1.0645338564008624e+01 1.8898674590499819e+01 2.8282499080327316e+01 0 -1 -1 +409 1 -7.3779704757276465e-01 1.0766834302382104e+01 1.7944319338377518e+01 2.8103255051933751e+01 0 -1 -1 +270 2 4.0932337550909392e-01 8.1287106356269145e+00 2.3450734020607989e+01 2.7686443730116949e+01 0 0 -1 +268 1 -7.6334650286139838e-01 7.9717188740338152e+00 2.2791802523291700e+01 2.6972408292185314e+01 0 0 -1 +269 2 3.8850743812907546e-01 8.3507946121563723e+00 2.1871436925633514e+01 2.7166011096979176e+01 0 0 -1 +10 1 -7.4144922682737113e-01 1.2652418375462048e+01 2.3822356309873324e+01 2.9498822671200010e+01 0 -1 -1 +2578 1 -6.8685119850518728e-01 7.7546564097184811e+00 1.8883074033833029e+01 2.9632613543449569e+01 0 0 0 +277 1 -7.4706014041644864e-01 6.3301207185237756e+00 1.5872939889636022e+01 2.4321732661954936e+01 0 0 0 +1139 2 3.3703715380538052e-01 1.1492728536418293e+01 1.7905262033176264e+01 2.4808368934517500e+01 0 0 -1 +11 2 3.5868183038247675e-01 1.3261055176239545e+01 2.4501129818021180e+01 2.9929913633790228e+01 0 -1 -1 +279 2 3.9636694809602385e-01 6.6822072006268058e+00 1.6388886105691455e+01 2.5120445204020498e+01 0 0 0 +1845 2 4.0037342141108112e-01 7.9788801684986606e+00 2.3368313336261640e+01 2.5155337074150104e+01 0 -1 0 +969 2 3.7681680487321695e-01 1.0780364875361105e+01 1.6902594079348503e+01 2.9810591300870293e+01 0 0 -1 +967 1 -8.0341325939387198e-01 1.0920621920707132e+01 1.6408302649097482e+01 3.0592893380933546e+01 0 0 -1 +2020 1 -7.7720933259377167e-01 8.2167274088490192e+00 2.3526983558392313e+01 2.4273999926959096e+01 0 -1 0 +2330 2 3.1725450587772430e-01 1.3446069005233168e+01 3.0100047985129379e+01 2.9198445776585761e+01 0 0 0 +1562 2 4.0113596528416090e-01 6.7074618120947695e+00 1.8100496235919344e+01 3.0879391555179403e+01 0 0 0 +2340 2 3.4546254223701778e-01 2.6540877819908410e+01 3.0447579965943490e+01 3.0279007941670262e+01 -1 0 0 +2333 2 3.7427108553013344e-01 3.0312874408061170e+01 2.7955092532008830e+01 2.7083093710849329e+01 -1 0 0 +1838 2 3.6426806310453319e-01 2.7112712927454506e+01 2.5237078829455747e+01 2.9994996804296004e+01 -1 -1 0 +2921 2 3.6796808973412642e-01 2.4922742466873604e+01 1.7489024369484341e+01 1.5888872013393337e+01 0 0 0 +736 1 -7.4994288039603940e-01 4.4751578473554732e+00 3.0231809296514271e+01 1.6926561001074131e+01 1 0 0 +410 2 3.7103952897677045e-01 1.1700570944419812e+01 1.7907387620704849e+01 2.8072410962195082e+01 0 -1 -1 +2249 2 3.6271331741513041e-01 1.6047288290823513e+01 2.1465633278741688e+01 2.2290319722325474e+01 0 0 0 +2248 1 -7.5260699785787322e-01 1.5731104879424302e+01 2.0552829578736780e+01 2.2430334922013024e+01 0 0 0 +2804 2 3.4363111603013075e-01 1.4471450578665561e+01 2.1724211498166685e+01 2.3504168456583962e+01 0 0 0 +2803 1 -7.4214056675984197e-01 1.3740812956746506e+01 2.1922717519747298e+01 2.4070672139493468e+01 0 0 0 +2250 2 3.5142395968296219e-01 1.6129463650684603e+01 2.0248459053629599e+01 2.3317441670243696e+01 0 0 0 +2582 2 3.8977704893254450e-01 1.2861941248787465e+01 1.7812813146045013e+01 2.3995236909727296e+01 0 0 0 +563 2 3.5360806667720890e-01 1.5080638054134404e+01 1.8520850171831054e+01 2.5758444075542553e+01 0 0 0 +580 1 -7.1206380693296645e-01 1.5819259777887305e+01 3.0978924485328747e+01 2.6928838839147804e+01 0 -1 -1 +2581 1 -7.2464733914795854e-01 1.2072914091350238e+01 1.7310040258710867e+01 2.4319887671166473e+01 0 0 0 +2606 2 3.8488747493431397e-01 1.7223805320404139e+01 1.8751765336860593e+01 2.8549103739813059e+01 0 0 0 +2629 1 -7.1240331807136525e-01 1.3724090020591767e+01 1.7128619971024985e+01 2.8231056127148104e+01 0 0 0 +2630 2 3.9094337921919620e-01 1.4281730500596009e+01 1.6483114767839940e+01 2.7746463813392200e+01 0 0 0 +2607 2 3.9206192799752232e-01 1.6847408948963519e+01 1.7849259917193070e+01 2.7332766647667007e+01 0 0 0 +2631 2 3.9134762402389950e-01 1.4279825054977309e+01 1.7441650590514307e+01 2.8860695893539742e+01 0 0 0 +2763 2 3.7883083012660163e-01 1.4862849102273890e+01 2.1199087176219283e+01 2.7047873708804747e+01 0 0 0 +2610 2 3.8097877885246345e-01 1.4310294745680100e+01 2.1191642484291055e+01 2.5568789027123973e+01 0 0 0 +564 2 3.8620485995142811e-01 1.6334436071431139e+01 1.8209376617717730e+01 2.4885801605375711e+01 0 0 0 +562 1 -6.9442575926660211e-01 1.5960965023542474e+01 1.8000404601672813e+01 2.5681609184661667e+01 0 0 0 +1993 1 -7.8544544675307293e-01 1.7438500911029035e+01 1.9461175578395899e+01 2.4088072177965216e+01 0 -1 0 +1995 2 3.6610933987576810e-01 1.7858694438469321e+01 1.9743094768525580e+01 2.4957071043448625e+01 0 -1 0 +1994 2 3.8039387092930027e-01 1.8053146063622791e+01 1.9757759414042464e+01 2.3452471451239436e+01 0 -1 0 +2608 1 -6.9546497224632975e-01 1.4427363092491850e+01 2.0614043292949013e+01 2.6354243067334536e+01 0 0 0 +2605 1 -7.0024437477443791e-01 1.7089106746636350e+01 1.7781850141267849e+01 2.8280314037135241e+01 0 0 0 +470 2 3.4606186412457152e-01 1.6607238470069163e+01 2.1272678734434784e+01 2.8979620400158684e+01 0 0 -1 +471 2 3.8486238589398858e-01 1.8010319637759057e+01 2.0559641968183449e+01 2.9183181282864364e+01 0 0 -1 +469 1 -7.5831135526856086e-01 1.7013760232937795e+01 2.0417007679385165e+01 2.9221752671395731e+01 0 0 -1 +1810 1 -6.8899465113569558e-01 1.7911312854825663e+01 1.6412749962375969e+01 2.3513700999536169e+01 0 -1 0 +2771 2 3.7489250165045396e-01 1.8493762769375266e+01 1.6714324027319922e+01 2.8490710819456293e+01 0 0 0 +204 2 3.6041723731107411e-01 1.5442314737664583e+01 1.9466709597492596e+01 3.0037712119166141e+01 0 -1 -1 +208 1 -7.2934340302405676e-01 1.4871228020502002e+01 1.8824698229469004e+01 3.0484373772147251e+01 0 -1 -1 +1366 1 -7.4613125621415322e-01 2.6643465478865014e+01 2.9872579896477610e+01 2.4914848573997180e+01 0 0 -1 +1147 1 -7.5456616405851118e-01 2.4163657367115821e+01 1.6259721158965124e+01 2.3377254583738907e+01 0 0 -1 +2964 2 3.6279463005322188e-01 2.4298622883527816e+01 1.6542279311060948e+01 2.5095159947458509e+01 0 0 0 +2770 1 -7.7205724521821151e-01 1.9427531126532596e+01 1.6342768478911413e+01 2.8787123080373348e+01 0 0 0 +2772 2 3.6390852749045111e-01 1.9248788262341225e+01 1.5861972063849548e+01 2.9589690494124500e+01 0 0 0 +2692 1 -7.3114909635428738e-01 2.4990018061830138e+01 2.3585327886121178e+01 2.6797083651917649e+01 0 0 0 +424 1 -7.2929243113180064e-01 2.1239111080180553e+01 1.8939714610065902e+01 3.0062136047596304e+01 0 0 -1 +426 2 4.1507469421731258e-01 2.0759460028566689e+01 1.9761222262362434e+01 3.0087046903840445e+01 0 0 -1 +1301 2 4.0909015601880788e-01 2.0767657987657248e+01 1.8167735872840655e+01 2.3088357058105732e+01 0 0 0 +447 2 3.6191683487441856e-01 2.4868176168858252e+01 1.7637350263868818e+01 2.9233546595072163e+01 0 0 -1 +1169 2 3.5321442406942771e-01 2.0277735005661945e+01 2.0606302196555387e+01 2.6436307245565981e+01 0 0 -1 +421 1 -6.7318672714800865e-01 1.9429796533662035e+01 2.0122675620520248e+01 2.6266337750176962e+01 0 -1 -1 +423 2 3.2409281002149115e-01 1.9884268339156151e+01 1.9303723181849239e+01 2.5886815017702389e+01 0 -1 -1 +2765 2 3.5381083906999028e-01 2.0505030447930626e+01 1.7688359823121470e+01 2.5712955095425375e+01 0 0 0 +2764 1 -7.5695650025452821e-01 2.0398911189531699e+01 1.7533166422233943e+01 2.4798122794444140e+01 0 0 0 +2766 2 3.8334976508300433e-01 2.0683086237215296e+01 1.6572826079878492e+01 2.4694602340485581e+01 0 0 0 +2739 2 3.8092389943616745e-01 2.0598879023088998e+01 1.7308868782891839e+01 2.7904348744792323e+01 0 0 0 +2737 1 -7.5949639804443092e-01 2.1237717472622915e+01 1.7984561023148117e+01 2.7588141215097284e+01 0 0 0 +2800 1 -7.6863444694662719e-01 1.9762401024159434e+01 2.0920727819452814e+01 2.9158192822963130e+01 0 0 0 +2962 1 -7.2012821007221539e-01 2.4782289513233604e+01 1.7161592013255284e+01 2.5759584365449108e+01 0 0 0 +2963 2 3.9475884974624215e-01 2.4642101980632091e+01 1.8152731193999116e+01 2.5386051097155971e+01 0 0 0 +2200 1 -7.0806354251879322e-01 2.4803482404097416e+01 1.9573007909627194e+01 2.4639957992118209e+01 0 0 0 +2202 2 3.5398416735722610e-01 2.5208295664395344e+01 2.0065017129635752e+01 2.5355732899804082e+01 0 0 0 +1345 1 -7.4077799166676994e-01 2.4337151889574532e+01 2.0976359468170397e+01 2.7482560070454834e+01 0 0 0 +2738 2 3.5382670487519752e-01 2.2154171455854229e+01 1.7571991838633284e+01 2.7621612234553314e+01 0 0 0 +1347 2 3.5767944889164582e-01 2.4098675887539958e+01 2.1058088172753649e+01 2.8429073543605433e+01 0 0 0 +2890 1 -7.1134171079813080e-01 2.3948994068967480e+01 2.1768390795138274e+01 3.0239052543182453e+01 0 0 0 +2194 1 -7.7005533830644213e-01 2.1593578849022897e+01 2.1909665487347979e+01 2.7150936207444126e+01 0 -1 0 +2801 2 3.7680248718311998e-01 1.9753315877993963e+01 2.1850851090497795e+01 2.9250284169925031e+01 0 0 0 +2802 2 3.7775311204537776e-01 2.0088431299985153e+01 2.0835141653967284e+01 2.8262560503447393e+01 0 0 0 +1931 2 3.7340981769755499e-01 2.2481048550654055e+01 2.1634913462016630e+01 2.7334322781005660e+01 0 -1 0 +425 2 3.7733790477895340e-01 2.1341562748922446e+01 1.8715140346393170e+01 2.9035597074486233e+01 0 0 -1 +1520 2 3.5081941354284474e-01 2.8604862763264908e+01 2.6064968730485209e+01 3.0012145223389343e+01 -1 -1 0 +1163 2 3.5123299324139184e-01 2.4218545706233790e+01 1.7177471664828058e+01 2.7344628742021239e+01 0 0 -1 +2195 2 3.7191712074675409e-01 2.1641294437109263e+01 2.2553720625071406e+01 2.6358006779170779e+01 0 -1 0 +2787 2 3.7900832422832464e-01 2.1357955026866012e+01 2.3358944425225616e+01 2.8043798120570020e+01 0 0 0 +1162 1 -7.7294150906629944e-01 2.3738793405157892e+01 1.6793835797848175e+01 2.8183931456706201e+01 0 0 -1 +777 2 3.6526099881417373e-01 2.9291447506110003e+01 1.9633422795007050e+01 3.0227173720571582e+01 -1 0 -1 +2948 2 3.3876707305675657e-01 2.5840550746034133e+01 2.6563734313338895e+01 2.5634148093608594e+01 0 0 0 +1519 1 -7.4423344612837405e-01 2.8566053943919371e+01 2.5389228152121881e+01 2.9231470426526773e+01 -1 -1 0 +2892 2 3.4394128628595089e-01 2.7411376064331339e+01 1.8548164515244540e+01 3.0704759839983378e+01 0 0 0 +2891 2 3.1500274960369046e-01 2.4942839275197503e+01 2.1683154869679498e+01 3.0248557032862443e+01 0 0 0 +445 1 -7.2055742434151882e-01 2.5453325969256660e+01 1.8201205864971534e+01 2.9922644033042840e+01 0 0 -1 +1346 2 3.7426422957622152e-01 2.4777820535855341e+01 2.1777859132828794e+01 2.7157887994497667e+01 0 0 0 +1959 2 3.5676757844118456e-01 2.5955744968716498e+01 1.8830190125656461e+01 2.9401250695427361e+01 0 0 0 +2778 2 3.3240223367030014e-01 2.5653419504413105e+01 1.5905306876794777e+01 2.7091852749206318e+01 0 0 0 +2969 2 3.6140904145656000e-01 3.0371147281621667e+01 1.7962524420357099e+01 2.8442466939553253e+01 0 0 0 +1759 1 -7.0207241864620085e-01 2.6803821166335151e+01 1.9902731058748088e+01 2.8047471868469973e+01 0 0 0 +1761 2 3.3033621077096037e-01 2.6146036844911823e+01 2.0376170066351857e+01 2.7486409083193607e+01 0 0 0 +2201 2 3.7114937986094171e-01 2.5492265507516144e+01 1.9491449559574850e+01 2.3980633814947911e+01 0 0 0 +2852 2 3.8642713804367368e-01 3.0292001594240364e+01 2.0568454834328030e+01 2.6273874260723719e+01 0 0 0 +2851 1 -7.1396659452734812e-01 2.9781360737889816e+01 1.9760783830209274e+01 2.6173936849067317e+01 0 0 0 +2853 2 3.6259541874575191e-01 2.9856612523789366e+01 1.9371806996527081e+01 2.7002171787561632e+01 0 0 0 +1760 2 3.3584733374450615e-01 2.7063943447771521e+01 2.0579588662236208e+01 2.8739497742062330e+01 0 0 0 +2873 2 3.8156420091352133e-01 2.8303034274005881e+01 1.8810809494973025e+01 2.3592363344886095e+01 0 0 0 +2377 1 -7.7285998145380552e-01 2.7411198341751980e+01 1.8610465274165609e+01 2.3509268190818457e+01 -1 0 0 +2368 1 -7.4133803164839684e-01 3.0071042992031234e+01 1.7172635406489047e+01 2.5360360610992696e+01 -1 0 0 +1411 1 -7.0726184327607333e-01 2.9703089302358126e+01 2.2688212790944046e+01 2.9781736784407720e+01 0 1 -1 +2378 2 3.6741168961987092e-01 2.7325458878714954e+01 1.7854217822780477e+01 2.2924957783030532e+01 -1 0 0 +1413 2 3.4035912367261106e-01 2.8906208759675490e+01 2.2121840792563646e+01 2.9850792566144921e+01 0 1 -1 +2366 2 3.6557559721913407e-01 2.7846204052099736e+01 2.0623467579608405e+01 2.4661950593140830e+01 -1 0 0 +1412 2 3.7429572264244859e-01 2.9997367793858011e+01 2.2785128819122058e+01 3.0713338178886954e+01 0 1 -1 +1333 1 -7.5236688755738135e-01 2.7027778479900594e+01 2.1701169214954394e+01 3.0363360727079922e+01 0 0 -1 +2370 2 3.8938617284034410e-01 2.9791141378046454e+01 1.8065002579796118e+01 2.5164060641733553e+01 -1 0 0 +2365 1 -7.0341069822843671e-01 2.7292999694524205e+01 2.1051650997946986e+01 2.5299927111788076e+01 -1 0 0 +2367 2 3.5931050852613372e-01 2.7202886627774667e+01 2.0591058063121025e+01 2.6141104189896701e+01 -1 0 0 +1081 1 -7.2623026523966339e-01 1.0359708259632736e+01 2.5754602836530488e+01 3.0597181989901138e+01 0 0 -1 +2369 2 3.8601335417491206e-01 3.0184442787734234e+01 1.7122241626572624e+01 2.6392827528273283e+01 -1 0 0 +2151 2 3.5893200566606132e-01 2.9853835223179420e+01 2.0775184427352997e+01 2.9358028437581574e+01 0 0 0 +2968 1 -7.0585150738382718e-01 3.0415294278882868e+01 1.7061252469570523e+01 2.8049592201235807e+01 0 0 0 +2252 2 3.3233735956158739e-01 2.7135265159528309e+01 2.2677530133245838e+01 2.3586960967350421e+01 -1 0 0 +775 1 -7.1814401310402909e-01 2.9918594119506444e+01 1.9839242677151031e+01 2.9430222869433294e+01 -1 0 -1 +1882 1 -7.2962295169510083e-01 1.9766300369619930e+01 2.7484739766634636e+01 1.6840089774999381e+01 0 -1 0 +2363 2 3.9183006922419689e-01 3.0839120732604822e+01 1.5524605227580697e+01 2.5368644947236863e+01 -1 0 0 +1988 2 3.6340908240412312e-01 3.0967276367153293e+01 2.7788527741365566e+01 2.3146059568728401e+01 0 -1 0 +1554 2 3.5062160154457800e-01 2.1164725943631124e+00 2.7678281093954819e+01 2.4448838860822121e+01 0 -1 0 +1552 1 -7.5913021673515657e-01 1.9530853219502355e+00 2.7658148697066434e+01 2.3496036916015548e+01 0 -1 0 +2617 1 -7.1264602361352236e-01 1.5842973009205968e-01 2.8313015250304193e+01 2.7375141368128162e+01 0 0 0 +1383 2 3.4875302711310585e-01 1.4474008158954297e+00 2.4172295651312034e+01 2.4966607673459713e+01 1 0 -1 +1483 1 -7.6320194121864704e-01 2.5453294539634537e+00 2.9521571381169366e+01 2.6039842449803501e+01 1 0 0 +1611 2 3.5863197081729287e-01 3.6205108526375840e+00 3.0060441539693148e+01 2.7362278849312919e+01 0 -1 0 +7 1 -7.5409262646562625e-01 3.3900185909921507e+00 2.3823035607086346e+01 2.4742428461570352e+01 0 -1 -1 +992 2 3.7610283904537362e-01 7.4047158409418379e-01 2.4993492128150478e+01 2.6937442204874170e+01 0 0 -1 +1381 1 -7.0217098583733417e-01 4.5520265359593814e-01 2.4391166630035702e+01 2.5003301853567422e+01 1 0 -1 +9 2 3.7975874120524844e-01 3.9878364961086796e+00 2.4416407729365705e+01 2.5299613634629868e+01 0 -1 -1 +2988 2 3.6537032146765108e-01 5.3630589197478207e+00 2.6674288377103551e+01 2.5588961302343627e+01 1 0 0 +888 2 3.7320512175451920e-01 2.0259605386041040e+00 2.8989725874326989e+01 2.6643812594427295e+01 0 0 0 +1648 1 -6.8731347318196734e-01 4.3383930649571809e+00 2.6876900521866716e+01 2.8627980167180233e+01 0 -1 0 +1650 2 3.5035214020937255e-01 4.4602818424953181e+00 2.7800290571680282e+01 2.8974432396754139e+01 0 -1 0 +1485 2 3.7992839106175530e-01 2.0724564809390413e+00 3.0352605799639591e+01 2.6080167500462871e+01 1 0 0 +2986 1 -7.0517640356463918e-01 5.0520641376271467e+00 2.5868858529121702e+01 2.5993326509601506e+01 1 0 0 +2529 2 3.4380582257115677e-01 2.2785048511840382e+00 2.7600134441466800e+01 3.0465877467269781e+01 0 0 0 +1649 2 3.6993684073797140e-01 3.7866749124656991e+00 2.6503061020048609e+01 2.9334048146157194e+01 0 -1 0 +794 2 3.4907112031664300e-01 5.0334666622090438e+00 2.9699565783287376e+01 2.9453950022178201e+01 0 0 -1 +2528 2 3.2110433303502028e-01 3.2630215633260642e+00 2.8788177915042240e+01 3.0266879555696274e+01 0 0 0 +94 1 -7.3215244151473424e-01 5.4398947636738129e+00 2.8944232487265118e+01 2.9996847749942390e+01 0 0 -1 +1961 2 3.6720856359441328e-01 1.1058221646402345e+01 2.3018171575082601e+01 3.0437508092903503e+01 0 0 0 +96 2 3.6525225261484517e-01 6.3672541858607197e+00 2.8908676796345578e+01 2.9657490921514537e+01 0 0 -1 +1389 2 3.6840834067600892e-01 4.3452777825173037e+00 2.9298867914184569e+01 2.5621753667941775e+01 1 0 -1 +2942 2 3.8448109061175989e-01 5.1013602095786190e+00 2.6106041213995315e+01 2.6924039253064095e+01 1 -1 0 +1387 1 -7.2554241457730873e-01 5.2127084233274603e+00 2.8978618994196445e+01 2.5197873399463443e+01 1 0 -1 +2386 1 -7.7376847037950447e-01 2.6969910565227856e+01 2.8386413434994740e+01 3.0314562483857912e+01 -1 0 0 +793 1 -7.1460856800938677e-01 9.7591676489196044e-01 2.5523489704217855e+01 2.7659852576475188e+01 0 0 -1 +795 2 3.8577436027645262e-01 1.4825937931493596e+00 2.4955746313923022e+01 2.8220796550580239e+01 0 0 -1 +1388 2 3.6925195446831038e-01 5.1691797847700611e+00 2.9393746663623940e+01 2.4310500047171569e+01 1 0 -1 +2618 2 3.7121663015303408e-01 5.8782697787149829e-01 2.7432234349809995e+01 2.7603766565551126e+01 0 0 0 +1382 2 3.7990383263614713e-01 2.6443699335495163e-01 2.4767822202894063e+01 2.4144401120631628e+01 1 0 -1 +106 1 -7.0486890047044037e-01 2.7985788214763172e+00 2.5569580527672773e+01 3.0721585942445316e+01 0 -1 -1 +2191 1 -7.3083575291983516e-01 2.8704437797836427e+01 2.6894651490831347e+01 2.6734975656461348e+01 0 -1 0 +2694 2 3.6337366625768674e-01 2.5737670399612583e+01 2.4216796695439196e+01 2.6649687322663659e+01 0 0 0 +2176 1 -7.5613931522288169e-01 2.6762040473911160e+01 2.8483105591886680e+01 2.7605050075699619e+01 0 -1 0 +925 1 -7.2044071090621375e-01 1.1004842122560150e+01 3.0016032342643072e+01 2.3574561590193454e+01 0 0 0 +927 2 3.5110245458827566e-01 1.0466623919005164e+01 2.9355810372546408e+01 2.4065796143698797e+01 0 0 0 +779 2 3.6630765481385175e-01 8.6167900450400197e+00 2.8521014218489622e+01 2.3190577399418117e+01 0 0 0 +1535 2 3.4816152118132787e-01 7.0727241547640611e+00 2.8396433899465585e+01 2.2807856871500093e+01 0 -1 0 +2178 2 3.5675646291851237e-01 2.6856755211333482e+01 2.8666566478278924e+01 2.8626403150797390e+01 0 -1 0 +1534 1 -7.2079320399291869e-01 7.8709229505903080e+00 2.8881479574040327e+01 2.2696054936946226e+01 0 -1 0 +209 2 3.7890348180635819e-01 1.2096436414616607e+01 2.4283157202713589e+01 2.8853301925179338e+01 0 -1 -1 +1694 2 3.7520729136396180e-01 1.0953731572345454e+01 2.4580176926173490e+01 2.6777936550244700e+01 0 -1 0 +1693 1 -7.2028810897973572e-01 1.0715917823054868e+01 2.4721082239705062e+01 2.7764209730456109e+01 0 -1 0 +2483 2 3.8049307740787236e-01 6.8324288598040166e+00 2.9479525315165830e+01 2.5702964183565111e+01 0 0 0 +2983 1 -7.3414451880007303e-01 7.9875708816313775e+00 2.4463438658456099e+01 2.9096783413365394e+01 1 0 0 +2590 1 -7.2907085058343046e-01 1.0713225216098387e+01 2.8165099995967665e+01 2.9144048021431452e+01 0 0 0 +2022 2 3.7474215018716495e-01 7.9321816111131778e+00 2.4454649762766973e+01 2.4141189095730770e+01 0 -1 0 +2388 2 3.3855074313136202e-01 8.8410670268371678e+00 2.4523189780805186e+01 2.9687125346169363e+01 0 0 0 +778 1 -7.3530338721298338e-01 7.4537888540314698e+00 2.6201661620481389e+01 2.4328928176807235e+01 0 0 0 +95 2 3.5587007654712272e-01 6.6464886966388210e+00 2.6455432280956632e+01 2.3738958179300059e+01 0 0 -1 +780 2 3.6094472110162096e-01 8.1797419624579817e+00 2.6754160530349242e+01 2.4063336587493822e+01 0 0 0 +2351 2 3.7263350397852646e-01 1.2095558771593497e+01 2.6893517914914153e+01 2.8658514256147928e+01 0 0 0 +1900 1 -7.5017107106248870e-01 1.0047486607705302e+01 2.7297477414103192e+01 2.4106027791286110e+01 0 -1 0 +1902 2 3.7742380634974315e-01 1.0357768258223230e+01 2.6528225575362569e+01 2.4640372223980712e+01 0 -1 0 +2436 2 3.3064507514740132e-01 8.2323848658921044e+00 2.6245640125394928e+01 2.7666321339555154e+01 0 0 0 +2434 1 -7.6684558527022262e-01 8.6740245078306568e+00 2.6918569071689486e+01 2.7162793777667694e+01 0 0 0 +2435 2 3.6972965492390847e-01 8.2509188569067984e+00 2.6878450585816331e+01 2.6292718318792783e+01 0 0 0 +1713 2 3.6317368550040352e-01 9.9653952796582459e+00 2.5352711622882772e+01 2.7677101168969372e+01 0 -1 0 +2482 1 -6.6884895017431434e-01 7.7119215590855346e+00 2.9819988715105385e+01 2.5913585988215438e+01 0 0 0 +1768 1 -7.4820989217329548e-01 1.0806932376836187e+01 2.4697294621808201e+01 2.4999548897865250e+01 0 0 0 +2352 2 3.3682209783127309e-01 1.2465870149761788e+01 2.5664582375565605e+01 2.7903000497471627e+01 0 0 0 +986 2 3.6084021645724457e-01 8.2753706048266480e+00 2.8074798137637920e+01 2.8296011002168939e+01 0 0 -1 +985 1 -7.8115382437982284e-01 7.8739472659069119e+00 2.9015117011382625e+01 2.8528028459092397e+01 0 0 -1 +987 2 3.9002089906374315e-01 7.6985290404801940e+00 2.9413557581916631e+01 2.7637481126301328e+01 0 0 -1 +1316 2 3.5091206851755652e-01 1.7770036251770858e+01 2.8700256245078734e+01 1.5883152222774891e+01 0 0 0 +2350 1 -7.1253130897378247e-01 1.2814965956497741e+01 2.6557520855818161e+01 2.8070815413822476e+01 0 0 0 +2592 2 3.4110753363333102e-01 1.0030333530839522e+01 2.8107151557959874e+01 2.8417960549489454e+01 0 0 0 +1770 2 3.5170336486136156e-01 1.1513488860313641e+01 2.4656801810522989e+01 2.4286819711244870e+01 0 0 0 +606 2 3.6385264633856612e-01 9.1466917539784660e+00 3.0404332468949825e+01 2.8859181933473284e+01 0 -1 -1 +2591 2 3.7854329901120853e-01 1.0438083463654520e+01 2.7540518291983641e+01 2.9775168239414267e+01 0 0 0 +1620 2 3.3604212857084048e-01 6.0709212969241069e+00 2.6247420923327301e+01 1.5980916154775347e+01 0 -1 0 +2687 2 3.9087604956725852e-01 1.7622129756600057e+01 2.9928015108487546e+01 3.0079417920144522e+01 0 0 0 +1647 2 3.6075636633338520e-01 2.5235880987689036e+01 2.8038742066905233e+01 2.6646719148616551e+01 -1 -1 0 +1727 2 3.6764575340621874e-01 1.6452491471712243e+01 2.4081167199556990e+01 2.2777656890647606e+01 0 -1 0 +582 2 3.6831021773205630e-01 1.5549289163030222e+01 3.0201367488385721e+01 2.7417632738869521e+01 0 -1 -1 +823 1 -7.3516470270034551e-01 1.0035927205217823e+00 2.8118524429521937e+01 1.5676637337578386e+01 0 0 0 +2805 2 3.7391239590807357e-01 1.3538816278882962e+01 2.3684716482749010e+01 2.4326891292117342e+01 0 0 0 +2810 2 3.9093755993206647e-01 1.4014598370655994e+01 2.3023500339754261e+01 2.8639030381633468e+01 0 0 0 +2809 1 -7.3262781038372915e-01 1.4756960259799975e+01 2.2508609309234476e+01 2.8255141987300249e+01 0 0 0 +2190 2 3.6014914737506321e-01 1.5334509282582109e+01 2.3213266681974812e+01 2.7842344949930002e+01 0 -1 0 +2070 2 3.8882041488348895e-01 1.6553590010225371e+01 2.5286772999264638e+01 2.7442275352269800e+01 0 -1 0 +2002 1 -7.0378300403560734e-01 1.7129616940812923e+01 2.5389778301853571e+01 2.4275413345063487e+01 0 -1 0 +2003 2 3.8780752904161625e-01 1.6655070310705369e+01 2.6207382688531730e+01 2.3936863052330455e+01 0 -1 0 +2068 1 -7.2808066890463030e-01 1.6095334105090782e+01 2.4803547543770900e+01 2.6784206983098890e+01 0 -1 0 +1478 2 4.1761848612086006e-01 1.6254280242307647e+01 2.5075195163945317e+01 2.5934700912500176e+01 0 0 0 +2905 1 -7.1075187786685157e-01 1.4617800468373995e+01 2.5410815879726041e+01 3.0487900816105022e+01 0 0 0 +2906 2 3.7754294860194931e-01 1.4223248156640576e+01 2.6338978664063184e+01 3.0430746927634406e+01 0 0 0 +2572 1 -7.4531379502836315e-01 1.3546298381435944e+01 2.8095604635320178e+01 3.0502364202542847e+01 0 0 0 +384 2 3.5651215750392595e-01 1.3886508788719953e+01 2.9870827945273504e+01 2.4100047036607084e+01 0 -1 -1 +1285 1 -7.2050589708172608e-01 1.3511883500665618e+01 2.4681824286146849e+01 2.4301924947063576e+01 0 0 0 +1287 2 3.9328036995849186e-01 1.4036705975733248e+01 2.9008649365676227e+01 2.5465121929570358e+01 0 0 0 +382 1 -7.5527424873250282e-01 1.4117349154791070e+01 2.9941452563643050e+01 2.5081547463325599e+01 0 -1 -1 +2313 2 4.0458292355223296e-01 1.3659834686985018e+01 2.6447811829920681e+01 2.5044311700596946e+01 0 0 0 +1843 1 -7.3135402935307969e-01 1.3676724329591480e+01 2.7330696169100058e+01 2.5481621223302461e+01 0 -1 0 +1844 2 3.7595962128880162e-01 1.3557345164051824e+01 2.7180939481059948e+01 2.6412742230556990e+01 0 -1 0 +2057 2 3.6506409503807830e-01 1.7042007962283868e+01 2.7042214182468303e+01 2.9010314649618508e+01 0 0 0 +2058 2 3.4009653230409059e-01 1.7064597438359606e+01 2.5768114672953143e+01 2.9894780175783726e+01 0 0 0 +2056 1 -7.2199243227411480e-01 1.7325713749006116e+01 2.6102863001217031e+01 2.9065231302929991e+01 0 0 0 +387 2 3.3951229230480767e-01 1.4242415604477493e+01 2.8193928381198607e+01 2.7710812344400068e+01 0 -1 -1 +2524 1 -7.1540897185153074e-01 1.5088215211884521e+01 2.8346132092430032e+01 2.8163745691278145e+01 0 0 0 +2525 2 3.3713086907605433e-01 1.4908941862619400e+01 2.8028687490498818e+01 2.9120332366794937e+01 0 0 0 +2573 2 3.5737926522529234e-01 1.2760235703432556e+01 2.8621653619195200e+01 3.0370938938254547e+01 0 0 0 +2688 2 3.3244394654366038e-01 1.6467799768217787e+01 2.8971082726217151e+01 2.9575279074570702e+01 0 0 0 +1748 2 3.9932207221014837e-01 1.7943470010350762e+01 2.5823004247923688e+01 2.4619943642054714e+01 0 -1 0 +2686 1 -7.4281423106968880e-01 1.7209207993618779e+01 2.9010021595303098e+01 3.0203456019417672e+01 0 0 0 +2726 2 3.6069766156550270e-01 1.8044706625504677e+01 2.4171176863546254e+01 2.8673693693914721e+01 0 0 0 +1911 2 3.6333317646275737e-01 2.1674751578335314e+01 2.3230973178826719e+01 2.3120171874733760e+01 0 -1 0 +1856 2 3.7801019952403159e-01 1.9157564727075059e+01 2.8463717008823142e+01 3.0565682923722431e+01 0 -1 0 +2089 1 -7.0496813300901562e-01 3.8846483720764891e+00 1.5580136852342440e+01 3.0988989949697324e+01 1 0 -1 +1446 2 3.5684944118174039e-01 2.3622382153967447e+01 2.1145980699353274e+01 3.0922007381584152e+01 0 0 -1 +20 2 3.8313988649451719e-01 2.3567149168289870e+01 2.6521600224523564e+01 2.9047557301732944e+01 -1 -1 -1 +1645 1 -7.2975217517491020e-01 2.4503116602137837e+01 2.8220645360772622e+01 2.6024256833339081e+01 -1 -1 0 +1479 2 3.3277901451789660e-01 2.3043266049476788e+01 2.9472055510377256e+01 2.3026684338522582e+01 0 0 0 +21 2 3.6957552563387847e-01 2.3004009724383639e+01 2.5151261985446151e+01 2.9010157214707696e+01 -1 -1 -1 +19 1 -7.3283206707000104e-01 2.3837342577896429e+01 2.5590600819654583e+01 2.9004041557282498e+01 -1 -1 -1 +2919 2 3.3657564800542050e-01 2.3226334412340972e+01 2.8631419923044739e+01 3.0565437556374363e+01 0 0 0 +2994 2 3.3185646686298959e-01 2.2130529141372453e+01 2.7788822981808160e+01 3.0249116095757081e+01 0 0 0 +2811 2 3.4347782695574663e-01 2.1728890000655692e+01 2.9920986248140004e+01 2.5214011447807373e+01 0 0 0 +2950 1 -7.5540204534745348e-01 2.0926670256690628e+01 2.9448847715040952e+01 2.5024621462083321e+01 0 0 0 +2725 1 -7.3873503702858367e-01 1.8570953662424213e+01 2.3495487828789724e+01 2.9114240296907006e+01 0 0 0 +2727 2 3.4578431704926010e-01 1.8521402073736528e+01 2.3803369510420776e+01 3.0046711269915065e+01 0 0 0 +2706 2 4.0134355968739022e-01 2.0027182644166121e+01 2.6557493357920286e+01 2.4145390728749291e+01 0 0 0 +2992 1 -7.5913711940645257e-01 2.2970109524231784e+01 2.8032645642922468e+01 2.9869171958268229e+01 0 0 0 +385 1 -7.1279576946000944e-01 2.2400765939444359e+01 2.3888346755024067e+01 2.5425837077985594e+01 0 -1 -1 +584 2 3.3997388729632499e-01 2.3252595381056373e+01 2.3597189808628819e+01 2.5892592333652562e+01 0 -1 -1 +386 2 3.6021614130896101e-01 2.2591488978199816e+01 2.4730541934939339e+01 2.5006367399286887e+01 0 -1 -1 +1646 2 3.5247924473061648e-01 2.4187891291529947e+01 2.9084220378797124e+01 2.6265107250975543e+01 -1 -1 0 +2704 1 -7.2538461010879418e-01 1.9366548933982255e+01 2.7003482749459032e+01 2.4784293272716216e+01 0 0 0 +2705 2 3.5569396967362998e-01 1.9532957843494568e+01 2.7959407245345876e+01 2.4860260856571184e+01 0 0 0 +799 1 -7.6050101057871444e-01 2.3988048355725599e+01 3.0636437496838141e+01 2.4652500799214650e+01 -1 0 -1 +1268 2 3.7639747176313071e-01 2.2231703368249963e+01 2.9098356754253786e+01 2.8585082778064507e+01 0 0 -1 +1986 2 3.5487267787675603e-01 1.9750188049423382e+01 2.7187594892472802e+01 2.6640233875527738e+01 0 -1 0 +1985 2 3.3736674454677884e-01 2.0267462855064423e+01 2.6820323975036533e+01 2.8102370674810249e+01 0 -1 0 +1984 1 -6.9783562612802830e-01 1.9825533572332510e+01 2.7529939521248139e+01 2.7600380138886276e+01 0 -1 0 +1267 1 -7.2532864435020250e-01 2.1636063668219499e+01 2.9461977229570202e+01 2.7859512169419489e+01 0 0 -1 +2785 1 -6.8589612528722610e-01 2.1172630996025855e+01 2.4133535125323121e+01 2.8645805385843328e+01 0 0 0 +2786 2 3.6187004113704491e-01 2.0324955226508639e+01 2.3878077420526786e+01 2.9143893808061488e+01 0 0 0 +1269 2 3.8169946623808348e-01 2.0777827361035222e+01 2.8843598204104719e+01 2.7926543763986889e+01 0 0 -1 +2827 1 -7.5178981778370491e-01 2.5980207330104658e+01 1.5883927015697910e+01 1.5933980603556099e+01 0 0 0 +2951 2 3.5115645556354869e-01 2.0613112882121001e+01 2.9282777176086590e+01 2.5849956558510126e+01 0 0 0 +1830 2 3.4562081475759565e-01 2.5042883762442986e-01 1.9659806805631007e+01 3.0838531101438452e+01 0 0 0 +2949 2 3.7538315262016592e-01 2.6728904078646107e+01 2.5980725541678012e+01 2.4524765091211119e+01 0 0 0 +2693 2 3.3339425832370145e-01 2.4465202567280162e+01 2.4127880542052008e+01 2.7395744824065918e+01 0 0 0 +2192 2 3.6659376702940660e-01 2.8856470552368346e+01 2.6506868869494156e+01 2.7596926665383766e+01 0 -1 0 +1837 1 -7.1365031316252459e-01 2.6425043242862866e+01 2.5620135077268284e+01 3.0621573076223548e+01 -1 -1 0 +1331 2 3.5500527902638757e-01 2.3184779434937365e+01 2.7082744171995643e+01 2.3370410135977959e+01 0 0 -1 +1621 1 -7.6435417363797209e-01 2.9628730033886924e+01 2.9180588446022917e+01 2.9391911565459942e+01 -1 -1 0 +1367 2 3.6840931346151579e-01 2.5693374475437924e+01 3.0087113401159538e+01 2.4915942123885991e+01 0 0 -1 +1987 1 -7.1082251196474511e-01 3.0060262246121411e+01 2.7610554694576539e+01 2.2780775200354022e+01 0 -1 0 +2938 1 -7.4112000273699075e-01 1.8149803686751540e+01 1.5695169511354322e+01 1.6947474577849174e+01 0 0 0 +1839 2 3.6079283000119255e-01 2.5602942316285514e+01 2.5649254220041389e+01 3.0064023277643344e+01 -1 -1 0 +1876 1 -7.1122447250616871e-01 1.3882831693372349e+01 3.0791374304312075e+01 1.6088923223980341e+01 0 -1 0 +1188 2 3.5912490985459461e-01 1.1132479352648046e+01 2.7769533203195365e+01 1.6085424043853980e+01 0 0 0 +625 1 -6.8070199915260399e-01 2.8298375442686439e+01 3.0378227657718618e+01 2.1330941736995175e+01 0 -1 -1 +2324 2 3.6528238885428532e-01 2.6624285533476154e+01 2.7465633462681023e+01 3.0405350018301814e+01 -1 0 0 +2966 2 3.8324270048809833e-01 2.2145736866876939e+00 1.6293361592060393e+01 3.0554627512122444e+01 1 0 0 +685 1 -7.6185286627974624e-01 2.2911596052139330e+01 3.0356836516298955e+01 1.7698177981943278e+01 0 -1 0 +1812 2 3.4587306522017625e-01 1.7231487300098411e+01 1.6994206995354919e+01 2.3772481960570808e+01 0 -1 0 +2449 1 -7.3098760066670754e-01 1.7226073658772862e+01 1.8207511631168725e+01 1.5571328926836692e+01 0 0 0 +1609 1 -7.3209378689090843e-01 3.8038541319091670e+00 3.0469943247784794e+01 2.8248713179443495e+01 0 -1 0 +71 2 3.7722929972710306e-01 1.1828349487701109e+01 1.6115815808013849e+01 3.0621871422273017e+01 0 0 -1 +811 1 -6.9547622941354248e-01 3.0428812893249077e+01 3.0859717988145043e+01 1.8802269306680319e+01 -1 0 0 +2405 2 3.4020652691064257e-01 7.4528018084076963e+00 2.6012876505596005e+01 3.0705739252272764e+01 0 0 0 +1253 2 3.5717004716194040e-01 2.3664945895202479e+01 1.6287715192098435e+01 3.0322970930456712e+01 0 0 -1 +252 2 3.8701305495106386e-01 2.1482185801453028e+01 3.1006367209523919e+01 2.7196564479751714e+01 0 -1 -1 +1862 2 3.7625538466757952e-01 1.5251364631771182e+01 1.5616838924692072e+01 1.5618905489741165e+01 0 0 0 +813 2 3.7367922684603366e-01 1.1794541687145023e-01 3.1039606881210492e+01 1.9416399237735966e+01 0 0 0 diff --git a/examples/reaxff/water/in.water.acks2 b/examples/reaxff/water/in.water.acks2 old mode 100755 new mode 100644 index e75b0e2814..4111a8c64a --- a/examples/reaxff/water/in.water.acks2 +++ b/examples/reaxff/water/in.water.acks2 @@ -2,10 +2,14 @@ boundary p p p units real -atom_style full +atom_style charge read_data data.water +variable x index 1 +variable y index 1 +variable z index 1 + replicate $x $y $z pair_style reaxff NULL safezone 3.0 mincap 150 @@ -19,7 +23,7 @@ fix 1 all acks2/reaxff 1 0.0 10.0 1.0e-6 reaxff maxiter 400 fix 2 all nvt temp 300 300 50.0 timestep 0.5 -thermo 100 +thermo 10 thermo_style custom step temp press density vol -run ${t} +run 20 diff --git a/examples/reaxff/water/in.water.qeq b/examples/reaxff/water/in.water.qeq old mode 100755 new mode 100644 index 6480ca240f..dd8a50e59f --- a/examples/reaxff/water/in.water.qeq +++ b/examples/reaxff/water/in.water.qeq @@ -2,10 +2,14 @@ boundary p p p units real -atom_style full +atom_style charge read_data data.water +variable x index 1 +variable y index 1 +variable z index 1 + replicate $x $y $z pair_style reaxff NULL safezone 3.0 mincap 150 @@ -19,7 +23,7 @@ fix 1 all qeq/reaxff 1 0.0 10.0 1.0e-6 reaxff maxiter 400 fix 2 all nvt temp 300 300 50.0 timestep 0.5 -thermo 100 +thermo 10 thermo_style custom step temp press density vol -run ${t} +run 20 diff --git a/examples/reaxff/water/log.20Sep21.reaxff.water-acks2.g++.1 b/examples/reaxff/water/log.20Sep21.reaxff.water-acks2.g++.1 new file mode 100644 index 0000000000..b49c72c383 --- /dev/null +++ b/examples/reaxff/water/log.20Sep21.reaxff.water-acks2.g++.1 @@ -0,0 +1,76 @@ +LAMMPS (31 Aug 2021) +Reading data file ... + orthogonal box = (0.0000000 0.0000000 0.0000000) to (31.043046 31.043046 31.043046) + 1 by 1 by 1 MPI processor grid + reading atoms ... + 3000 atoms + read_data CPU = 0.010 seconds +Replicating atoms ... + orthogonal box = (0.0000000 0.0000000 0.0000000) to (31.043046 31.043046 31.043046) + 1 by 1 by 1 MPI processor grid + 3000 atoms + replicate CPU = 0.001 seconds +WARNING: Changed valency_val to valency_boc for X (../reaxff_ffield.cpp:295) + +CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE + +Your simulation uses code contributions which should be cited: +- pair reaxff command: +- fix acks2/reaxff command: +The log file lists these citations in BibTeX format. + +CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE + +Neighbor list info ... + update every 1 steps, delay 0 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 10.5 + ghost atom cutoff = 10.5 + binsize = 5.25, bins = 6 6 6 + 2 neighbor lists, perpetual/occasional/extra = 2 0 0 + (1) pair reaxff, perpetual + attributes: half, newton off, ghost + pair build: half/bin/newtoff/ghost + stencil: full/ghost/bin/3d + bin: standard + (2) fix acks2/reaxff, perpetual, copy from (1) + attributes: half, newton off, ghost + pair build: copy + stencil: none + bin: none +Setting up Verlet run ... + Unit style : real + Current step : 0 + Time step : 0.5 +Per MPI rank memory allocation (min/avg/max) = 574.5 | 574.5 | 574.5 Mbytes +Step Temp Press Density Volume + 0 300 1572.3474 1 29915.273 + 10 300.61522 8252.7686 1 29915.273 + 20 294.7387 2502.6624 1 29915.273 +Loop time of 25.3632 on 1 procs for 20 steps with 3000 atoms + +Performance: 0.034 ns/day, 704.533 hours/ns, 0.789 timesteps/s +100.0% CPU use with 1 MPI tasks x no OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 13.789 | 13.789 | 13.789 | 0.0 | 54.37 +Neigh | 0.33364 | 0.33364 | 0.33364 | 0.0 | 1.32 +Comm | 0.002672 | 0.002672 | 0.002672 | 0.0 | 0.01 +Output | 0.00013542 | 0.00013542 | 0.00013542 | 0.0 | 0.00 +Modify | 11.237 | 11.237 | 11.237 | 0.0 | 44.30 +Other | | 0.000942 | | | 0.00 + +Nlocal: 3000.00 ave 3000 max 3000 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Nghost: 11077.0 ave 11077 max 11077 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Neighs: 971815.0 ave 971815 max 971815 min +Histogram: 1 0 0 0 0 0 0 0 0 0 + +Total # of neighbors = 971815 +Ave neighs/atom = 323.93833 +Neighbor list builds = 2 +Dangerous builds = 0 +Total wall time: 0:00:27 diff --git a/examples/reaxff/water/log.20Sep21.reaxff.water-acks2.g++.4 b/examples/reaxff/water/log.20Sep21.reaxff.water-acks2.g++.4 new file mode 100644 index 0000000000..c6117887de --- /dev/null +++ b/examples/reaxff/water/log.20Sep21.reaxff.water-acks2.g++.4 @@ -0,0 +1,76 @@ +LAMMPS (31 Aug 2021) +Reading data file ... + orthogonal box = (0.0000000 0.0000000 0.0000000) to (31.043046 31.043046 31.043046) + 1 by 2 by 2 MPI processor grid + reading atoms ... + 3000 atoms + read_data CPU = 0.010 seconds +Replicating atoms ... + orthogonal box = (0.0000000 0.0000000 0.0000000) to (31.043046 31.043046 31.043046) + 1 by 2 by 2 MPI processor grid + 3000 atoms + replicate CPU = 0.001 seconds +WARNING: Changed valency_val to valency_boc for X (../reaxff_ffield.cpp:295) + +CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE + +Your simulation uses code contributions which should be cited: +- pair reaxff command: +- fix acks2/reaxff command: +The log file lists these citations in BibTeX format. + +CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE + +Neighbor list info ... + update every 1 steps, delay 0 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 10.5 + ghost atom cutoff = 10.5 + binsize = 5.25, bins = 6 6 6 + 2 neighbor lists, perpetual/occasional/extra = 2 0 0 + (1) pair reaxff, perpetual + attributes: half, newton off, ghost + pair build: half/bin/newtoff/ghost + stencil: full/ghost/bin/3d + bin: standard + (2) fix acks2/reaxff, perpetual, copy from (1) + attributes: half, newton off, ghost + pair build: copy + stencil: none + bin: none +Setting up Verlet run ... + Unit style : real + Current step : 0 + Time step : 0.5 +Per MPI rank memory allocation (min/avg/max) = 271.9 | 273.6 | 275.1 Mbytes +Step Temp Press Density Volume + 0 300 1572.3807 1 29915.273 + 10 300.6152 8252.4834 1 29915.273 + 20 294.73868 2502.5661 1 29915.273 +Loop time of 8.86017 on 4 procs for 20 steps with 3000 atoms + +Performance: 0.098 ns/day, 246.116 hours/ns, 2.257 timesteps/s +98.8% CPU use with 4 MPI tasks x no OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 4.4245 | 4.5176 | 4.5927 | 3.2 | 50.99 +Neigh | 0.15776 | 0.15897 | 0.16001 | 0.2 | 1.79 +Comm | 0.06196 | 0.13722 | 0.23035 | 18.5 | 1.55 +Output | 7.534e-05 | 0.00010848 | 0.00019836 | 0.0 | 0.00 +Modify | 4.0442 | 4.0453 | 4.0465 | 0.0 | 45.66 +Other | | 0.0009994 | | | 0.01 + +Nlocal: 750.000 ave 760 max 735 min +Histogram: 1 0 0 0 1 0 0 0 0 2 +Nghost: 6231.50 ave 6255 max 6192 min +Histogram: 1 0 0 0 0 1 0 0 0 2 +Neighs: 277006.0 ave 280567 max 271394 min +Histogram: 1 0 0 0 0 1 0 0 0 2 + +Total # of neighbors = 1108026 +Ave neighs/atom = 369.34200 +Neighbor list builds = 2 +Dangerous builds = 0 +Total wall time: 0:00:09 diff --git a/examples/reaxff/water/log.20Sep21.reaxff.water-qeq.g++.1 b/examples/reaxff/water/log.20Sep21.reaxff.water-qeq.g++.1 new file mode 100644 index 0000000000..35f7774f0e --- /dev/null +++ b/examples/reaxff/water/log.20Sep21.reaxff.water-qeq.g++.1 @@ -0,0 +1,76 @@ +LAMMPS (31 Aug 2021) +Reading data file ... + orthogonal box = (0.0000000 0.0000000 0.0000000) to (31.043046 31.043046 31.043046) + 1 by 1 by 1 MPI processor grid + reading atoms ... + 3000 atoms + read_data CPU = 0.010 seconds +Replicating atoms ... + orthogonal box = (0.0000000 0.0000000 0.0000000) to (31.043046 31.043046 31.043046) + 1 by 1 by 1 MPI processor grid + 3000 atoms + replicate CPU = 0.001 seconds +WARNING: Changed valency_val to valency_boc for X (../reaxff_ffield.cpp:295) + +CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE + +Your simulation uses code contributions which should be cited: +- pair reaxff command: +- fix qeq/reaxff command: +The log file lists these citations in BibTeX format. + +CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE + +Neighbor list info ... + update every 1 steps, delay 0 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 10.5 + ghost atom cutoff = 10.5 + binsize = 5.25, bins = 6 6 6 + 2 neighbor lists, perpetual/occasional/extra = 2 0 0 + (1) pair reaxff, perpetual + attributes: half, newton off, ghost + pair build: half/bin/newtoff/ghost + stencil: full/ghost/bin/3d + bin: standard + (2) fix qeq/reaxff, perpetual, copy from (1) + attributes: half, newton off, ghost + pair build: copy + stencil: none + bin: none +Setting up Verlet run ... + Unit style : real + Current step : 0 + Time step : 0.5 +Per MPI rank memory allocation (min/avg/max) = 539.2 | 539.2 | 539.2 Mbytes +Step Temp Press Density Volume + 0 300 780.33989 1 29915.273 + 10 301.29205 5433.7415 1 29915.273 + 20 297.90652 1572.6111 1 29915.273 +Loop time of 17.1814 on 1 procs for 20 steps with 3000 atoms + +Performance: 0.050 ns/day, 477.262 hours/ns, 1.164 timesteps/s +100.0% CPU use with 1 MPI tasks x no OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 13.501 | 13.501 | 13.501 | 0.0 | 78.58 +Neigh | 0.33379 | 0.33379 | 0.33379 | 0.0 | 1.94 +Comm | 0.0026753 | 0.0026753 | 0.0026753 | 0.0 | 0.02 +Output | 0.00013304 | 0.00013304 | 0.00013304 | 0.0 | 0.00 +Modify | 3.3425 | 3.3425 | 3.3425 | 0.0 | 19.45 +Other | | 0.0009654 | | | 0.01 + +Nlocal: 3000.00 ave 3000 max 3000 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Nghost: 11077.0 ave 11077 max 11077 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Neighs: 971826.0 ave 971826 max 971826 min +Histogram: 1 0 0 0 0 0 0 0 0 0 + +Total # of neighbors = 971826 +Ave neighs/atom = 323.94200 +Neighbor list builds = 2 +Dangerous builds = 0 +Total wall time: 0:00:18 diff --git a/examples/reaxff/water/log.20Sep21.reaxff.water-qeq.g++.4 b/examples/reaxff/water/log.20Sep21.reaxff.water-qeq.g++.4 new file mode 100644 index 0000000000..dd78298db2 --- /dev/null +++ b/examples/reaxff/water/log.20Sep21.reaxff.water-qeq.g++.4 @@ -0,0 +1,76 @@ +LAMMPS (31 Aug 2021) +Reading data file ... + orthogonal box = (0.0000000 0.0000000 0.0000000) to (31.043046 31.043046 31.043046) + 1 by 2 by 2 MPI processor grid + reading atoms ... + 3000 atoms + read_data CPU = 0.010 seconds +Replicating atoms ... + orthogonal box = (0.0000000 0.0000000 0.0000000) to (31.043046 31.043046 31.043046) + 1 by 2 by 2 MPI processor grid + 3000 atoms + replicate CPU = 0.001 seconds +WARNING: Changed valency_val to valency_boc for X (../reaxff_ffield.cpp:295) + +CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE + +Your simulation uses code contributions which should be cited: +- pair reaxff command: +- fix qeq/reaxff command: +The log file lists these citations in BibTeX format. + +CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE + +Neighbor list info ... + update every 1 steps, delay 0 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 10.5 + ghost atom cutoff = 10.5 + binsize = 5.25, bins = 6 6 6 + 2 neighbor lists, perpetual/occasional/extra = 2 0 0 + (1) pair reaxff, perpetual + attributes: half, newton off, ghost + pair build: half/bin/newtoff/ghost + stencil: full/ghost/bin/3d + bin: standard + (2) fix qeq/reaxff, perpetual, copy from (1) + attributes: half, newton off, ghost + pair build: copy + stencil: none + bin: none +Setting up Verlet run ... + Unit style : real + Current step : 0 + Time step : 0.5 +Per MPI rank memory allocation (min/avg/max) = 260.5 | 262.2 | 263.6 Mbytes +Step Temp Press Density Volume + 0 300 780.34006 1 29915.273 + 10 301.29205 5433.7414 1 29915.273 + 20 297.90652 1572.6111 1 29915.273 +Loop time of 9.57716 on 4 procs for 20 steps with 3000 atoms + +Performance: 0.090 ns/day, 266.032 hours/ns, 2.088 timesteps/s +82.6% CPU use with 4 MPI tasks x no OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 4.8491 | 5.0977 | 5.5111 | 11.0 | 53.23 +Neigh | 0.19318 | 0.20407 | 0.22812 | 3.1 | 2.13 +Comm | 0.91123 | 1.3208 | 1.5758 | 21.5 | 13.79 +Output | 8.1778e-05 | 0.00012696 | 0.00025511 | 0.0 | 0.00 +Modify | 2.8506 | 2.8668 | 2.8843 | 0.8 | 29.93 +Other | | 0.08761 | | | 0.91 + +Nlocal: 750.000 ave 759 max 735 min +Histogram: 1 0 0 0 0 1 0 0 0 2 +Nghost: 6230.50 ave 6256 max 6190 min +Histogram: 1 0 0 0 0 1 0 0 1 1 +Neighs: 277008.0 ave 280943 max 271394 min +Histogram: 1 0 0 0 0 1 0 0 1 1 + +Total # of neighbors = 1108032 +Ave neighs/atom = 369.34400 +Neighbor list builds = 2 +Dangerous builds = 0 +Total wall time: 0:00:10 From 9063466c03f8d7a7e99e9733fadcfd94c9779c1f Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Tue, 21 Sep 2021 14:37:37 -0400 Subject: [PATCH 036/372] move ACKS2 force field file to potentials folder and add LAMMPS-style metadata --- examples/reaxff/water/acks2_ff.water | 84 +--------------------------- potentials/acks2_ff.water | 83 +++++++++++++++++++++++++++ 2 files changed, 84 insertions(+), 83 deletions(-) mode change 100644 => 120000 examples/reaxff/water/acks2_ff.water create mode 100644 potentials/acks2_ff.water diff --git a/examples/reaxff/water/acks2_ff.water b/examples/reaxff/water/acks2_ff.water deleted file mode 100644 index 631c78ef79..0000000000 --- a/examples/reaxff/water/acks2_ff.water +++ /dev/null @@ -1,83 +0,0 @@ -Reactive MD-force field: ACKS2 Water [CITE: Achtyl et al., Nat. Comm., 6 6539 (2015)] - 39 ! Number of general parameters - 50.0000 !Overcoordination parameter - 9.5469 !Overcoordination parameter - 26.5405 !Valency angle conjugation parameter - 1.7224 !Triple bond stabilisation parameter - 6.8702 !Triple bond stabilisation parameter - 60.4850 !C2-correction - 1.0588 !Undercoordination parameter - 4.6000 !Triple bond stabilisation parameter - 12.1176 !Undercoordination parameter - 13.3056 !Undercoordination parameter - -70.5044 !Triple bond stabilization energy - 0.0000 !Lower Taper-radius - 10.0000 !Upper Taper-radius - 2.8793 !Not used - 33.8667 !Valency undercoordination - 6.0891 !Valency angle/lone pair parameter - 1.0563 !Valency angle - 2.0384 !Valency angle parameter - 6.1431 !Not used - 6.9290 !Double bond/angle parameter - 0.3989 !Double bond/angle parameter: overcoord - 3.9954 !Double bond/angle parameter: overcoord - -2.4837 !Not used - 5.7796 !Torsion/BO parameter - 10.0000 !Torsion overcoordination - 1.9487 !Torsion overcoordination - -1.2327 !Conjugation 0 (not used) - 2.1645 !Conjugation - 1.5591 !vdWaals shielding - 0.1000 !Cutoff for bond order (*100) - 2.1365 !Valency angle conjugation parameter - 0.6991 !Overcoordination parameter - 50.0000 !Overcoordination parameter - 1.8512 !Valency/lone pair parameter - 548.6451 !Softness - 20.0000 !Not used - 5.0000 !Molecular energy (not used) - 0.0000 !Molecular energy (not used) - 2.6962 !Valency angle conjugation parameter - 3 ! Nr of atoms; cov.r; valency;a.m;Rvdw;Evdw;gammaEEM;cov.r2;# - alfa;gammavdW;valency;Eunder;Eover;chiEEM;etaEEM;n.u. - cov r3;Elp;Heat inc.;n.u.;n.u.;n.u.;n.u. - ov/un;val1;n.u.;val3,vval4 - H 0.8930 1.0000 1.0080 1.3550 0.0930 0.8203 -0.1000 1.0000 - 8.2230 33.2894 1.0000 0.0000 121.1250 3.7248 9.6093 1.0000 - -0.1000 0.0000 61.6606 3.0408 2.4197 0.0003 3.4114 0.0000 - -19.4571 4.2733 1.0338 1.0000 2.8793 0.0000 0.0000 0.0000 - O 1.2450 2.0000 15.9990 2.3890 0.1000 1.0898 1.0548 6.0000 - 9.7300 13.8449 4.0000 37.5000 116.0768 8.5000 8.3122 2.0000 - 0.9049 0.4056 59.0626 3.5027 0.7640 0.0021 0.9745 0.0000 - -3.5500 2.9000 1.0493 4.0000 2.9225 0.0000 0.0000 0.0000 - X -0.1000 2.0000 1.0080 2.0000 0.0000 1.0000 -0.1000 6.0000 - 10.0000 2.5000 4.0000 0.0000 0.0000 8.5000 1.5000 0.0000 - -0.1000 0.0000 -2.3700 8.7410 13.3640 0.6690 0.9745 0.0000 - -11.0000 2.7466 1.0338 2.0000 2.8793 0.0000 0.0000 0.0000 - 3 ! Nr of bonds; Edis1;LPpen;n.u.;pbe1;pbo5;13corr;pbo6 - pbe2;pbo3;pbo4;n.u.;pbo1;pbo2;ovcorr - 1 1 153.3934 0.0000 0.0000 -0.4600 0.0000 1.0000 6.0000 0.7300 - 6.2500 1.0000 0.0000 1.0000 -0.0790 6.0552 0.0000 0.0000 - 2 2 142.2858 145.0000 50.8293 0.2506 -0.1000 1.0000 29.7503 0.6051 - 0.3451 -0.1055 9.0000 1.0000 -0.1225 5.5000 1.0000 0.0000 - 1 2 160.0000 0.0000 0.0000 -0.5725 0.0000 1.0000 6.0000 0.5626 - 1.1150 1.0000 0.0000 0.0000 -0.0920 4.2790 0.0000 0.0000 - 1 ! Nr of off-diagonal terms; Ediss;Ro;gamma;rsigma;rpi;rpi2 - 1 2 0.0283 1.2885 10.9190 0.9215 -1.0000 -1.0000 - 6 ! Nr of angles;at1;at2;at3;Thetao,o;ka;kb;pv1;pv2 - 1 1 1 0.0000 27.9213 5.8635 0.0000 0.0000 0.0000 1.0400 - 2 2 2 80.7324 30.4554 0.9953 0.0000 1.6310 50.0000 1.0783 - 1 2 2 75.6935 50.0000 2.0000 0.0000 1.0000 0.0000 1.1680 - 1 2 1 85.8000 9.8453 2.2720 0.0000 2.8635 0.0000 1.5800 - 2 1 2 0.0000 15.0000 2.8900 0.0000 0.0000 0.0000 2.8774 - 1 1 2 0.0000 8.5744 3.0000 0.0000 0.0000 0.0000 1.0421 - 6 ! Nr of torsions;at1;at2;at3;at4;;V1;V2;V3;V2(BO);vconj;n.u;n - 1 2 2 1 2.5000 -4.0000 0.9000 -2.5000 -1.0000 0.0000 0.0000 - 1 2 2 2 0.8302 -4.0000 -0.7763 -2.5000 -1.0000 0.0000 0.0000 - 2 2 2 2 -2.5000 -4.0000 1.0000 -2.5000 -1.0000 0.0000 0.0000 - 0 1 1 0 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 - 0 1 2 0 0.0000 0.1000 0.0200 -2.5415 0.0000 0.0000 0.0000 - 0 2 2 0 0.5511 25.4150 1.1330 -5.1903 -1.0000 0.0000 0.0000 - 1 ! Nr of hydrogen bonds;at1;at2;at3;Rhb;Dehb;vhb1 - 2 1 2 2.1200 -3.5800 1.4500 19.5000 diff --git a/examples/reaxff/water/acks2_ff.water b/examples/reaxff/water/acks2_ff.water new file mode 120000 index 0000000000..26dd420190 --- /dev/null +++ b/examples/reaxff/water/acks2_ff.water @@ -0,0 +1 @@ +../../../potentials/acks2_ff.water \ No newline at end of file diff --git a/potentials/acks2_ff.water b/potentials/acks2_ff.water new file mode 100644 index 0000000000..b2488bf406 --- /dev/null +++ b/potentials/acks2_ff.water @@ -0,0 +1,83 @@ +DATE: 2021-09-21 UNITS: real CONTRIBUTOR: Stan Moore, stamoor@sandia.gov CITATION: Achtyl et al., Nat. Comm., 6 6539 (2015), COMMENT: Reactive MD-force field: ACKS2 Water + 39 ! Number of general parameters + 50.0000 !Overcoordination parameter + 9.5469 !Overcoordination parameter + 26.5405 !Valency angle conjugation parameter + 1.7224 !Triple bond stabilisation parameter + 6.8702 !Triple bond stabilisation parameter + 60.4850 !C2-correction + 1.0588 !Undercoordination parameter + 4.6000 !Triple bond stabilisation parameter + 12.1176 !Undercoordination parameter + 13.3056 !Undercoordination parameter + -70.5044 !Triple bond stabilization energy + 0.0000 !Lower Taper-radius + 10.0000 !Upper Taper-radius + 2.8793 !Not used + 33.8667 !Valency undercoordination + 6.0891 !Valency angle/lone pair parameter + 1.0563 !Valency angle + 2.0384 !Valency angle parameter + 6.1431 !Not used + 6.9290 !Double bond/angle parameter + 0.3989 !Double bond/angle parameter: overcoord + 3.9954 !Double bond/angle parameter: overcoord + -2.4837 !Not used + 5.7796 !Torsion/BO parameter + 10.0000 !Torsion overcoordination + 1.9487 !Torsion overcoordination + -1.2327 !Conjugation 0 (not used) + 2.1645 !Conjugation + 1.5591 !vdWaals shielding + 0.1000 !Cutoff for bond order (*100) + 2.1365 !Valency angle conjugation parameter + 0.6991 !Overcoordination parameter + 50.0000 !Overcoordination parameter + 1.8512 !Valency/lone pair parameter + 548.6451 !Softness + 20.0000 !Not used + 5.0000 !Molecular energy (not used) + 0.0000 !Molecular energy (not used) + 2.6962 !Valency angle conjugation parameter + 3 ! Nr of atoms; cov.r; valency;a.m;Rvdw;Evdw;gammaEEM;cov.r2;# + alfa;gammavdW;valency;Eunder;Eover;chiEEM;etaEEM;n.u. + cov r3;Elp;Heat inc.;n.u.;n.u.;n.u.;n.u. + ov/un;val1;n.u.;val3,vval4 + H 0.8930 1.0000 1.0080 1.3550 0.0930 0.8203 -0.1000 1.0000 + 8.2230 33.2894 1.0000 0.0000 121.1250 3.7248 9.6093 1.0000 + -0.1000 0.0000 61.6606 3.0408 2.4197 0.0003 3.4114 0.0000 + -19.4571 4.2733 1.0338 1.0000 2.8793 0.0000 0.0000 0.0000 + O 1.2450 2.0000 15.9990 2.3890 0.1000 1.0898 1.0548 6.0000 + 9.7300 13.8449 4.0000 37.5000 116.0768 8.5000 8.3122 2.0000 + 0.9049 0.4056 59.0626 3.5027 0.7640 0.0021 0.9745 0.0000 + -3.5500 2.9000 1.0493 4.0000 2.9225 0.0000 0.0000 0.0000 + X -0.1000 2.0000 1.0080 2.0000 0.0000 1.0000 -0.1000 6.0000 + 10.0000 2.5000 4.0000 0.0000 0.0000 8.5000 1.5000 0.0000 + -0.1000 0.0000 -2.3700 8.7410 13.3640 0.6690 0.9745 0.0000 + -11.0000 2.7466 1.0338 2.0000 2.8793 0.0000 0.0000 0.0000 + 3 ! Nr of bonds; Edis1;LPpen;n.u.;pbe1;pbo5;13corr;pbo6 + pbe2;pbo3;pbo4;n.u.;pbo1;pbo2;ovcorr + 1 1 153.3934 0.0000 0.0000 -0.4600 0.0000 1.0000 6.0000 0.7300 + 6.2500 1.0000 0.0000 1.0000 -0.0790 6.0552 0.0000 0.0000 + 2 2 142.2858 145.0000 50.8293 0.2506 -0.1000 1.0000 29.7503 0.6051 + 0.3451 -0.1055 9.0000 1.0000 -0.1225 5.5000 1.0000 0.0000 + 1 2 160.0000 0.0000 0.0000 -0.5725 0.0000 1.0000 6.0000 0.5626 + 1.1150 1.0000 0.0000 0.0000 -0.0920 4.2790 0.0000 0.0000 + 1 ! Nr of off-diagonal terms; Ediss;Ro;gamma;rsigma;rpi;rpi2 + 1 2 0.0283 1.2885 10.9190 0.9215 -1.0000 -1.0000 + 6 ! Nr of angles;at1;at2;at3;Thetao,o;ka;kb;pv1;pv2 + 1 1 1 0.0000 27.9213 5.8635 0.0000 0.0000 0.0000 1.0400 + 2 2 2 80.7324 30.4554 0.9953 0.0000 1.6310 50.0000 1.0783 + 1 2 2 75.6935 50.0000 2.0000 0.0000 1.0000 0.0000 1.1680 + 1 2 1 85.8000 9.8453 2.2720 0.0000 2.8635 0.0000 1.5800 + 2 1 2 0.0000 15.0000 2.8900 0.0000 0.0000 0.0000 2.8774 + 1 1 2 0.0000 8.5744 3.0000 0.0000 0.0000 0.0000 1.0421 + 6 ! Nr of torsions;at1;at2;at3;at4;;V1;V2;V3;V2(BO);vconj;n.u;n + 1 2 2 1 2.5000 -4.0000 0.9000 -2.5000 -1.0000 0.0000 0.0000 + 1 2 2 2 0.8302 -4.0000 -0.7763 -2.5000 -1.0000 0.0000 0.0000 + 2 2 2 2 -2.5000 -4.0000 1.0000 -2.5000 -1.0000 0.0000 0.0000 + 0 1 1 0 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 + 0 1 2 0 0.0000 0.1000 0.0200 -2.5415 0.0000 0.0000 0.0000 + 0 2 2 0 0.5511 25.4150 1.1330 -5.1903 -1.0000 0.0000 0.0000 + 1 ! Nr of hydrogen bonds;at1;at2;at3;Rhb;Dehb;vhb1 + 2 1 2 2.1200 -3.5800 1.4500 19.5000 From 0ddf63acc9067d4457a73f6dcd0148d0d1ba49f6 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Tue, 21 Sep 2021 14:41:37 -0400 Subject: [PATCH 037/372] update ACKS2 unit test with potential parameters from example --- .../tests/atomic-pair-reaxff-acks2.yaml | 289 +++++++++--------- 1 file changed, 143 insertions(+), 146 deletions(-) diff --git a/unittest/force-styles/tests/atomic-pair-reaxff-acks2.yaml b/unittest/force-styles/tests/atomic-pair-reaxff-acks2.yaml index 9fc6e54858..57c57563fe 100644 --- a/unittest/force-styles/tests/atomic-pair-reaxff-acks2.yaml +++ b/unittest/force-styles/tests/atomic-pair-reaxff-acks2.yaml @@ -1,6 +1,6 @@ --- lammps_version: 31 Aug 2021 -date_generated: Tue Sep 14 16:33:13 2021 +date_generated: Tue Sep 21 14:40:37 2021 epsilon: 2e-10 skip_tests: omp prerequisites: ! | @@ -15,162 +15,159 @@ pre_commands: ! | atom_style charge lattice diamond 3.77 region box block 0 2 0 2 0 2 - create_box 3 box + create_box 2 box create_atoms 1 box displace_atoms all random 0.1 0.1 0.1 623426 mass 1 1.0 - mass 2 12.0 - mass 3 16.0 + mass 2 16.0 set type 1 type/fraction 2 0.5 998877 - set type 2 type/fraction 3 0.5 887766 - set type 1 charge 0.00 - set type 2 charge 0.01 - set type 3 charge -0.01 + set type 1 charge 0.01 + set type 2 charge -0.01 velocity all create 100 4534624 loop geom post_commands: ! | - fix qeq all acks2/reaxff 1 0.0 8.0 1.0e-20 reaxff + fix qeq all acks2/reaxff 1 0.0 8.0 1.0e-6 reaxff input_file: in.empty pair_style: reaxff NULL checkqeq yes pair_coeff: ! | - * * ffield.reax.mattsson H C O + * * acks2_ff.water H O extract: ! "" natoms: 64 -init_vdwl: -3296.3503506624793 -init_coul: -46582.941410876396 -init_stress: ! |- - -4.0889791539749363e+03 -5.3386746000293797e+03 -4.0808531437530951e+03 8.4337212661084749e+01 1.2848022290076187e+02 2.1468330620396631e+02 +init_vdwl: -1297.3939979189847 +init_coul: -349.2893351895153 +init_stress: ! |2- + 9.3647103227325567e+02 8.5668675494725835e+02 1.0717851756660184e+03 -2.6798362900590985e+02 1.0204112267848591e+02 2.6885540660577738e+02 init_forces: ! |2 - 1 -1.1929105250740845e+02 -1.4227215649327911e+02 2.1690003483475269e+02 - 2 -1.3331393160584241e+02 -2.4072728673874801e+02 -2.5617184179287540e+02 - 3 -1.2277758113579102e+02 3.0537119398406725e+02 5.2041769044942647e+01 - 4 4.3936404332100686e+01 -5.5511409696656926e+01 1.1097037460922759e+02 - 5 1.7864066365499838e+02 6.4034214571442291e+01 -1.0759738771465670e+02 - 6 3.5224339213063365e+02 -3.4719844127558417e+02 2.6425030914356228e+02 - 7 -2.0955545981628606e+02 -1.5858086260185297e+02 -5.7110672086393009e+01 - 8 -1.7044115435176795e+02 -5.3258138982765971e+01 1.2346092050629277e+02 - 9 -4.3715452075923416e+01 -3.8277423788683727e+01 6.3239179557158693e+01 - 10 9.3379874863494152e+01 5.9621377499868792e+01 9.2692428302505945e+01 - 11 -2.9198145425949332e+02 3.4467679177423884e+02 4.2632171085782431e+02 - 12 -2.6868067466378778e+02 -6.8644694781243447e+02 3.6910245078857537e+02 - 13 7.2123761164950440e+02 5.3620750239907272e+02 -3.8334401482414739e+02 - 14 8.4304627105934017e+01 -7.2466826898455409e+01 -8.7680132417144804e+01 - 15 -8.6225588839900468e+01 1.2225376793640189e+02 3.1577248706704783e+01 - 16 9.5393618380056623e+01 9.2886438384296099e+01 -7.3037388977053901e+00 - 17 1.3836060168005312e+02 -2.7473812676174262e+01 -9.4295524163369763e+01 - 18 -1.0165081413937811e+02 -1.1015152146781125e+02 5.1410985169799659e+01 - 19 1.5206789621670023e+02 2.5283948687709136e+02 -1.3894819646210772e+02 - 20 -1.1131767660064460e+02 -3.4867570304165632e+01 -2.2712139843531563e+01 - 21 -9.3180727628491212e+01 -7.7585741763401899e+01 -1.0055132802024193e+02 - 22 1.5388786773142479e+02 -1.2742120442767296e+02 5.9418228396501462e+01 - 23 1.4353594998513574e+02 1.9241855678142144e+01 -8.1940929642015490e+01 - 24 -1.2522859809648111e+02 3.4415263825860251e+02 -1.1666304527016791e+02 - 25 -6.1721877485216332e+01 2.1180528773074695e+02 -7.5185905744284099e+01 - 26 2.9047739438739399e+02 -2.0857900661856581e+02 2.4684212082797956e+02 - 27 1.9541979561640971e+01 -1.1873091999325840e+01 2.3080404132665154e+02 - 28 1.4779678412475869e+02 1.5072902909656133e+02 3.0786573270627889e+02 - 29 -5.7906765009047632e+01 5.2017884794099068e+01 6.2397336175147302e+00 - 30 -5.0895158598354335e+01 -2.5651607581450094e+02 -2.3443114587348992e+02 - 31 -1.5901188482871649e+02 1.7515333469043051e+02 -1.3486355088745134e+02 - 32 -1.3360496387491185e+02 -1.6026008719190622e+02 -6.3974117051860412e+02 - 33 -2.5865357552595057e+01 -1.3593003904804139e+01 3.6914416827045400e+01 - 34 -5.5345811893104553e+01 7.9787476336364392e+01 -1.1478329621445167e+02 - 35 6.2660444245581886e+01 -3.0334076804276236e+02 2.3657913727895405e+01 - 36 5.6628731130607559e+02 6.3924255616951359e+02 -6.4337876635896555e+02 - 37 -3.2625798296558662e+02 -3.4996432828486286e+02 4.6462264485478067e+02 - 38 -1.7064714626235613e+02 5.4874767598319613e+02 -5.7882903400837307e+01 - 39 2.2473038304436571e+01 -6.2855043226973365e+01 6.4935240565245138e+00 - 40 -2.0126181967178340e+02 1.9610382824263672e+02 4.3026826548397452e+01 - 41 -1.3922156023283114e+02 6.4923943342784469e+01 -4.9530732454693187e+01 - 42 2.5995311603257232e+02 6.2417650092087072e+01 -9.7757113311038410e+01 - 43 2.9060357406136120e+02 1.4859563620459687e+02 1.2902634448684583e+02 - 44 7.2822452489664343e+01 -9.5648852111255877e+01 -8.7605260909388264e+01 - 45 -7.6599938131930799e+01 2.7335310025430903e+02 1.4131077433184396e+02 - 46 -2.7864489804675839e+02 -3.3973466156303232e+02 -7.8954068435531696e+01 - 47 -5.5399367185908162e+01 -1.7022266452251142e+02 -3.6356135964982343e+01 - 48 4.5552031101078306e+01 -1.9615434812741569e+02 1.3353869041480218e+01 - 49 -2.6504355894047563e+02 3.8696727838168464e+01 1.6916938099889404e+02 - 50 4.3639038114698417e+02 -3.5529826932462339e+02 2.2030242322174141e+02 - 51 2.5201585479728806e+01 -5.5088430398826756e+02 2.9465735389668356e+02 - 52 -9.0610418024348732e+01 7.6451159625662612e+01 -1.0407170461264690e+02 - 53 -7.3230804863728633e+02 4.9918863718008072e+02 -3.7838006824966345e+02 - 54 -4.7813763806167337e+01 1.4821304034781713e+02 1.0972324440296121e+02 - 55 9.5154177757014878e+01 -1.6691953935970690e+02 6.0033792912059681e+01 - 56 1.3771822987048927e+02 -2.7596944143424753e+02 -4.7071002706580586e+01 - 57 7.7412666503504113e+01 -4.7147589918747506e+01 -7.4398816462734942e+01 - 58 -6.6332114011965132e+01 1.0893333226816128e+02 1.4604164580109380e+00 - 59 -1.4727436711601135e+02 1.3495995435479597e+02 1.3790547616349306e+02 - 60 4.4129860556328424e+01 8.8352155376666673e+01 -1.4754960139395871e+02 - 61 1.4664747834652729e+00 -1.6970260796882511e+02 -9.4741886350021787e+01 - 62 4.4268359315177207e+01 4.4244449542813292e+01 1.2469468703392482e+02 - 63 1.7715967912563977e+02 -8.9272317987559674e+01 -1.4306028518778581e+02 - 64 4.5068920113622809e+01 1.1297321948286621e+02 6.4572008812611145e+01 -run_vdwl: -3296.3469885397826 -run_coul: -823492.7373897503 -run_stress: ! |- - -1.8585481565254432e+05 -1.6813801222973305e+05 -1.4502245083109321e+05 -5.8156385069933705e+04 -2.9152676301583182e+04 4.2004485688893306e+04 + 1 -8.5822846386412635e+01 -7.9369576751834245e+01 1.6106560490149509e+00 + 2 -1.0843394466378308e+02 -4.3813515523053191e+01 -3.9407676300231245e+01 + 3 -6.7491797179727740e+01 -3.8573881702124559e+01 1.2133445481272814e+02 + 4 1.1418943664290531e+02 1.7252680501420764e+02 -8.6932690926519868e+01 + 5 -1.5480001641346223e+02 -9.1343148644148698e+01 -6.3392888717584057e+01 + 6 -1.6228451492770407e+02 -1.3560378025142938e+02 4.4787280356909562e+01 + 7 1.7066765216762334e+01 -3.6253015067204764e+01 2.3900733200674996e+01 + 8 1.7175579593805583e+01 -3.3862979409621403e+01 4.2582783131382172e+01 + 9 1.0004513885070307e+02 5.1864908003487201e+01 -2.2468270117048530e+02 + 10 9.7025361843100711e+01 2.2038104385462688e+01 -3.4242013736863832e+01 + 11 -2.6541596471719490e+01 -4.9222417815036899e+00 6.4856936928508404e+01 + 12 -9.3396700428964365e+01 -4.9541763680867925e+00 -5.9990663993615549e+01 + 13 -2.3141313753551660e+01 8.1894477996992805e+01 1.9238751151518213e+02 + 14 8.4589565847848675e+01 -1.1183788572352451e+02 -5.4165526940483907e+01 + 15 -3.4239013691473950e+01 1.3929428839740140e+02 3.9290024593689111e+01 + 16 1.2088267503273376e+02 3.2042275258721425e+01 5.4107108106767754e+01 + 17 3.2346220461035415e+01 4.2499048497105640e+01 8.1376975887614506e+01 + 18 -6.0647741703275742e+00 -1.4018109393098192e+02 5.8616405437664739e+01 + 19 9.1666507463385059e+01 1.1016815495755246e+02 -4.5264193934559110e+01 + 20 -3.1654845615764650e+01 -9.7690216565431399e+01 6.8192052250211930e+00 + 21 -1.7504767753092645e+02 1.0235169995595496e+02 -1.5504170180756984e+02 + 22 1.3515000888521683e+02 -1.1391169320242939e+02 5.0422479748502781e+01 + 23 1.5226155466909978e+02 1.1251242056507245e+02 2.8908809508954995e+01 + 24 4.5673174617939559e+01 -2.9765589151712804e+00 1.1201098293723224e+02 + 25 -8.0626609009709469e+01 1.4542722841810050e+02 -6.5825324996096569e+01 + 26 9.8788867981770935e+01 -6.6119047910259084e+01 -6.0121583431185648e+01 + 27 -2.3508186429826658e+01 4.4095426742690677e+01 7.3380624386319383e+01 + 28 -4.9939889581032183e+01 -2.5726868887438359e+00 -7.1709200137740282e+01 + 29 -9.2824683016604240e+01 1.0016662459421813e+02 5.3029118400145101e+01 + 30 -5.0324180905891332e+01 -1.0711270827022628e+02 -1.4620217292551081e+00 + 31 -8.6845426558096676e+01 1.2100579669840202e+02 -5.4582881610975292e+01 + 32 -1.6213022359935628e+01 -2.6888179426210176e+01 -1.0615183262438707e+02 + 33 -6.2982961620998680e+01 -8.1919674024609321e+01 6.4050776660349669e+01 + 34 8.7581328185460421e+01 4.2666146745076745e+01 5.3950505202433729e-01 + 35 -1.2361998477328336e+02 1.1686995903522990e+02 1.2094481318167102e+02 + 36 1.1473681463640116e+02 -2.6271255540417172e+01 -3.7210996109828777e+01 + 37 -4.0135238010632762e+01 3.9313619203415108e+01 -8.3047981684448686e+01 + 38 -1.9316433954473911e+02 -1.0139775864779574e+02 2.7589667560634794e+00 + 39 1.2552592384641623e+02 -1.1212234204352232e+00 1.0176874650130399e+02 + 40 8.1549799007301473e+00 -6.3217172136832247e+01 4.0584836732210185e+01 + 41 -1.2170137005837520e+02 -3.2088646993981939e+01 9.9967155109062098e+00 + 42 -5.8610301146536131e+01 9.7774040398281343e+00 -3.1105342278948164e+01 + 43 9.2900984999350058e+00 3.6773643911263839e+01 8.7991195290889635e+01 + 44 4.4036917977035529e+01 -4.7923047818761667e+01 -1.0007242125824688e+02 + 45 -2.4202782456986336e+00 1.2367270013009946e+02 1.0463134243133872e+02 + 46 1.4728267932818760e+01 -4.0941423262752750e+01 1.4254572660768059e+01 + 47 2.7792886678594435e+01 -5.7346568841015014e+01 2.7019880002640151e-01 + 48 2.1313709590089127e+02 -2.8759698998654602e+02 -1.5893579834743267e+02 + 49 -7.6087015037963440e+01 5.1517045637383859e+01 4.1003471997973655e+01 + 50 3.4830551638265256e+01 1.1779297367278961e+02 1.4146349922667432e+02 + 51 4.4742061380191323e+01 -3.0808697249709763e+01 1.3899307687587697e+02 + 52 -9.9599182003292825e+01 6.3646586633025350e+01 -8.5951227608563954e+01 + 53 -4.0424532490793119e+01 7.9078394393892495e+01 -1.9584469611634324e+02 + 54 -6.0156090456450073e-01 1.6996874014736914e+01 1.0184997110183269e+02 + 55 8.0119317663606964e+01 -1.2946637517882493e+02 5.7104454662996154e+01 + 56 2.3923827645007376e+02 -2.7192633009591060e+02 -2.0846526639908637e+02 + 57 6.9167941318700514e+01 1.4648695718006923e+02 2.6090506523999185e+01 + 58 -1.2159936738533791e+01 2.6076859393766380e+01 -1.5829530346190136e+01 + 59 -2.1058265418973730e+02 1.4833581346902625e+02 1.4672997897073574e+02 + 60 -1.2815092153686331e+01 1.3066805529762155e+02 -1.7104079955423418e+02 + 61 -5.9550068824404057e+01 -1.2724099611625590e+02 -9.8808777300378395e+01 + 62 1.3648621433690354e+02 -2.5624701042721298e+01 6.3872134642471366e+01 + 63 9.1209601191896525e+01 5.3646370721534675e-01 -6.8236805633005815e+01 + 64 3.6016420193926102e+01 3.4780490738745506e+01 6.3201690887835824e+01 +run_vdwl: -1297.3925912268453 +run_coul: -349.2889143327221 +run_stress: ! |2- + 9.3643645975627146e+02 8.5665048129081458e+02 1.0717840034918067e+03 -2.6798002401255013e+02 1.0202516369060469e+02 2.6885167297657557e+02 run_forces: ! |2 - 1 -3.1538860418527776e+02 -2.1667070105808438e+02 2.4327387701805449e+01 - 2 1.6469401642403250e+03 -2.2638495114953002e+03 8.1885571019561985e+03 - 3 -9.5233405445336075e+02 -1.3724167062887382e+03 5.1002346300387226e+03 - 4 -1.9086024577541921e+04 2.6665514538832704e+04 -1.5472292269485462e+04 - 5 7.8578011077546921e+02 1.1543491971265603e+03 -2.9601286588036862e+02 - 6 -4.1699480975660663e+03 6.3051224921793291e+03 -3.3124016041183961e+04 - 7 -1.7016494722270763e+03 -1.6238373161421100e+03 -3.1498701157264741e+03 - 8 -8.7621187948259321e+03 -5.8937249360767862e+02 1.0215462943849338e+03 - 9 2.6988978990627977e+04 -7.5719531974766342e+03 2.4402547340884375e+04 - 10 -5.5005889662574373e+02 2.8664451881339041e+03 3.6505720022004916e+03 - 11 -6.7136518028847252e+02 1.6951905338011699e+01 1.7613233778368631e+01 - 12 -4.1634897368756356e+02 -8.5427900773396550e+02 1.8957750739417386e+03 - 13 -2.4216201154307335e+04 -1.5001197373926550e+04 -1.3022247607934969e+04 - 14 -1.0405638578539543e+04 2.0054631376981383e+03 -1.7796805319319501e+04 - 15 1.1107583611850200e+03 1.3946144565444863e+04 2.5796292910159968e+03 - 16 7.0815040550639987e+03 -1.4994388002155864e+02 5.3941167060157622e+03 - 17 -1.0906710352768299e+02 -3.7797021439898720e+02 -7.1043712362237557e+02 - 18 3.1335355909249570e+03 -1.2979911718656356e+04 4.0028269316329097e+03 - 19 3.0219327888397208e+02 1.3132901589285169e+02 -2.2586289218389567e+02 - 20 -9.9495344251336473e+02 -1.0100323982979886e+04 7.2449256267058790e+03 - 21 -4.1626605209794234e+03 1.8207407400795291e+04 -1.9931886311902479e+04 - 22 -1.3809401079344286e+02 -1.3699694825434080e+03 4.9000482399450652e+02 - 23 -8.4097849417170528e+03 -6.7421987083314089e+03 2.1165500301472144e+04 - 24 6.6770947596674314e+03 7.0334161079873766e+03 -4.2395467771461354e+03 - 25 -3.0766262766235326e+02 4.5208369485829849e+01 -2.4215550554801229e+02 - 26 4.3282796665842488e+03 3.9725663253263883e+03 -1.5104557062597873e+03 - 27 3.4305125101384992e+03 -2.0757974258609988e+02 2.2419823347029745e+04 - 28 -1.2042796161721953e+03 2.8601773568967531e+02 -3.7347872364058077e+02 - 29 -1.4221968667948236e+03 -1.6884513031798073e+02 1.4718645011377384e+03 - 30 5.6087854923317345e+03 -1.3929352331590022e+04 8.9229119079296124e+03 - 31 1.8012567809349953e+03 1.7963340895216925e+03 -6.0693227081363002e+03 - 32 -2.4212994769744628e+02 -1.4663787679151267e+02 -2.6941110807653297e+02 - 33 -8.0205637538401052e+03 -6.7997183454421474e+03 7.0360939390233079e+03 - 34 -5.6825090133159119e+03 -4.9410619181051680e+02 -2.5378668650973555e+03 - 35 2.8749496957898991e+04 -4.6373022885745434e+02 -6.1483933048064773e+03 - 36 3.4096922298128607e+02 1.6757417075507853e+03 -8.8894223458424244e+02 - 37 -3.7343729694303511e+02 4.0656193398515529e+02 -1.8738927422246070e+02 - 38 1.4904299646376625e+04 -1.2064340896314498e+04 2.6539478453790794e+04 - 39 -7.0532532206553833e+03 -2.3957404157713672e+03 -1.1447343311718747e+04 - 40 6.1842420953100736e+03 -3.6659635754801893e+03 2.1054957749221794e+03 - 41 -8.1984840065986391e+03 -1.0365942326176664e+04 1.3952656987833076e+04 - 42 5.9577914748549119e+02 -1.7775021048376038e+02 -1.2021290039743464e+04 - 43 -1.9747460399160684e+03 1.6750061311272725e+03 2.8167237669329461e+03 - 44 -1.4678732439406349e+02 -2.4848519095612715e+04 4.7216919473597045e+02 - 45 4.5832362832616300e+03 1.2867485447504534e+04 1.1425823083324687e+04 - 46 2.1681087046653184e+02 -4.4934132470777809e+02 2.3087937120670163e+03 - 47 -5.2078060850766360e+02 -1.0208437402520989e+03 -2.2033873154011167e+03 - 48 2.6765788351065014e+04 -4.6344248657866183e+03 -2.9668864467185216e+01 - 49 -3.3609820362098151e+04 7.0960668414334923e+03 2.0836704420875976e+03 - 50 5.2223928486543973e+03 -2.9199713953576970e+03 4.6245497550815480e+03 - 51 5.5712197650885059e+01 -1.4394835567396435e+03 -1.5189574303433574e+01 - 52 6.0412308047232736e+03 -4.5508173248590192e+03 -2.8441095710784916e+03 - 53 2.9534447696061790e+02 -1.3661813387871148e+03 -4.0034798093494584e+02 - 54 -6.1569823475168255e+02 -4.7361494916845299e+02 -2.9928489978624157e+02 - 55 7.4978541085184744e+01 -1.5875365627631319e+02 1.2957750158518593e+02 - 56 -1.0429337846817589e+04 1.1766963241565751e+04 -4.9827771650037830e+03 - 57 1.1099912931100564e+04 -5.5053980025296833e+03 -1.1685512724787503e+04 - 58 -1.9431048462192582e+03 5.6326023332911245e+03 -2.6172065262884835e+03 - 59 -5.3914957888616245e+03 6.1370263012888418e+03 9.9937202300412118e+03 - 60 -1.5282247767913028e+04 5.2869249261205459e+03 -8.0462797163142568e+03 - 61 8.2234507406447065e+03 -6.6972733225279626e+00 -4.5676623487624911e+03 - 62 -1.2440498519086455e+03 1.5259685674863772e+03 -6.4071229464774854e+02 - 63 5.2477591133845465e+02 -1.1707580235553110e+03 -5.2912221162139249e+03 - 64 1.1950180636484571e+04 2.2135788612431359e+04 -8.1931421390373671e+03 + 1 -8.5827965838822820e+01 -7.9359271139126264e+01 1.6127525356102561e+00 + 2 -1.0843436672251677e+02 -4.3814139732181857e+01 -3.9406607542222510e+01 + 3 -6.7492083656808632e+01 -3.8575728466202385e+01 1.2133197517518491e+02 + 4 1.1418876828000818e+02 1.7252678649458642e+02 -8.6933223217442773e+01 + 5 -1.5480050101375753e+02 -9.1342293838693010e+01 -6.3395363459905518e+01 + 6 -1.6227984703364643e+02 -1.3560678614306067e+02 4.4782848665290516e+01 + 7 1.7063906268105363e+01 -3.6249539555389738e+01 2.3896536122109563e+01 + 8 1.7173736430563086e+01 -3.3863028773588525e+01 4.2583259003193767e+01 + 9 1.0004329379912333e+02 5.1862502341970576e+01 -2.2468443784238349e+02 + 10 9.7028044908312935e+01 2.2042751909354905e+01 -3.4238122073248249e+01 + 11 -2.6543887741587298e+01 -4.9267223464163576e+00 6.4854257442985755e+01 + 12 -9.3397331473421772e+01 -4.9544126400362378e+00 -5.9994097716401974e+01 + 13 -2.3143959522538509e+01 8.1894434548585735e+01 1.9238488136749785e+02 + 14 8.4597346217300185e+01 -1.1184821078079467e+02 -5.4187220755049388e+01 + 15 -3.4246645440992793e+01 1.3930472673165337e+02 3.9298339836087443e+01 + 16 1.2088663434640149e+02 3.2045653041325409e+01 5.4107356063286232e+01 + 17 3.2344801990864902e+01 4.2495466055374912e+01 8.1380556918608406e+01 + 18 -6.0629814835497786e+00 -1.4018347587983027e+02 5.8616532549916684e+01 + 19 9.1668316317277643e+01 1.1016761599722155e+02 -4.5264851519270955e+01 + 20 -3.1661080558093250e+01 -9.7680702896983348e+01 6.8089649377537471e+00 + 21 -1.7504882000949635e+02 1.0234568159801194e+02 -1.5503797209691280e+02 + 22 1.3515176946539535e+02 -1.1391314778891378e+02 5.0421781563376783e+01 + 23 1.5225805548284856e+02 1.1251694788182195e+02 2.8911799015254019e+01 + 24 4.5671821516556882e+01 -2.9712126336906026e+00 1.1201353591449349e+02 + 25 -8.0627746327573178e+01 1.4542776036556199e+02 -6.5824093500000785e+01 + 26 9.8790036727131479e+01 -6.6121985803089416e+01 -6.0121154076738584e+01 + 27 -2.3512123870795563e+01 4.4094474376814425e+01 7.3384376836634246e+01 + 28 -4.9928736258107968e+01 -2.5724538172895866e+00 -7.1693492014796476e+01 + 29 -9.2823407725918827e+01 1.0016882598262185e+02 5.3030803035763270e+01 + 30 -5.0321168291072418e+01 -1.0711082393695267e+02 -1.4638496337629203e+00 + 31 -8.6846002847220433e+01 1.2100634256063029e+02 -5.4584411880114892e+01 + 32 -1.6219404118855032e+01 -2.6891589800492980e+01 -1.0615164705356315e+02 + 33 -6.2984408250152960e+01 -8.1920511440025862e+01 6.4052477524155108e+01 + 34 8.7584120578234021e+01 4.2668993120707533e+01 5.4253584758780005e-01 + 35 -1.2362808878403892e+02 1.1688109216455464e+02 1.2093979474299084e+02 + 36 1.1473888991898984e+02 -2.6271101490360707e+01 -3.7206487841806783e+01 + 37 -4.0132079875452966e+01 3.9299811276833019e+01 -8.3044821777934487e+01 + 38 -1.9316614443092971e+02 -1.0140333932035796e+02 2.7560175575302850e+00 + 39 1.2552859550392310e+02 -1.1184913429600916e+00 1.0176905197161516e+02 + 40 8.1590626286590204e+00 -6.3218838258680712e+01 4.0583255993909901e+01 + 41 -1.2169834757235111e+02 -3.2097312325202040e+01 1.0001409247989988e+01 + 42 -5.8616975974470222e+01 9.7696159132284262e+00 -3.1108534973771778e+01 + 43 9.2952531731001411e+00 3.6779767322207100e+01 8.7990306325352847e+01 + 44 4.4052466263114397e+01 -4.7924356022608613e+01 -1.0008614242013839e+02 + 45 -2.4252727319451299e+00 1.2367164789950478e+02 1.0463926519518796e+02 + 46 1.4731101827029459e+01 -4.0943102986905330e+01 1.4256395238164547e+01 + 47 2.7794538998914781e+01 -5.7350223083130913e+01 2.6930559254095088e-01 + 48 2.1313677796990984e+02 -2.8760101981631448e+02 -1.5893328867662674e+02 + 49 -7.6089885956458176e+01 5.1521889230874386e+01 4.1004129662095501e+01 + 50 3.4828518243909208e+01 1.1779161534103518e+02 1.4146465209226540e+02 + 51 4.4744066574630622e+01 -3.0810651609662180e+01 1.3899805176340075e+02 + 52 -9.9598007214587028e+01 6.3644580520900348e+01 -8.5955263183141284e+01 + 53 -4.0428023055237681e+01 7.9080858950568384e+01 -1.9584946778319107e+02 + 54 -5.9308389882852453e-01 1.6986036769461592e+01 1.0185469452647123e+02 + 55 8.0118075268567154e+01 -1.2946734277195114e+02 5.7105263745955192e+01 + 56 2.3924177355107173e+02 -2.7192434912565477e+02 -2.0846127351799754e+02 + 57 6.9162044556582686e+01 1.4648989397678352e+02 2.6101714291842192e+01 + 58 -1.2161346123654885e+01 2.6081531975385168e+01 -1.5832872807506224e+01 + 59 -2.1058227257862865e+02 1.4833711644656287e+02 1.4673132278960117e+02 + 60 -1.2813479027767888e+01 1.3067008314489073e+02 -1.7104229113232506e+02 + 61 -5.9549865680620421e+01 -1.2723724021560577e+02 -9.8807654269817007e+01 + 62 1.3647609462574655e+02 -2.5622559618720544e+01 6.3866569628557244e+01 + 63 9.1209357458522163e+01 5.3855066756439851e-01 -6.8238721360492946e+01 + 64 3.6018072199105433e+01 3.4782910794276354e+01 6.3200593406302865e+01 ... From c9a8319a93c504a15a7e10a6851a117131f8be3a Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Tue, 21 Sep 2021 14:43:47 -0400 Subject: [PATCH 038/372] use more relealistic element ratio --- .../tests/atomic-pair-reaxff-acks2.yaml | 280 +++++++++--------- 1 file changed, 140 insertions(+), 140 deletions(-) diff --git a/unittest/force-styles/tests/atomic-pair-reaxff-acks2.yaml b/unittest/force-styles/tests/atomic-pair-reaxff-acks2.yaml index 57c57563fe..c7a767a252 100644 --- a/unittest/force-styles/tests/atomic-pair-reaxff-acks2.yaml +++ b/unittest/force-styles/tests/atomic-pair-reaxff-acks2.yaml @@ -1,6 +1,6 @@ --- lammps_version: 31 Aug 2021 -date_generated: Tue Sep 21 14:40:37 2021 +date_generated: Tue Sep 21 15:02:20 2021 epsilon: 2e-10 skip_tests: omp prerequisites: ! | @@ -20,154 +20,154 @@ pre_commands: ! | displace_atoms all random 0.1 0.1 0.1 623426 mass 1 1.0 mass 2 16.0 - set type 1 type/fraction 2 0.5 998877 + set type 1 type/fraction 2 0.333333333 998877 set type 1 charge 0.01 - set type 2 charge -0.01 + set type 2 charge -0.02 velocity all create 100 4534624 loop geom post_commands: ! | - fix qeq all acks2/reaxff 1 0.0 8.0 1.0e-6 reaxff + fix qeq all acks2/reaxff 1 0.0 8.0 1.0e-20 reaxff input_file: in.empty pair_style: reaxff NULL checkqeq yes pair_coeff: ! | * * acks2_ff.water H O extract: ! "" natoms: 64 -init_vdwl: -1297.3939979189847 -init_coul: -349.2893351895153 -init_stress: ! |2- - 9.3647103227325567e+02 8.5668675494725835e+02 1.0717851756660184e+03 -2.6798362900590985e+02 1.0204112267848591e+02 2.6885540660577738e+02 +init_vdwl: -1315.674323112547 +init_coul: -251.82520863781136 +init_stress: ! |- + -3.6252552634610828e+02 -5.3642230434120154e+02 -3.2708821928047780e+02 -1.8739746594217769e+02 -7.3161204592256269e+01 2.8634078571435208e+02 init_forces: ! |2 - 1 -8.5822846386412635e+01 -7.9369576751834245e+01 1.6106560490149509e+00 - 2 -1.0843394466378308e+02 -4.3813515523053191e+01 -3.9407676300231245e+01 - 3 -6.7491797179727740e+01 -3.8573881702124559e+01 1.2133445481272814e+02 - 4 1.1418943664290531e+02 1.7252680501420764e+02 -8.6932690926519868e+01 - 5 -1.5480001641346223e+02 -9.1343148644148698e+01 -6.3392888717584057e+01 - 6 -1.6228451492770407e+02 -1.3560378025142938e+02 4.4787280356909562e+01 - 7 1.7066765216762334e+01 -3.6253015067204764e+01 2.3900733200674996e+01 - 8 1.7175579593805583e+01 -3.3862979409621403e+01 4.2582783131382172e+01 - 9 1.0004513885070307e+02 5.1864908003487201e+01 -2.2468270117048530e+02 - 10 9.7025361843100711e+01 2.2038104385462688e+01 -3.4242013736863832e+01 - 11 -2.6541596471719490e+01 -4.9222417815036899e+00 6.4856936928508404e+01 - 12 -9.3396700428964365e+01 -4.9541763680867925e+00 -5.9990663993615549e+01 - 13 -2.3141313753551660e+01 8.1894477996992805e+01 1.9238751151518213e+02 - 14 8.4589565847848675e+01 -1.1183788572352451e+02 -5.4165526940483907e+01 - 15 -3.4239013691473950e+01 1.3929428839740140e+02 3.9290024593689111e+01 - 16 1.2088267503273376e+02 3.2042275258721425e+01 5.4107108106767754e+01 - 17 3.2346220461035415e+01 4.2499048497105640e+01 8.1376975887614506e+01 - 18 -6.0647741703275742e+00 -1.4018109393098192e+02 5.8616405437664739e+01 - 19 9.1666507463385059e+01 1.1016815495755246e+02 -4.5264193934559110e+01 - 20 -3.1654845615764650e+01 -9.7690216565431399e+01 6.8192052250211930e+00 - 21 -1.7504767753092645e+02 1.0235169995595496e+02 -1.5504170180756984e+02 - 22 1.3515000888521683e+02 -1.1391169320242939e+02 5.0422479748502781e+01 - 23 1.5226155466909978e+02 1.1251242056507245e+02 2.8908809508954995e+01 - 24 4.5673174617939559e+01 -2.9765589151712804e+00 1.1201098293723224e+02 - 25 -8.0626609009709469e+01 1.4542722841810050e+02 -6.5825324996096569e+01 - 26 9.8788867981770935e+01 -6.6119047910259084e+01 -6.0121583431185648e+01 - 27 -2.3508186429826658e+01 4.4095426742690677e+01 7.3380624386319383e+01 - 28 -4.9939889581032183e+01 -2.5726868887438359e+00 -7.1709200137740282e+01 - 29 -9.2824683016604240e+01 1.0016662459421813e+02 5.3029118400145101e+01 - 30 -5.0324180905891332e+01 -1.0711270827022628e+02 -1.4620217292551081e+00 - 31 -8.6845426558096676e+01 1.2100579669840202e+02 -5.4582881610975292e+01 - 32 -1.6213022359935628e+01 -2.6888179426210176e+01 -1.0615183262438707e+02 - 33 -6.2982961620998680e+01 -8.1919674024609321e+01 6.4050776660349669e+01 - 34 8.7581328185460421e+01 4.2666146745076745e+01 5.3950505202433729e-01 - 35 -1.2361998477328336e+02 1.1686995903522990e+02 1.2094481318167102e+02 - 36 1.1473681463640116e+02 -2.6271255540417172e+01 -3.7210996109828777e+01 - 37 -4.0135238010632762e+01 3.9313619203415108e+01 -8.3047981684448686e+01 - 38 -1.9316433954473911e+02 -1.0139775864779574e+02 2.7589667560634794e+00 - 39 1.2552592384641623e+02 -1.1212234204352232e+00 1.0176874650130399e+02 - 40 8.1549799007301473e+00 -6.3217172136832247e+01 4.0584836732210185e+01 - 41 -1.2170137005837520e+02 -3.2088646993981939e+01 9.9967155109062098e+00 - 42 -5.8610301146536131e+01 9.7774040398281343e+00 -3.1105342278948164e+01 - 43 9.2900984999350058e+00 3.6773643911263839e+01 8.7991195290889635e+01 - 44 4.4036917977035529e+01 -4.7923047818761667e+01 -1.0007242125824688e+02 - 45 -2.4202782456986336e+00 1.2367270013009946e+02 1.0463134243133872e+02 - 46 1.4728267932818760e+01 -4.0941423262752750e+01 1.4254572660768059e+01 - 47 2.7792886678594435e+01 -5.7346568841015014e+01 2.7019880002640151e-01 - 48 2.1313709590089127e+02 -2.8759698998654602e+02 -1.5893579834743267e+02 - 49 -7.6087015037963440e+01 5.1517045637383859e+01 4.1003471997973655e+01 - 50 3.4830551638265256e+01 1.1779297367278961e+02 1.4146349922667432e+02 - 51 4.4742061380191323e+01 -3.0808697249709763e+01 1.3899307687587697e+02 - 52 -9.9599182003292825e+01 6.3646586633025350e+01 -8.5951227608563954e+01 - 53 -4.0424532490793119e+01 7.9078394393892495e+01 -1.9584469611634324e+02 - 54 -6.0156090456450073e-01 1.6996874014736914e+01 1.0184997110183269e+02 - 55 8.0119317663606964e+01 -1.2946637517882493e+02 5.7104454662996154e+01 - 56 2.3923827645007376e+02 -2.7192633009591060e+02 -2.0846526639908637e+02 - 57 6.9167941318700514e+01 1.4648695718006923e+02 2.6090506523999185e+01 - 58 -1.2159936738533791e+01 2.6076859393766380e+01 -1.5829530346190136e+01 - 59 -2.1058265418973730e+02 1.4833581346902625e+02 1.4672997897073574e+02 - 60 -1.2815092153686331e+01 1.3066805529762155e+02 -1.7104079955423418e+02 - 61 -5.9550068824404057e+01 -1.2724099611625590e+02 -9.8808777300378395e+01 - 62 1.3648621433690354e+02 -2.5624701042721298e+01 6.3872134642471366e+01 - 63 9.1209601191896525e+01 5.3646370721534675e-01 -6.8236805633005815e+01 - 64 3.6016420193926102e+01 3.4780490738745506e+01 6.3201690887835824e+01 -run_vdwl: -1297.3925912268453 -run_coul: -349.2889143327221 -run_stress: ! |2- - 9.3643645975627146e+02 8.5665048129081458e+02 1.0717840034918067e+03 -2.6798002401255013e+02 1.0202516369060469e+02 2.6885167297657557e+02 + 1 -6.0368026319723334e-01 2.0490281105259228e+01 1.6647650192347417e+01 + 2 -1.2754929753354234e+02 -6.4506752258382122e+01 -3.3765604494033497e+01 + 3 -1.6340638699344356e+02 -1.3395894275690221e+01 4.5681732661684634e+01 + 4 -7.8669167893588874e+00 1.2975050709670612e+02 -1.6422202215654622e+02 + 5 4.8895820330576854e+01 1.3583526793691512e+00 1.9082272968463208e+01 + 6 -3.2215264081964378e+01 -1.0434725558607181e+02 -2.9321909814724460e+01 + 7 5.4687724085035022e+01 -4.0913013646280532e+01 -5.8353503975056263e+01 + 8 -3.4374174863798075e+01 -5.4582176195261731e+01 3.9162148827896928e+01 + 9 1.0602587269872288e+02 2.4517278481186896e+01 -8.2926292024679384e+01 + 10 8.3433641774183407e+00 5.5896742851927943e+00 1.5837228744594089e+01 + 11 8.6970191683169129e-01 -5.8991563586004766e+01 -3.9877951865531514e+01 + 12 4.4192147377965640e+01 1.4903341767625852e+02 -1.6218738820961934e+02 + 13 -1.4906540622411359e+02 -1.1995838086244909e+02 1.0915797981155475e+02 + 14 -1.6840918424164060e+00 -2.4233434851726496e+01 -2.4811432594512457e+01 + 15 2.8916293161615947e+01 9.0150734924389738e+01 5.2202528013163860e+00 + 16 1.1511072719898208e+02 2.8294359308952078e+01 6.7521666411546050e+01 + 17 4.4257318509790032e+01 4.2406840066994654e+01 7.2795080140788869e+01 + 18 -7.8848831769041654e+00 -1.3664596390464098e+02 6.1096090529306210e+01 + 19 1.0685808811691570e+02 2.0723200091856646e+02 4.4123703145411937e+01 + 20 -4.9541566255910801e+01 -8.1664859207282433e+01 -2.8988844313476029e+01 + 21 -1.3289404043644814e+02 3.7558583406053941e+01 -1.0102514473761195e+02 + 22 1.3266704365038908e+02 -1.1782659065785897e+02 5.4036616742189061e+01 + 23 5.1406826507867223e+01 -2.3873203577956730e+01 -4.7707992031474234e+01 + 24 3.2375661774934940e+01 8.7122524112522697e+01 6.6904840845090462e+01 + 25 -7.6343346793073664e+01 1.4702372716259256e+02 -6.9634429545332381e+01 + 26 1.3052482043203892e+02 -7.6695952258764208e+01 -6.8144336882390846e+01 + 27 6.2295256121926471e+01 5.0088548894938114e+01 3.3482187356569881e+01 + 28 8.1224991426364603e+00 -3.8522307644648572e+00 -1.5910295435991639e+01 + 29 -1.1706768240874355e+02 7.1116543353676818e+01 1.0440306737798934e+02 + 30 2.6668840384251649e+01 -1.1285667565996226e+02 1.8633172811903989e+01 + 31 -1.0847355678967622e+02 1.0996595842176285e+02 -5.5616286819737311e+01 + 32 -1.4603119222198394e+01 4.2813303531510641e+01 3.8845175595330531e+01 + 33 -2.9522724683327016e+01 -7.8740075435568029e+00 4.0691892849331758e+01 + 34 9.4358005650347835e+01 5.1578786222111148e+01 4.9877606247135589e+00 + 35 1.3878162567772878e+02 1.3002914177061694e+01 -3.9262700309813695e+01 + 36 -5.4285827285916746e+01 -8.6097074177259515e+01 6.3573072280656689e+01 + 37 4.8502367882367082e+01 7.1094372467616139e+01 -6.4170831125588478e+01 + 38 -1.2068302892901679e+02 -2.3921624494724261e+02 1.0639158013338042e+02 + 39 4.7483616773316575e+00 1.1147185880245857e+01 9.5242536579092729e+01 + 40 -4.2106716215321676e+00 2.8923432927375652e+00 -3.8847459020822011e+00 + 41 -1.2582176673926276e+02 -1.1458507442867946e+02 1.5633840332025807e+01 + 42 4.3299931174721657e+01 -1.1323682562113908e+02 -1.2149036854079469e+02 + 43 -6.1455115997918410e+00 -1.1290761800594723e+01 1.3010001275147209e+02 + 44 2.3306479216564437e+01 -7.2456643864466814e+00 -2.1408875167843437e+01 + 45 -2.2863088909548026e+01 1.3728756890564244e+02 1.7762941813938326e+02 + 46 4.5766906983362070e+01 -6.7544686606488227e+01 3.7528326465811972e+01 + 47 -3.2700893536527538e+01 -5.3002101899722568e+01 -5.4679464444461047e+01 + 48 2.0328502419620253e+02 -3.0317080221415955e+02 -1.7385360483394399e+02 + 49 -6.8067873927712014e+01 3.9176176719051938e+01 3.5930432225694524e+01 + 50 8.9353300749969620e+00 1.4185265656301095e+02 1.5862761052665803e+02 + 51 3.5555345549045576e+01 -3.2564032333055451e+01 1.4767362774338116e+02 + 52 -1.0584640086659454e+02 1.0312320105331467e+02 -5.0601860204759092e+01 + 53 -3.3989834984567189e+01 9.4952795280998046e+01 -2.0788572482728082e+02 + 54 3.1058276661162811e+01 -5.5555419356318176e+01 4.7450764854663454e+01 + 55 8.0177808131181635e+01 -1.2981809858342260e+02 5.6596128355738813e+01 + 56 -1.2360446884305839e+01 -2.8595758498921775e+01 -5.6863776538006210e+00 + 57 4.5290996755611062e+01 1.5919693798996261e+02 9.9974122525349088e+01 + 58 -2.8760688272312827e+01 6.0635769417465973e+01 -2.3798836888216112e+01 + 59 -2.2258012527336544e+02 1.3033272684720029e+02 1.4065235688360508e+02 + 60 -2.7053865051546467e+01 1.4140560377577856e+02 -1.2766809320306062e+02 + 61 -6.3880582214376446e+01 -1.6334264803781880e+02 -1.2897713279774706e+02 + 62 6.9329936622438794e+01 6.4175913906891367e+01 -9.4055044619463501e+01 + 63 1.1093666087049192e+02 -1.8945409551622827e+01 -7.9769943280840309e+01 + 64 -3.2043182569612747e+00 6.0969354223353436e-02 8.3726884654705636e+00 +run_vdwl: -1315.67379925802 +run_coul: -251.82538792482003 +run_stress: ! |- + -3.6252933525980472e+02 -5.3641871517019717e+02 -3.2709175284369167e+02 -1.8738655015007816e+02 -7.3168357673524369e+01 2.8633318365887470e+02 run_forces: ! |2 - 1 -8.5827965838822820e+01 -7.9359271139126264e+01 1.6127525356102561e+00 - 2 -1.0843436672251677e+02 -4.3814139732181857e+01 -3.9406607542222510e+01 - 3 -6.7492083656808632e+01 -3.8575728466202385e+01 1.2133197517518491e+02 - 4 1.1418876828000818e+02 1.7252678649458642e+02 -8.6933223217442773e+01 - 5 -1.5480050101375753e+02 -9.1342293838693010e+01 -6.3395363459905518e+01 - 6 -1.6227984703364643e+02 -1.3560678614306067e+02 4.4782848665290516e+01 - 7 1.7063906268105363e+01 -3.6249539555389738e+01 2.3896536122109563e+01 - 8 1.7173736430563086e+01 -3.3863028773588525e+01 4.2583259003193767e+01 - 9 1.0004329379912333e+02 5.1862502341970576e+01 -2.2468443784238349e+02 - 10 9.7028044908312935e+01 2.2042751909354905e+01 -3.4238122073248249e+01 - 11 -2.6543887741587298e+01 -4.9267223464163576e+00 6.4854257442985755e+01 - 12 -9.3397331473421772e+01 -4.9544126400362378e+00 -5.9994097716401974e+01 - 13 -2.3143959522538509e+01 8.1894434548585735e+01 1.9238488136749785e+02 - 14 8.4597346217300185e+01 -1.1184821078079467e+02 -5.4187220755049388e+01 - 15 -3.4246645440992793e+01 1.3930472673165337e+02 3.9298339836087443e+01 - 16 1.2088663434640149e+02 3.2045653041325409e+01 5.4107356063286232e+01 - 17 3.2344801990864902e+01 4.2495466055374912e+01 8.1380556918608406e+01 - 18 -6.0629814835497786e+00 -1.4018347587983027e+02 5.8616532549916684e+01 - 19 9.1668316317277643e+01 1.1016761599722155e+02 -4.5264851519270955e+01 - 20 -3.1661080558093250e+01 -9.7680702896983348e+01 6.8089649377537471e+00 - 21 -1.7504882000949635e+02 1.0234568159801194e+02 -1.5503797209691280e+02 - 22 1.3515176946539535e+02 -1.1391314778891378e+02 5.0421781563376783e+01 - 23 1.5225805548284856e+02 1.1251694788182195e+02 2.8911799015254019e+01 - 24 4.5671821516556882e+01 -2.9712126336906026e+00 1.1201353591449349e+02 - 25 -8.0627746327573178e+01 1.4542776036556199e+02 -6.5824093500000785e+01 - 26 9.8790036727131479e+01 -6.6121985803089416e+01 -6.0121154076738584e+01 - 27 -2.3512123870795563e+01 4.4094474376814425e+01 7.3384376836634246e+01 - 28 -4.9928736258107968e+01 -2.5724538172895866e+00 -7.1693492014796476e+01 - 29 -9.2823407725918827e+01 1.0016882598262185e+02 5.3030803035763270e+01 - 30 -5.0321168291072418e+01 -1.0711082393695267e+02 -1.4638496337629203e+00 - 31 -8.6846002847220433e+01 1.2100634256063029e+02 -5.4584411880114892e+01 - 32 -1.6219404118855032e+01 -2.6891589800492980e+01 -1.0615164705356315e+02 - 33 -6.2984408250152960e+01 -8.1920511440025862e+01 6.4052477524155108e+01 - 34 8.7584120578234021e+01 4.2668993120707533e+01 5.4253584758780005e-01 - 35 -1.2362808878403892e+02 1.1688109216455464e+02 1.2093979474299084e+02 - 36 1.1473888991898984e+02 -2.6271101490360707e+01 -3.7206487841806783e+01 - 37 -4.0132079875452966e+01 3.9299811276833019e+01 -8.3044821777934487e+01 - 38 -1.9316614443092971e+02 -1.0140333932035796e+02 2.7560175575302850e+00 - 39 1.2552859550392310e+02 -1.1184913429600916e+00 1.0176905197161516e+02 - 40 8.1590626286590204e+00 -6.3218838258680712e+01 4.0583255993909901e+01 - 41 -1.2169834757235111e+02 -3.2097312325202040e+01 1.0001409247989988e+01 - 42 -5.8616975974470222e+01 9.7696159132284262e+00 -3.1108534973771778e+01 - 43 9.2952531731001411e+00 3.6779767322207100e+01 8.7990306325352847e+01 - 44 4.4052466263114397e+01 -4.7924356022608613e+01 -1.0008614242013839e+02 - 45 -2.4252727319451299e+00 1.2367164789950478e+02 1.0463926519518796e+02 - 46 1.4731101827029459e+01 -4.0943102986905330e+01 1.4256395238164547e+01 - 47 2.7794538998914781e+01 -5.7350223083130913e+01 2.6930559254095088e-01 - 48 2.1313677796990984e+02 -2.8760101981631448e+02 -1.5893328867662674e+02 - 49 -7.6089885956458176e+01 5.1521889230874386e+01 4.1004129662095501e+01 - 50 3.4828518243909208e+01 1.1779161534103518e+02 1.4146465209226540e+02 - 51 4.4744066574630622e+01 -3.0810651609662180e+01 1.3899805176340075e+02 - 52 -9.9598007214587028e+01 6.3644580520900348e+01 -8.5955263183141284e+01 - 53 -4.0428023055237681e+01 7.9080858950568384e+01 -1.9584946778319107e+02 - 54 -5.9308389882852453e-01 1.6986036769461592e+01 1.0185469452647123e+02 - 55 8.0118075268567154e+01 -1.2946734277195114e+02 5.7105263745955192e+01 - 56 2.3924177355107173e+02 -2.7192434912565477e+02 -2.0846127351799754e+02 - 57 6.9162044556582686e+01 1.4648989397678352e+02 2.6101714291842192e+01 - 58 -1.2161346123654885e+01 2.6081531975385168e+01 -1.5832872807506224e+01 - 59 -2.1058227257862865e+02 1.4833711644656287e+02 1.4673132278960117e+02 - 60 -1.2813479027767888e+01 1.3067008314489073e+02 -1.7104229113232506e+02 - 61 -5.9549865680620421e+01 -1.2723724021560577e+02 -9.8807654269817007e+01 - 62 1.3647609462574655e+02 -2.5622559618720544e+01 6.3866569628557244e+01 - 63 9.1209357458522163e+01 5.3855066756439851e-01 -6.8238721360492946e+01 - 64 3.6018072199105433e+01 3.4782910794276354e+01 6.3200593406302865e+01 + 1 -6.0427779703512252e-01 2.0490756272412511e+01 1.6647493421616424e+01 + 2 -1.2754841307685804e+02 -6.4508077454175094e+01 -3.3763524679658680e+01 + 3 -1.6340651846845867e+02 -1.3399328724256982e+01 4.5679725510421832e+01 + 4 -7.8684594311176888e+00 1.2975107988543994e+02 -1.6422243689311080e+02 + 5 4.8894979857641701e+01 1.3587905179520945e+00 1.9080723746040558e+01 + 6 -3.2215908697921762e+01 -1.0434604335770943e+02 -2.9323571125825332e+01 + 7 5.4688956076284285e+01 -4.0913951081108415e+01 -5.8353333114689789e+01 + 8 -3.4374795730683481e+01 -5.4582565197183818e+01 3.9161685070849273e+01 + 9 1.0602750268492444e+02 2.4518806007662270e+01 -8.2928224031342211e+01 + 10 8.3448765452309477e+00 5.5864371171692877e+00 1.5832573244721663e+01 + 11 8.7180631758889338e-01 -5.8993323881745852e+01 -3.9884267152772146e+01 + 12 4.4192365852491093e+01 1.4903429729452878e+02 -1.6219206584779144e+02 + 13 -1.4906927452343609e+02 -1.1995874777506886e+02 1.0916264378106862e+02 + 14 -1.6828280298940346e+00 -2.4232825100885098e+01 -2.4809440148861022e+01 + 15 2.8919110783949506e+01 9.0150838201145390e+01 5.2192985984410605e+00 + 16 1.1511130216873305e+02 2.8295862401014123e+01 6.7521012199711848e+01 + 17 4.4256599992638108e+01 4.2406484713402243e+01 7.2795346026494585e+01 + 18 -7.8848008384430539e+00 -1.3664634639099947e+02 6.1095756801901778e+01 + 19 1.0685903199732036e+02 2.0723222350990062e+02 4.4124512300846625e+01 + 20 -4.9546858835888280e+01 -8.1659242595103365e+01 -2.8998046004100793e+01 + 21 -1.3289412244333695e+02 3.7556999753658936e+01 -1.0102308037606839e+02 + 22 1.3266755025284439e+02 -1.1782686540823109e+02 5.4036617937847950e+01 + 23 5.1405885909264370e+01 -2.3873943214452368e+01 -4.7708844268632390e+01 + 24 3.2373370471025311e+01 8.7125637769180997e+01 6.6908838382987426e+01 + 25 -7.6344016160229543e+01 1.4702421930244424e+02 -6.9633680565374561e+01 + 26 1.3052497933070995e+02 -7.6696652508392248e+01 -6.8143428678963431e+01 + 27 6.2295886509448287e+01 5.0089165913467404e+01 3.3482708752529071e+01 + 28 8.1190626623672930e+00 -3.8523237731699100e+00 -1.5914254496826086e+01 + 29 -1.1706723439423264e+02 7.1117332937318878e+01 1.0440215382628243e+02 + 30 2.6668772919869735e+01 -1.1285862351526934e+02 1.8633778385120795e+01 + 31 -1.0847428154293594e+02 1.0996582278921207e+02 -5.5617081154122886e+01 + 32 -1.4603651831782168e+01 4.2816664679363605e+01 3.8851610792442827e+01 + 33 -2.9519680131282556e+01 -7.8704683492661038e+00 4.0688290026701139e+01 + 34 9.4358200696983218e+01 5.1577940760121209e+01 4.9883503942774707e+00 + 35 1.3878184805054929e+02 1.3003401024036332e+01 -3.9263099864942795e+01 + 36 -5.4286023648995418e+01 -8.6096314968346391e+01 6.3573237117647288e+01 + 37 4.8502340503125687e+01 7.1092674139180076e+01 -6.4168924259418233e+01 + 38 -1.2068169270717785e+02 -2.3921584479385240e+02 1.0639203784120866e+02 + 39 4.7485776026051134e+00 1.1146641081166505e+01 9.5242256869966710e+01 + 40 -4.2108599786857281e+00 2.8922835579037174e+00 -3.8847867381075893e+00 + 41 -1.2582200605811198e+02 -1.1458626320666988e+02 1.5634634730428779e+01 + 42 4.3298811262104522e+01 -1.1323825959325698e+02 -1.2148951307455756e+02 + 43 -6.1445155174009782e+00 -1.1289851749911026e+01 1.3009938178494568e+02 + 44 2.3304112892355839e+01 -7.2440612084043048e+00 -2.1407988900122422e+01 + 45 -2.2861406128358620e+01 1.3728999900873370e+02 1.7762870040423550e+02 + 46 4.5768613429530582e+01 -6.7545097081622060e+01 3.7529079576855302e+01 + 47 -3.2701732666230441e+01 -5.3001652471881712e+01 -5.4679269668412701e+01 + 48 2.0328585168114128e+02 -3.0317396492632025e+02 -1.7385434764992988e+02 + 49 -6.8067688050655704e+01 3.9177224134041339e+01 3.5930110316890534e+01 + 50 8.9327213346898784e+00 1.4185280256429226e+02 1.5862826485318126e+02 + 51 3.5558738484365847e+01 -3.2568300408296722e+01 1.4767879474338230e+02 + 52 -1.0584741977885415e+02 1.0312398264883062e+02 -5.0601463470758752e+01 + 53 -3.3993088743715688e+01 9.4956349730017635e+01 -2.0789074418856003e+02 + 54 3.1064727433155586e+01 -5.5559689516396887e+01 4.7459382807520264e+01 + 55 8.0177886992157639e+01 -1.2981800298783250e+02 5.6595487267941550e+01 + 56 -1.2360401264720954e+01 -2.8594676148725313e+01 -5.6861881216640269e+00 + 57 4.5290952881935198e+01 1.5919551554155248e+02 9.9973551309890851e+01 + 58 -2.8760842576207317e+01 6.0634819158216445e+01 -2.3799874997643553e+01 + 59 -2.2258027485314665e+02 1.3033435434930627e+02 1.4065348873603111e+02 + 60 -2.7053242000018251e+01 1.4140890863215688e+02 -1.2766702327645474e+02 + 61 -6.3880091105988988e+01 -1.6334055272776587e+02 -1.2897680193744620e+02 + 62 6.9331724159145509e+01 6.4173290531939443e+01 -9.4050280780932169e+01 + 63 1.1093735613545634e+02 -1.8944653137110969e+01 -7.9770997264690990e+01 + 64 -3.2080968598290363e+00 5.4907326642554835e-02 8.3750551713524164e+00 ... From cbc5a2933a12320d74339f5976f7f0da15c3f862 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Tue, 21 Sep 2021 15:44:42 -0400 Subject: [PATCH 039/372] tweak epsilon --- unittest/force-styles/tests/atomic-pair-reaxff-acks2.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/unittest/force-styles/tests/atomic-pair-reaxff-acks2.yaml b/unittest/force-styles/tests/atomic-pair-reaxff-acks2.yaml index c7a767a252..2444e76746 100644 --- a/unittest/force-styles/tests/atomic-pair-reaxff-acks2.yaml +++ b/unittest/force-styles/tests/atomic-pair-reaxff-acks2.yaml @@ -1,7 +1,7 @@ --- lammps_version: 31 Aug 2021 date_generated: Tue Sep 21 15:02:20 2021 -epsilon: 2e-10 +epsilon: 5e-9 skip_tests: omp prerequisites: ! | pair reaxff From 342ca7ff1d0ac6b684d275055a48ccc25a104126 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Tue, 21 Sep 2021 22:02:37 -0400 Subject: [PATCH 040/372] add multi-config build support for MSCG package --- cmake/Modules/Packages/MSCG.cmake | 70 ++++++++++++++++++------------- 1 file changed, 42 insertions(+), 28 deletions(-) diff --git a/cmake/Modules/Packages/MSCG.cmake b/cmake/Modules/Packages/MSCG.cmake index 6ac62cb012..1bfd123dd0 100644 --- a/cmake/Modules/Packages/MSCG.cmake +++ b/cmake/Modules/Packages/MSCG.cmake @@ -12,34 +12,48 @@ if(DOWNLOAD_MSCG) mark_as_advanced(MSCG_URL) mark_as_advanced(MSCG_MD5) - include(ExternalProject) - ExternalProject_Add(mscg_build - URL ${MSCG_URL} - URL_MD5 ${MSCG_MD5} - SOURCE_SUBDIR src/CMake - CMAKE_ARGS ${CMAKE_REQUEST_PIC} ${EXTRA_MSCG_OPTS} - -DCMAKE_C_COMPILER=${CMAKE_C_COMPILER} - -DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER} - -DCMAKE_Fortran_COMPILER=${CMAKE_Fortran_COMPILER} - -DBLAS_LIBRARIES=${BLAS_LIBRARIES} -DLAPACK_LIBRARIES=${LAPACK_LIBRARIES} - -DCMAKE_INSTALL_PREFIX= - -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} - -DCMAKE_MAKE_PROGRAM=${CMAKE_MAKE_PROGRAM} - -DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE} - BUILD_COMMAND ${CMAKE_COMMAND} --build . --target mscg - INSTALL_COMMAND "" - BUILD_BYPRODUCTS /libmscg.a - ) - ExternalProject_get_property(mscg_build BINARY_DIR) - ExternalProject_get_property(mscg_build SOURCE_DIR) - file(MAKE_DIRECTORY ${SOURCE_DIR}/src) - add_library(LAMMPS::MSCG UNKNOWN IMPORTED) - set_target_properties(LAMMPS::MSCG PROPERTIES - IMPORTED_LOCATION "${BINARY_DIR}/libmscg.a" - INTERFACE_INCLUDE_DIRECTORIES "${SOURCE_DIR}/src" - INTERFACE_LINK_LIBRARIES "${LAPACK_LIBRARIES}") - target_link_libraries(lammps PRIVATE LAMMPS::MSCG) - add_dependencies(LAMMPS::MSCG mscg_build) + # always compile a static lib but with position independent code + # make a copy of current settings for later use + set(OLD_SHARED_LIBS ${BUILD_SHARED_LIBS}) + set(OLD_POSITION_INDEPENDENT_CODE ${CMAKE_POSITION_INDEPENDENT_CODE}) + set(BUILD_SHARED_LIBS OFF) + set(CMAKE_POSITION_INDEPENDENT_CODE ON) + + if(CMAKE_VERSION VERSION_LESS 3.14) + file(MAKE_DIRECTORY ${CMAKE_BINARY_DIR}/_deps) + file(DOWNLOAD ${MSCG_URL} ${CMAKE_BINARY_DIR}/_deps/mscg.tar.gz EXPECTED_HASH MD5=${MSCG_MD5}) + execute_process(COMMAND ${CMAKE_COMMAND} -E tar xzf ${CMAKE_BINARY_DIR}/_deps/mscg.tar.gz + WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/_deps) + + file(GLOB MSCG_SOURCE "${CMAKE_BINARY_DIR}/_deps/MSCG-release-*") + # sanity check. do not allow to have multiple downloaded and extracted versions of the source + list(LENGTH MSCG_SOURCE _num) + if(_num GREATER 1) + message(FATAL_ERROR "Inconsistent MSCG library sources. Please delete ${CMAKE_BINARY_DIR}/_deps and re-run cmake") + endif() + add_subdirectory(${MSCG_SOURCE}/src/CMake ${CMAKE_BINARY_DIR}/_deps/mscg-build) + else() + include(FetchContent) + FetchContent_Declare(mscg URL ${MSCG_URL} URL_HASH MD5=${MSCG_MD5} SOURCE_SUBDIR src/CMake) + FetchContent_MakeAvailable(mscg) + set(MSCG_SOURCE ${CMAKE_BINARY_DIR}/_deps/mscg-src) + endif() + + # restore previous settings + if(OLD_POSITION_INDEPENDENT_CODE) + set(CMAKE_POSITON_INDEPENDENT_CODE ${OLD_POSITION_INDEPENDENT_CODE}) + else() + unset(CMAKE_POSITION_INDEPENDENT_CODE) + endif() + if (OLD_SHARED_LIBS) + set(BUILD_SHARED_LIBS ${OLD_SHARED_LIBS}) + else() + unset(BUILD_SHARED_LIBS) + endif() + + # set include and link library + target_include_directories(lammps PRIVATE "${MSCG_SOURCE}/src") + target_link_libraries(lammps PRIVATE mscg) else() find_package(MSCG) if(NOT MSCG_FOUND) From 32049c34846cdf5d46dad5b2d78f459064d73c82 Mon Sep 17 00:00:00 2001 From: Yury Lysogorskiy Date: Wed, 29 Sep 2021 16:04:09 +0200 Subject: [PATCH 041/372] adopt for new multispecies PACE implementation --- cmake/Modules/Packages/ML-PACE.cmake | 18 ++++++++++++------ lib/pace/Install.py | 3 ++- lib/pace/Makefile | 18 ++++++++++++++---- lib/pace/Makefile.lammps | 4 ++-- src/ML-PACE/pair_pace.cpp | 7 +++---- 5 files changed, 33 insertions(+), 17 deletions(-) diff --git a/cmake/Modules/Packages/ML-PACE.cmake b/cmake/Modules/Packages/ML-PACE.cmake index ccc7423355..998ef22191 100644 --- a/cmake/Modules/Packages/ML-PACE.cmake +++ b/cmake/Modules/Packages/ML-PACE.cmake @@ -1,6 +1,6 @@ -set(PACELIB_URL "https://github.com/ICAMS/lammps-user-pace/archive/refs/tags/v.2021.4.9.tar.gz" CACHE STRING "URL for PACE evaluator library sources") -set(PACELIB_MD5 "4db54962fbd6adcf8c18d46e1798ceb5" CACHE STRING "MD5 checksum of PACE evaluator library tarball") +set(PACELIB_URL "https://github.com/ICAMS/lammps-user-pace/archive/refs/tags/v.2021.9.28.tar.gz" CACHE STRING "URL for PACE evaluator library sources") +set(PACELIB_MD5 "f98363bb98adc7295ea63974738c2a1b" CACHE STRING "MD5 checksum of PACE evaluator library tarball") mark_as_advanced(PACELIB_URL) mark_as_advanced(PACELIB_MD5) @@ -14,12 +14,18 @@ execute_process( WORKING_DIRECTORY ${CMAKE_BINARY_DIR} ) -file(GLOB PACE_EVALUATOR_INCLUDE_DIR ${CMAKE_BINARY_DIR}/lammps-user-pace-*/USER-PACE) -file(GLOB PACE_EVALUATOR_SOURCES ${CMAKE_BINARY_DIR}/lammps-user-pace-*/USER-PACE/*.cpp) +file(GLOB lib-pace ${CMAKE_BINARY_DIR}/lammps-user-pace-*) +add_subdirectory(${lib-pace}/yaml-cpp build-yaml-cpp) +set(YAML_CPP_INCLUDE_DIR ${lib-pace}/yaml-cpp/include) + +file(GLOB PACE_EVALUATOR_INCLUDE_DIR ${lib-pace}/ML-PACE) +file(GLOB PACE_EVALUATOR_SOURCES ${lib-pace}/ML-PACE/*.cpp) list(FILTER PACE_EVALUATOR_SOURCES EXCLUDE REGEX pair_pace.cpp) add_library(pace STATIC ${PACE_EVALUATOR_SOURCES}) set_target_properties(pace PROPERTIES CXX_EXTENSIONS ON OUTPUT_NAME lammps_pace${LAMMPS_MACHINE}) -target_include_directories(pace PUBLIC ${PACE_EVALUATOR_INCLUDE_DIR}) -target_link_libraries(lammps PRIVATE pace) +target_include_directories(pace PUBLIC ${PACE_EVALUATOR_INCLUDE_DIR} ${YAML_CPP_INCLUDE_DIR}) + +target_link_libraries(lammps PRIVATE pace) +target_link_libraries(lammps PRIVATE yaml-cpp) diff --git a/lib/pace/Install.py b/lib/pace/Install.py index e90ae8c312..946c29676a 100644 --- a/lib/pace/Install.py +++ b/lib/pace/Install.py @@ -15,12 +15,13 @@ from install_helpers import fullpath, geturl, checkmd5sum # settings thisdir = fullpath('.') -version = 'v.2021.4.9' +version = 'v.2021.9.28' # known checksums for different PACE versions. used to validate the download. checksums = { \ 'v.2021.2.3.upd2' : '8fd1162724d349b930e474927197f20d', 'v.2021.4.9' : '4db54962fbd6adcf8c18d46e1798ceb5', + 'v.2021.9.28' : 'f98363bb98adc7295ea63974738c2a1b', } diff --git a/lib/pace/Makefile b/lib/pace/Makefile index c2e1892ddd..81f7c9db95 100644 --- a/lib/pace/Makefile +++ b/lib/pace/Makefile @@ -2,8 +2,11 @@ SHELL = /bin/sh # ------ FILES ------ -SRC_FILES = $(wildcard src/USER-PACE/*.cpp) -SRC = $(filter-out src/USER-PACE/pair_pace.cpp, $(SRC_FILES)) +YAML_CPP_PATH = src/yaml-cpp +YAML_CPP_INC = $(YAML_CPP_PATH)/include + +SRC_FILES = $(wildcard src/ML-PACE/*.cpp) +SRC = $(filter-out src/ML-PACE/pair_pace.cpp, $(SRC_FILES)) # ------ DEFINITIONS ------ @@ -12,7 +15,7 @@ OBJ = $(SRC:.cpp=.o) # ------ SETTINGS ------ -CXXFLAGS = -O3 -fPIC -Isrc/USER-PACE +CXXFLAGS = -O3 -fPIC -Isrc/ML-PACE -I$(YAML_CPP_INC) ARCHIVE = ar ARCHFLAG = -rc @@ -21,9 +24,13 @@ SYSLIB = # ------ MAKE PROCEDURE ------ -lib: $(OBJ) +lib: $(OBJ) lib-yaml-cpp $(ARCHIVE) $(ARFLAGS) $(LIB) $(OBJ) + +lib-yaml-cpp: + cd $(YAML_CPP_PATH) && $(MAKE) lib + # ------ COMPILE RULES ------ %.o: %.cpp @@ -32,6 +39,9 @@ lib: $(OBJ) # ------ CLEAN ------ clean-all: -rm -f *~ $(OBJ) $(LIB) + cd $(YAML_CPP_PATH) && $(MAKE) clean-all clean-build: -rm -f *~ $(OBJ) + cd $(YAML_CPP_PATH) && $(MAKE) clean-build + diff --git a/lib/pace/Makefile.lammps b/lib/pace/Makefile.lammps index 17820716df..f4cbeb8ffd 100644 --- a/lib/pace/Makefile.lammps +++ b/lib/pace/Makefile.lammps @@ -1,3 +1,3 @@ -pace_SYSINC =-I../../lib/pace/src/USER-PACE -pace_SYSLIB = -L../../lib/pace/ -lpace +pace_SYSINC =-I../../lib/pace/src/ML-PACE -I../../lib/pace/src/yaml-cpp/include +pace_SYSLIB = -L../../lib/pace/ -lpace -L../../lib/pace/src/yaml-cpp/ -lyaml-cpp pace_SYSPATH = diff --git a/src/ML-PACE/pair_pace.cpp b/src/ML-PACE/pair_pace.cpp index f0d6547083..4a8f7d9512 100644 --- a/src/ML-PACE/pair_pace.cpp +++ b/src/ML-PACE/pair_pace.cpp @@ -296,10 +296,9 @@ void PairPACE::coeff(int narg, char **arg) { //load potential file delete aceimpl->basis_set; - aceimpl->basis_set = new ACECTildeBasisSet(); - if (comm->me == 0) - utils::logmesg(lmp,"Loading {}\n", potential_file_name); - aceimpl->basis_set->load(potential_file_name); + if (comm->me == 0) + utils::logmesg(lmp,"Loading {}\n", potential_file_name); + aceimpl->basis_set = new ACECTildeBasisSet(potential_file_name); if (comm->me == 0) { utils::logmesg(lmp,"Total number of basis functions\n"); From 15b3e875d503ae5909097f10143bf8206a9f1594 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Wed, 29 Sep 2021 16:29:25 -0400 Subject: [PATCH 042/372] import files for platform namespace from standalone project w/o updating LAMMPS --- src/platform.cpp | 947 +++++++++++++++++++++++++++++++ src/platform.h | 350 ++++++++++++ unittest/utils/CMakeLists.txt | 16 + unittest/utils/test_platform.cpp | 395 +++++++++++++ unittest/utils/testshared.c | 20 + 5 files changed, 1728 insertions(+) create mode 100644 src/platform.cpp create mode 100644 src/platform.h create mode 100644 unittest/utils/test_platform.cpp create mode 100644 unittest/utils/testshared.c diff --git a/src/platform.cpp b/src/platform.cpp new file mode 100644 index 0000000000..d457f85c98 --- /dev/null +++ b/src/platform.cpp @@ -0,0 +1,947 @@ +/* ---------------------------------------------------------------------- + LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator + https://www.lammps.org/, 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. +------------------------------------------------------------------------- */ +/** \file platform.cpp + * This file provides abstractions for a variety of platform specific + * functionality in a namespace "platform". This is a companion to + * the "utils" namespace with convenience and utility functions. */ + +#include "platform.h" +#include "utils.h" + +#if HAVE_MPI +#include +#endif + +//////////////////////////////////////////////////////////////////////// +// include system headers and tweak system settings +#if defined(_WIN32) + +#ifndef WIN32_LEAN_AND_MEAN +#define WIN32_LEAN_AND_MEAN +#endif + +#if defined(_WIN32_WINNT) +#undef _WIN32_WINNT +#endif + +// target Windows version is windows 7 and later +#define _WIN32_WINNT _WIN32_WINNT_WIN7 +#define PSAPI_VERSION 2 + +#include +#include // for _get_osfhandle() +#include +#include + +#else // not Windows /////////////////////////////////////////////// + +#include +#include +#include +#include +#include +#include +#include +#include +#endif + +#if defined(__APPLE__) +#include +#include +#endif +//////////////////////////////////////////////////////////////////////// + +#include + +/* ------------------------------------------------------------------ */ + +/// Struct for listing on-the-fly compression/decompression commands +struct zip_info { + /// identifier for the different compression algorithms + enum styles { NONE, GZIP, BZIP2, ZSTD, XZ, LZMA, LZ4 }; + const std::string extension; ///< filename extension for the current algorithm + const std::string command; ///< command to perform compression or decompression + const std::string zipflags; ///< flags to append to compress from stdin to stdout + const std::string unzipflags; ///< flags to decompress file to stdout + const int style; ///< compression style flag +}; + +// clang-format off +static const std::vector zip_styles = { + {"", "", "", "", zip_info::NONE}, + {"gz", "gzip", " > ", " -cdf ", zip_info::GZIP}, + {"bz2", "bzip2", " > ", " -cdf ", zip_info::BZIP2}, + {"zstd", "zstd", " -q > ", " -cdf ", zip_info::ZSTD}, + {"xz", "xz", " > ", " -cdf ", zip_info::XZ}, + {"lzma", "xz", " --format=lzma > ", " --format=lzma -cdf ", zip_info::LZMA}, + {"lz4", "lz4", " > ", " -cdf ", zip_info::LZ4}, +}; +// clang-format on + +/* ------------------------------------------------------------------ */ + +static const zip_info &find_zip_type(const std::string &file) +{ + std::size_t dot = file.find_last_of('.'); + if (dot != std::string::npos) { + const std::string ext = file.substr(dot + 1); + for (const auto &i : zip_styles) { + if (i.extension == ext) return i; + } + } + return zip_styles[0]; +} + +/* ------------------------------------------------------------------ */ + +using namespace LAMMPS_NS; + +// get CPU time + +// clang-format off +// clang compilers are optimizing this function too aggressively returning always 0 +#if defined(__clang__) +[[clang::optnone]] +#endif +double platform::cputime() +// clang-format on +{ + double rv = 0.0; + +#ifdef _WIN32 + + // from MSD docs. + FILETIME ct, et, kt, ut; + union { + FILETIME ft; + uint64_t ui; + } cpu; + if (GetProcessTimes(GetCurrentProcess(), &ct, &et, &kt, &ut)) { + cpu.ft = ut; + rv = cpu.ui * 0.0000001; + } + +#else /* ! _WIN32 */ + + struct rusage ru; + if (getrusage(RUSAGE_SELF, &ru) == 0) { + rv = (double) ru.ru_utime.tv_sec; + rv += (double) ru.ru_utime.tv_usec * 0.000001; + } + +#endif + + return rv; +} + +/* ---------------------------------------------------------------------- + get wall time +------------------------------------------------------------------------ */ +double platform::walltime() +{ + double wtime; + +#if defined(_WIN32) + + wtime = GetTickCount64() * 0.001; + +#else + + struct timeval tv; + + gettimeofday(&tv, nullptr); + wtime = 1.0 * tv.tv_sec + 1.0e-6 * tv.tv_usec; + +#endif + + return wtime; +} + +/* ---------------------------------------------------------------------- + get Operating system and version info +------------------------------------------------------------------------- */ + +std::string platform::os_info() +{ + std::string buf; + +#if defined(_WIN32) + + // Get Windows Edition name from registry + char value[1024]; + DWORD value_length = 1024; + const char *subkey = "SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion"; + const char *entry = "ProductName"; + RegGetValue(HKEY_LOCAL_MACHINE, subkey, entry, RRF_RT_REG_SZ, nullptr, &value, + (LPDWORD) &value_length); + // enforce zero termination + value[1023] = '\0'; + buf = value; + + DWORD fullversion, majorv, minorv, buildv = 0; + fullversion = GetVersion(); + majorv = (DWORD) (LOBYTE(LOWORD(fullversion))); + minorv = (DWORD) (HIBYTE(LOWORD(fullversion))); + if (fullversion < 0x80000000) buildv = (DWORD) (HIWORD(fullversion)); + + buf += ", Windows ABI " + std::to_string(majorv) + "." + std::to_string(minorv) + " (" + + std::to_string(buildv) + ") on "; + + SYSTEM_INFO si; + GetSystemInfo(&si); + + switch (si.wProcessorArchitecture) { + case PROCESSOR_ARCHITECTURE_AMD64: + buf += "x86_64"; + break; + case PROCESSOR_ARCHITECTURE_ARM: + buf += "arm"; + break; + case PROCESSOR_ARCHITECTURE_IA64: + buf += "ia64"; + break; + case PROCESSOR_ARCHITECTURE_INTEL: + buf += "i386"; + break; + default: + buf += "(unknown)"; + } +#else + struct utsname ut; + uname(&ut); + + // try to get OS distribution name, if available + buf = ut.sysname; + +#if 0 // disable until this is integrated into LAMMPS and TextFileReader becomes available + if (utils::file_is_readable("/etc/os-release")) { + try { + TextFileReader reader("/etc/os-release",""); + while (1) { + auto words = reader.next_values(0,"="); + if ((words.count() > 1) && (words.next_string() == "PRETTY_NAME")) { + distro += " " + utils::trim(words.next_string()); + break; + } + } + } catch (std::exception &e) { + ; // EOF but keyword not found + } + } +#endif + + buf += std::string(" ") + ut.release + " " + ut.machine; +#endif + return buf; +} + +/* ---------------------------------------------------------------------- + identify C++ standard version +------------------------------------------------------------------------- */ + +std::string platform::cxx_standard() +{ +#if __cplusplus > 202002L + return "newer than C++20"; +#elif __cplusplus == 202002L + return "C++20"; +#elif __cplusplus == 201703L + return "C++17"; +#elif __cplusplus == 201402L + return "C++14"; +#elif __cplusplus == 201103L + return "C++11"; +#elif __cplusplus == 199711L + return "C++98"; +#else + return "unknown"; +#endif +} + +/* ---------------------------------------------------------------------- + identify compiler and its version +------------------------------------------------------------------------- */ + +std::string platform::compiler_info() +{ + std::string buf = "(Unknown)"; +#if 0 // disable for now untile merged into LAMMPS and fmt:: becomes available +#if defined(__INTEL_LLVM_COMPILER) + double version = static_cast(__INTEL_LLVM_COMPILER)*0.01; + buf = fmt::format("Intel LLVM C++ {:.1f} / {}", version, __VERSION__); +#elif defined(__ibmxl__) + buf = fmt::format("IBM XL C/C++ (Clang) {}.{}.{}", + __ibmxl_version__, __ibmxl_release__, __ibmxl_modification__); +#elif defined(__clang__) + buf = fmt::format("Clang C++ {}", __VERSION__); +#elif defined(__PGI) + buf = fmt::format("PGI C++ {}.{}",__PGIC__,__PGIC_MINOR__); +#elif defined(__INTEL_COMPILER) + double version = static_cast(__INTEL_COMPILER)*0.01; + buf = fmt::format("Intel Classic C++ {:.2f}.{} / {}", version, + __INTEL_COMPILER_UPDATE, __VERSION__); +#elif defined(__MINGW64__) + buf = fmt::format("MinGW-w64 64bit {}.{} / GNU C++ {}", __MINGW64_VERSION_MAJOR, + __MINGW64_VERSION_MINOR, __VERSION__); +#elif defined(__MINGW32__) + buf = fmt::format("MinGW-w64 32bit {}.{} / GNU C++ {}", __MINGW32_MAJOR_VERSION, + __MINGW32_MINOR_VERSION, __VERSION__); +#elif defined(__GNUC__) + buf = fmt::format("GNU C++ {}", __VERSION__); +#elif defined(_MSC_VER) && (_MSC_VER > 1920) && (_MSC_VER < 2000) + constexpr int major = _MSC_VER / 100; + constexpr int minor = _MSC_VER - major *100; + buf = "Microsoft Visual Studio 20" + std::to_string(major) + ", C/C++ " + std::to_string(major-5) + "." + std::to_string(minor); +#else + buf = "(Unknown)"; +#endif +#endif + return buf; +} + +/* ---------------------------------------------------------------------- + detect OpenMP standard +------------------------------------------------------------------------- */ + +std::string platform::openmp_standard() +{ + +#if !defined(_OPENMP) + return "OpenMP not enabled"; +#else + + // Supported OpenMP version corresponds to the release date of the + // specifications as posted at https://www.openmp.org/specifications/ + +#if _OPENMP > 202011 + return "OpenMP newer than version 5.1"; +#elif _OPENMP == 202011 + return "OpenMP 5.1"; +#elif _OPENMP == 201811 + return "OpenMP 5.0"; +#elif _OPENMP == 201611 + return "OpenMP 5.0 preview 1"; +#elif _OPENMP == 201511 + return "OpenMP 4.5"; +#elif _OPENMP == 201307 + return "OpenMP 4.0"; +#elif _OPENMP == 201107 + return "OpenMP 3.1"; +#elif _OPENMP == 200805 + return "OpenMP 3.0"; +#elif _OPENMP == 200505 + return "OpenMP 2.5"; +#elif _OPENMP == 200203 + return "OpenMP 2.0"; +#else + return "unknown OpenMP version"; +#endif + +#endif +} + +/* ---------------------------------------------------------------------- + identify MPI vendor from defines in the mpi.h file. +------------------------------------------------------------------------- */ + +std::string platform::mpi_vendor() +{ +#if defined(MPI_STUBS) + return "MPI STUBS"; +#elif defined(OPEN_MPI) + return "Open MPI"; +#elif defined(MPICH_NAME) + return "MPICH"; +#elif defined(I_MPI_VERSION) + return "Intel MPI"; +#elif defined(PLATFORM_MPI) + return "Platform MPI"; +#elif defined(HP_MPI) + return "HP MPI"; +#elif defined(MSMPI_VER) + // Get Microsoft MPI version from registry + char value[1024]; + DWORD value_length = 1024; + const char *subkey = "SOFTWARE\\Microsoft\\MPI"; + const char *entry = "Version"; + auto rv = RegGetValueA(HKEY_LOCAL_MACHINE, subkey, entry, RRF_RT_REG_SZ, nullptr, &value, + (LPDWORD) &value_length); + std::string buf = "Microsoft MPI"; + if (rv == ERROR_SUCCESS) buf += std::string(" v") + value; + return buf; +#else + return "Unknown MPI implementation"; +#endif +} + +/* ---------------------------------------------------------------------- + detect MPI version info +------------------------------------------------------------------------- */ + +std::string platform::mpi_info(int &major, int &minor) +{ + int len = 0; +#if (defined(MPI_VERSION) && (MPI_VERSION > 2)) || defined(MPI_STUBS) + static char version[MPI_MAX_LIBRARY_VERSION_STRING]; + MPI_Get_library_version(version, &len); +#else + constexpr int MAX_VERSION_STRING = 32; + static char version[MAX_VERSION_STRING]; + strncpy(version, mpi_vendor().c_str(), MAX_VERSION_STRING); +#endif + +#if defined(MPI_VERSION) + MPI_Get_version(&major, &minor); + if (len > 80) { + char *ptr = strchr(version + 80, '\n'); + if (ptr) *ptr = '\0'; + } +#else + major = 1; + minor = 0; +#endif + return std::string(version); +} + +/* ---------------------------------------------------------------------- + set environment variable +------------------------------------------------------------------------- */ + +int platform::putenv(const std::string &vardef) +{ + if (vardef.size() == 0) return -1; + + auto found = vardef.find_first_of('='); +#ifdef _WIN32 + // must assign a value to variable with _putenv() + if (found == std::string::npos) + return _putenv(utils::strdup(vardef + "=1")); + else + return _putenv(utils::strdup(vardef)); +#else + if (found == std::string::npos) + return setenv(vardef.c_str(), "", 1); + else + return setenv(vardef.substr(0, found).c_str(), vardef.substr(found + 1).c_str(), 1); +#endif + return -1; +} + +/* ---------------------------------------------------------------------- + split a "path" environment variable into a list +------------------------------------------------------------------------- */ + +std::vector platform::list_pathenv(const std::string &var) +{ + std::vector dirs; + const char *ptr = getenv(var.c_str()); + if (ptr == nullptr) return dirs; + + std::string pathvar = ptr; + std::size_t first = 0, next; + while (true) { + next = pathvar.find_first_of(pathvarsep, first); + if (next == std::string::npos) { + dirs.push_back(pathvar.substr(first)); + break; + } else { + dirs.push_back(pathvar.substr(first, next - first)); + first = next + 1; + } + } + return dirs; +} + +/* ---------------------------------------------------------------------- + find the full path name of an executable +------------------------------------------------------------------------- */ + +std::string platform::find_exe_path(const std::string &cmd) +{ + if (cmd.size() == 0) return ""; + auto pathdirs = list_pathenv("PATH"); +#ifdef _WIN32 + // windows always looks in "." and does it first + pathdirs.insert(pathdirs.begin(), "."); +#else + struct stat info; +#endif + for (const auto &dir : pathdirs) { + std::string exe = path_join(dir, cmd); +#ifdef _WIN32 + const char *extensions[] = {".exe", ".com", ".bat", nullptr}; + for (auto ext = extensions; *ext != nullptr; ++ext) { + auto exe_path = exe + *ext; + if (file_is_readable(exe_path)) return exe_path; + } +#else + memset(&info, 0, sizeof(info)); + if (stat(exe.c_str(), &info) != 0) continue; + if ((info.st_mode & (S_IXOTH | S_IXGRP | S_IXUSR)) != 0) return exe; +#endif + } + return ""; +} + +/* ---------------------------------------------------------------------- + wrapper functions for loading shared objects and libraries +------------------------------------------------------------------------- */ + +#ifdef _WIN32 + +// open a shared object file +void *platform::dlopen(const std::string &fname) +{ + return (void *) LoadLibrary(fname.c_str()); +} + +// close a shared object +int platform::dlclose(void *handle) +{ + /* FreeLibrary returns nonzero on success unlike dlclose() */ + return (FreeLibrary((HINSTANCE) handle) == 0); +} + +// resolve a symbol in shared object +void *platform::dlsym(void *handle, const std::string &symbol) +{ + return (void *) GetProcAddress((HINSTANCE) handle, symbol.c_str()); +} + +#else + +// open a shared object file +void *platform::dlopen(const std::string &fname) +{ + return ::dlopen(fname.c_str(), RTLD_NOW); +} + +// close a shared object +int platform::dlclose(void *handle) +{ + return ::dlclose(handle); +} + +// resolve a symbol in shared object +void *platform::dlsym(void *handle, const std::string &symbol) +{ + return ::dlsym(handle, symbol.c_str()); +} +#endif + +/* ---------------------------------------------------------------------- */ + +/** On Linux the folder /proc/self/fd holds symbolic links to the actual + * pathnames associated with each open file descriptor of the current process. + * On macOS the same kind of information can be obtained using ``fcntl(fd,F_GETPATH,buf)``. + * On Windows we use ``GetFinalPathNameByHandleA()`` which is available with + * Windows Vista and later. If the buffer is to small (< 16 bytes) a null pointer is returned. + * + * This function is used to provide a filename with error messages in functions + * where the filename is not passed as an argument, but the FILE * pointer. */ + +const char *platform::guesspath(FILE *fp, char *buf, int len) +{ + // no point in guessing a path with a short buffer or NULL pointer as buffer + if ((buf == nullptr) || (len < 16)) return nullptr; + + // zero buffer and reserve last character in buffer for terminating '\0' + memset(buf, 0, len); + len--; + +#if defined(__linux__) + + int fd = fileno(fp); + // get pathname from /proc or copy (unknown) + if (readlink((std::string("/proc/self/fd/") + std::to_string(fd)).c_str(), buf, len) <= 0) + strncpy(buf, "(unknown)", len); + +#elif defined(__APPLE__) + + int fd = fileno(fp); + char filepath[PATH_MAX]; + if (fcntl(fd, F_GETPATH, filepath) != -1) + strncpy(buf, filepath, len); + else + strncpy(buf, "(unknown)", len); + +#elif defined(_WIN32) + + char filepath[MAX_PATH]; + HANDLE h = (HANDLE) _get_osfhandle(_fileno(fp)); + if (GetFinalPathNameByHandleA(h, filepath, MAX_PATH, FILE_NAME_NORMALIZED) > 0) + strncpy(buf, filepath, len); + else + strncpy(buf, "(unknown)", len); + +#else // unsupported OS + + strncpy(buf, "(unknown)", len); + +#endif + + return buf; +} + +/* ---------------------------------------------------------------------- + detect terminal, e.g. for using a pager automatically +------------------------------------------------------------------------- */ + +bool platform::is_console(FILE *fp) +{ + if (!fp) return false; +#if defined(_WIN32) + return (_isatty(fileno(fp)) == 1); +#else + return (isatty(fileno(fp)) == 1); +#endif +} + +/* ---------------------------------------------------------------------- + Get string with path to the current directory + PATH_MAX may not be a compile time constant, so we must allocate and delete a buffer. +------------------------------------------------------------------------- */ + +std::string platform::current_directory() +{ + std::string cwd = ""; + +#if defined(_WIN32) + char *buf = new char[MAX_PATH]; + if (_getcwd(buf, MAX_PATH)) { cwd = buf; } + delete[] buf; +#else + char *buf = new char[PATH_MAX]; + if (::getcwd(buf, PATH_MAX)) { cwd = buf; } + delete[] buf; +#endif + return cwd; +} + +/* ---------------------------------------------------------------------- + check if a path is a directory +------------------------------------------------------------------------- */ + +bool platform::path_is_directory(const std::string &path) +{ +#if defined(_WIN32) + struct _stat info; + memset(&info, 0, sizeof(info)); + if (_stat(path.c_str(), &info) != 0) return false; +#else + struct stat info; + memset(&info, 0, sizeof(info)); + if (stat(path.c_str(), &info) != 0) return false; +#endif + return ((info.st_mode & S_IFDIR) != 0); +} + +/* ---------------------------------------------------------------------- + get directory listing in string vector +------------------------------------------------------------------------- */ + +std::vector platform::list_directory(const std::string &dir) +{ + std::vector files; + if (!path_is_directory(dir)) return files; + +#if defined(_WIN32) + HANDLE handle; + WIN32_FIND_DATA fd; + std::string searchname = dir + filepathsep[0] + "*"; + handle = FindFirstFile(searchname.c_str(), &fd); + if (handle == ((HANDLE) -1)) return files; + while (FindNextFile(handle, &fd)) { + std::string entry(fd.cFileName); + if ((entry == "..") || (entry == ".")) continue; + files.push_back(entry); + } + FindClose(handle); +#else + std::string dirname = dir + filepathsep[0]; + DIR *handle = opendir(dirname.c_str()); + if (handle == nullptr) return files; + struct dirent *fd; + while ((fd = readdir(handle)) != nullptr) { + std::string entry(fd->d_name); + if ((entry == "..") || (entry == ".")) continue; + files.push_back(entry); + } + closedir(handle); +#endif + return files; +} + +/* ---------------------------------------------------------------------- + Change current directory +------------------------------------------------------------------------- */ + +int platform::chdir(const std::string &path) +{ +#if defined(_WIN32) + return ::_chdir(path.c_str()); +#else + return ::chdir(path.c_str()); +#endif +} + +/* ---------------------------------------------------------------------- + Create a directory +------------------------------------------------------------------------- */ + +int platform::mkdir(const std::string &path) +{ +#if defined(_WIN32) + return ::_mkdir(path.c_str()); +#else + return ::mkdir(path.c_str(), S_IRWXU | S_IRGRP | S_IXGRP); +#endif +} + +/* ---------------------------------------------------------------------- + Delete a directory and its contents recursively +------------------------------------------------------------------------- */ + +int platform::rmdir(const std::string &path) +{ + // recurse through directory tree deleting files and directories + auto entries = list_directory(path); + for (const auto &entry : entries) { + const auto newpath = path_join(path, entry); + if (path_is_directory(newpath)) + rmdir(newpath); + else + unlink(newpath); + } +#if defined(_WIN32) + return ::_rmdir(path.c_str()); +#else + return ::rmdir(path.c_str()); +#endif +} + +/* ---------------------------------------------------------------------- + Delete a file +------------------------------------------------------------------------- */ + +int platform::unlink(const std::string &path) +{ +#if defined(_WIN32) + return ::_unlink(path.c_str()); +#else + return ::unlink(path.c_str()); +#endif +} + +/* ---------------------------------------------------------------------- + Get current file stream position +------------------------------------------------------------------------- */ + +bigint platform::ftell(FILE *fp) +{ +#if defined(_WIN32) + return (bigint)::_ftelli64(fp); +#else + return (bigint)::ftell(fp); +#endif +} + +/* ---------------------------------------------------------------------- + Set current file stream position +------------------------------------------------------------------------- */ + +int platform::fseek(FILE *fp, bigint pos) +{ +#if defined(_WIN32) + return ::_fseeki64(fp, (__int64) pos, SEEK_SET); +#else + return ::fseek(fp, (long) pos, SEEK_SET); +#endif +} + +/* ---------------------------------------------------------------------- + Truncate opened file to given length +------------------------------------------------------------------------- */ + +int platform::ftruncate(FILE *fp, bigint length) +{ +#if defined(_WIN32) + HANDLE h = (HANDLE) _get_osfhandle(_fileno(fp)); + LARGE_INTEGER li_start, li_length; + li_start.QuadPart = (int64_t) 0; + li_length.QuadPart = (int64_t) length; + if (SetFilePointerEx(h, li_start, NULL, FILE_CURRENT) && + SetFilePointerEx(h, li_length, NULL, FILE_BEGIN) && SetEndOfFile(h)) { + return 0; + } else { + return 1; + } +#else + platform::fseek(fp, length); + return ::ftruncate(fileno(fp), (off_t) length); +#endif +} + +/* ---------------------------------------------------------------------- + open pipe +------------------------------------------------------------------------- */ + +FILE *platform::popen(const std::string &cmd, const std::string &mode) +{ + FILE *fp = nullptr; +#if defined(_WIN32) + if (mode == "r") + fp = ::_popen(cmd.c_str(), "rb"); + else if (mode == "w") + fp = ::_popen(cmd.c_str(), "wb"); +#else + if (mode == "r") + fp = ::popen(cmd.c_str(), "r"); + else if (mode == "w") + fp = ::popen(cmd.c_str(), "w"); +#endif + return fp; +} + +/* ---------------------------------------------------------------------- + close pipe +------------------------------------------------------------------------- */ + +int platform::pclose(FILE *fp) +{ +#if defined(_WIN32) + return ::_pclose(fp); +#else + return ::pclose(fp); +#endif +} + +/* ---------------------------------------------------------------------- + strip off leading part of path, return just the filename +------------------------------------------------------------------------- */ + +std::string platform::path_basename(const std::string &path) +{ + size_t start = path.find_last_of(platform::filepathsep); + + if (start == std::string::npos) { + start = 0; + } else { + start += 1; + } + + return path.substr(start); +} + +/* ---------------------------------------------------------------------- + Return only the leading part of a path, return just the directory +------------------------------------------------------------------------- */ + +std::string platform::path_dirname(const std::string &path) +{ + size_t start = path.find_last_of(platform::filepathsep); + + if (start == std::string::npos) return "."; + + return path.substr(0, start); +} + +/* ---------------------------------------------------------------------- + join two paths. + if one of the two is an empty string just return the other unmodified + if the first string ends in the separator or the second begins with one, trim them +------------------------------------------------------------------------- */ + +std::string platform::path_join(const std::string &a, const std::string &b) +{ + if (a.empty()) return b; + if (b.empty()) return a; + + // remove trailing separator(s) in first part + std::string joined = a; + while (joined.find_last_of(platform::filepathsep) == joined.size() - 1) { + for (const auto &s : platform::filepathsep) + if (joined.back() == s) joined.pop_back(); + } + + // skip over leading separator(s) in second part + std::size_t skip = 0; + while (b.find_first_of(platform::filepathsep, skip) == skip) ++skip; + + // combine and return + joined += platform::filepathsep[0] + b.substr(skip); + return joined; +} + +/* ---------------------------------------------------------------------- + try to open file for reading to prove if it exists and is accessible +------------------------------------------------------------------------- */ + +bool platform::file_is_readable(const std::string &path) +{ + FILE *fp = fopen(path.c_str(), "r"); + if (fp) { + fclose(fp); + return true; + } + return false; +} + +/* ---------------------------------------------------------------------- + check if filename has a known compression extension +------------------------------------------------------------------------- */ + +bool platform::has_zip_extension(const std::string &file) +{ + return find_zip_type(file).style != zip_info::NONE; +} + +/* ---------------------------------------------------------------------- + open pipe to read a compressed file +------------------------------------------------------------------------- */ + +FILE *platform::zip_read(const std::string &file) +{ + FILE *fp = nullptr; + +#if defined(LAMMPS_GZIP) + auto zip = find_zip_type(file); + if (zip.style == zip_info::NONE) return nullptr; + + if (find_exe_path(zip.command).size()) + // put quotes around file name so that they may contain blanks + fp = popen((zip.command + zip.unzipflags + "\"" + file + "\""), "r"); +#endif + return fp; +} + +/* ---------------------------------------------------------------------- + open pipe to write a compressed file +------------------------------------------------------------------------- */ + +FILE *platform::zip_write(const std::string &file) +{ + FILE *fp = nullptr; + +#if defined(LAMMPS_GZIP) + auto zip = find_zip_type(file); + if (zip.style == zip_info::NONE) return nullptr; + + if (find_exe_path(zip.command).size()) + // put quotes around file name so that they may contain blanks + fp = popen((zip.command + zip.zipflags + "\"" + file + "\""), "w"); +#endif + return fp; +} + +/* ---------------------------------------------------------------------- */ diff --git a/src/platform.h b/src/platform.h new file mode 100644 index 0000000000..5aeee1545e --- /dev/null +++ b/src/platform.h @@ -0,0 +1,350 @@ +/* -*- c++ -*- ---------------------------------------------------------- + LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator + https://www.lammps.org/, 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_PLATFORM_H +#define LMP_PLATFORM_H + +/*! \file platform.h */ + +#include "lmptype.h" + +#include +#include + +namespace LAMMPS_NS { +namespace platform { + + /*! Return the consumed CPU time for the current process in seconds + * + * This is a wrapper about the POSIX function getrusage() and the Windows equivalent. + * It is to be used in a similar fashion than MPI_Wtime(). + * + * \return used CPU time in second */ + + double cputime(); + + /*! Return the wall clock state for the current process in seconds + * + * This is a wrapper about XXX and its Windows equivalent. + * It is to be used in a similar fashion than MPI_Wtime(). + * + * \return wall clock time in second */ + + double walltime(); + + /*! Return string with the Operating system version and architecture info. + * + * \return string with info about the OS and the platform is is running on */ + + std::string os_info(); + + /*! Return string with C++ standard version used to compile LAMMPS. + * + * This function uses predefined compiler macros to identify + * the C++ standard version used to compile LAMMPS with. + * + * \return string with the C++ standard version or "unknown" */ + + std::string cxx_standard(); + + /*! Return string with compiler version info + * + * This function uses predefined compiler macros to identify + * Compilers and their version and configuration info. + * + * \return string with the compiler information text */ + + std::string compiler_info(); + + /*! Return string with OpenMP standard version info + * + * This function uses predefined compiler macros to identify + * OpenMP support and the supported version of the standard. + * + * \return string with the openmp information text */ + + std::string openmp_standard(); + + /*! Return string with MPI vendor info + * + * This function uses predefined macros to identify + * the vendor of the MPI library used. + * + * \return string with the MPI vendor information text */ + + std::string mpi_vendor(); + + /*! Return string with MPI version info + * + * This function uses predefined macros and MPI function + * calls to identify the version of the MPI library used. + * + * \param major major version of the MPI standard (set on exit) + * \param minor minor version of the MPI standard (set on exit) + * \return string with the MPI version information text */ + + std::string mpi_info(int &major, int &minor); + + /*! Add variable to the environment + * + * \param vardef variable name or variable definition (NAME=value) + * \return -1 if failure otherwise 0 */ + + int putenv(const std::string &vardef); + + /*! Get list of entries in a path environment variable + * + * This provides a list of strings of the entries in an environment + * variable that is containing a "path" like "PATH" or "LD_LIBRARY_PATH". + * + * \param var name of the environment variable + * \return vector with strings of all entries in that path variable */ + + std::vector list_pathenv(const std::string &var); + + /*! Open a shared object file or library + * + * \param fname name or path of the shared object + * \return handle to the shared object or null */ + + void *dlopen(const std::string &fname); + + /*! Close a shared object + * This releases the object corresponding to the provided handle. + * Resolved symbols associated with this handle may not be used + * after this call + * + * \param handle handle to an opened shared object + * \return 0 if succesful, non-zero of not */ + + int dlclose(void *handle); + + /*! Resolve a symbol in shared object + * + * \param handle handle to an opened shared object + * \param symbol name of the symbol to extract + * \return pointer to the resolved symbol or null */ + + void *dlsym(void *handle, const std::string &symbol); + + /*! File path component separators + * These are the characters that separate directories and filename in paths on + * a platform. If multiple are provided, the first is the preferred one. */ + +#if defined(_WIN32) + constexpr char filepathsep[] = "\\/"; +#else + constexpr char filepathsep[] = "/"; +#endif + + /*! Path environment variable component separator + * This is the character that separates entries in "PATH" environment variables. */ + +#if defined(_WIN32) + constexpr char pathvarsep = ';'; +#else + constexpr char pathvarsep = ':'; +#endif + + /*! Try to detect pathname from FILE pointer. + * + * Currently only supported on Linux and macOS, otherwise will report "(unknown)". + * + * \param fp FILE pointer struct from STDIO library for which we want to detect the name + * \param buf storage buffer for pathname. output will be truncated if not large enough + * \param len size of storage buffer. output will be truncated to this length - 1 + * \return pointer to the storage buffer with path or a NULL pointer if buf is invalid + * or the buffer size is too small */ + + const char *guesspath(FILE *fp, char *buf, int len); + + /*! Check if a file pointer may be connected to a console + * + * \param fp file pointer + * \return true if the file pointer is flagged as a TTY */ + + bool is_console(FILE *fp); + + /*! Get string with path to the current directory + * + * \return path to the current directory or empty string */ + + std::string current_directory(); + + /*! Check if a path is a directory + * + * \param path directory path + * \return true if the directory exists */ + + bool path_is_directory(const std::string &path); + + /*! Get list of entries in a directory + * + * This provides a list of strings of the entries in the directory + * without the leading path name while also skipping over ".." and ".". + * + * \param path path to directory + * \return vector with strings of all directory entries */ + + std::vector list_directory(const std::string &dir); + + /*! Find pathname of an executable in the standard search path + * + * This function will traverse the list of directories in the PATH + * environment variable and look for the executable *cmd*. If the + * file exists and is executable the full path is returned as string, + * otherwise and emptry string is returned. + * + * On Windows the *cmd* string must not include and extension as + * this function will automatically append the extensions ".exe", + * ".com" and ".bat" and look for those paths. On Windows also the + * current directory is checked (and first), while otherwise not unless + * "." exists in the PATH environment variable. + * + * Because of the nature of the check, this will not detect shell functions + * built-in command or aliases. + * + * \param cmd name of command + * \return vector with strings of all directory entries */ + + std::string find_exe_path(const std::string &cmd); + + /*! Change current directory + * + * \param path new current working directory path + * \return -1 if unsuccessful, otherwise >= 0 */ + + int chdir(const std::string &path); + + /*! Create a directory + * + * \param path directory path + * \return -1 if unsuccessful, otherwise >= 0 */ + + int mkdir(const std::string &path); + + /*! Delete a directory + * + * \param path directory path + * \return -1 if unsuccessful, otherwise >= 0 */ + + int rmdir(const std::string &path); + + /*! Delete a directory and its contents + * + * Unlike the the ``rmdir()`` or ``_rmdir()`` function of the + * C library, this function will check for the contents of the + * folder and recurse into any sub-folders, if necessary and + * delete all contained folders and their contents before + * deleting the folder *path*. + * + * \param path path to file to be deleted + * \return 0 on success, -1 on error */ + + int unlink(const std::string &path); + + /*! Get current file position + * + * \param fp FILE pointer of the given file + * \return current FILE pointer position cast to a bigint */ + + bigint ftell(FILE *fp); + + /*! Set absolute file position + * + * \param fp FILE pointer of the given file + * \param pos new position of the FILE pointer + * \return 0 if successful, otherwise -1 */ + + int fseek(FILE *fp, bigint pos); + + /*! Truncate file to a given length and reposition file pointer + * + * \param fp FILE pointer of the given file + * \param length length to which the file is being truncated to + * \return 0 if successful, otherwise -1 */ + + int ftruncate(FILE *fp, bigint length); + + /*! Open a pipe to a command for reading or writing + * + * \param cmd command for the pipe + * \param mode "r" for reading from *cmd* or "w" for writing to *cmd* + * \return file pointer to the pipe if successful or null */ + + FILE *popen(const std::string &cmd, const std::string &mode); + + /*! Close a previously opened pipe + * + * \param fp FILE pointer for the pipe + * \return exit status of the pipe command or -1 in case of errors */ + + int pclose(FILE *fp); + + /*! Strip off leading part of path, return just the filename + * + * \param path file path + * \return file name */ + + std::string path_basename(const std::string &path); + + /*! Return the directory part of a path. Return "." if empty + * + * \param path file path + * \return directory name */ + + std::string path_dirname(const std::string &path); + + /*! Join two pathname segments + * + * This uses the forward slash '/' character unless LAMMPS is compiled + * for Windows where it used the equivalent backward slash '\\'. + * + * \param a first path + * \param b second path + * \return combined path */ + + std::string path_join(const std::string &a, const std::string &b); + + /*! Check if file exists and is readable + * + * \param path file path + * \return true if file exists and is readable */ + + bool file_is_readable(const std::string &path); + + /*! Check if a file name ends in a known extension for a compressed file format + * Currently supported extensions are: .Z, .gz, .bz2, .zstd, .xz, .lzma + * + * \param file name of the file to check + * \return true if the file has a known extension, otherwise false */ + + bool has_zip_extension(const std::string &file); + + /*! Open pipe to compressed text file for reading. + * + * \param file name of the file to open + * \return FILE pointer to pipe using for reading the compressed file. */ + + FILE *zip_read(const std::string &file); + + /*! Open pipe to compressed text file for writing. + * + * \param file name of the file to open + * \return FILE pointer to pipe using for reading the compressed file. */ + + FILE *zip_write(const std::string &file); + +} // namespace platform +} // namespace LAMMPS_NS +#endif diff --git a/unittest/utils/CMakeLists.txt b/unittest/utils/CMakeLists.txt index c1ce7c136f..d58b1294be 100644 --- a/unittest/utils/CMakeLists.txt +++ b/unittest/utils/CMakeLists.txt @@ -15,6 +15,22 @@ target_link_libraries(test_utils PRIVATE lammps GTest::GMockMain GTest::GMock GT add_test(Utils test_utils) set_tests_properties(Utils PROPERTIES ENVIRONMENT "LAMMPS_POTENTIALS=${LAMMPS_POTENTIALS_DIR}") +add_executable(test_platform test_platform.cpp) +target_link_libraries(test_platform PRIVATE lammps GTest::GMockMain GTest::GMock GTest::GTest) +add_test(Platform test_platform) +set(PLATFORM_ENVIRONMENT "LAMMPS_POTENTIALS=${LAMMPS_POTENTIALS_DIR}") +if(BUILD_SHARED_LIBS) + enable_language(C) + target_compile_definitions(test_platform PRIVATE -DTEST_SHARED_OBJECT=1) + add_library(testsharedobj MODULE testshared.c) + set_target_properties(testsharedobj PROPERTIES PREFIX "" WINDOWS_EXPORT_ALL_SYMBOLS TRUE) + add_library(testsharedlib SHARED testshared.c) + set_target_properties(testsharedlib PROPERTIES WINDOWS_EXPORT_ALL_SYMBOLS TRUE) + add_dependencies(test_platform testsharedobj testsharedlib) + list(APPEND PLATFORM_ENVIRONMENT "TEST_SHARED_LIB=$" "TEST_SHARED_OBJ=$") +endif() +set_tests_properties(Platform PROPERTIES ENVIRONMENT ${PLATFORM_ENVIRONMENT} WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}) + add_executable(test_fmtlib test_fmtlib.cpp) target_link_libraries(test_fmtlib PRIVATE lammps GTest::GMockMain GTest::GMock GTest::GTest) add_test(FmtLib test_fmtlib) diff --git a/unittest/utils/test_platform.cpp b/unittest/utils/test_platform.cpp new file mode 100644 index 0000000000..154fb2c222 --- /dev/null +++ b/unittest/utils/test_platform.cpp @@ -0,0 +1,395 @@ + +#include "platform.h" +#include "utils.h" + +#include "gmock/gmock.h" +#include "gtest/gtest.h" + +#include + +using namespace LAMMPS_NS; +using testing::EndsWith; +using testing::Eq; +using testing::IsEmpty; +using testing::StartsWith; +using testing::StrEq; + +TEST(Platform, clock) +{ + const double wt_start = platform::walltime(); + const double ct_start = platform::cputime(); + + // spend some time computing pi + constexpr double known_pi = 3.141592653589793238462643; + constexpr int n = 10000000; + constexpr double h = 1.0 / (double) n; + double my_pi = 0.0, x; + for (int i = 0; i < n; ++i) { + x = h * ((double) i + 0.5); + my_pi += 4.0 / (1.0 + x * x); + } + my_pi *= h; + const double wt_used = platform::walltime() - wt_start; + const double ct_used = platform::cputime() - ct_start; + + ASSERT_NEAR(my_pi, known_pi, 1e-12); + ASSERT_GT(wt_used, 1e-4); + ASSERT_GT(ct_used, 1e-4); +} + +TEST(Platform, putenv) +{ + const char *var = getenv("UNITTEST_VAR1"); + ASSERT_EQ(var, nullptr); + int rv = platform::putenv("UNITTEST_VAR1"); + var = getenv("UNITTEST_VAR1"); + ASSERT_EQ(rv, 0); + ASSERT_NE(var, nullptr); + // we cannot set environment variables without a value on windows with _putenv() +#if defined(_WIN32) + ASSERT_THAT(var, StrEq("1")); +#else + ASSERT_THAT(var, StrEq("")); +#endif + + rv = platform::putenv("UNITTEST_VAR1=one"); + var = getenv("UNITTEST_VAR1"); + ASSERT_EQ(rv, 0); + ASSERT_NE(var, nullptr); + ASSERT_THAT(var, StrEq("one")); + + rv = platform::putenv("UNITTEST_VAR1=one=two"); + var = getenv("UNITTEST_VAR1"); + ASSERT_EQ(rv, 0); + ASSERT_NE(var, nullptr); + ASSERT_THAT(var, StrEq("one=two")); + + ASSERT_EQ(platform::putenv(""), -1); +} + +TEST(Platform, list_pathenv) +{ + auto dirs = platform::list_pathenv("PATH"); + ASSERT_GT(dirs.size(), 1); +} + +TEST(Platform, find_cmd_path) +{ +#if defined(_WIN32) + ASSERT_THAT(platform::find_exe_path("notepad"), EndsWith("\\notepad.exe")); + ASSERT_THAT(platform::find_exe_path("cmd"), EndsWith("\\cmd.exe")); + ASSERT_THAT(platform::find_exe_path("some_bogus_command"), IsEmpty()); +#else + ASSERT_THAT(platform::find_exe_path("ls"), EndsWith("bin/ls")); + ASSERT_THAT(platform::find_exe_path("sh"), EndsWith("bin/sh")); + ASSERT_THAT(platform::find_exe_path("some_bogus_command"), IsEmpty()); +#endif +} + +TEST(Platform, sharedload) +{ + const char *objs[] = {"TEST_SHARED_OBJ", "TEST_SHARED_LIB", nullptr}; + const char *envvar, **envptr; + const int *intvar; + const double *doublevar; + void *handle; + int (*intfunc)(int); + double (*doublefunc)(double, int); + + for (envptr = objs; *envptr != nullptr; ++envptr) { + envvar = getenv(*envptr); + EXPECT_NE(envvar, nullptr); + handle = platform::dlopen(envvar); + EXPECT_NE(handle, nullptr); + intvar = (int *) platform::dlsym(handle, "some_int_val"); + EXPECT_NE(intvar, nullptr); + EXPECT_EQ(*intvar, 12345); + doublevar = (double *) platform::dlsym(handle, "some_double_val"); + EXPECT_NE(doublevar, nullptr); + EXPECT_DOUBLE_EQ(*doublevar, 6.78e-9); + intfunc = (int (*)(int)) platform::dlsym(handle, "some_int_function"); + EXPECT_NE(intfunc, nullptr); + EXPECT_EQ((*intfunc)(12), 144); + doublefunc = (double (*)(double, int)) platform::dlsym(handle, "some_double_function"); + EXPECT_NE(doublefunc, nullptr); + EXPECT_DOUBLE_EQ((*doublefunc)(0.5, 6), 3.0); + EXPECT_EQ(platform::dlsym(handle, "some_nonexisting_symbol"), nullptr); + EXPECT_EQ(platform::dlclose(handle), 0); + } +} + +TEST(Platform, guesspath) +{ + char buf[256]; + FILE *fp = fopen("test_guesspath.txt", "w"); +#if defined(__linux__) || defined(__APPLE__) || defined(_WIN32) + const char *path = platform::guesspath(fp, buf, sizeof(buf)); + ASSERT_THAT(path, EndsWith("test_guesspath.txt")); +#else + const char *path = platform::guesspath(fp, buf, sizeof(buf)); + ASSERT_THAT(path, EndsWith("(unknown)")); +#endif + fclose(fp); + platform::unlink("test_guesspath.txt"); +} + +TEST(Platform, unlink) +{ + const char test[] = "12345678901234567890"; + platform::unlink("unlink.dat"); + ASSERT_EQ(platform::unlink("dummy.dat"), -1); + FILE *fp = fopen("unlink.dat", "w"); + fwrite(test, sizeof(test), 1, fp); + fclose(fp); + ASSERT_EQ(platform::unlink("unlink.dat"), 0); + ASSERT_EQ(platform::unlink("unlink.dat"), -1); + fp = fopen("unlink.dat", "r"); + ASSERT_EQ(fp, nullptr); + + platform::mkdir("unlink.dir"); + ASSERT_EQ(platform::unlink("unlink.dir"), -1); + platform::rmdir("unlink.dir"); +} + +TEST(Platform, fseek_ftell) +{ + const char test[] = "12345678901234567890"; + platform::unlink("seek_tell.dat"); + FILE *fp = fopen("seek_tell.dat", "w"); + fwrite(test, sizeof(test), 1, fp); + fflush(fp); + ASSERT_EQ(platform::ftell(fp), sizeof(test)); + fclose(fp); + fp = fopen("seek_tell.dat", "r+"); + ASSERT_EQ(fgetc(fp), '1'); + ASSERT_EQ(fgetc(fp), '2'); + ASSERT_EQ(platform::ftell(fp), 2); + ASSERT_EQ(platform::fseek(fp, 15), 0); + ASSERT_EQ(fgetc(fp), '6'); + fflush(fp); + fseek(fp, -1, SEEK_END); + ASSERT_EQ(fgetc(fp), 0); + ASSERT_EQ(platform::ftell(fp), 21); + fclose(fp); + platform::unlink("seek_tell.dat"); +} + +TEST(Platform, ftruncate) +{ + platform::unlink("truncate.dat"); + FILE *fp = fopen("truncate.dat", "w"); + fputs("header one\n", fp); + fputs("header two\n", fp); + fflush(fp); + bigint filepos = platform::ftell(fp); + fputs("line one\n", fp); + fputs("line two\n", fp); + fputs("line three\n", fp); + fflush(fp); + ASSERT_EQ(platform::ftruncate(fp, filepos), 0); + fputs("line four\n", fp); + ASSERT_GT(platform::ftell(fp), filepos); + fputs("line five\n", fp); + fflush(fp); + fclose(fp); + + // check file + fp = fopen("truncate.dat", "r"); + char buf[128]; + char *ptr = fgets(buf, 127, fp); + ASSERT_THAT(ptr, StartsWith("header one")); + ptr = fgets(buf, 127, fp); + ASSERT_THAT(ptr, StartsWith("header two")); + ptr = fgets(buf, 127, fp); + ASSERT_THAT(ptr, StartsWith("line four")); + ptr = fgets(buf, 127, fp); + ASSERT_THAT(ptr, StartsWith("line five")); + ptr = fgets(buf, 127, fp); + ASSERT_EQ(ptr, nullptr); + fclose(fp); + platform::unlink("truncate.dat"); +} + +TEST(Platform, path_basename) +{ +#if defined(_WIN32) + ASSERT_THAT(platform::path_basename("c:\\parent\\folder\\filename"), Eq("filename")); + ASSERT_THAT(platform::path_basename("folder\\"), Eq("")); + ASSERT_THAT(platform::path_basename("c:/parent/folder/filename"), Eq("filename")); +#else + ASSERT_THAT(platform::path_basename("/parent/folder/filename"), Eq("filename")); + ASSERT_THAT(platform::path_basename("/parent/folder/"), Eq("")); +#endif +} + +TEST(Platform, path_dirname) +{ +#if defined(_WIN32) + ASSERT_THAT(platform::path_dirname("c:/parent/folder/filename"), Eq("c:/parent/folder")); + ASSERT_THAT(platform::path_dirname("c:\\parent\\folder\\filename"), Eq("c:\\parent\\folder")); + ASSERT_THAT(platform::path_dirname("c:filename"), Eq(".")); +#else + ASSERT_THAT(platform::path_dirname("/parent/folder/filename"), Eq("/parent/folder")); +#endif + ASSERT_THAT(platform::path_dirname("filename"), Eq(".")); +} + +TEST(Platform, path_join) +{ +#if defined(_WIN32) + ASSERT_THAT(platform::path_join("c:\\folder", "filename"), Eq("c:\\folder\\filename")); + ASSERT_THAT(platform::path_join("c:\\folder\\", "filename"), Eq("c:\\folder\\filename")); + ASSERT_THAT(platform::path_join("c:\\folder", "\\filename"), Eq("c:\\folder\\filename")); + ASSERT_THAT(platform::path_join("c:\\folder\\", "\\filename"), Eq("c:\\folder\\filename")); + ASSERT_THAT(platform::path_join("c:\\folder", "/filename"), Eq("c:\\folder\\filename")); + ASSERT_THAT(platform::path_join("c:\\folder\\\\", "\\filename"), Eq("c:\\folder\\filename")); + ASSERT_THAT(platform::path_join("c:\\folder\\", "\\\\filename"), Eq("c:\\folder\\filename")); + ASSERT_THAT(platform::path_join("c:\\folder/\\", "/\\filename"), Eq("c:\\folder\\filename")); + ASSERT_THAT(platform::path_join("c:\\folder\\/", "\\/filename"), Eq("c:\\folder\\filename")); + ASSERT_THAT(platform::path_join("c:\\folder", ""), Eq("c:\\folder")); + ASSERT_THAT(platform::path_join("", "\\/filename"), Eq("\\/filename")); +#else + ASSERT_THAT(platform::path_join("/parent/folder", "filename"), Eq("/parent/folder/filename")); + ASSERT_THAT(platform::path_join("/parent/folder/", "filename"), Eq("/parent/folder/filename")); + ASSERT_THAT(platform::path_join("/parent/folder", "/filename"), Eq("/parent/folder/filename")); + ASSERT_THAT(platform::path_join("/parent/folder/", "/filename"), Eq("/parent/folder/filename")); + ASSERT_THAT(platform::path_join("/parent/folder//", "filename"), Eq("/parent/folder/filename")); + ASSERT_THAT(platform::path_join("/parent/folder", "//filename"), Eq("/parent/folder/filename")); + ASSERT_THAT(platform::path_join("/parent/folder///", "/filename"), Eq("/parent/folder/filename")); + ASSERT_THAT(platform::path_join("/parent/folder/", "///filename"), Eq("/parent/folder/filename")); + ASSERT_THAT(platform::path_join("/parent/folder/", ""), Eq("/parent/folder/")); + ASSERT_THAT(platform::path_join("", "\\/filename"), Eq("\\/filename")); +#endif +} + +TEST(Platform, is_console) +{ + platform::unlink("file_is_no_console.txt"); + FILE *fp = fopen("file_is_no_console.txt", "w"); + fputs("some text\n", fp); + EXPECT_FALSE(platform::is_console(fp)); + fclose(fp); + platform::unlink("file_is_no_console.txt"); +} + +TEST(Platform, path_and_directory) +{ + platform::unlink("path_is_directory"); + platform::rmdir("path_is_directory"); + platform::unlink("path_is_file"); + platform::mkdir("path_is_directory"); + FILE *fp = fopen("path_is_file", "w"); + fputs("some text\n", fp); + fclose(fp); + + ASSERT_TRUE(platform::path_is_directory("path_is_directory")); + ASSERT_FALSE(platform::path_is_directory("path_is_file")); + ASSERT_FALSE(platform::path_is_directory("path_does_not_exist")); + platform::unlink("path_is_file"); + +#if defined(_WIN32) + fp = fopen("path_is_directory\\path_is_file", "w"); +#else + fp = fopen("path_is_directory/path_is_file", "w"); +#endif + fputs("some text\n", fp); + fclose(fp); +#if defined(_WIN32) + platform::mkdir("path_is_directory\\path_is_directory"); + fp = fopen("path_is_directory\\path_is_other_file", "w"); +#else + platform::mkdir("path_is_directory/path_is_directory"); + fp = fopen("path_is_directory/path_is_other_file", "w"); +#endif + fputs("some text\n", fp); + fclose(fp); + auto dirs = platform::list_directory("path_is_directory"); + ASSERT_EQ(dirs.size(), 3); + platform::rmdir("path_is_directory"); + ASSERT_FALSE(platform::path_is_directory("path_is_directory")); +} + +TEST(Platform, get_change_directory) +{ + platform::unlink("working_directory"); + platform::rmdir("working_directory"); + + auto cwd = platform::current_directory(); + ASSERT_GT(cwd.size(), 0); + + platform::mkdir("working_directory"); + ASSERT_EQ(platform::chdir("working_directory"), 0); + ASSERT_THAT(platform::current_directory(), EndsWith("working_directory")); + + ASSERT_EQ(platform::chdir(".."), 0); + ASSERT_THAT(platform::current_directory(), StrEq(cwd)); + platform::rmdir("working_directory"); +} + +TEST(Platform, file_is_readable) +{ + platform::unlink("file_is_readable.txt"); + FILE *fp = fopen("file_is_readable.txt", "w"); + fputs("some text\n", fp); + fclose(fp); + + ASSERT_TRUE(platform::file_is_readable("file_is_readable.txt")); + ASSERT_FALSE(platform::file_is_readable("file_does_not_exist.txt")); + platform::unlink("file_is_readable.txt"); + + // windows does not have permission flags +#if !defined(_WIN32) + platform::unlink("file_is_not_readable.txt"); + fp = fopen("file_is_not_readable.txt", "w"); + fputs("some text\n", fp); + fclose(fp); + chmod("file_is_not_readable.txt", 0); + ASSERT_FALSE(platform::file_is_readable("file_is_not_readable.txt")); + platform::unlink("file_is_not_readable.txt"); +#endif +} + +TEST(Platform, has_zip_extension) +{ + ASSERT_FALSE(platform::has_zip_extension("dummy")); + ASSERT_FALSE(platform::has_zip_extension("dum.my")); + ASSERT_TRUE(platform::has_zip_extension("dummy.gz")); + ASSERT_TRUE(platform::has_zip_extension("dummy.bz2")); + ASSERT_TRUE(platform::has_zip_extension("dummy.zstd")); + ASSERT_TRUE(platform::has_zip_extension("dummy.xz")); + ASSERT_TRUE(platform::has_zip_extension("dummy.lzma")); + ASSERT_TRUE(platform::has_zip_extension("dummy.lz4")); +} + +TEST(Platform, zip_read_write) +{ + const std::vector test_files = {"zip_test.zip", "zip_test.gz", "zip_test.bz2", + "zip_test.zstd", "zip_test.xz", "zip_test.lzma", + "zip_test.lz4", "zip_test.unk", "zip test.gz"}; + for (const auto &file : test_files) { + platform::unlink(file); + FILE *fp = platform::zip_write(file); + if (!fp) { + platform::unlink(file); + continue; + } + + clearerr(fp); + fputs("line one\n", fp); + fputs("line two\n", fp); + ASSERT_EQ(ferror(fp), 0); + fflush(fp); + platform::pclose(fp); + + fp = platform::zip_read(file); + ASSERT_NE(fp, nullptr); + char buf[128]; + char *ptr = fgets(buf, 128, fp); + EXPECT_THAT(ptr, StartsWith("line one")); + ptr = fgets(buf, 128, fp); + EXPECT_THAT(ptr, StartsWith("line two")); + ASSERT_EQ(ferror(fp), 0); + platform::pclose(fp); + platform::unlink(file); + } +} diff --git a/unittest/utils/testshared.c b/unittest/utils/testshared.c new file mode 100644 index 0000000000..869be91c2a --- /dev/null +++ b/unittest/utils/testshared.c @@ -0,0 +1,20 @@ +/* file for testing loading of shared objects and libraries */ + +int some_int_val = 12345; +double some_double_val = 6.78e-9; + +int some_int_function(int arg) +{ + return arg*arg; +} + +double some_double_function(double arg1, int arg2) +{ + double sum = 0; + for (int i = 0; i < arg2; ++i) + sum += arg1; + return sum; +} + + + From 1840c51960360d14a8e089bd973fc7e356d9bb19 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Thu, 30 Sep 2021 00:32:34 -0400 Subject: [PATCH 043/372] fmt::format() is no longer needed for this explicitly --- src/REAXFF/fix_qeq_reaxff.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/REAXFF/fix_qeq_reaxff.cpp b/src/REAXFF/fix_qeq_reaxff.cpp index d24d5cce0c..ac143d95c4 100644 --- a/src/REAXFF/fix_qeq_reaxff.cpp +++ b/src/REAXFF/fix_qeq_reaxff.cpp @@ -98,10 +98,10 @@ FixQEqReaxFF::FixQEqReaxFF(LAMMPS *lmp, int narg, char **arg) : else if (strcmp(arg[iarg],"nowarn") == 0) maxwarn = 0; else if (strcmp(arg[iarg],"maxiter") == 0) { if (iarg+1 > narg-1) - error->all(FLERR,fmt::format("Illegal fix {} command", style)); + error->all(FLERR,"Illegal fix {} command", style); imax = utils::numeric(FLERR,arg[iarg+1],false,lmp); iarg++; - } else error->all(FLERR,fmt::format("Illegal fix {} command", style)); + } else error->all(FLERR,"Illegal fix {} command", style); iarg++; } shld = nullptr; From f6cb693d6b73e4fb9596cfa8336a3acb3bd21757 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Thu, 30 Sep 2021 00:40:15 -0400 Subject: [PATCH 044/372] whitespace --- src/REAXFF/fix_acks2_reaxff.cpp | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/REAXFF/fix_acks2_reaxff.cpp b/src/REAXFF/fix_acks2_reaxff.cpp index e30a970098..3bea67e5d9 100644 --- a/src/REAXFF/fix_acks2_reaxff.cpp +++ b/src/REAXFF/fix_acks2_reaxff.cpp @@ -173,26 +173,26 @@ void FixACKS2ReaxFF::pertype_parameters(char *arg) const char *line = reader.next_line(); if (!line) - throw parser_error("Invalid param file for fix acks2/reaxff"); + throw parser_error("Invalid parameter file for fix acks2/reaxff"); ValueTokenizer values(line); if (values.count() != 1) - throw parser_error("Fix acks2/reaxff: Incorrect format of param file"); + throw parser_error("Fix acks2/reaxff: Incorrect format of parameter file"); bond_softness = values.next_double(); for (int i = 1; i <= ntypes; i++) { const char *line = reader.next_line(); if (!line) - throw parser_error("Invalid param file for fix acks2/reaxff"); + throw parser_error("Invalid parameter file for fix acks2/reaxff"); ValueTokenizer values(line); if (values.count() != 5) - throw parser_error("Fix acks2/reaxff: Incorrect format of param file"); + throw parser_error("Fix acks2/reaxff: Incorrect format of parameter file"); int itype = values.next_int(); if ((itype < 1) || (itype > ntypes)) - throw parser_error("Fix acks2/reaxff: invalid atom type in param file"); + throw parser_error("Fix acks2/reaxff: invalid atom type in parameter file"); chi[itype] = values.next_double(); eta[itype] = values.next_double(); From f2755a80859c024b75868a3381adfaf486a9dc8f Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Thu, 30 Sep 2021 00:40:30 -0400 Subject: [PATCH 045/372] simplify --- src/REAXFF/fix_acks2_reaxff.cpp | 20 ++++++-------------- 1 file changed, 6 insertions(+), 14 deletions(-) diff --git a/src/REAXFF/fix_acks2_reaxff.cpp b/src/REAXFF/fix_acks2_reaxff.cpp index 3bea67e5d9..aa4923d91d 100644 --- a/src/REAXFF/fix_acks2_reaxff.cpp +++ b/src/REAXFF/fix_acks2_reaxff.cpp @@ -492,13 +492,8 @@ void FixACKS2ReaxFF::compute_X() } } - if (m_fill >= X.m) { - char str[128]; - sprintf(str,"X matrix size has been exceeded: m_fill=%d X.m=%d\n", - m_fill, X.m); - error->warning(FLERR,str); - error->all(FLERR,"Fix acks2/reaxff has insufficient ACKS2 matrix size"); - } + if (m_fill >= X.m) + error->all(FLERR,"Fix acks2/reaxff has insufficient ACKS2 X matrix size: m_fill={} X.m={}\n",m_fill,X.m); } /* ---------------------------------------------------------------------- */ @@ -621,14 +616,11 @@ int FixACKS2ReaxFF::BiCGStab(double *b, double *x) if (comm->me == 0) { if (omega == 0 || rho == 0) { - char str[128]; - sprintf(str,"Fix acks2/reaxff BiCGStab numerical breakdown, omega = %g, rho = %g",omega,rho); - error->warning(FLERR,str); + error->warning(FLERR,"Fix acks2/reaxff BiCGStab numerical breakdown, omega = {:.8}, rho = {:.8}", + omega,rho); } else if (i >= imax) { - char str[128]; - sprintf(str,"Fix acks2/reaxff BiCGStab convergence failed after %d iterations " - "at " BIGINT_FORMAT " step",i,update->ntimestep); - error->warning(FLERR,str); + error->warning(FLERR,"Fix acks2/reaxff BiCGStab convergence failed afteri {} iterations " + "at step {}", i, update->ntimestep); } } From 05d2002db6da9b77c0673784e03d9de6bb7164ed Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Thu, 30 Sep 2021 07:04:46 -0400 Subject: [PATCH 046/372] add test for using fix acks2/reaxff with fix efield --- .../atomic-pair-reaxff-acks2_efield.yaml | 175 ++++++++++++++++++ 1 file changed, 175 insertions(+) create mode 100644 unittest/force-styles/tests/atomic-pair-reaxff-acks2_efield.yaml diff --git a/unittest/force-styles/tests/atomic-pair-reaxff-acks2_efield.yaml b/unittest/force-styles/tests/atomic-pair-reaxff-acks2_efield.yaml new file mode 100644 index 0000000000..9072cdd312 --- /dev/null +++ b/unittest/force-styles/tests/atomic-pair-reaxff-acks2_efield.yaml @@ -0,0 +1,175 @@ +--- +lammps_version: 29 Sep 2021 +date_generated: Thu Sep 30 07:02:40 2021 +epsilon: 5e-09 +skip_tests: omp +prerequisites: ! | + pair reaxff + fix acks2/reaxff + fix efield +pre_commands: ! | + echo screen + variable newton_pair delete + variable newton_pair index on + atom_modify map array + units real + atom_style charge + lattice diamond 3.77 + region box block 0 2 0 2 0 2 + create_box 2 box + create_atoms 1 box + displace_atoms all random 0.1 0.1 0.1 623426 + mass 1 1.0 + mass 2 16.0 + set type 1 type/fraction 2 0.333333333 998877 + set type 1 charge 0.01 + set type 2 charge -0.02 + velocity all create 100 4534624 loop geom +post_commands: ! | + fix qeq all acks2/reaxff 1 0.0 8.0 1.0e-20 reaxff + fix field all efield 0.01 0.01 0.01 +input_file: in.empty +pair_style: reaxff NULL checkqeq yes +pair_coeff: ! | + * * acks2_ff.water H O +extract: ! "" +natoms: 64 +init_vdwl: -1371.5900218171516 +init_coul: -244.73547933267557 +init_stress: ! |- + -2.9164446047227153e+02 -3.3466247333542469e+02 -3.3436454870406396e+02 -1.9225562095669062e+02 -6.8118222867169862e+01 4.9759001661904460e+02 +init_forces: ! |2 + 1 3.6903879775348631e+00 2.0707376485182618e+01 2.1394494796410392e+01 + 2 -1.2699865313843902e+02 -6.6982886684032209e+01 -3.8533614719526874e+01 + 3 -1.7553630053841778e+02 7.3013559253189115e+01 1.2396604793548957e+02 + 4 -1.7449368896713260e+01 1.3506249727838448e+02 -1.5927913951795762e+02 + 5 1.5142766939695841e+01 3.5325100148252582e+00 -1.5461609362112519e+01 + 6 -4.3009850240889023e+01 -8.7160404032742022e+01 1.2729589654979632e+01 + 7 6.0076494487618199e+01 1.6578129659127065e+01 8.5899876662771160e+00 + 8 -3.5522285069407438e+01 -5.4720695888863403e+01 3.8351420295525870e+01 + 9 5.5099917939737892e+01 -1.6955298920914970e+01 -1.2737160116932543e+02 + 10 1.0938768838212418e+01 1.7057269245968478e+00 1.1307643526313111e+01 + 11 6.1918952990913678e-01 -5.9136560255230421e+01 -3.9578073188160730e+01 + 12 4.1265900479738214e+01 1.3966890883278734e+02 -1.5421918128972803e+02 + 13 -1.2027229152896622e+02 -9.5658651030600041e+01 1.3030815931514735e+02 + 14 -1.9033319178472516e+00 -2.3858155721425184e+01 -2.4210786544128748e+01 + 15 2.9612248200253383e+01 9.0275183717882840e+01 4.7241195806113883e+00 + 16 1.1716923132958642e+02 2.8566134115712785e+01 6.8521194120187388e+01 + 17 4.5734049946695485e+01 4.2256694228799461e+01 6.9407577940234759e+01 + 18 -7.4962896043199931e+00 -1.3705082735886847e+02 6.1397105291192830e+01 + 19 9.9642489360222015e+01 2.0732375722083691e+02 4.3265223055800924e+01 + 20 1.2904802487723568e+01 -3.1504544733716717e+01 1.9778607269042769e+01 + 21 -1.5775502215488106e+02 -1.4439224200007065e+01 -9.1647870287136342e+01 + 22 1.3216580871678715e+02 -1.1993655197251790e+02 5.5958909311936850e+01 + 23 5.0515968901870856e+01 -2.2757722047002570e+01 -4.9532505749595430e+01 + 24 9.3129537292903123e+01 -7.8553376883836805e+01 -4.7971952161795052e+01 + 25 -7.6788553006904323e+01 1.4720399618838974e+02 -6.9766074482007511e+01 + 26 1.1040729949776299e+02 -5.9046935571351270e+01 -7.5076380275378540e+01 + 27 6.2817530222674662e+01 5.0345870408601236e+01 3.3796773217655449e+01 + 28 8.0569042716281487e+00 -4.3181312450028297e+00 -1.5578462280938259e+01 + 29 -1.1798654878439923e+02 7.2471725799020845e+01 1.0556562265547733e+02 + 30 3.8253186999534059e+01 -1.0667203073272769e+02 2.7816813416909717e+01 + 31 -1.0373598230591510e+02 1.0819532894866889e+02 -4.7554845288145415e+01 + 32 -1.4631586947482443e+01 4.2802416953857644e+01 3.8864127748303346e+01 + 33 -2.7458604616923861e+01 -5.0546809144444849e+00 3.8866158484379540e+01 + 34 9.5407224457856330e+01 5.0804885802121483e+01 6.1386105779178228e+00 + 35 1.3826537320902193e+02 4.2343461197573227e+00 -5.6197200496137917e+01 + 36 -5.1011619571893981e+01 -8.6322130325908986e+01 5.9997076139472028e+01 + 37 4.7968904248494852e+01 7.0699208035910047e+01 -6.4316489530956645e+01 + 38 -1.2354572069827046e+02 -2.2488063943718353e+02 9.3257209650596394e+01 + 39 3.1260903810888262e+01 1.3108291521364203e+01 9.2350110957668122e+01 + 40 2.5786521890998817e+01 -3.6894534214361265e+01 1.9302665933873172e+01 + 41 -1.1910013238893725e+02 -1.0418913084181121e+02 2.0468993228117284e+01 + 42 -2.5091107879639292e+01 1.5829190563510771e+01 -7.8524968491029256e+01 + 43 1.0108184902303408e+01 -3.3662499058242737e+01 1.3263897480048288e+02 + 44 2.1549410386219897e+01 -7.8517821201710101e+00 -1.9193378456593944e+01 + 45 -3.0109863383183278e+01 7.6868303183153671e+01 1.2712740816241930e+02 + 46 3.7445348074301172e+01 -6.8903800847511022e+01 2.6294902676192905e+01 + 47 -3.2805427069162299e+01 -5.2674376367578219e+01 -5.4545210077043770e+01 + 48 2.2537567092988863e+02 -2.9115096986296396e+02 -1.7512446304189467e+02 + 49 -8.7019997010096304e+01 4.5026111490013882e+01 1.9088979735458388e+01 + 50 -7.5467781427209379e+00 1.0061822050508614e+02 1.2317023049986949e+02 + 51 2.8021445267480278e+01 1.9226887107103160e+01 -1.6155649862210804e+01 + 52 -1.0796727261102141e+02 1.1246860219146502e+02 -5.9133208637290579e+01 + 53 1.5639549344442065e+01 8.8001794162320106e+00 2.0787677699568525e+00 + 54 6.4249959842169861e+00 -4.5662699937243040e+01 5.1910330298748146e+00 + 55 7.9903298331705145e+01 -1.2962192879269836e+02 5.7075970734478133e+01 + 56 -2.6461889490490599e+01 -4.8225069125814180e+01 -6.0117562512850666e+00 + 57 5.5482809011283067e+01 1.6571814390873067e+02 9.7114637422051786e+01 + 58 -2.8777237802329040e+01 6.0829641365784646e+01 -2.4010871819702192e+01 + 59 -2.1685632933442639e+02 1.3487302744216058e+02 1.3603280129037918e+02 + 60 -2.7735655700872922e+01 1.3998063367613608e+02 -1.2850405486378611e+02 + 61 -6.3181959072792857e+01 -1.6438259845863371e+02 -1.2931913254159946e+02 + 62 6.8297719486698341e+01 6.4196556694764297e+01 -9.3038106164485924e+01 + 63 1.0197576568620184e+02 2.9014116568010895e+01 -1.0104780027203749e+02 + 64 -2.3999495347459012e+00 -1.3777324037762744e+01 2.8966438931306534e+01 +run_vdwl: -1371.591447880767 +run_coul: -244.73546463389062 +run_stress: ! |- + -2.9164875958360409e+02 -3.3465968247637255e+02 -3.3437163193577368e+02 -1.9224355670990124e+02 -6.8128256752035867e+01 4.9758688156471271e+02 +run_forces: ! |2 + 1 3.6895691701551980e+00 2.0707930626512248e+01 2.1394262679588216e+01 + 2 -1.2699779474458073e+02 -6.6984228194203254e+01 -3.8531493848827267e+01 + 3 -1.7553528386885441e+02 7.3013318222179876e+01 1.2396654296949018e+02 + 4 -1.7451571864940412e+01 1.3506230576868347e+02 -1.5928000935517844e+02 + 5 1.5142816223012815e+01 3.5327814574375633e+00 -1.5462445301798960e+01 + 6 -4.3010381809938060e+01 -8.7158795129517515e+01 1.2727889499328988e+01 + 7 6.0076602158453319e+01 1.6577463400770988e+01 8.5892658280176271e+00 + 8 -3.5522069684733680e+01 -5.4719813186518842e+01 3.8350643374976293e+01 + 9 5.5100191685748747e+01 -1.6954265249224107e+01 -1.2737123484850720e+02 + 10 1.0941244648121476e+01 1.7010031308774978e+00 1.1301051544126366e+01 + 11 6.2129270167947048e-01 -5.9138323396535576e+01 -3.9584407193338748e+01 + 12 4.1268610827834650e+01 1.3967090907945988e+02 -1.5422481103301075e+02 + 13 -1.2028043395459632e+02 -9.5660277619461468e+01 1.3031572859992934e+02 + 14 -1.9018820192291288e+00 -2.3857182280797204e+01 -2.4208433886157977e+01 + 15 2.9615080580166168e+01 9.0275361427676430e+01 4.7231431287453125e+00 + 16 1.1716968694002672e+02 2.8567559396171120e+01 6.8520393646037292e+01 + 17 4.5733214018882386e+01 4.2256320483781799e+01 6.9407872415858876e+01 + 18 -7.4962205584765922e+00 -1.3705120919384908e+02 6.1396769114071361e+01 + 19 9.9642945913304700e+01 2.0732384218892236e+02 4.3266714109487161e+01 + 20 1.2897929323546705e+01 -3.1498486920582330e+01 1.9767519809092434e+01 + 21 -1.5775514148253373e+02 -1.4442025567601195e+01 -9.1645227152974741e+01 + 22 1.3216534743203698e+02 -1.1993625237863546e+02 5.5959910565839820e+01 + 23 5.0514700227315089e+01 -2.2758403354342864e+01 -4.9533373275487925e+01 + 24 9.3131348961919542e+01 -7.8551276175094841e+01 -4.7971167097346090e+01 + 25 -7.6789512274785778e+01 1.4720419397395958e+02 -6.9765069389382589e+01 + 26 1.1040594041262686e+02 -5.9046630209879538e+01 -7.5075717603700696e+01 + 27 6.2818153755699612e+01 5.0346482015559644e+01 3.3797308574038944e+01 + 28 8.0534485866050627e+00 -4.3182504316870745e+00 -1.5582408150222962e+01 + 29 -1.1798567964163468e+02 7.2472226095373514e+01 1.0556435755527242e+02 + 30 3.8253311568998676e+01 -1.0667392158198371e+02 2.7817556894951675e+01 + 31 -1.0373672473208747e+02 1.0819522978352386e+02 -4.7555712398240857e+01 + 32 -1.4632126396621128e+01 4.2805794094061291e+01 3.8870585284955659e+01 + 33 -2.7455475129211244e+01 -5.0511718274680453e+00 3.8862506623326958e+01 + 34 9.5407369458818621e+01 5.0804020099933638e+01 6.1391765618436125e+00 + 35 1.3826562863940887e+02 4.2349073094286478e+00 -5.6197624601045312e+01 + 36 -5.1011650404016649e+01 -8.6321446475746797e+01 5.9997142771151623e+01 + 37 4.7968891024896720e+01 7.0697508372362847e+01 -6.4314561068497923e+01 + 38 -1.2354420698669051e+02 -2.2488058078904697e+02 9.3258262597531285e+01 + 39 3.1260799271890825e+01 1.3108471362226748e+01 9.2350222697427967e+01 + 40 2.5786471237625896e+01 -3.6894816552493410e+01 1.9302710459134374e+01 + 41 -1.1909960027788395e+02 -1.0418910166723657e+02 2.0470138449320967e+01 + 42 -2.5092951440437670e+01 1.5827036523018901e+01 -7.8524198799502301e+01 + 43 1.0109268474403388e+01 -3.3661589779751587e+01 1.3263837985931858e+02 + 44 2.1547170655932881e+01 -7.8500971288501358e+00 -1.9192577437240690e+01 + 45 -3.0108515911105769e+01 7.6869765853439915e+01 1.2712574979507305e+02 + 46 3.7447015279392780e+01 -6.8904438410258223e+01 2.6295410806233875e+01 + 47 -3.2806295777245012e+01 -5.2673875014485098e+01 -5.4544972610912374e+01 + 48 2.2537658907720382e+02 -2.9115412323582268e+02 -1.7512533831089482e+02 + 49 -8.7020723821243791e+01 4.5026853979497403e+01 1.9088551948151057e+01 + 50 -7.5481634509715887e+00 1.0061723715961801e+02 1.2317034262606265e+02 + 51 2.8024785291251842e+01 1.9224605786060941e+01 -1.6152870270637219e+01 + 52 -1.0796695779310515e+02 1.1246846135263503e+02 -5.9133747385914788e+01 + 53 1.5636744618499975e+01 8.8031557298574867e+00 2.0758164358835387e+00 + 54 6.4318466084041921e+00 -4.5667504017368529e+01 5.2004637675015841e+00 + 55 7.9903333628582914e+01 -1.2962174753273547e+02 5.7075282028865431e+01 + 56 -2.6461848276464792e+01 -4.8224060491960316e+01 -6.0116076483151186e+00 + 57 5.5482631727907211e+01 1.6571663263951825e+02 9.7114080162442761e+01 + 58 -2.8777371262359338e+01 6.0828674417454138e+01 -2.4011911560009661e+01 + 59 -2.1685645762612577e+02 1.3487468651974299e+02 1.3603399155367819e+02 + 60 -2.7735028361120602e+01 1.3998395523847151e+02 -1.2850299908867569e+02 + 61 -6.3181472592644894e+01 -1.6438049238361231e+02 -1.2931880429645136e+02 + 62 6.8299499154040745e+01 6.4193937546803411e+01 -9.3033338012025155e+01 + 63 1.0197588074784620e+02 2.9015019886271244e+01 -1.0104850423309917e+02 + 64 -2.4038178886105865e+00 -1.3783264744549610e+01 2.8968821120633262e+01 +... From 277f7a7e51f95872e235f9d4b175b0ba5218b73a Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Thu, 30 Sep 2021 08:29:55 -0400 Subject: [PATCH 047/372] reduce electric field strength --- .../atomic-pair-reaxff-acks2_efield.yaml | 272 +++++++++--------- 1 file changed, 136 insertions(+), 136 deletions(-) diff --git a/unittest/force-styles/tests/atomic-pair-reaxff-acks2_efield.yaml b/unittest/force-styles/tests/atomic-pair-reaxff-acks2_efield.yaml index 9072cdd312..418e8d02f8 100644 --- a/unittest/force-styles/tests/atomic-pair-reaxff-acks2_efield.yaml +++ b/unittest/force-styles/tests/atomic-pair-reaxff-acks2_efield.yaml @@ -1,6 +1,6 @@ --- lammps_version: 29 Sep 2021 -date_generated: Thu Sep 30 07:02:40 2021 +date_generated: Thu Sep 30 08:28:46 2021 epsilon: 5e-09 skip_tests: omp prerequisites: ! | @@ -27,149 +27,149 @@ pre_commands: ! | velocity all create 100 4534624 loop geom post_commands: ! | fix qeq all acks2/reaxff 1 0.0 8.0 1.0e-20 reaxff - fix field all efield 0.01 0.01 0.01 + fix field all efield 0.001 0.000 -0.001 input_file: in.empty pair_style: reaxff NULL checkqeq yes pair_coeff: ! | * * acks2_ff.water H O extract: ! "" natoms: 64 -init_vdwl: -1371.5900218171516 -init_coul: -244.73547933267557 +init_vdwl: -1315.674323112547 +init_coul: -251.82894337220728 init_stress: ! |- - -2.9164446047227153e+02 -3.3466247333542469e+02 -3.3436454870406396e+02 -1.9225562095669062e+02 -6.8118222867169862e+01 4.9759001661904460e+02 + -3.6256945758708036e+02 -5.3634290055356348e+02 -3.2712792543305824e+02 -1.8735692443254337e+02 -7.3226416286372796e+01 2.8628413998557846e+02 init_forces: ! |2 - 1 3.6903879775348631e+00 2.0707376485182618e+01 2.1394494796410392e+01 - 2 -1.2699865313843902e+02 -6.6982886684032209e+01 -3.8533614719526874e+01 - 3 -1.7553630053841778e+02 7.3013559253189115e+01 1.2396604793548957e+02 - 4 -1.7449368896713260e+01 1.3506249727838448e+02 -1.5927913951795762e+02 - 5 1.5142766939695841e+01 3.5325100148252582e+00 -1.5461609362112519e+01 - 6 -4.3009850240889023e+01 -8.7160404032742022e+01 1.2729589654979632e+01 - 7 6.0076494487618199e+01 1.6578129659127065e+01 8.5899876662771160e+00 - 8 -3.5522285069407438e+01 -5.4720695888863403e+01 3.8351420295525870e+01 - 9 5.5099917939737892e+01 -1.6955298920914970e+01 -1.2737160116932543e+02 - 10 1.0938768838212418e+01 1.7057269245968478e+00 1.1307643526313111e+01 - 11 6.1918952990913678e-01 -5.9136560255230421e+01 -3.9578073188160730e+01 - 12 4.1265900479738214e+01 1.3966890883278734e+02 -1.5421918128972803e+02 - 13 -1.2027229152896622e+02 -9.5658651030600041e+01 1.3030815931514735e+02 - 14 -1.9033319178472516e+00 -2.3858155721425184e+01 -2.4210786544128748e+01 - 15 2.9612248200253383e+01 9.0275183717882840e+01 4.7241195806113883e+00 - 16 1.1716923132958642e+02 2.8566134115712785e+01 6.8521194120187388e+01 - 17 4.5734049946695485e+01 4.2256694228799461e+01 6.9407577940234759e+01 - 18 -7.4962896043199931e+00 -1.3705082735886847e+02 6.1397105291192830e+01 - 19 9.9642489360222015e+01 2.0732375722083691e+02 4.3265223055800924e+01 - 20 1.2904802487723568e+01 -3.1504544733716717e+01 1.9778607269042769e+01 - 21 -1.5775502215488106e+02 -1.4439224200007065e+01 -9.1647870287136342e+01 - 22 1.3216580871678715e+02 -1.1993655197251790e+02 5.5958909311936850e+01 - 23 5.0515968901870856e+01 -2.2757722047002570e+01 -4.9532505749595430e+01 - 24 9.3129537292903123e+01 -7.8553376883836805e+01 -4.7971952161795052e+01 - 25 -7.6788553006904323e+01 1.4720399618838974e+02 -6.9766074482007511e+01 - 26 1.1040729949776299e+02 -5.9046935571351270e+01 -7.5076380275378540e+01 - 27 6.2817530222674662e+01 5.0345870408601236e+01 3.3796773217655449e+01 - 28 8.0569042716281487e+00 -4.3181312450028297e+00 -1.5578462280938259e+01 - 29 -1.1798654878439923e+02 7.2471725799020845e+01 1.0556562265547733e+02 - 30 3.8253186999534059e+01 -1.0667203073272769e+02 2.7816813416909717e+01 - 31 -1.0373598230591510e+02 1.0819532894866889e+02 -4.7554845288145415e+01 - 32 -1.4631586947482443e+01 4.2802416953857644e+01 3.8864127748303346e+01 - 33 -2.7458604616923861e+01 -5.0546809144444849e+00 3.8866158484379540e+01 - 34 9.5407224457856330e+01 5.0804885802121483e+01 6.1386105779178228e+00 - 35 1.3826537320902193e+02 4.2343461197573227e+00 -5.6197200496137917e+01 - 36 -5.1011619571893981e+01 -8.6322130325908986e+01 5.9997076139472028e+01 - 37 4.7968904248494852e+01 7.0699208035910047e+01 -6.4316489530956645e+01 - 38 -1.2354572069827046e+02 -2.2488063943718353e+02 9.3257209650596394e+01 - 39 3.1260903810888262e+01 1.3108291521364203e+01 9.2350110957668122e+01 - 40 2.5786521890998817e+01 -3.6894534214361265e+01 1.9302665933873172e+01 - 41 -1.1910013238893725e+02 -1.0418913084181121e+02 2.0468993228117284e+01 - 42 -2.5091107879639292e+01 1.5829190563510771e+01 -7.8524968491029256e+01 - 43 1.0108184902303408e+01 -3.3662499058242737e+01 1.3263897480048288e+02 - 44 2.1549410386219897e+01 -7.8517821201710101e+00 -1.9193378456593944e+01 - 45 -3.0109863383183278e+01 7.6868303183153671e+01 1.2712740816241930e+02 - 46 3.7445348074301172e+01 -6.8903800847511022e+01 2.6294902676192905e+01 - 47 -3.2805427069162299e+01 -5.2674376367578219e+01 -5.4545210077043770e+01 - 48 2.2537567092988863e+02 -2.9115096986296396e+02 -1.7512446304189467e+02 - 49 -8.7019997010096304e+01 4.5026111490013882e+01 1.9088979735458388e+01 - 50 -7.5467781427209379e+00 1.0061822050508614e+02 1.2317023049986949e+02 - 51 2.8021445267480278e+01 1.9226887107103160e+01 -1.6155649862210804e+01 - 52 -1.0796727261102141e+02 1.1246860219146502e+02 -5.9133208637290579e+01 - 53 1.5639549344442065e+01 8.8001794162320106e+00 2.0787677699568525e+00 - 54 6.4249959842169861e+00 -4.5662699937243040e+01 5.1910330298748146e+00 - 55 7.9903298331705145e+01 -1.2962192879269836e+02 5.7075970734478133e+01 - 56 -2.6461889490490599e+01 -4.8225069125814180e+01 -6.0117562512850666e+00 - 57 5.5482809011283067e+01 1.6571814390873067e+02 9.7114637422051786e+01 - 58 -2.8777237802329040e+01 6.0829641365784646e+01 -2.4010871819702192e+01 - 59 -2.1685632933442639e+02 1.3487302744216058e+02 1.3603280129037918e+02 - 60 -2.7735655700872922e+01 1.3998063367613608e+02 -1.2850405486378611e+02 - 61 -6.3181959072792857e+01 -1.6438259845863371e+02 -1.2931913254159946e+02 - 62 6.8297719486698341e+01 6.4196556694764297e+01 -9.3038106164485924e+01 - 63 1.0197576568620184e+02 2.9014116568010895e+01 -1.0104780027203749e+02 - 64 -2.3999495347459012e+00 -1.3777324037762744e+01 2.8966438931306534e+01 -run_vdwl: -1371.591447880767 -run_coul: -244.73546463389062 + 1 -6.0154879754984847e-01 2.0490911229762435e+01 1.6645868409384249e+01 + 2 -1.2761509197328829e+02 -6.4510446708282785e+01 -3.3805033949845111e+01 + 3 -1.6340594906578147e+02 -1.3398558727194414e+01 4.5684277690771779e+01 + 4 -7.8516116313792974e+00 1.2977219235117263e+02 -1.6424464644835544e+02 + 5 4.8881022131661034e+01 1.3348287588792989e+00 1.9102676537650911e+01 + 6 -3.2218386007387529e+01 -1.0434675194441733e+02 -2.9320199889959419e+01 + 7 5.4687565672978145e+01 -4.0913130205883220e+01 -5.8353439112584439e+01 + 8 -3.4374536858006408e+01 -5.4579558860019823e+01 3.9161499237773661e+01 + 9 1.0603251800101887e+02 2.4536072953416372e+01 -8.2928788192542029e+01 + 10 8.3444966772858873e+00 5.5905829007829055e+00 1.5836812763421671e+01 + 11 8.6682106260518399e-01 -5.8996265706493297e+01 -3.9872177103237625e+01 + 12 4.4191983748578252e+01 1.4903291889641397e+02 -1.6219114902362313e+02 + 13 -1.4906197921581901e+02 -1.1995522754366907e+02 1.0915702891133039e+02 + 14 -1.6840881138989259e+00 -2.4233704479540215e+01 -2.4811720547240064e+01 + 15 2.8936489115097370e+01 9.0168397617724935e+01 5.2090344636929249e+00 + 16 1.1515917785952955e+02 2.8281112244054714e+01 6.7569884393252394e+01 + 17 4.4254236896272509e+01 4.2405991701226377e+01 7.2799220577678824e+01 + 18 -7.8661474753163247e+00 -1.3659447348038833e+02 6.1065853677477804e+01 + 19 1.0685745830584035e+02 2.0723240505616749e+02 4.4125485886538023e+01 + 20 -4.9542084152667712e+01 -8.1670006768022276e+01 -2.8994861667393657e+01 + 21 -1.3289862768681564e+02 3.7558104734082590e+01 -1.0101767786981229e+02 + 22 1.3266855178651528e+02 -1.1782606684343813e+02 5.4036101810784274e+01 + 23 5.1407610909516592e+01 -2.3874012401090560e+01 -4.7708995785069028e+01 + 24 3.2363015107022008e+01 8.7105847828801600e+01 6.6914622951207662e+01 + 25 -7.6345678294694011e+01 1.4702273116008962e+02 -6.9635677366941891e+01 + 26 1.3052537104724411e+02 -7.6696421609995213e+01 -6.8145063843176118e+01 + 27 6.2283352702761547e+01 5.0074967255142333e+01 3.3472575546943631e+01 + 28 8.1232050028726395e+00 -3.8518056219602643e+00 -1.5909871018201754e+01 + 29 -1.1706745841892726e+02 7.1116510258697346e+01 1.0440286073080344e+02 + 30 2.6670669937334090e+01 -1.1285172689888849e+02 1.8628079295071519e+01 + 31 -1.0848115908913097e+02 1.0993408938052653e+02 -5.5578339221069761e+01 + 32 -1.4604759790414388e+01 4.2812434419719693e+01 3.8845926505395511e+01 + 33 -2.9520332853396411e+01 -7.8741560425743211e+00 4.0691645839948691e+01 + 34 9.4394466656903248e+01 5.1575725533434905e+01 5.0009959181781118e+00 + 35 1.3879481127694734e+02 1.3024654544250058e+01 -3.9250638167728880e+01 + 36 -5.4284793690417608e+01 -8.6096634683942625e+01 6.3572285876499528e+01 + 37 4.8502978680315444e+01 7.1094505792066101e+01 -6.4171063798122049e+01 + 38 -1.2070810306031437e+02 -2.3923073007095348e+02 1.0638889958589006e+02 + 39 4.7402294129887252e+00 1.1128169294007042e+01 9.5229588224810726e+01 + 40 -4.2105918954988910e+00 2.8922240497979339e+00 -3.8853885945522486e+00 + 41 -1.2581981998022140e+02 -1.1458436625786676e+02 1.5632166020305606e+01 + 42 4.3294461247674860e+01 -1.1323959798608851e+02 -1.2148885112552533e+02 + 43 -6.1464076737642506e+00 -1.1289705518300156e+01 1.3009715987202921e+02 + 44 2.3307656992366880e+01 -7.2455227526013468e+00 -2.1408896428915366e+01 + 45 -2.2862781452836398e+01 1.3728776878825514e+02 1.7762899672609757e+02 + 46 4.5765827563197973e+01 -6.7544775840057909e+01 3.7531795790712650e+01 + 47 -3.2697160859583640e+01 -5.3000463872529252e+01 -5.4681321277439828e+01 + 48 2.0323151781437127e+02 -3.0316677301325933e+02 -1.7383564674322281e+02 + 49 -6.8022252075611078e+01 3.9183313795637588e+01 3.5905040859651280e+01 + 50 8.8914188882096532e+00 1.4185906944036410e+02 1.5865229158118265e+02 + 51 3.5558467560874440e+01 -3.2565782793991261e+01 1.4766952238292825e+02 + 52 -1.0584465033940732e+02 1.0312404614360871e+02 -5.0602155397876125e+01 + 53 -3.3994847657310238e+01 9.4953275870768138e+01 -2.0788220549238974e+02 + 54 3.1060448661845527e+01 -5.5551331984850442e+01 4.7449645251589637e+01 + 55 8.0181854223109625e+01 -1.2981736896073650e+02 5.6594065562892716e+01 + 56 -1.2362123079928249e+01 -2.8595892153560477e+01 -5.6828887834998776e+00 + 57 4.5291099295923921e+01 1.5919694513314849e+02 9.9973856736854358e+01 + 58 -2.8759578518403369e+01 6.0635477053858999e+01 -2.3799927138389361e+01 + 59 -2.2258058554651186e+02 1.3033269239620597e+02 1.4065377860761922e+02 + 60 -2.7058124659542148e+01 1.4140236646055249e+02 -1.2767138983533778e+02 + 61 -6.3881319919673096e+01 -1.6334315073212363e+02 -1.2897680607557277e+02 + 62 6.9327514026657596e+01 6.4167453646545141e+01 -9.4053647502303434e+01 + 63 1.1096611865815618e+02 -1.8935951908777891e+01 -7.9804991261269080e+01 + 64 -3.1898370901788069e+00 5.2575682335077881e-02 8.3839144348275312e+00 +run_vdwl: -1315.6737992581136 +run_coul: -251.82912263294082 run_stress: ! |- - -2.9164875958360409e+02 -3.3465968247637255e+02 -3.3437163193577368e+02 -1.9224355670990124e+02 -6.8128256752035867e+01 4.9758688156471271e+02 + -3.6257326646509171e+02 -5.3633931399834717e+02 -3.2713145896248852e+02 -1.8734601044825959e+02 -7.3233567994370262e+01 2.8627653927125738e+02 run_forces: ! |2 - 1 3.6895691701551980e+00 2.0707930626512248e+01 2.1394262679588216e+01 - 2 -1.2699779474458073e+02 -6.6984228194203254e+01 -3.8531493848827267e+01 - 3 -1.7553528386885441e+02 7.3013318222179876e+01 1.2396654296949018e+02 - 4 -1.7451571864940412e+01 1.3506230576868347e+02 -1.5928000935517844e+02 - 5 1.5142816223012815e+01 3.5327814574375633e+00 -1.5462445301798960e+01 - 6 -4.3010381809938060e+01 -8.7158795129517515e+01 1.2727889499328988e+01 - 7 6.0076602158453319e+01 1.6577463400770988e+01 8.5892658280176271e+00 - 8 -3.5522069684733680e+01 -5.4719813186518842e+01 3.8350643374976293e+01 - 9 5.5100191685748747e+01 -1.6954265249224107e+01 -1.2737123484850720e+02 - 10 1.0941244648121476e+01 1.7010031308774978e+00 1.1301051544126366e+01 - 11 6.2129270167947048e-01 -5.9138323396535576e+01 -3.9584407193338748e+01 - 12 4.1268610827834650e+01 1.3967090907945988e+02 -1.5422481103301075e+02 - 13 -1.2028043395459632e+02 -9.5660277619461468e+01 1.3031572859992934e+02 - 14 -1.9018820192291288e+00 -2.3857182280797204e+01 -2.4208433886157977e+01 - 15 2.9615080580166168e+01 9.0275361427676430e+01 4.7231431287453125e+00 - 16 1.1716968694002672e+02 2.8567559396171120e+01 6.8520393646037292e+01 - 17 4.5733214018882386e+01 4.2256320483781799e+01 6.9407872415858876e+01 - 18 -7.4962205584765922e+00 -1.3705120919384908e+02 6.1396769114071361e+01 - 19 9.9642945913304700e+01 2.0732384218892236e+02 4.3266714109487161e+01 - 20 1.2897929323546705e+01 -3.1498486920582330e+01 1.9767519809092434e+01 - 21 -1.5775514148253373e+02 -1.4442025567601195e+01 -9.1645227152974741e+01 - 22 1.3216534743203698e+02 -1.1993625237863546e+02 5.5959910565839820e+01 - 23 5.0514700227315089e+01 -2.2758403354342864e+01 -4.9533373275487925e+01 - 24 9.3131348961919542e+01 -7.8551276175094841e+01 -4.7971167097346090e+01 - 25 -7.6789512274785778e+01 1.4720419397395958e+02 -6.9765069389382589e+01 - 26 1.1040594041262686e+02 -5.9046630209879538e+01 -7.5075717603700696e+01 - 27 6.2818153755699612e+01 5.0346482015559644e+01 3.3797308574038944e+01 - 28 8.0534485866050627e+00 -4.3182504316870745e+00 -1.5582408150222962e+01 - 29 -1.1798567964163468e+02 7.2472226095373514e+01 1.0556435755527242e+02 - 30 3.8253311568998676e+01 -1.0667392158198371e+02 2.7817556894951675e+01 - 31 -1.0373672473208747e+02 1.0819522978352386e+02 -4.7555712398240857e+01 - 32 -1.4632126396621128e+01 4.2805794094061291e+01 3.8870585284955659e+01 - 33 -2.7455475129211244e+01 -5.0511718274680453e+00 3.8862506623326958e+01 - 34 9.5407369458818621e+01 5.0804020099933638e+01 6.1391765618436125e+00 - 35 1.3826562863940887e+02 4.2349073094286478e+00 -5.6197624601045312e+01 - 36 -5.1011650404016649e+01 -8.6321446475746797e+01 5.9997142771151623e+01 - 37 4.7968891024896720e+01 7.0697508372362847e+01 -6.4314561068497923e+01 - 38 -1.2354420698669051e+02 -2.2488058078904697e+02 9.3258262597531285e+01 - 39 3.1260799271890825e+01 1.3108471362226748e+01 9.2350222697427967e+01 - 40 2.5786471237625896e+01 -3.6894816552493410e+01 1.9302710459134374e+01 - 41 -1.1909960027788395e+02 -1.0418910166723657e+02 2.0470138449320967e+01 - 42 -2.5092951440437670e+01 1.5827036523018901e+01 -7.8524198799502301e+01 - 43 1.0109268474403388e+01 -3.3661589779751587e+01 1.3263837985931858e+02 - 44 2.1547170655932881e+01 -7.8500971288501358e+00 -1.9192577437240690e+01 - 45 -3.0108515911105769e+01 7.6869765853439915e+01 1.2712574979507305e+02 - 46 3.7447015279392780e+01 -6.8904438410258223e+01 2.6295410806233875e+01 - 47 -3.2806295777245012e+01 -5.2673875014485098e+01 -5.4544972610912374e+01 - 48 2.2537658907720382e+02 -2.9115412323582268e+02 -1.7512533831089482e+02 - 49 -8.7020723821243791e+01 4.5026853979497403e+01 1.9088551948151057e+01 - 50 -7.5481634509715887e+00 1.0061723715961801e+02 1.2317034262606265e+02 - 51 2.8024785291251842e+01 1.9224605786060941e+01 -1.6152870270637219e+01 - 52 -1.0796695779310515e+02 1.1246846135263503e+02 -5.9133747385914788e+01 - 53 1.5636744618499975e+01 8.8031557298574867e+00 2.0758164358835387e+00 - 54 6.4318466084041921e+00 -4.5667504017368529e+01 5.2004637675015841e+00 - 55 7.9903333628582914e+01 -1.2962174753273547e+02 5.7075282028865431e+01 - 56 -2.6461848276464792e+01 -4.8224060491960316e+01 -6.0116076483151186e+00 - 57 5.5482631727907211e+01 1.6571663263951825e+02 9.7114080162442761e+01 - 58 -2.8777371262359338e+01 6.0828674417454138e+01 -2.4011911560009661e+01 - 59 -2.1685645762612577e+02 1.3487468651974299e+02 1.3603399155367819e+02 - 60 -2.7735028361120602e+01 1.3998395523847151e+02 -1.2850299908867569e+02 - 61 -6.3181472592644894e+01 -1.6438049238361231e+02 -1.2931880429645136e+02 - 62 6.8299499154040745e+01 6.4193937546803411e+01 -9.3033338012025155e+01 - 63 1.0197588074784620e+02 2.9015019886271244e+01 -1.0104850423309917e+02 - 64 -2.4038178886105865e+00 -1.3783264744549610e+01 2.8968821120633262e+01 + 1 -6.0214627573514556e-01 2.0491386416768172e+01 1.6645711600342462e+01 + 2 -1.2761420763937384e+02 -6.4511773427180955e+01 -3.3802952557276939e+01 + 3 -1.6340608053661612e+02 -1.3401993175534717e+01 4.5682270589426395e+01 + 4 -7.8531544934264623e+00 1.2977276473099647e+02 -1.6424506125971675e+02 + 5 4.8880181512887845e+01 1.3352668533413361e+00 1.9101127318269754e+01 + 6 -3.2219030693174382e+01 -1.0434553973171852e+02 -2.9321861110858695e+01 + 7 5.4688797668689652e+01 -4.0914067636927541e+01 -5.8353268270633606e+01 + 8 -3.4375157494416307e+01 -5.4579947628359641e+01 3.9161035654250107e+01 + 9 1.0603414816205533e+02 2.4537600652275287e+01 -8.2930720411092054e+01 + 10 8.3460090375363851e+00 5.5873457294567306e+00 1.5832157267048057e+01 + 11 8.6892538484030335e-01 -5.8998026029103862e+01 -3.9878492352580025e+01 + 12 4.4192202281242011e+01 1.4903379855441727e+02 -1.6219582663063494e+02 + 13 -1.4906584757238437e+02 -1.1995559454394335e+02 1.0916169289124973e+02 + 14 -1.6828243042828270e+00 -2.4233094733519096e+01 -2.4809728105611640e+01 + 15 2.8939307801033564e+01 9.0168502090113790e+01 5.2080795626673408e+00 + 16 1.1515975212523766e+02 2.8282615719386932e+01 6.7569229132040050e+01 + 17 4.4253518201157711e+01 4.2405636265171424e+01 7.2799486576955999e+01 + 18 -7.8660652684668078e+00 -1.3659485654603807e+02 6.1065520388434372e+01 + 19 1.0685840221078762e+02 2.0723262764851302e+02 4.4126295054963897e+01 + 20 -4.9547376758855030e+01 -8.1664390184599469e+01 -2.9004063364474312e+01 + 21 -1.3289870968984053e+02 3.7556521095772311e+01 -1.0101561352524682e+02 + 22 1.3266905839761847e+02 -1.1782634157575328e+02 5.4036102994550859e+01 + 23 5.1406670288984778e+01 -2.3874752067941657e+01 -4.7709848050443959e+01 + 24 3.2360723646580617e+01 8.7108961412343263e+01 6.6918620689256002e+01 + 25 -7.6346347642655672e+01 1.4702322330099889e+02 -6.9634928409846580e+01 + 26 1.3052552995677755e+02 -7.6697121852723356e+01 -6.8144155635092048e+01 + 27 6.2283983095056371e+01 5.0075584344530611e+01 3.3473096901312701e+01 + 28 8.1197685495143439e+00 -3.8518986387766376e+00 -1.5913830082847198e+01 + 29 -1.1706701040648062e+02 7.1117299838894127e+01 1.0440194717333269e+02 + 30 2.6670602559236272e+01 -1.1285367475162086e+02 1.8628684821931220e+01 + 31 -1.0848188373714390e+02 1.0993395426889997e+02 -5.5579133864111398e+01 + 32 -1.4605292415373500e+01 4.2815795552280335e+01 3.8852361717819555e+01 + 33 -2.9517288321380654e+01 -7.8706168381396768e+00 4.0688043009936059e+01 + 34 9.4394661846860970e+01 5.1574880122935610e+01 5.0015857473357794e+00 + 35 1.3879503365745956e+02 1.3025141269886902e+01 -3.9251037822841923e+01 + 36 -5.4284990066064154e+01 -8.6095875439083741e+01 6.3572450715796457e+01 + 37 4.8502951310284544e+01 7.1092807457873405e+01 -6.4169156928480206e+01 + 38 -1.2070676699683328e+02 -2.3923032996704939e+02 1.0638935719492810e+02 + 39 4.7404453450854662e+00 1.1127624680633673e+01 9.5229308661499644e+01 + 40 -4.2107802526767983e+00 2.8921643118234011e+00 -3.8854294282688469e+00 + 41 -1.2582005930255532e+02 -1.1458555503982160e+02 1.5632960434366298e+01 + 42 4.3293341312744495e+01 -1.1324103202558409e+02 -1.2148799562881659e+02 + 43 -6.1454116088849728e+00 -1.1288795470041670e+01 1.3009652876141311e+02 + 44 2.3305290650364885e+01 -7.2439195790134221e+00 -2.1408010166153833e+01 + 45 -2.2861098671764225e+01 1.3729019889399979e+02 1.7762827899322482e+02 + 46 4.5767534010271007e+01 -6.7545186309699446e+01 3.7532548864297787e+01 + 47 -3.2698000001035446e+01 -5.3000014412923967e+01 -5.4681126433363666e+01 + 48 2.0323234514549853e+02 -3.0316993553970457e+02 -1.7383638982008839e+02 + 49 -6.8022066008163009e+01 3.9184360974303871e+01 3.5904719161687055e+01 + 50 8.8888102273386398e+00 1.4185921522184009e+02 1.5865294581703230e+02 + 51 3.5561860499398996e+01 -3.2570050830132502e+01 1.4767468933707980e+02 + 52 -1.0584566926084322e+02 1.0312482774358462e+02 -5.0601758660288674e+01 + 53 -3.3998101356279598e+01 9.4956830332700946e+01 -2.0788722486626233e+02 + 54 3.1066899475210167e+01 -5.5555602081792458e+01 4.7458263284720914e+01 + 55 8.0181933085468117e+01 -1.2981727337020556e+02 5.6593424480518294e+01 + 56 -1.2362077444339070e+01 -2.8594809824362390e+01 -5.6826993022632353e+00 + 57 4.5291055420289460e+01 1.5919552268332740e+02 9.9973285519875958e+01 + 58 -2.8759732845525242e+01 6.0634526797600500e+01 -2.3800965247316636e+01 + 59 -2.2258073507995616e+02 1.3033432002740730e+02 1.4065491055966689e+02 + 60 -2.7057501703204316e+01 1.4140567135934367e+02 -1.2767031982605356e+02 + 61 -6.3880828775902302e+01 -1.6334105542195670e+02 -1.2897647523237976e+02 + 62 6.9329301545636469e+01 6.4164830272747352e+01 -9.4048883564897153e+01 + 63 1.1096681382579916e+02 -1.8935195651576731e+01 -7.9806045193644053e+01 + 64 -3.1936156133135496e+00 4.6513700660101048e-02 8.3862808743546626e+00 ... From 195fe81c60bf8d8311ab2adb3104026de73d5e82 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Fri, 1 Oct 2021 23:52:02 -0400 Subject: [PATCH 048/372] correct test for loading shared objects and libraries --- unittest/utils/CMakeLists.txt | 12 +- unittest/utils/test_platform.cpp | 537 ++++++++++++++++--------------- 2 files changed, 278 insertions(+), 271 deletions(-) diff --git a/unittest/utils/CMakeLists.txt b/unittest/utils/CMakeLists.txt index d58b1294be..9f708861cc 100644 --- a/unittest/utils/CMakeLists.txt +++ b/unittest/utils/CMakeLists.txt @@ -13,23 +13,25 @@ add_test(ArgUtils test_argutils) add_executable(test_utils test_utils.cpp) target_link_libraries(test_utils PRIVATE lammps GTest::GMockMain GTest::GMock GTest::GTest) add_test(Utils test_utils) -set_tests_properties(Utils PROPERTIES ENVIRONMENT "LAMMPS_POTENTIALS=${LAMMPS_POTENTIALS_DIR}") add_executable(test_platform test_platform.cpp) target_link_libraries(test_platform PRIVATE lammps GTest::GMockMain GTest::GMock GTest::GTest) add_test(Platform test_platform) -set(PLATFORM_ENVIRONMENT "LAMMPS_POTENTIALS=${LAMMPS_POTENTIALS_DIR}") + +set_tests_properties(Utils Platform PROPERTIES + ENVIRONMENT "LAMMPS_POTENTIALS=${LAMMPS_POTENTIALS_DIR}") + if(BUILD_SHARED_LIBS) enable_language(C) - target_compile_definitions(test_platform PRIVATE -DTEST_SHARED_OBJECT=1) add_library(testsharedobj MODULE testshared.c) set_target_properties(testsharedobj PROPERTIES PREFIX "" WINDOWS_EXPORT_ALL_SYMBOLS TRUE) add_library(testsharedlib SHARED testshared.c) set_target_properties(testsharedlib PROPERTIES WINDOWS_EXPORT_ALL_SYMBOLS TRUE) add_dependencies(test_platform testsharedobj testsharedlib) - list(APPEND PLATFORM_ENVIRONMENT "TEST_SHARED_LIB=$" "TEST_SHARED_OBJ=$") + target_compile_definitions(test_platform PRIVATE TEST_SHARED_LOAD=1 + TEST_SHARED_LIB=$ + TEST_SHARED_OBJ=$) endif() -set_tests_properties(Platform PROPERTIES ENVIRONMENT ${PLATFORM_ENVIRONMENT} WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}) add_executable(test_fmtlib test_fmtlib.cpp) target_link_libraries(test_fmtlib PRIVATE lammps GTest::GMockMain GTest::GMock GTest::GTest) diff --git a/unittest/utils/test_platform.cpp b/unittest/utils/test_platform.cpp index 154fb2c222..6c17b8876e 100644 --- a/unittest/utils/test_platform.cpp +++ b/unittest/utils/test_platform.cpp @@ -16,380 +16,385 @@ using testing::StrEq; TEST(Platform, clock) { - const double wt_start = platform::walltime(); - const double ct_start = platform::cputime(); + const double wt_start = platform::walltime(); + const double ct_start = platform::cputime(); - // spend some time computing pi - constexpr double known_pi = 3.141592653589793238462643; - constexpr int n = 10000000; - constexpr double h = 1.0 / (double) n; - double my_pi = 0.0, x; - for (int i = 0; i < n; ++i) { - x = h * ((double) i + 0.5); - my_pi += 4.0 / (1.0 + x * x); - } - my_pi *= h; - const double wt_used = platform::walltime() - wt_start; - const double ct_used = platform::cputime() - ct_start; + // spend some time computing pi + constexpr double known_pi = 3.141592653589793238462643; + constexpr int n = 10000000; + constexpr double h = 1.0 / (double)n; + double my_pi = 0.0, x; + for (int i = 0; i < n; ++i) { + x = h * ((double)i + 0.5); + my_pi += 4.0 / (1.0 + x * x); + } + my_pi *= h; + const double wt_used = platform::walltime() - wt_start; + const double ct_used = platform::cputime() - ct_start; - ASSERT_NEAR(my_pi, known_pi, 1e-12); - ASSERT_GT(wt_used, 1e-4); - ASSERT_GT(ct_used, 1e-4); + ASSERT_NEAR(my_pi, known_pi, 1e-12); + ASSERT_GT(wt_used, 1e-4); + ASSERT_GT(ct_used, 1e-4); } TEST(Platform, putenv) { - const char *var = getenv("UNITTEST_VAR1"); - ASSERT_EQ(var, nullptr); - int rv = platform::putenv("UNITTEST_VAR1"); - var = getenv("UNITTEST_VAR1"); - ASSERT_EQ(rv, 0); - ASSERT_NE(var, nullptr); - // we cannot set environment variables without a value on windows with _putenv() + const char *var = getenv("UNITTEST_VAR1"); + ASSERT_EQ(var, nullptr); + int rv = platform::putenv("UNITTEST_VAR1"); + var = getenv("UNITTEST_VAR1"); + ASSERT_EQ(rv, 0); + ASSERT_NE(var, nullptr); + // we cannot set environment variables without a value on windows with _putenv() #if defined(_WIN32) - ASSERT_THAT(var, StrEq("1")); + ASSERT_THAT(var, StrEq("1")); #else - ASSERT_THAT(var, StrEq("")); + ASSERT_THAT(var, StrEq("")); #endif - rv = platform::putenv("UNITTEST_VAR1=one"); - var = getenv("UNITTEST_VAR1"); - ASSERT_EQ(rv, 0); - ASSERT_NE(var, nullptr); - ASSERT_THAT(var, StrEq("one")); + rv = platform::putenv("UNITTEST_VAR1=one"); + var = getenv("UNITTEST_VAR1"); + ASSERT_EQ(rv, 0); + ASSERT_NE(var, nullptr); + ASSERT_THAT(var, StrEq("one")); - rv = platform::putenv("UNITTEST_VAR1=one=two"); - var = getenv("UNITTEST_VAR1"); - ASSERT_EQ(rv, 0); - ASSERT_NE(var, nullptr); - ASSERT_THAT(var, StrEq("one=two")); + rv = platform::putenv("UNITTEST_VAR1=one=two"); + var = getenv("UNITTEST_VAR1"); + ASSERT_EQ(rv, 0); + ASSERT_NE(var, nullptr); + ASSERT_THAT(var, StrEq("one=two")); - ASSERT_EQ(platform::putenv(""), -1); + ASSERT_EQ(platform::putenv(""), -1); } TEST(Platform, list_pathenv) { - auto dirs = platform::list_pathenv("PATH"); - ASSERT_GT(dirs.size(), 1); + auto dirs = platform::list_pathenv("PATH"); + ASSERT_GT(dirs.size(), 1); } TEST(Platform, find_cmd_path) { #if defined(_WIN32) - ASSERT_THAT(platform::find_exe_path("notepad"), EndsWith("\\notepad.exe")); - ASSERT_THAT(platform::find_exe_path("cmd"), EndsWith("\\cmd.exe")); - ASSERT_THAT(platform::find_exe_path("some_bogus_command"), IsEmpty()); + ASSERT_THAT(platform::find_exe_path("notepad"), EndsWith("\\notepad.exe")); + ASSERT_THAT(platform::find_exe_path("cmd"), EndsWith("\\cmd.exe")); + ASSERT_THAT(platform::find_exe_path("some_bogus_command"), IsEmpty()); #else - ASSERT_THAT(platform::find_exe_path("ls"), EndsWith("bin/ls")); - ASSERT_THAT(platform::find_exe_path("sh"), EndsWith("bin/sh")); - ASSERT_THAT(platform::find_exe_path("some_bogus_command"), IsEmpty()); + ASSERT_THAT(platform::find_exe_path("ls"), EndsWith("bin/ls")); + ASSERT_THAT(platform::find_exe_path("sh"), EndsWith("bin/sh")); + ASSERT_THAT(platform::find_exe_path("some_bogus_command"), IsEmpty()); #endif } +#if defined(TEST_SHARED_LOAD) +#define stringify(s) mkstring(s) +#define mkstring(s) #s TEST(Platform, sharedload) { - const char *objs[] = {"TEST_SHARED_OBJ", "TEST_SHARED_LIB", nullptr}; - const char *envvar, **envptr; - const int *intvar; - const double *doublevar; - void *handle; - int (*intfunc)(int); - double (*doublefunc)(double, int); + const std::vector objs = {stringify(TEST_SHARED_OBJ), stringify(TEST_SHARED_LIB)}; + const int *intvar; + const double *doublevar; + void *handle; + int (*intfunc)(int); + double (*doublefunc)(double, int); - for (envptr = objs; *envptr != nullptr; ++envptr) { - envvar = getenv(*envptr); - EXPECT_NE(envvar, nullptr); - handle = platform::dlopen(envvar); - EXPECT_NE(handle, nullptr); - intvar = (int *) platform::dlsym(handle, "some_int_val"); - EXPECT_NE(intvar, nullptr); - EXPECT_EQ(*intvar, 12345); - doublevar = (double *) platform::dlsym(handle, "some_double_val"); - EXPECT_NE(doublevar, nullptr); - EXPECT_DOUBLE_EQ(*doublevar, 6.78e-9); - intfunc = (int (*)(int)) platform::dlsym(handle, "some_int_function"); - EXPECT_NE(intfunc, nullptr); - EXPECT_EQ((*intfunc)(12), 144); - doublefunc = (double (*)(double, int)) platform::dlsym(handle, "some_double_function"); - EXPECT_NE(doublefunc, nullptr); - EXPECT_DOUBLE_EQ((*doublefunc)(0.5, 6), 3.0); - EXPECT_EQ(platform::dlsym(handle, "some_nonexisting_symbol"), nullptr); - EXPECT_EQ(platform::dlclose(handle), 0); - } + for (const auto &obj : objs) { + handle = platform::dlopen(obj.c_str()); + EXPECT_NE(handle, nullptr); + intvar = (int *)platform::dlsym(handle, "some_int_val"); + EXPECT_NE(intvar, nullptr); + EXPECT_EQ(*intvar, 12345); + doublevar = (double *)platform::dlsym(handle, "some_double_val"); + EXPECT_NE(doublevar, nullptr); + EXPECT_DOUBLE_EQ(*doublevar, 6.78e-9); + intfunc = (int (*)(int))platform::dlsym(handle, "some_int_function"); + EXPECT_NE(intfunc, nullptr); + EXPECT_EQ((*intfunc)(12), 144); + doublefunc = (double (*)(double, int))platform::dlsym(handle, "some_double_function"); + EXPECT_NE(doublefunc, nullptr); + EXPECT_DOUBLE_EQ((*doublefunc)(0.5, 6), 3.0); + EXPECT_EQ(platform::dlsym(handle, "some_nonexisting_symbol"), nullptr); + EXPECT_EQ(platform::dlclose(handle), 0); + } } +#undef stringify +#undef mkstring +#endif TEST(Platform, guesspath) { - char buf[256]; - FILE *fp = fopen("test_guesspath.txt", "w"); + char buf[256]; + FILE *fp = fopen("test_guesspath.txt", "w"); #if defined(__linux__) || defined(__APPLE__) || defined(_WIN32) - const char *path = platform::guesspath(fp, buf, sizeof(buf)); - ASSERT_THAT(path, EndsWith("test_guesspath.txt")); + const char *path = platform::guesspath(fp, buf, sizeof(buf)); + ASSERT_THAT(path, EndsWith("test_guesspath.txt")); #else - const char *path = platform::guesspath(fp, buf, sizeof(buf)); - ASSERT_THAT(path, EndsWith("(unknown)")); + const char *path = platform::guesspath(fp, buf, sizeof(buf)); + ASSERT_THAT(path, EndsWith("(unknown)")); #endif - fclose(fp); - platform::unlink("test_guesspath.txt"); + fclose(fp); + platform::unlink("test_guesspath.txt"); } TEST(Platform, unlink) { - const char test[] = "12345678901234567890"; - platform::unlink("unlink.dat"); - ASSERT_EQ(platform::unlink("dummy.dat"), -1); - FILE *fp = fopen("unlink.dat", "w"); - fwrite(test, sizeof(test), 1, fp); - fclose(fp); - ASSERT_EQ(platform::unlink("unlink.dat"), 0); - ASSERT_EQ(platform::unlink("unlink.dat"), -1); - fp = fopen("unlink.dat", "r"); - ASSERT_EQ(fp, nullptr); + const char test[] = "12345678901234567890"; + platform::unlink("unlink.dat"); + ASSERT_EQ(platform::unlink("dummy.dat"), -1); + FILE *fp = fopen("unlink.dat", "w"); + fwrite(test, sizeof(test), 1, fp); + fclose(fp); + ASSERT_EQ(platform::unlink("unlink.dat"), 0); + ASSERT_EQ(platform::unlink("unlink.dat"), -1); + fp = fopen("unlink.dat", "r"); + ASSERT_EQ(fp, nullptr); - platform::mkdir("unlink.dir"); - ASSERT_EQ(platform::unlink("unlink.dir"), -1); - platform::rmdir("unlink.dir"); + platform::mkdir("unlink.dir"); + ASSERT_EQ(platform::unlink("unlink.dir"), -1); + platform::rmdir("unlink.dir"); } TEST(Platform, fseek_ftell) { - const char test[] = "12345678901234567890"; - platform::unlink("seek_tell.dat"); - FILE *fp = fopen("seek_tell.dat", "w"); - fwrite(test, sizeof(test), 1, fp); - fflush(fp); - ASSERT_EQ(platform::ftell(fp), sizeof(test)); - fclose(fp); - fp = fopen("seek_tell.dat", "r+"); - ASSERT_EQ(fgetc(fp), '1'); - ASSERT_EQ(fgetc(fp), '2'); - ASSERT_EQ(platform::ftell(fp), 2); - ASSERT_EQ(platform::fseek(fp, 15), 0); - ASSERT_EQ(fgetc(fp), '6'); - fflush(fp); - fseek(fp, -1, SEEK_END); - ASSERT_EQ(fgetc(fp), 0); - ASSERT_EQ(platform::ftell(fp), 21); - fclose(fp); - platform::unlink("seek_tell.dat"); + const char test[] = "12345678901234567890"; + platform::unlink("seek_tell.dat"); + FILE *fp = fopen("seek_tell.dat", "w"); + fwrite(test, sizeof(test), 1, fp); + fflush(fp); + ASSERT_EQ(platform::ftell(fp), sizeof(test)); + fclose(fp); + fp = fopen("seek_tell.dat", "r+"); + ASSERT_EQ(fgetc(fp), '1'); + ASSERT_EQ(fgetc(fp), '2'); + ASSERT_EQ(platform::ftell(fp), 2); + ASSERT_EQ(platform::fseek(fp, 15), 0); + ASSERT_EQ(fgetc(fp), '6'); + fflush(fp); + fseek(fp, -1, SEEK_END); + ASSERT_EQ(fgetc(fp), 0); + ASSERT_EQ(platform::ftell(fp), 21); + fclose(fp); + platform::unlink("seek_tell.dat"); } TEST(Platform, ftruncate) { - platform::unlink("truncate.dat"); - FILE *fp = fopen("truncate.dat", "w"); - fputs("header one\n", fp); - fputs("header two\n", fp); - fflush(fp); - bigint filepos = platform::ftell(fp); - fputs("line one\n", fp); - fputs("line two\n", fp); - fputs("line three\n", fp); - fflush(fp); - ASSERT_EQ(platform::ftruncate(fp, filepos), 0); - fputs("line four\n", fp); - ASSERT_GT(platform::ftell(fp), filepos); - fputs("line five\n", fp); - fflush(fp); - fclose(fp); + platform::unlink("truncate.dat"); + FILE *fp = fopen("truncate.dat", "w"); + fputs("header one\n", fp); + fputs("header two\n", fp); + fflush(fp); + bigint filepos = platform::ftell(fp); + fputs("line one\n", fp); + fputs("line two\n", fp); + fputs("line three\n", fp); + fflush(fp); + ASSERT_EQ(platform::ftruncate(fp, filepos), 0); + fputs("line four\n", fp); + ASSERT_GT(platform::ftell(fp), filepos); + fputs("line five\n", fp); + fflush(fp); + fclose(fp); - // check file - fp = fopen("truncate.dat", "r"); - char buf[128]; - char *ptr = fgets(buf, 127, fp); - ASSERT_THAT(ptr, StartsWith("header one")); - ptr = fgets(buf, 127, fp); - ASSERT_THAT(ptr, StartsWith("header two")); - ptr = fgets(buf, 127, fp); - ASSERT_THAT(ptr, StartsWith("line four")); - ptr = fgets(buf, 127, fp); - ASSERT_THAT(ptr, StartsWith("line five")); - ptr = fgets(buf, 127, fp); - ASSERT_EQ(ptr, nullptr); - fclose(fp); - platform::unlink("truncate.dat"); + // check file + fp = fopen("truncate.dat", "r"); + char buf[128]; + char *ptr = fgets(buf, 127, fp); + ASSERT_THAT(ptr, StartsWith("header one")); + ptr = fgets(buf, 127, fp); + ASSERT_THAT(ptr, StartsWith("header two")); + ptr = fgets(buf, 127, fp); + ASSERT_THAT(ptr, StartsWith("line four")); + ptr = fgets(buf, 127, fp); + ASSERT_THAT(ptr, StartsWith("line five")); + ptr = fgets(buf, 127, fp); + ASSERT_EQ(ptr, nullptr); + fclose(fp); + platform::unlink("truncate.dat"); } TEST(Platform, path_basename) { #if defined(_WIN32) - ASSERT_THAT(platform::path_basename("c:\\parent\\folder\\filename"), Eq("filename")); - ASSERT_THAT(platform::path_basename("folder\\"), Eq("")); - ASSERT_THAT(platform::path_basename("c:/parent/folder/filename"), Eq("filename")); + ASSERT_THAT(platform::path_basename("c:\\parent\\folder\\filename"), Eq("filename")); + ASSERT_THAT(platform::path_basename("folder\\"), Eq("")); + ASSERT_THAT(platform::path_basename("c:/parent/folder/filename"), Eq("filename")); #else - ASSERT_THAT(platform::path_basename("/parent/folder/filename"), Eq("filename")); - ASSERT_THAT(platform::path_basename("/parent/folder/"), Eq("")); + ASSERT_THAT(platform::path_basename("/parent/folder/filename"), Eq("filename")); + ASSERT_THAT(platform::path_basename("/parent/folder/"), Eq("")); #endif } TEST(Platform, path_dirname) { #if defined(_WIN32) - ASSERT_THAT(platform::path_dirname("c:/parent/folder/filename"), Eq("c:/parent/folder")); - ASSERT_THAT(platform::path_dirname("c:\\parent\\folder\\filename"), Eq("c:\\parent\\folder")); - ASSERT_THAT(platform::path_dirname("c:filename"), Eq(".")); + ASSERT_THAT(platform::path_dirname("c:/parent/folder/filename"), Eq("c:/parent/folder")); + ASSERT_THAT(platform::path_dirname("c:\\parent\\folder\\filename"), Eq("c:\\parent\\folder")); + ASSERT_THAT(platform::path_dirname("c:filename"), Eq(".")); #else - ASSERT_THAT(platform::path_dirname("/parent/folder/filename"), Eq("/parent/folder")); + ASSERT_THAT(platform::path_dirname("/parent/folder/filename"), Eq("/parent/folder")); #endif - ASSERT_THAT(platform::path_dirname("filename"), Eq(".")); + ASSERT_THAT(platform::path_dirname("filename"), Eq(".")); } TEST(Platform, path_join) { #if defined(_WIN32) - ASSERT_THAT(platform::path_join("c:\\folder", "filename"), Eq("c:\\folder\\filename")); - ASSERT_THAT(platform::path_join("c:\\folder\\", "filename"), Eq("c:\\folder\\filename")); - ASSERT_THAT(platform::path_join("c:\\folder", "\\filename"), Eq("c:\\folder\\filename")); - ASSERT_THAT(platform::path_join("c:\\folder\\", "\\filename"), Eq("c:\\folder\\filename")); - ASSERT_THAT(platform::path_join("c:\\folder", "/filename"), Eq("c:\\folder\\filename")); - ASSERT_THAT(platform::path_join("c:\\folder\\\\", "\\filename"), Eq("c:\\folder\\filename")); - ASSERT_THAT(platform::path_join("c:\\folder\\", "\\\\filename"), Eq("c:\\folder\\filename")); - ASSERT_THAT(platform::path_join("c:\\folder/\\", "/\\filename"), Eq("c:\\folder\\filename")); - ASSERT_THAT(platform::path_join("c:\\folder\\/", "\\/filename"), Eq("c:\\folder\\filename")); - ASSERT_THAT(platform::path_join("c:\\folder", ""), Eq("c:\\folder")); - ASSERT_THAT(platform::path_join("", "\\/filename"), Eq("\\/filename")); + ASSERT_THAT(platform::path_join("c:\\folder", "filename"), Eq("c:\\folder\\filename")); + ASSERT_THAT(platform::path_join("c:\\folder\\", "filename"), Eq("c:\\folder\\filename")); + ASSERT_THAT(platform::path_join("c:\\folder", "\\filename"), Eq("c:\\folder\\filename")); + ASSERT_THAT(platform::path_join("c:\\folder\\", "\\filename"), Eq("c:\\folder\\filename")); + ASSERT_THAT(platform::path_join("c:\\folder", "/filename"), Eq("c:\\folder\\filename")); + ASSERT_THAT(platform::path_join("c:\\folder\\\\", "\\filename"), Eq("c:\\folder\\filename")); + ASSERT_THAT(platform::path_join("c:\\folder\\", "\\\\filename"), Eq("c:\\folder\\filename")); + ASSERT_THAT(platform::path_join("c:\\folder/\\", "/\\filename"), Eq("c:\\folder\\filename")); + ASSERT_THAT(platform::path_join("c:\\folder\\/", "\\/filename"), Eq("c:\\folder\\filename")); + ASSERT_THAT(platform::path_join("c:\\folder", ""), Eq("c:\\folder")); + ASSERT_THAT(platform::path_join("", "\\/filename"), Eq("\\/filename")); #else - ASSERT_THAT(platform::path_join("/parent/folder", "filename"), Eq("/parent/folder/filename")); - ASSERT_THAT(platform::path_join("/parent/folder/", "filename"), Eq("/parent/folder/filename")); - ASSERT_THAT(platform::path_join("/parent/folder", "/filename"), Eq("/parent/folder/filename")); - ASSERT_THAT(platform::path_join("/parent/folder/", "/filename"), Eq("/parent/folder/filename")); - ASSERT_THAT(platform::path_join("/parent/folder//", "filename"), Eq("/parent/folder/filename")); - ASSERT_THAT(platform::path_join("/parent/folder", "//filename"), Eq("/parent/folder/filename")); - ASSERT_THAT(platform::path_join("/parent/folder///", "/filename"), Eq("/parent/folder/filename")); - ASSERT_THAT(platform::path_join("/parent/folder/", "///filename"), Eq("/parent/folder/filename")); - ASSERT_THAT(platform::path_join("/parent/folder/", ""), Eq("/parent/folder/")); - ASSERT_THAT(platform::path_join("", "\\/filename"), Eq("\\/filename")); + ASSERT_THAT(platform::path_join("/parent/folder", "filename"), Eq("/parent/folder/filename")); + ASSERT_THAT(platform::path_join("/parent/folder/", "filename"), Eq("/parent/folder/filename")); + ASSERT_THAT(platform::path_join("/parent/folder", "/filename"), Eq("/parent/folder/filename")); + ASSERT_THAT(platform::path_join("/parent/folder/", "/filename"), Eq("/parent/folder/filename")); + ASSERT_THAT(platform::path_join("/parent/folder//", "filename"), Eq("/parent/folder/filename")); + ASSERT_THAT(platform::path_join("/parent/folder", "//filename"), Eq("/parent/folder/filename")); + ASSERT_THAT(platform::path_join("/parent/folder///", "/filename"), + Eq("/parent/folder/filename")); + ASSERT_THAT(platform::path_join("/parent/folder/", "///filename"), + Eq("/parent/folder/filename")); + ASSERT_THAT(platform::path_join("/parent/folder/", ""), Eq("/parent/folder/")); + ASSERT_THAT(platform::path_join("", "\\/filename"), Eq("\\/filename")); #endif } TEST(Platform, is_console) { - platform::unlink("file_is_no_console.txt"); - FILE *fp = fopen("file_is_no_console.txt", "w"); - fputs("some text\n", fp); - EXPECT_FALSE(platform::is_console(fp)); - fclose(fp); - platform::unlink("file_is_no_console.txt"); + platform::unlink("file_is_no_console.txt"); + FILE *fp = fopen("file_is_no_console.txt", "w"); + fputs("some text\n", fp); + EXPECT_FALSE(platform::is_console(fp)); + fclose(fp); + platform::unlink("file_is_no_console.txt"); } TEST(Platform, path_and_directory) { - platform::unlink("path_is_directory"); - platform::rmdir("path_is_directory"); - platform::unlink("path_is_file"); - platform::mkdir("path_is_directory"); - FILE *fp = fopen("path_is_file", "w"); - fputs("some text\n", fp); - fclose(fp); + platform::unlink("path_is_directory"); + platform::rmdir("path_is_directory"); + platform::unlink("path_is_file"); + platform::mkdir("path_is_directory"); + FILE *fp = fopen("path_is_file", "w"); + fputs("some text\n", fp); + fclose(fp); - ASSERT_TRUE(platform::path_is_directory("path_is_directory")); - ASSERT_FALSE(platform::path_is_directory("path_is_file")); - ASSERT_FALSE(platform::path_is_directory("path_does_not_exist")); - platform::unlink("path_is_file"); + ASSERT_TRUE(platform::path_is_directory("path_is_directory")); + ASSERT_FALSE(platform::path_is_directory("path_is_file")); + ASSERT_FALSE(platform::path_is_directory("path_does_not_exist")); + platform::unlink("path_is_file"); #if defined(_WIN32) - fp = fopen("path_is_directory\\path_is_file", "w"); + fp = fopen("path_is_directory\\path_is_file", "w"); #else - fp = fopen("path_is_directory/path_is_file", "w"); + fp = fopen("path_is_directory/path_is_file", "w"); #endif - fputs("some text\n", fp); - fclose(fp); + fputs("some text\n", fp); + fclose(fp); #if defined(_WIN32) - platform::mkdir("path_is_directory\\path_is_directory"); - fp = fopen("path_is_directory\\path_is_other_file", "w"); + platform::mkdir("path_is_directory\\path_is_directory"); + fp = fopen("path_is_directory\\path_is_other_file", "w"); #else - platform::mkdir("path_is_directory/path_is_directory"); - fp = fopen("path_is_directory/path_is_other_file", "w"); + platform::mkdir("path_is_directory/path_is_directory"); + fp = fopen("path_is_directory/path_is_other_file", "w"); #endif - fputs("some text\n", fp); - fclose(fp); - auto dirs = platform::list_directory("path_is_directory"); - ASSERT_EQ(dirs.size(), 3); - platform::rmdir("path_is_directory"); - ASSERT_FALSE(platform::path_is_directory("path_is_directory")); + fputs("some text\n", fp); + fclose(fp); + auto dirs = platform::list_directory("path_is_directory"); + ASSERT_EQ(dirs.size(), 3); + platform::rmdir("path_is_directory"); + ASSERT_FALSE(platform::path_is_directory("path_is_directory")); } TEST(Platform, get_change_directory) { - platform::unlink("working_directory"); - platform::rmdir("working_directory"); + platform::unlink("working_directory"); + platform::rmdir("working_directory"); - auto cwd = platform::current_directory(); - ASSERT_GT(cwd.size(), 0); + auto cwd = platform::current_directory(); + ASSERT_GT(cwd.size(), 0); - platform::mkdir("working_directory"); - ASSERT_EQ(platform::chdir("working_directory"), 0); - ASSERT_THAT(platform::current_directory(), EndsWith("working_directory")); + platform::mkdir("working_directory"); + ASSERT_EQ(platform::chdir("working_directory"), 0); + ASSERT_THAT(platform::current_directory(), EndsWith("working_directory")); - ASSERT_EQ(platform::chdir(".."), 0); - ASSERT_THAT(platform::current_directory(), StrEq(cwd)); - platform::rmdir("working_directory"); + ASSERT_EQ(platform::chdir(".."), 0); + ASSERT_THAT(platform::current_directory(), StrEq(cwd)); + platform::rmdir("working_directory"); } TEST(Platform, file_is_readable) { - platform::unlink("file_is_readable.txt"); - FILE *fp = fopen("file_is_readable.txt", "w"); - fputs("some text\n", fp); - fclose(fp); + platform::unlink("file_is_readable.txt"); + FILE *fp = fopen("file_is_readable.txt", "w"); + fputs("some text\n", fp); + fclose(fp); - ASSERT_TRUE(platform::file_is_readable("file_is_readable.txt")); - ASSERT_FALSE(platform::file_is_readable("file_does_not_exist.txt")); - platform::unlink("file_is_readable.txt"); + ASSERT_TRUE(platform::file_is_readable("file_is_readable.txt")); + ASSERT_FALSE(platform::file_is_readable("file_does_not_exist.txt")); + platform::unlink("file_is_readable.txt"); - // windows does not have permission flags + // windows does not have permission flags #if !defined(_WIN32) - platform::unlink("file_is_not_readable.txt"); - fp = fopen("file_is_not_readable.txt", "w"); - fputs("some text\n", fp); - fclose(fp); - chmod("file_is_not_readable.txt", 0); - ASSERT_FALSE(platform::file_is_readable("file_is_not_readable.txt")); - platform::unlink("file_is_not_readable.txt"); + platform::unlink("file_is_not_readable.txt"); + fp = fopen("file_is_not_readable.txt", "w"); + fputs("some text\n", fp); + fclose(fp); + chmod("file_is_not_readable.txt", 0); + ASSERT_FALSE(platform::file_is_readable("file_is_not_readable.txt")); + platform::unlink("file_is_not_readable.txt"); #endif } TEST(Platform, has_zip_extension) { - ASSERT_FALSE(platform::has_zip_extension("dummy")); - ASSERT_FALSE(platform::has_zip_extension("dum.my")); - ASSERT_TRUE(platform::has_zip_extension("dummy.gz")); - ASSERT_TRUE(platform::has_zip_extension("dummy.bz2")); - ASSERT_TRUE(platform::has_zip_extension("dummy.zstd")); - ASSERT_TRUE(platform::has_zip_extension("dummy.xz")); - ASSERT_TRUE(platform::has_zip_extension("dummy.lzma")); - ASSERT_TRUE(platform::has_zip_extension("dummy.lz4")); + ASSERT_FALSE(platform::has_zip_extension("dummy")); + ASSERT_FALSE(platform::has_zip_extension("dum.my")); + ASSERT_TRUE(platform::has_zip_extension("dummy.gz")); + ASSERT_TRUE(platform::has_zip_extension("dummy.bz2")); + ASSERT_TRUE(platform::has_zip_extension("dummy.zstd")); + ASSERT_TRUE(platform::has_zip_extension("dummy.xz")); + ASSERT_TRUE(platform::has_zip_extension("dummy.lzma")); + ASSERT_TRUE(platform::has_zip_extension("dummy.lz4")); } TEST(Platform, zip_read_write) { - const std::vector test_files = {"zip_test.zip", "zip_test.gz", "zip_test.bz2", - "zip_test.zstd", "zip_test.xz", "zip_test.lzma", - "zip_test.lz4", "zip_test.unk", "zip test.gz"}; - for (const auto &file : test_files) { - platform::unlink(file); - FILE *fp = platform::zip_write(file); - if (!fp) { - platform::unlink(file); - continue; + const std::vector test_files = {"zip_test.zip", "zip_test.gz", "zip_test.bz2", + "zip_test.zstd", "zip_test.xz", "zip_test.lzma", + "zip_test.lz4", "zip_test.unk", "zip test.gz"}; + for (const auto &file : test_files) { + platform::unlink(file); + FILE *fp = platform::zip_write(file); + if (!fp) { + platform::unlink(file); + continue; + } + + clearerr(fp); + fputs("line one\n", fp); + fputs("line two\n", fp); + ASSERT_EQ(ferror(fp), 0); + fflush(fp); + platform::pclose(fp); + + fp = platform::zip_read(file); + ASSERT_NE(fp, nullptr); + char buf[128]; + char *ptr = fgets(buf, 128, fp); + EXPECT_THAT(ptr, StartsWith("line one")); + ptr = fgets(buf, 128, fp); + EXPECT_THAT(ptr, StartsWith("line two")); + ASSERT_EQ(ferror(fp), 0); + platform::pclose(fp); + platform::unlink(file); } - - clearerr(fp); - fputs("line one\n", fp); - fputs("line two\n", fp); - ASSERT_EQ(ferror(fp), 0); - fflush(fp); - platform::pclose(fp); - - fp = platform::zip_read(file); - ASSERT_NE(fp, nullptr); - char buf[128]; - char *ptr = fgets(buf, 128, fp); - EXPECT_THAT(ptr, StartsWith("line one")); - ptr = fgets(buf, 128, fp); - EXPECT_THAT(ptr, StartsWith("line two")); - ASSERT_EQ(ferror(fp), 0); - platform::pclose(fp); - platform::unlink(file); - } } From 37bfe3d0cef97940023933b811334dda7ef6d454 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sat, 2 Oct 2021 15:50:58 -0400 Subject: [PATCH 049/372] integrate platform sub-namespace into source code and documentation this updates function calls to functions that have been moved from the utils namepsace or the Info class to platform:: --- doc/doxygen/Doxyfile.in | 2 + doc/src/Developer.rst | 1 + doc/src/Developer_platform.rst | 140 ++++++++++++ doc/src/Developer_utils.rst | 19 +- doc/src/Howto_thermostat.rst | 2 +- doc/utils/sphinx-config/false_positives.txt | 3 + src/NETCDF/dump_netcdf.cpp | 2 +- src/NETCDF/dump_netcdf_mpiio.cpp | 2 +- src/bond.cpp | 2 +- src/info.cpp | 200 +----------------- src/info.h | 7 - src/lammps.cpp | 8 +- src/library.cpp | 6 +- src/pair.cpp | 2 +- src/platform.cpp | 8 +- src/platform.h | 10 +- src/pointers.h | 1 + src/read_data.cpp | 2 +- src/read_restart.cpp | 6 +- src/utils.cpp | 119 +---------- src/utils.h | 43 ---- tools/lammps-shell/lammps-shell.cpp | 5 +- unittest/commands/test_groups.cpp | 2 +- unittest/commands/test_kim_commands.cpp | 2 +- unittest/commands/test_lattice_region.cpp | 3 +- unittest/commands/test_reset_ids.cpp | 2 +- unittest/commands/test_simple_commands.cpp | 5 +- unittest/commands/test_variables.cpp | 2 +- unittest/cplusplus/test_error_class.cpp | 2 +- unittest/cplusplus/test_lammps_class.cpp | 2 +- unittest/formats/test_file_operations.cpp | 2 +- unittest/formats/test_molecule_file.cpp | 3 +- .../formats/test_potential_file_reader.cpp | 2 +- unittest/formats/test_text_file_reader.cpp | 2 +- unittest/testing/core.h | 3 +- unittest/utils/test_utils.cpp | 58 +---- 36 files changed, 207 insertions(+), 473 deletions(-) create mode 100644 doc/src/Developer_platform.rst diff --git a/doc/doxygen/Doxyfile.in b/doc/doxygen/Doxyfile.in index 49a271355f..d454898f4e 100644 --- a/doc/doxygen/Doxyfile.in +++ b/doc/doxygen/Doxyfile.in @@ -435,6 +435,8 @@ INPUT = @LAMMPS_SOURCE_DIR@/utils.cpp \ @LAMMPS_SOURCE_DIR@/my_pool_chunk.cpp \ @LAMMPS_SOURCE_DIR@/my_pool_chunk.h \ @LAMMPS_SOURCE_DIR@/math_eigen.h \ + @LAMMPS_SOURCE_DIR@/platform.h \ + @LAMMPS_SOURCE_DIR@/platform.cpp \ # The EXCLUDE_SYMLINKS tag can be used to select whether or not files or # directories that are symbolic links (a Unix file system feature) are excluded diff --git a/doc/src/Developer.rst b/doc/src/Developer.rst index f68007486d..fd4a44a8a0 100644 --- a/doc/src/Developer.rst +++ b/doc/src/Developer.rst @@ -18,4 +18,5 @@ of time and requests from the LAMMPS user community. Developer_plugins Developer_unittest Classes + Developer_platform Developer_utils diff --git a/doc/src/Developer_platform.rst b/doc/src/Developer_platform.rst new file mode 100644 index 0000000000..dc482cb27a --- /dev/null +++ b/doc/src/Developer_platform.rst @@ -0,0 +1,140 @@ +Platform abstraction functions +------------------------------ + +The ``platform`` sub-namespace inside the ``LAMMPS_NS`` namespace +provides a collection of wrapper and convenience functions and utilities +that perform common tasks for which platform specific code would be +required or for which a more high-level abstraction would be convenient +and reduce duplicated code. This reduces redundant implementations and +encourages consistent behavior and thus has some overlap with the +:doc:`"utils" sub-namespace `. + +Time functions +^^^^^^^^^^^^^^ + +.. doxygenfunction:: cputime + :project: progguide + +.. doxygenfunction:: walltime + :project: progguide + +Platform information functions +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: os_info + :project: progguide + +.. doxygenfunction:: compiler_info + :project: progguide + +.. doxygenfunction:: cxx_standard + :project: progguide + +.. doxygenfunction:: openmp_standard + :project: progguide + +.. doxygenfunction:: mpi_vendor + :project: progguide + +.. doxygenfunction:: mpi_info + :project: progguide + + +File and path functions and global constants +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenvariable:: filepathsep + :project: progguide + +.. doxygenvariable:: pathvarsep + :project: progguide + +.. doxygenfunction:: guesspath + :project: progguide + +.. doxygenfunction:: path_basename + :project: progguide + +.. doxygenfunction:: path_join + :project: progguide + +.. doxygenfunction:: file_is_readable + :project: progguide + +.. doxygenfunction:: is_console + :project: progguide + +.. doxygenfunction:: path_is_directory + :project: progguide + +.. doxygenfunction:: current_directory + :project: progguide + +.. doxygenfunction:: list_directory + :project: progguide + +.. doxygenfunction:: chdir + :project: progguide + +.. doxygenfunction:: mkdir + :project: progguide + +.. doxygenfunction:: rmdir + :project: progguide + +.. doxygenfunction:: unlink + :project: progguide + +Standard I/O function wrappers +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: ftell + :project: progguide + +.. doxygenfunction:: fseek + :project: progguide + +.. doxygenfunction:: ftruncate + :project: progguide + +.. doxygenfunction:: popen + :project: progguide + +.. doxygenfunction:: pclose + :project: progguide + +Environment variable functions +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: putenv + :project: progguide + +.. doxygenfunction:: list_pathenv + :project: progguide + +.. doxygenfunction:: find_exe_path + :project: progguide + +Dynamically loaded object or library functions +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: dlopen + :project: progguide + +.. doxygenfunction:: dlclose + :project: progguide + +.. doxygenfunction:: dlsym + :project: progguide + +Compressed file I/O functions +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: has_zip_extension + :project: progguide + +.. doxygenfunction:: zip_read + :project: progguide + +.. doxygenfunction:: zip_write + :project: progguide diff --git a/doc/src/Developer_utils.rst b/doc/src/Developer_utils.rst index 041fce60b0..3cf059594b 100644 --- a/doc/src/Developer_utils.rst +++ b/doc/src/Developer_utils.rst @@ -7,7 +7,9 @@ a collection of convenience functions and utilities that perform common tasks that are required repeatedly throughout the LAMMPS code like reading or writing to files with error checking or translation of strings into specific types of numbers with checking for validity. This -reduces redundant implementations and encourages consistent behavior. +reduces redundant implementations and encourages consistent behavior and +thus has some overlap with the :doc:`"platform" sub-namespace +`. I/O with status check and similar functions ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ @@ -143,21 +145,6 @@ and parsing files or arguments. .. doxygenfunction:: is_double :project: progguide -File and path functions -^^^^^^^^^^^^^^^^^^^^^^^^^ - -.. doxygenfunction:: guesspath - :project: progguide - -.. doxygenfunction:: path_basename - :project: progguide - -.. doxygenfunction:: path_join - :project: progguide - -.. doxygenfunction:: file_is_readable - :project: progguide - Potential file functions ^^^^^^^^^^^^^^^^^^^^^^^^ diff --git a/doc/src/Howto_thermostat.rst b/doc/src/Howto_thermostat.rst index 249af54b6e..fe53fff540 100644 --- a/doc/src/Howto_thermostat.rst +++ b/doc/src/Howto_thermostat.rst @@ -57,7 +57,7 @@ velocities. See the doc pages for the individual fixes and for the assign a temperature compute to a thermostatting fix. For example, you can apply a thermostat only to atoms in a spatial -region by using it in conjuction with :doc:`compute temp/region +region by using it in conjunction with :doc:`compute temp/region `. Or you can apply a thermostat to only the x and z components of velocity by using it with :doc:`compute temp/partial `. Of you could thermostat only diff --git a/doc/utils/sphinx-config/false_positives.txt b/doc/utils/sphinx-config/false_positives.txt index 5f64a4229c..76127104e0 100644 --- a/doc/utils/sphinx-config/false_positives.txt +++ b/doc/utils/sphinx-config/false_positives.txt @@ -1135,6 +1135,7 @@ Germann Germano gerolf Gerolf +getrusage Gershgorin getter gettimeofday @@ -1809,6 +1810,7 @@ lyon Lysogorskiy Lyulin lz +lzma Maaravi MACHDYN machdyn @@ -2762,6 +2764,7 @@ REAXFF ReaxFF reaxff rebo +recurse recursing Ree refactored diff --git a/src/NETCDF/dump_netcdf.cpp b/src/NETCDF/dump_netcdf.cpp index 5702c94499..b0bf57a41c 100644 --- a/src/NETCDF/dump_netcdf.cpp +++ b/src/NETCDF/dump_netcdf.cpp @@ -274,7 +274,7 @@ void DumpNetCDF::openfile() if (append_flag && !multifile) { // Fixme! Perform checks if dimensions and variables conform with // data structure standard. - if (not utils::file_is_readable(filecurrent)) + if (not platform::file_is_readable(filecurrent)) error->all(FLERR, "cannot append to non-existent file {}",filecurrent); if (singlefile_opened) return; diff --git a/src/NETCDF/dump_netcdf_mpiio.cpp b/src/NETCDF/dump_netcdf_mpiio.cpp index a6c3c535c9..b14cef4f68 100644 --- a/src/NETCDF/dump_netcdf_mpiio.cpp +++ b/src/NETCDF/dump_netcdf_mpiio.cpp @@ -272,7 +272,7 @@ void DumpNetCDFMPIIO::openfile() if (append_flag && !multifile) { // Fixme! Perform checks if dimensions and variables conform with // data structure standard. - if (not utils::file_is_readable(filecurrent)) + if (not platform::file_is_readable(filecurrent)) error->all(FLERR, "cannot append to non-existent file {}", filecurrent); MPI_Offset index[NC_MAX_VAR_DIMS], count[NC_MAX_VAR_DIMS]; diff --git a/src/bond.cpp b/src/bond.cpp index e636ae9bf8..fb313f0170 100644 --- a/src/bond.cpp +++ b/src/bond.cpp @@ -270,7 +270,7 @@ void Bond::write_file(int narg, char **arg) // write out a line with "DATE:" and "UNITS:" tags // - if the file already exists, print a message about appending // while printing the date and check that units are consistent. - if (utils::file_is_readable(table_file)) { + if (platform::file_is_readable(table_file)) { std::string units = utils::get_potential_units(table_file,"table"); if (!units.empty() && (units != update->unit_style)) { error->one(FLERR,"Trying to append to a table file with UNITS: {} while units are {}", diff --git a/src/info.cpp b/src/info.cpp index 137bf44b1a..340ba15b0f 100644 --- a/src/info.cpp +++ b/src/info.cpp @@ -282,7 +282,7 @@ void Info::command(int narg, char **arg) fmt::print(out,"Git info: {} / {} / {}\n", lmp->git_branch, lmp->git_descriptor,lmp->git_commit); - fmt::print(out,"\nOS information: {}\n\n",get_os_info()); + fmt::print(out,"\nOS information: {}\n\n",platform::os_info()); fmt::print(out,"sizeof(smallint): {}-bit\n" "sizeof(imageint): {}-bit\n" @@ -292,7 +292,7 @@ void Info::command(int narg, char **arg) sizeof(tagint)*8, sizeof(bigint)*8); fmt::print(out,"\nCompiler: {} with {}\nC++ standard: {}\n", - get_compiler_info(),get_openmp_info(),get_cxx_info()); + platform::compiler_info(),platform::openmp_standard(),platform::cxx_standard()); fputs("\nActive compile time flags:\n\n",out); if (has_gzip_support()) fputs("-DLAMMPS_GZIP\n",out); @@ -353,7 +353,7 @@ void Info::command(int narg, char **arg) if (flags & COMM) { int major,minor; - std::string version = get_mpi_info(major,minor); + std::string version = platform::mpi_info(major,minor); fmt::print(out,"\nCommunication information:\n" "MPI library level: MPI v{}.{}\n" @@ -1266,200 +1266,6 @@ bool Info::has_accelerator_feature(const std::string &package, return false; } -/* ---------------------------------------------------------------------- */ -#define _INFOBUF_SIZE 256 - -std::string Info::get_os_info() -{ - std::string buf; - -#if defined(_WIN32) - DWORD fullversion,majorv,minorv,buildv=0; - - fullversion = GetVersion(); - majorv = (DWORD) (LOBYTE(LOWORD(fullversion))); - minorv = (DWORD) (HIBYTE(LOWORD(fullversion))); - if (fullversion < 0x80000000) - buildv = (DWORD) (HIWORD(fullversion)); - - buf = fmt::format("Windows {}.{} ({}) on ",majorv,minorv,buildv); - - SYSTEM_INFO si; - GetSystemInfo(&si); - - switch (si.wProcessorArchitecture) { - case PROCESSOR_ARCHITECTURE_AMD64: - buf += "x86_64"; - break; - case PROCESSOR_ARCHITECTURE_ARM: - buf += "arm"; - break; - case PROCESSOR_ARCHITECTURE_IA64: - buf += "ia64"; - break; - case PROCESSOR_ARCHITECTURE_INTEL: - buf += "i386"; - break; - default: - buf += "(unknown)"; - } -#else - struct utsname ut; - uname(&ut); - - // try to get OS distribution name, if available - std::string distro = ut.sysname; - if (utils::file_is_readable("/etc/os-release")) { - try { - TextFileReader reader("/etc/os-release",""); - while (1) { - auto words = reader.next_values(0,"="); - if ((words.count() > 1) && (words.next_string() == "PRETTY_NAME")) { - distro += " " + utils::trim(words.next_string()); - break; - } - } - } catch (std::exception &e) { - ; // EOF but keyword not found - } - } - - buf = fmt::format("{} {} on {}", distro, ut.release, ut.machine); -#endif - return buf; -} - -std::string Info::get_compiler_info() -{ - std::string buf; -#if defined(__INTEL_LLVM_COMPILER) - constexpr double version = static_cast(__INTEL_LLVM_COMPILER)*0.01; - buf = fmt::format("Intel LLVM C++ {:.1f} / {}", version, __VERSION__); -#elif defined(__ibmxl__) - buf = fmt::format("IBM XL C/C++ (Clang) {}.{}.{}", - __ibmxl_version__, __ibmxl_release__, __ibmxl_modification__); -#elif defined(__clang__) - buf = fmt::format("Clang C++ {}", __VERSION__); -#elif defined(__PGI) - buf = fmt::format("PGI C++ {}.{}",__PGIC__, __PGIC_MINOR__); -#elif defined(__INTEL_COMPILER) - double version = static_cast(__INTEL_COMPILER)*0.01; - buf = fmt::format("Intel Classic C++ {:.2f}.{} / {}", version, - __INTEL_COMPILER_UPDATE, __VERSION__); -#elif defined(__MINGW64__) - buf = fmt::format("MinGW-w64 64bit {}.{} / GNU C++ {}", __MINGW64_VERSION_MAJOR, - __MINGW64_VERSION_MINOR, __VERSION__); -#elif defined(__MINGW32__) - buf = fmt::format("MinGW-w64 32bit {}.{} / GNU C++ {}", __MINGW32_MAJOR_VERSION, - __MINGW32_MINOR_VERSION, __VERSION__); -#elif defined(__GNUC__) - buf = fmt::format("GNU C++ {}", __VERSION__); -#elif defined(_MSC_VER) && (_MSC_VER > 1920) && (_MSC_VER < 2000) - constexpr int major = _MSC_VER / 100; - constexpr int minor = _MSC_VER - major *100; - buf = fmt::format("Microsoft Visual Studio 20{}, C/C++ {}.{}", major, major-5, minor); -#else - buf = "(Unknown)"; -#endif - return buf; -} - -std::string Info::get_openmp_info() -{ - -#if !defined(_OPENMP) - return "OpenMP not enabled"; -#else - -// Supported OpenMP version corresponds to the release date of the -// specifications as posted at https://www.openmp.org/specifications/ - -#if _OPENMP > 202011 - return "OpenMP newer than version 5.1"; -#elif _OPENMP == 202011 - return "OpenMP 5.1"; -#elif _OPENMP == 201811 - return "OpenMP 5.0"; -#elif _OPENMP == 201611 - return "OpenMP 5.0 preview 1"; -#elif _OPENMP == 201511 - return "OpenMP 4.5"; -#elif _OPENMP == 201307 - return "OpenMP 4.0"; -#elif _OPENMP == 201107 - return "OpenMP 3.1"; -#elif _OPENMP == 200805 - return "OpenMP 3.0"; -#elif _OPENMP == 200505 - return "OpenMP 2.5"; -#elif _OPENMP == 200203 - return "OpenMP 2.0"; -#else - return "unknown OpenMP version"; -#endif - -#endif -} - -std::string Info::get_mpi_vendor() { - #if defined(MPI_STUBS) - return "MPI STUBS"; - #elif defined(OPEN_MPI) - return "Open MPI"; - #elif defined(MPICH_NAME) - return "MPICH"; - #elif defined(I_MPI_VERSION) - return "Intel MPI"; - #elif defined(PLATFORM_MPI) - return "Platform MPI"; - #elif defined(HP_MPI) - return "HP MPI"; - #elif defined(MSMPI_VER) - return "Microsoft MPI"; - #else - return "Unknown MPI implementation"; - #endif -} - -std::string Info::get_mpi_info(int &major, int &minor) -{ - int len; -#if (defined(MPI_VERSION) && (MPI_VERSION > 2)) || defined(MPI_STUBS) - static char version[MPI_MAX_LIBRARY_VERSION_STRING]; - MPI_Get_library_version(version,&len); -#else - static char version[32]; - strcpy(version,get_mpi_vendor().c_str()); - len = strlen(version); -#endif - - MPI_Get_version(&major,&minor); - if (len > 80) { - char *ptr = strchr(version+80,'\n'); - if (ptr) *ptr = '\0'; - } - return std::string(version); -} - -std::string Info::get_cxx_info() -{ -#if __cplusplus > 202002L - return "newer than C++20"; -#elif __cplusplus == 202002L - return "C++20"; -#elif __cplusplus == 201703L - return "C++17"; -#elif __cplusplus == 201402L - return "C++14"; -#elif __cplusplus == 201103L - return "C++11"; -#elif __cplusplus == 199711L - return "C++98"; -#else - return "unknown"; -#endif -} - std::string Info::get_accelerator_info(const std::string &package) { std::string mesg(""); diff --git a/src/info.h b/src/info.h index d000b3c443..0e7bfb68f3 100644 --- a/src/info.h +++ b/src/info.h @@ -48,13 +48,6 @@ class Info : public Command { const std::string &); static bool has_gpu_device(); static std::string get_gpu_device_info(); - - static std::string get_os_info(); - static std::string get_compiler_info(); - static std::string get_openmp_info(); - static std::string get_mpi_vendor(); - static std::string get_mpi_info(int &, int &); - static std::string get_cxx_info(); static std::string get_accelerator_info(const std::string &pkg = ""); void get_memory_info(double *); diff --git a/src/lammps.cpp b/src/lammps.cpp index d9bb56d882..f6c4474cd5 100644 --- a/src/lammps.cpp +++ b/src/lammps.cpp @@ -1340,14 +1340,14 @@ void LAMMPS::print_config(FILE *fp) const char *pkg; int ncword, ncline = 0; - fmt::print(fp,"OS: {}\n\n",Info::get_os_info()); + fmt::print(fp,"OS: {}\n\n",platform::os_info()); fmt::print(fp,"Compiler: {} with {}\nC++ standard: {}\n", - Info::get_compiler_info(),Info::get_openmp_info(), - Info::get_cxx_info()); + platform::compiler_info(),platform::openmp_standard(), + platform::cxx_standard()); int major,minor; - std::string infobuf = Info::get_mpi_info(major,minor); + std::string infobuf = platform::mpi_info(major,minor); fmt::print(fp,"MPI v{}.{}: {}\n\n",major,minor,infobuf); fmt::print(fp,"Accelerator configuration:\n\n{}\n", diff --git a/src/library.cpp b/src/library.cpp index 13f480ed03..bf5ea50f58 100644 --- a/src/library.cpp +++ b/src/library.cpp @@ -4394,9 +4394,9 @@ void lammps_get_os_info(char *buffer, int buf_size) { if (buf_size <=0) return; buffer[0] = buffer[buf_size-1] = '\0'; - std::string txt = Info::get_os_info() + "\n"; - txt += Info::get_compiler_info(); - txt += " with " + Info::get_openmp_info() + "\n"; + std::string txt = platform::os_info() + "\n"; + txt += platform::compiler_info(); + txt += " with " + platform::openmp_standard() + "\n"; strncpy(buffer, txt.c_str(), buf_size-1); } diff --git a/src/pair.cpp b/src/pair.cpp index 6805166150..1039875718 100644 --- a/src/pair.cpp +++ b/src/pair.cpp @@ -1799,7 +1799,7 @@ void Pair::write_file(int narg, char **arg) // write out a line with "DATE:" and "UNITS:" tags // - if the file already exists, print a message about appending // while printing the date and check that units are consistent. - if (utils::file_is_readable(table_file)) { + if (platform::file_is_readable(table_file)) { std::string units = utils::get_potential_units(table_file,"table"); if (!units.empty() && (units != update->unit_style)) { error->one(FLERR,"Trying to append to a table file " diff --git a/src/platform.cpp b/src/platform.cpp index d457f85c98..3dd08d46ce 100644 --- a/src/platform.cpp +++ b/src/platform.cpp @@ -224,7 +224,7 @@ std::string platform::os_info() buf = ut.sysname; #if 0 // disable until this is integrated into LAMMPS and TextFileReader becomes available - if (utils::file_is_readable("/etc/os-release")) { + if (platform::file_is_readable("/etc/os-release")) { try { TextFileReader reader("/etc/os-release",""); while (1) { @@ -275,7 +275,6 @@ std::string platform::cxx_standard() std::string platform::compiler_info() { std::string buf = "(Unknown)"; -#if 0 // disable for now untile merged into LAMMPS and fmt:: becomes available #if defined(__INTEL_LLVM_COMPILER) double version = static_cast(__INTEL_LLVM_COMPILER)*0.01; buf = fmt::format("Intel LLVM C++ {:.1f} / {}", version, __VERSION__); @@ -304,7 +303,6 @@ std::string platform::compiler_info() buf = "Microsoft Visual Studio 20" + std::to_string(major) + ", C/C++ " + std::to_string(major-5) + "." + std::to_string(minor); #else buf = "(Unknown)"; -#endif #endif return buf; } @@ -543,9 +541,9 @@ void *platform::dlsym(void *handle, const std::string &symbol) /** On Linux the folder /proc/self/fd holds symbolic links to the actual * pathnames associated with each open file descriptor of the current process. - * On macOS the same kind of information can be obtained using ``fcntl(fd,F_GETPATH,buf)``. + * On MacOS the same kind of information can be obtained using ``fcntl(fd,F_GETPATH,buf)``. * On Windows we use ``GetFinalPathNameByHandleA()`` which is available with - * Windows Vista and later. If the buffer is to small (< 16 bytes) a null pointer is returned. + * Windows Vista and later. If the buffer is too small (< 16 bytes) a null pointer is returned. * * This function is used to provide a filename with error messages in functions * where the filename is not passed as an argument, but the FILE * pointer. */ diff --git a/src/platform.h b/src/platform.h index 5aeee1545e..1c4a659570 100644 --- a/src/platform.h +++ b/src/platform.h @@ -125,7 +125,7 @@ namespace platform { * after this call * * \param handle handle to an opened shared object - * \return 0 if succesful, non-zero of not */ + * \return 0 if successful, non-zero of not */ int dlclose(void *handle); @@ -158,7 +158,7 @@ namespace platform { /*! Try to detect pathname from FILE pointer. * - * Currently only supported on Linux and macOS, otherwise will report "(unknown)". + * Currently only supported on Linux and MacOS, otherwise will report "(unknown)". * * \param fp FILE pointer struct from STDIO library for which we want to detect the name * \param buf storage buffer for pathname. output will be truncated if not large enough @@ -193,7 +193,7 @@ namespace platform { * This provides a list of strings of the entries in the directory * without the leading path name while also skipping over ".." and ".". * - * \param path path to directory + * \param dir path to directory * \return vector with strings of all directory entries */ std::vector list_directory(const std::string &dir); @@ -203,7 +203,7 @@ namespace platform { * This function will traverse the list of directories in the PATH * environment variable and look for the executable *cmd*. If the * file exists and is executable the full path is returned as string, - * otherwise and emptry string is returned. + * otherwise and empty string is returned. * * On Windows the *cmd* string must not include and extension as * this function will automatically append the extensions ".exe", @@ -268,7 +268,7 @@ namespace platform { int fseek(FILE *fp, bigint pos); - /*! Truncate file to a given length and reposition file pointer + /*! Truncate file to a given length and re-position file pointer * * \param fp FILE pointer of the given file * \param length length to which the file is being truncated to diff --git a/src/pointers.h b/src/pointers.h index 4ae50715c1..55033aae3e 100644 --- a/src/pointers.h +++ b/src/pointers.h @@ -30,6 +30,7 @@ #include "lammps.h" // IWYU pragma: export #include "utils.h" // IWYU pragma: export #include "fmt/format.h" // IWYU pragma: export +#include "platform.h" // IWYU pragma: export namespace LAMMPS_NS { diff --git a/src/read_data.cpp b/src/read_data.cpp index 574117e93e..e9b222d6ef 100644 --- a/src/read_data.cpp +++ b/src/read_data.cpp @@ -308,7 +308,7 @@ void ReadData::command(int narg, char **arg) // check if data file is available and readable - if (!utils::file_is_readable(arg[0])) + if (!platform::file_is_readable(arg[0])) error->all(FLERR,fmt::format("Cannot open file {}: {}", arg[0], utils::getsyserror())); diff --git a/src/read_restart.cpp b/src/read_restart.cpp index bbd3bd3359..dd36175a90 100644 --- a/src/read_restart.cpp +++ b/src/read_restart.cpp @@ -540,8 +540,8 @@ std::string ReadRestart::file_search(const std::string &inpfile) { // separate inpfile into dir + filename - auto dirname = utils::path_dirname(inpfile); - auto filename = utils::path_basename(inpfile); + auto dirname = platform::path_dirname(inpfile); + auto filename = platform::path_basename(inpfile); // if filename contains "%" replace "%" with "base" @@ -574,7 +574,7 @@ std::string ReadRestart::file_search(const std::string &inpfile) if (maxnum < 0) error->one(FLERR,"Found no restart file matching pattern"); filename.replace(filename.find('*'),1,std::to_string(maxnum)); } - return utils::path_join(dirname,filename); + return platform::path_join(dirname,filename); } /* ---------------------------------------------------------------------- diff --git a/src/utils.cpp b/src/utils.cpp index 2feba5db97..55514fdd59 100644 --- a/src/utils.cpp +++ b/src/utils.cpp @@ -165,44 +165,6 @@ std::string utils::getsyserror() return std::string(strerror(errno)); } -/** On Linux the folder /proc/self/fd holds symbolic links to the actual - * pathnames associated with each open file descriptor of the current process. - * On MacOS the same kind of information can be obtained using ``fcntl(fd,F_GETPATH,buf)``. - * On Windows we use ``GetFinalPathNameByHandleA()`` which is available with - * Windows Vista and later. - * - * This function is used to provide a filename with error messages in functions - * where the filename is not passed as an argument, but the FILE * pointer. - */ -const char *utils::guesspath(char *buf, int len, FILE *fp) -{ - memset(buf, 0, len); - -#if defined(__linux__) - int fd = fileno(fp); - // get pathname from /proc or copy (unknown) - if (readlink(fmt::format("/proc/self/fd/{}", fd).c_str(), buf, len - 1) <= 0) - strncpy(buf, "(unknown)", len - 1); -#elif defined(__APPLE__) - int fd = fileno(fp); - char filepath[PATH_MAX]; - if (fcntl(fd, F_GETPATH, filepath) != -1) - strncpy(buf, filepath, len - 1); - else - strncpy(buf, "(unknown)", len - 1); -#elif defined(_WIN32) - char filepath[MAX_PATH]; - HANDLE h = (HANDLE) _get_osfhandle(_fileno(fp)); - if (GetFinalPathNameByHandleA(h, filepath, PATH_MAX, FILE_NAME_NORMALIZED) > 0) - strncpy(buf, filepath, len - 1); - else - strncpy(buf, "(unknown)", len - 1); -#else - strncpy(buf, "(unknown)", len - 1); -#endif - return buf; -} - // read line into buffer. if line is too long keep reading until EOL or EOF // but return only the first part with a newline at the end. @@ -256,7 +218,7 @@ void utils::sfgets(const char *srcname, int srcline, char *s, int size, FILE *fp std::string errmsg; // try to figure out the file name from the file pointer - if (!filename) filename = guesspath(buf, MAXPATHLENBUF, fp); + if (!filename) filename = platform::guesspath(fp, buf, MAXPATHLENBUF); if (feof(fp)) { errmsg = "Unexpected end of file while reading file '"; @@ -285,7 +247,7 @@ void utils::sfread(const char *srcname, int srcline, void *s, size_t size, size_ std::string errmsg; // try to figure out the file name from the file pointer - if (!filename) filename = guesspath(buf, MAXPATHLENBUF, fp); + if (!filename) filename = platform::guesspath(fp, buf, MAXPATHLENBUF); if (feof(fp)) { errmsg = "Unexpected end of file while reading file '"; @@ -920,7 +882,7 @@ size_t utils::count_words(const std::string &text, const std::string &separators size_t utils::trim_and_count_words(const std::string &text, const std::string &separators) { - return utils::count_words(utils::trim_comment(text), separators); + return utils::count_words(trim_comment(text), separators); } /* ---------------------------------------------------------------------- @@ -1065,71 +1027,6 @@ bool utils::is_id(const std::string &str) return true; } -/* ---------------------------------------------------------------------- - strip off leading part of path, return just the filename -------------------------------------------------------------------------- */ - -std::string utils::path_basename(const std::string &path) -{ -#if defined(_WIN32) - size_t start = path.find_last_of("/\\"); -#else - size_t start = path.find_last_of('/'); -#endif - - if (start == std::string::npos) { - start = 0; - } else { - start += 1; - } - - return path.substr(start); -} - -/* ---------------------------------------------------------------------- - Return only the leading part of a path, return just the directory -------------------------------------------------------------------------- */ - -std::string utils::path_dirname(const std::string &path) -{ -#if defined(_WIN32) - size_t start = path.find_last_of("/\\"); -#else - size_t start = path.find_last_of('/'); -#endif - - if (start == std::string::npos) return "."; - - return path.substr(0, start); -} - -/* ---------------------------------------------------------------------- - join two paths -------------------------------------------------------------------------- */ - -std::string utils::path_join(const std::string &a, const std::string &b) -{ -#if defined(_WIN32) - return fmt::format("{}\\{}", a, b); -#else - return fmt::format("{}/{}", a, b); -#endif -} - -/* ---------------------------------------------------------------------- - try to open file for reading -------------------------------------------------------------------------- */ - -bool utils::file_is_readable(const std::string &path) -{ - FILE *fp = fopen(path.c_str(), "r"); - if (fp) { - fclose(fp); - return true; - } - return false; -} - /* ---------------------------------------------------------------------- try to find potential file as specified by name search current directory and the LAMMPS_POTENTIALS directory if @@ -1139,9 +1036,9 @@ bool utils::file_is_readable(const std::string &path) std::string utils::get_potential_file_path(const std::string &path) { std::string filepath = path; - std::string filename = utils::path_basename(path); + std::string filename = platform::path_basename(path); - if (utils::file_is_readable(filepath)) { + if (platform::file_is_readable(filepath)) { return filepath; } else { // try the environment variable directory @@ -1154,11 +1051,11 @@ std::string utils::get_potential_file_path(const std::string &path) Tokenizer dirs(var, ":"); #endif while (dirs.has_next()) { - auto pot = utils::path_basename(filepath); + auto pot = platform::path_basename(filepath); auto dir = dirs.next(); - filepath = utils::path_join(dir, pot); + filepath = platform::path_join(dir, pot); - if (utils::file_is_readable(filepath)) { return filepath; } + if (platform::file_is_readable(filepath)) { return filepath; } } } } diff --git a/src/utils.h b/src/utils.h index 4dd4eea090..0437633ea6 100644 --- a/src/utils.h +++ b/src/utils.h @@ -417,49 +417,6 @@ namespace utils { bool is_id(const std::string &str); - /*! Try to detect pathname from FILE pointer. - * - * Currently supported on Linux, MacOS, and Windows, otherwise will report "(unknown)". - * - * \param buf storage buffer for pathname. output will be truncated if not large enough - * \param len size of storage buffer. output will be truncated to this length - 1 - * \param fp FILE pointer struct from STDIO library for which we want to detect the name - * \return pointer to the storage buffer, i.e. buf */ - - const char *guesspath(char *buf, int len, FILE *fp); - - /*! Strip off leading part of path, return just the filename - * - * \param path file path - * \return file name */ - - std::string path_basename(const std::string &path); - - /*! Return the directory part of a path. Return "." if empty - * - * \param path file path - * \return directory name */ - - std::string path_dirname(const std::string &path); - - /*! Join two pathname segments - * - * This uses the forward slash '/' character unless LAMMPS is compiled - * for Windows where it used the equivalent backward slash '\\'. - * - * \param a first path - * \param b second path - * \return combined path */ - - std::string path_join(const std::string &a, const std::string &b); - - /*! Check if file exists and is readable - * - * \param path file path - * \return true if file exists and is readable */ - - bool file_is_readable(const std::string &path); - /*! Determine full path of potential file. If file is not found in current directory, * search directories listed in LAMMPS_POTENTIALS environment variable * diff --git a/tools/lammps-shell/lammps-shell.cpp b/tools/lammps-shell/lammps-shell.cpp index 2ee62df920..76fa04d71a 100644 --- a/tools/lammps-shell/lammps-shell.cpp +++ b/tools/lammps-shell/lammps-shell.cpp @@ -6,6 +6,7 @@ // This software is distributed under the GNU General Public License. #include "library.h" +#include "platform.h" #include "utils.h" #include @@ -785,8 +786,8 @@ int main(int argc, char **argv) std::string input_file; if ((argc > 1) && (argv[1][0] != '-')) { --argc; - input_file = utils::path_basename(argv[1]); - chdir(utils::path_dirname(input_file).c_str()); + input_file = platform::path_basename(argv[1]); + chdir(platform::path_dirname(input_file).c_str()); for (int i = 1; i < argc; ++i) argv[i] = argv[i + 1]; } diff --git a/unittest/commands/test_groups.cpp b/unittest/commands/test_groups.cpp index e238e630d5..0c8a7cd83c 100644 --- a/unittest/commands/test_groups.cpp +++ b/unittest/commands/test_groups.cpp @@ -316,7 +316,7 @@ int main(int argc, char **argv) MPI_Init(&argc, &argv); ::testing::InitGoogleMock(&argc, argv); - if (Info::get_mpi_vendor() == "Open MPI" && !LAMMPS_NS::Info::has_exceptions()) + if (platform::mpi_vendor() == "Open MPI" && !LAMMPS_NS::Info::has_exceptions()) std::cout << "Warning: using OpenMPI without exceptions. " "Death tests will be skipped\n"; diff --git a/unittest/commands/test_kim_commands.cpp b/unittest/commands/test_kim_commands.cpp index a70176cc92..183d333ab4 100644 --- a/unittest/commands/test_kim_commands.cpp +++ b/unittest/commands/test_kim_commands.cpp @@ -684,7 +684,7 @@ int main(int argc, char **argv) MPI_Init(&argc, &argv); ::testing::InitGoogleMock(&argc, argv); - if (Info::get_mpi_vendor() == "Open MPI" && !LAMMPS_NS::Info::has_exceptions()) + if (platform::mpi_vendor() == "Open MPI" && !LAMMPS_NS::Info::has_exceptions()) std::cout << "Warning: using OpenMPI without exceptions. " "Death tests will be skipped\n"; diff --git a/unittest/commands/test_lattice_region.cpp b/unittest/commands/test_lattice_region.cpp index 5fbabcf173..47b69a15e0 100644 --- a/unittest/commands/test_lattice_region.cpp +++ b/unittest/commands/test_lattice_region.cpp @@ -20,7 +20,6 @@ #include "lammps.h" #include "lattice.h" #include "region.h" -#include "utils.h" #include "gmock/gmock.h" #include "gtest/gtest.h" @@ -631,7 +630,7 @@ int main(int argc, char **argv) MPI_Init(&argc, &argv); ::testing::InitGoogleMock(&argc, argv); - if (Info::get_mpi_vendor() == "Open MPI" && !LAMMPS_NS::Info::has_exceptions()) + if (platform::mpi_vendor() == "Open MPI" && !LAMMPS_NS::Info::has_exceptions()) std::cout << "Warning: using OpenMPI without exceptions. " "Death tests will be skipped\n"; diff --git a/unittest/commands/test_reset_ids.cpp b/unittest/commands/test_reset_ids.cpp index 221859e5c3..c67f90b341 100644 --- a/unittest/commands/test_reset_ids.cpp +++ b/unittest/commands/test_reset_ids.cpp @@ -686,7 +686,7 @@ int main(int argc, char **argv) MPI_Init(&argc, &argv); ::testing::InitGoogleMock(&argc, argv); - if (Info::get_mpi_vendor() == "Open MPI" && !LAMMPS_NS::Info::has_exceptions()) + if (platform::mpi_vendor() == "Open MPI" && !LAMMPS_NS::Info::has_exceptions()) std::cout << "Warning: using OpenMPI without exceptions. " "Death tests will be skipped\n"; diff --git a/unittest/commands/test_simple_commands.cpp b/unittest/commands/test_simple_commands.cpp index 31acf6d460..0ad47f4e96 100644 --- a/unittest/commands/test_simple_commands.cpp +++ b/unittest/commands/test_simple_commands.cpp @@ -20,7 +20,6 @@ #include "input.h" #include "output.h" #include "update.h" -#include "utils.h" #include "variable.h" #include "../testing/core.h" @@ -217,7 +216,7 @@ TEST_F(SimpleCommandsTest, Quit) TEST_FAILURE(".*ERROR: Expected integer .*", command("quit xxx");); // the following tests must be skipped with OpenMPI due to using threads - if (Info::get_mpi_vendor() == "Open MPI") GTEST_SKIP(); + if (platform::mpi_vendor() == "Open MPI") GTEST_SKIP(); ASSERT_EXIT(command("quit"), ExitedWithCode(0), ""); ASSERT_EXIT(command("quit 9"), ExitedWithCode(9), ""); } @@ -528,7 +527,7 @@ int main(int argc, char **argv) MPI_Init(&argc, &argv); ::testing::InitGoogleMock(&argc, argv); - if (Info::get_mpi_vendor() == "Open MPI" && !LAMMPS_NS::Info::has_exceptions()) + if (platform::mpi_vendor() == "Open MPI" && !LAMMPS_NS::Info::has_exceptions()) std::cout << "Warning: using OpenMPI without exceptions. " "Death tests will be skipped\n"; diff --git a/unittest/commands/test_variables.cpp b/unittest/commands/test_variables.cpp index 9d8932d0f0..4f603df5ac 100644 --- a/unittest/commands/test_variables.cpp +++ b/unittest/commands/test_variables.cpp @@ -517,7 +517,7 @@ int main(int argc, char **argv) MPI_Init(&argc, &argv); ::testing::InitGoogleMock(&argc, argv); - if (Info::get_mpi_vendor() == "Open MPI" && !LAMMPS_NS::Info::has_exceptions()) + if (platform::mpi_vendor() == "Open MPI" && !LAMMPS_NS::Info::has_exceptions()) std::cout << "Warning: using OpenMPI without exceptions. " "Death tests will be skipped\n"; diff --git a/unittest/cplusplus/test_error_class.cpp b/unittest/cplusplus/test_error_class.cpp index 489b085b1b..f4f0d3b28b 100644 --- a/unittest/cplusplus/test_error_class.cpp +++ b/unittest/cplusplus/test_error_class.cpp @@ -128,7 +128,7 @@ int main(int argc, char **argv) MPI_Init(&argc, &argv); ::testing::InitGoogleMock(&argc, argv); - if (Info::get_mpi_vendor() == "Open MPI" && !LAMMPS_NS::Info::has_exceptions()) + if (platform::mpi_vendor() == "Open MPI" && !LAMMPS_NS::Info::has_exceptions()) std::cout << "Warning: using OpenMPI without exceptions. " "Death tests will be skipped\n"; diff --git a/unittest/cplusplus/test_lammps_class.cpp b/unittest/cplusplus/test_lammps_class.cpp index d25b232fa7..fa7f6b30a9 100644 --- a/unittest/cplusplus/test_lammps_class.cpp +++ b/unittest/cplusplus/test_lammps_class.cpp @@ -325,7 +325,7 @@ TEST_F(LAMMPS_kokkos, InitMembers) TEST(LAMMPS_init, OpenMP) { if (!LAMMPS::is_installed_pkg("OPENMP")) GTEST_SKIP(); - if (Info::get_openmp_info() == "OpenMP not enabled") GTEST_SKIP(); + if (platform::openmp_standard() == "OpenMP not enabled") GTEST_SKIP(); FILE *fp = fopen("in.lammps_empty", "w"); fputs("\n", fp); diff --git a/unittest/formats/test_file_operations.cpp b/unittest/formats/test_file_operations.cpp index 08baed2e54..bb26dff391 100644 --- a/unittest/formats/test_file_operations.cpp +++ b/unittest/formats/test_file_operations.cpp @@ -491,7 +491,7 @@ int main(int argc, char **argv) MPI_Init(&argc, &argv); ::testing::InitGoogleMock(&argc, argv); - if (Info::get_mpi_vendor() == "Open MPI" && !LAMMPS_NS::Info::has_exceptions()) + if (platform::mpi_vendor() == "Open MPI" && !LAMMPS_NS::Info::has_exceptions()) std::cout << "Warning: using OpenMPI without exceptions. " "Death tests will be skipped\n"; diff --git a/unittest/formats/test_molecule_file.cpp b/unittest/formats/test_molecule_file.cpp index 5a3e3ca750..2cca7a6832 100644 --- a/unittest/formats/test_molecule_file.cpp +++ b/unittest/formats/test_molecule_file.cpp @@ -17,7 +17,6 @@ #include "input.h" #include "lammps.h" #include "molecule.h" -#include "utils.h" #include "gmock/gmock.h" #include "gtest/gtest.h" @@ -257,7 +256,7 @@ int main(int argc, char **argv) MPI_Init(&argc, &argv); ::testing::InitGoogleMock(&argc, argv); - if (Info::get_mpi_vendor() == "Open MPI" && !LAMMPS_NS::Info::has_exceptions()) + if (platform::mpi_vendor() == "Open MPI" && !LAMMPS_NS::Info::has_exceptions()) std::cout << "Warning: using OpenMPI without exceptions. " "Death tests will be skipped\n"; diff --git a/unittest/formats/test_potential_file_reader.cpp b/unittest/formats/test_potential_file_reader.cpp index 5f7148b7e4..7cd61d25a4 100644 --- a/unittest/formats/test_potential_file_reader.cpp +++ b/unittest/formats/test_potential_file_reader.cpp @@ -326,7 +326,7 @@ int main(int argc, char **argv) MPI_Init(&argc, &argv); ::testing::InitGoogleMock(&argc, argv); - if (Info::get_mpi_vendor() == "Open MPI" && !LAMMPS_NS::Info::has_exceptions()) + if (platform::mpi_vendor() == "Open MPI" && !LAMMPS_NS::Info::has_exceptions()) std::cout << "Warning: using OpenMPI without exceptions. " "Death tests will be skipped\n"; diff --git a/unittest/formats/test_text_file_reader.cpp b/unittest/formats/test_text_file_reader.cpp index 4e1f608d25..f0f695ae54 100644 --- a/unittest/formats/test_text_file_reader.cpp +++ b/unittest/formats/test_text_file_reader.cpp @@ -160,7 +160,7 @@ int main(int argc, char **argv) MPI_Init(&argc, &argv); ::testing::InitGoogleMock(&argc, argv); - if (Info::get_mpi_vendor() == "Open MPI" && !LAMMPS_NS::Info::has_exceptions()) + if (platform::mpi_vendor() == "Open MPI" && !LAMMPS_NS::Info::has_exceptions()) std::cout << "Warning: using OpenMPI without exceptions. " "Death tests will be skipped\n"; diff --git a/unittest/testing/core.h b/unittest/testing/core.h index 6867d88587..c922e96cc0 100644 --- a/unittest/testing/core.h +++ b/unittest/testing/core.h @@ -17,6 +17,7 @@ #include "info.h" #include "input.h" #include "lammps.h" +#include "platform.h" #include "variable.h" #include "gmock/gmock.h" #include "gtest/gtest.h" @@ -36,7 +37,7 @@ using ::testing::MatchesRegex; auto mesg = ::testing::internal::GetCapturedStdout(); \ ASSERT_THAT(mesg, MatchesRegex(errmsg)); \ } else { \ - if (Info::get_mpi_vendor() != "Open MPI") { \ + if (platform::mpi_vendor() != "Open MPI") { \ ::testing::internal::CaptureStdout(); \ ASSERT_DEATH({__VA_ARGS__}, ""); \ auto mesg = ::testing::internal::GetCapturedStdout(); \ diff --git a/unittest/utils/test_utils.cpp b/unittest/utils/test_utils.cpp index e0bc4984cc..b2c688cd59 100644 --- a/unittest/utils/test_utils.cpp +++ b/unittest/utils/test_utils.cpp @@ -13,14 +13,12 @@ #include "lmptype.h" #include "pointers.h" -#include "utils.h" #include "tokenizer.h" #include "gmock/gmock.h" #include "gtest/gtest.h" #include -#include #include #include @@ -721,54 +719,6 @@ TEST(Utils, boundsbig_case3) ASSERT_EQ(nhi, -1); } -TEST(Utils, guesspath) -{ - char buf[256]; - FILE *fp = fopen("test_guesspath.txt", "w"); -#if defined(__linux__) || defined(__APPLE__) || defined(_WIN32) - const char *path = utils::guesspath(buf, sizeof(buf), fp); - ASSERT_THAT(path, EndsWith("test_guesspath.txt")); -#else - const char *path = utils::guesspath(buf, sizeof(buf), fp); - ASSERT_THAT(path, EndsWith("(unknown)")); -#endif - fclose(fp); -} - -TEST(Utils, path_join) -{ -#if defined(_WIN32) - ASSERT_THAT(utils::path_join("c:\\parent\\folder", "filename"), - Eq("c:\\parent\\folder\\filename")); -#else - ASSERT_THAT(utils::path_join("/parent/folder", "filename"), Eq("/parent/folder/filename")); -#endif -} - -TEST(Utils, path_basename) -{ -#if defined(_WIN32) - ASSERT_THAT(utils::path_basename("c:\\parent\\folder\\filename"), Eq("filename")); - ASSERT_THAT(utils::path_basename("folder\\"), Eq("")); - ASSERT_THAT(utils::path_basename("c:/parent/folder/filename"), Eq("filename")); -#else - ASSERT_THAT(utils::path_basename("/parent/folder/filename"), Eq("filename")); - ASSERT_THAT(utils::path_basename("/parent/folder/"), Eq("")); -#endif -} - -TEST(Utils, path_dirname) -{ -#if defined(_WIN32) - ASSERT_THAT(utils::path_dirname("c:/parent/folder/filename"), Eq("c:/parent/folder")); - ASSERT_THAT(utils::path_dirname("c:\\parent\\folder\\filename"), Eq("c:\\parent\\folder")); - ASSERT_THAT(utils::path_dirname("c:filename"), Eq(".")); -#else - ASSERT_THAT(utils::path_dirname("/parent/folder/filename"), Eq("/parent/folder")); -#endif - ASSERT_THAT(utils::path_dirname("filename"), Eq(".")); -} - TEST(Utils, getsyserror) { #if defined(__linux__) @@ -792,16 +742,16 @@ TEST(Utils, potential_file) fputs("# CONTRIBUTOR: Pippo\n", fp); fclose(fp); - ASSERT_TRUE(utils::file_is_readable("ctest1.txt")); - ASSERT_TRUE(utils::file_is_readable("ctest2.txt")); - ASSERT_FALSE(utils::file_is_readable("no_such_file.txt")); + ASSERT_TRUE(platform::file_is_readable("ctest1.txt")); + ASSERT_TRUE(platform::file_is_readable("ctest2.txt")); + ASSERT_FALSE(platform::file_is_readable("no_such_file.txt")); ASSERT_THAT(utils::get_potential_file_path("ctest1.txt"), Eq("ctest1.txt")); ASSERT_THAT(utils::get_potential_file_path("no_such_file.txt"), Eq("")); const char *folder = getenv("LAMMPS_POTENTIALS"); if (folder != nullptr) { - std::string path = utils::path_join(folder, "Cu_u3.eam"); + std::string path = platform::path_join(folder, "Cu_u3.eam"); EXPECT_THAT(utils::get_potential_file_path("Cu_u3.eam"), Eq(path)); EXPECT_THAT(utils::get_potential_units(path, "EAM"), Eq("metal")); } From 2dcaa47b0ef1f12a947cbc3ed728e4c881d41139 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sat, 2 Oct 2021 16:32:58 -0400 Subject: [PATCH 050/372] unfreeze versions of python packages used to build the documentation --- doc/utils/requirements.txt | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/doc/utils/requirements.txt b/doc/utils/requirements.txt index f367727d20..9b8e106875 100644 --- a/doc/utils/requirements.txt +++ b/doc/utils/requirements.txt @@ -1,7 +1,7 @@ -Sphinx==4.0.3 -sphinxcontrib-spelling==7.2.1 +Sphinx +sphinxcontrib-spelling git+git://github.com/akohlmey/sphinx-fortran@parallel-read -sphinx_tabs==3.2.0 -breathe==4.31.0 -Pygments==2.10.0 -six==1.16.0 +sphinx_tabs +breathe +Pygments +six From c6bdab8b4c480dcb4ed8a6c2d09df4ae6cb97643 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sat, 2 Oct 2021 17:29:05 -0400 Subject: [PATCH 051/372] disable optimization of cputime function for MSVC++ to avoid bogus 0s reports --- src/platform.cpp | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/platform.cpp b/src/platform.cpp index 3dd08d46ce..530ec8fabf 100644 --- a/src/platform.cpp +++ b/src/platform.cpp @@ -112,6 +112,8 @@ using namespace LAMMPS_NS; // clang compilers are optimizing this function too aggressively returning always 0 #if defined(__clang__) [[clang::optnone]] +#elif defined(_MSC_VER) +#pragma optimize("",off) #endif double platform::cputime() // clang-format on @@ -143,6 +145,9 @@ double platform::cputime() return rv; } +#if defined(_MSC_VER) +#pragma optimize("",on) +#endif /* ---------------------------------------------------------------------- get wall time From dcaed72b6de2721a4b15a71015e8c48874c5acea Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sat, 2 Oct 2021 17:29:12 -0400 Subject: [PATCH 052/372] update embedded docs --- src/platform.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/platform.h b/src/platform.h index 1c4a659570..461b8f75b0 100644 --- a/src/platform.h +++ b/src/platform.h @@ -26,7 +26,7 @@ namespace platform { /*! Return the consumed CPU time for the current process in seconds * - * This is a wrapper about the POSIX function getrusage() and the Windows equivalent. + * This is a wrapper around the POSIX function getrusage() and its Windows equivalent. * It is to be used in a similar fashion than MPI_Wtime(). * * \return used CPU time in second */ @@ -35,7 +35,7 @@ namespace platform { /*! Return the wall clock state for the current process in seconds * - * This is a wrapper about XXX and its Windows equivalent. + * This is a wrapper around the gettimeofday() function and its Windows equivalent. * It is to be used in a similar fashion than MPI_Wtime(). * * \return wall clock time in second */ From 69a8dfe4d97b60fbf429673ed4f99497139cbb5b Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sat, 2 Oct 2021 18:12:32 -0400 Subject: [PATCH 053/372] whitespace --- doc/src/Developer_platform.rst | 2 +- src/platform.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/doc/src/Developer_platform.rst b/doc/src/Developer_platform.rst index dc482cb27a..a31e9d1c72 100644 --- a/doc/src/Developer_platform.rst +++ b/doc/src/Developer_platform.rst @@ -114,7 +114,7 @@ Environment variable functions .. doxygenfunction:: find_exe_path :project: progguide - + Dynamically loaded object or library functions ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ diff --git a/src/platform.h b/src/platform.h index 461b8f75b0..55131ec803 100644 --- a/src/platform.h +++ b/src/platform.h @@ -242,7 +242,7 @@ namespace platform { /*! Delete a directory and its contents * - * Unlike the the ``rmdir()`` or ``_rmdir()`` function of the + * Unlike the the ``rmdir()`` or ``_rmdir()`` function of the * C library, this function will check for the contents of the * folder and recurse into any sub-folders, if necessary and * delete all contained folders and their contents before From a6aa3fd3ee8399b00bef434f8ef56cd78bbaa5cf Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sat, 2 Oct 2021 18:26:46 -0400 Subject: [PATCH 054/372] apply clang-format --- src/platform.cpp | 23 ++++++++++++----------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/src/platform.cpp b/src/platform.cpp index 530ec8fabf..ed007e089a 100644 --- a/src/platform.cpp +++ b/src/platform.cpp @@ -146,7 +146,7 @@ double platform::cputime() return rv; } #if defined(_MSC_VER) -#pragma optimize("",on) +#pragma optimize("", on) #endif /* ---------------------------------------------------------------------- @@ -281,19 +281,19 @@ std::string platform::compiler_info() { std::string buf = "(Unknown)"; #if defined(__INTEL_LLVM_COMPILER) - double version = static_cast(__INTEL_LLVM_COMPILER)*0.01; + double version = static_cast(__INTEL_LLVM_COMPILER) * 0.01; buf = fmt::format("Intel LLVM C++ {:.1f} / {}", version, __VERSION__); #elif defined(__ibmxl__) - buf = fmt::format("IBM XL C/C++ (Clang) {}.{}.{}", - __ibmxl_version__, __ibmxl_release__, __ibmxl_modification__); + buf = fmt::format("IBM XL C/C++ (Clang) {}.{}.{}", __ibmxl_version__, __ibmxl_release__, + __ibmxl_modification__); #elif defined(__clang__) buf = fmt::format("Clang C++ {}", __VERSION__); #elif defined(__PGI) - buf = fmt::format("PGI C++ {}.{}",__PGIC__,__PGIC_MINOR__); + buf = fmt::format("PGI C++ {}.{}", __PGIC__, __PGIC_MINOR__); #elif defined(__INTEL_COMPILER) - double version = static_cast(__INTEL_COMPILER)*0.01; - buf = fmt::format("Intel Classic C++ {:.2f}.{} / {}", version, - __INTEL_COMPILER_UPDATE, __VERSION__); + double version = static_cast(__INTEL_COMPILER) * 0.01; + buf = fmt::format("Intel Classic C++ {:.2f}.{} / {}", version, __INTEL_COMPILER_UPDATE, + __VERSION__); #elif defined(__MINGW64__) buf = fmt::format("MinGW-w64 64bit {}.{} / GNU C++ {}", __MINGW64_VERSION_MAJOR, __MINGW64_VERSION_MINOR, __VERSION__); @@ -301,11 +301,12 @@ std::string platform::compiler_info() buf = fmt::format("MinGW-w64 32bit {}.{} / GNU C++ {}", __MINGW32_MAJOR_VERSION, __MINGW32_MINOR_VERSION, __VERSION__); #elif defined(__GNUC__) - buf = fmt::format("GNU C++ {}", __VERSION__); + buf = fmt::format("GNU C++ {}", __VERSION__); #elif defined(_MSC_VER) && (_MSC_VER > 1920) && (_MSC_VER < 2000) constexpr int major = _MSC_VER / 100; - constexpr int minor = _MSC_VER - major *100; - buf = "Microsoft Visual Studio 20" + std::to_string(major) + ", C/C++ " + std::to_string(major-5) + "." + std::to_string(minor); + constexpr int minor = _MSC_VER - major * 100; + buf = "Microsoft Visual Studio 20" + std::to_string(major) + ", C/C++ " + + std::to_string(major - 5) + "." + std::to_string(minor); #else buf = "(Unknown)"; #endif From 7110e1c15e73fff6d38faa83faf1abf95d66cb3f Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sat, 2 Oct 2021 18:28:33 -0400 Subject: [PATCH 055/372] small format tweaks - brief description should not end in a dot as it becomes a title line - add empty line to separate title from body of description - revert order of file/path separator constants so that the Linux version shows up in doxygen --- src/platform.h | 56 +++++++++++++++++++++++++++----------------------- 1 file changed, 30 insertions(+), 26 deletions(-) diff --git a/src/platform.h b/src/platform.h index 55131ec803..b7c5d28561 100644 --- a/src/platform.h +++ b/src/platform.h @@ -42,7 +42,7 @@ namespace platform { double walltime(); - /*! Return string with the Operating system version and architecture info. + /*! Return string with the operating system version and architecture info * * \return string with info about the OS and the platform is is running on */ @@ -120,6 +120,7 @@ namespace platform { void *dlopen(const std::string &fname); /*! Close a shared object + * * This releases the object corresponding to the provided handle. * Resolved symbols associated with this handle may not be used * after this call @@ -137,28 +138,30 @@ namespace platform { void *dlsym(void *handle, const std::string &symbol); - /*! File path component separators - * These are the characters that separate directories and filename in paths on - * a platform. If multiple are provided, the first is the preferred one. */ - -#if defined(_WIN32) - constexpr char filepathsep[] = "\\/"; -#else - constexpr char filepathsep[] = "/"; -#endif - - /*! Path environment variable component separator - * This is the character that separates entries in "PATH" environment variables. */ - -#if defined(_WIN32) - constexpr char pathvarsep = ';'; -#else - constexpr char pathvarsep = ':'; -#endif - - /*! Try to detect pathname from FILE pointer. + /*! Platform specific file path component separator * - * Currently only supported on Linux and MacOS, otherwise will report "(unknown)". + * This is a string with the character that separates directories and filename in paths on + * a platform. If multiple are characters are provided, the first is the preferred one. */ + +#if !defined(_WIN32) + constexpr char filepathsep[] = "/"; +#else + constexpr char filepathsep[] = "\\/"; +#endif + + /*! Platform specific path environment variable component separator + * + * This is the character that separates entries in "PATH"-style environment variables. */ + +#if !defined(_WIN32) + constexpr char pathvarsep = ':'; +#else + constexpr char pathvarsep = ';'; +#endif + + /*! Try to detect pathname from FILE pointer + * + * Currently only supported on Linux, MacOS, and Windows. Otherwise will report "(unknown)". * * \param fp FILE pointer struct from STDIO library for which we want to detect the name * \param buf storage buffer for pathname. output will be truncated if not large enough @@ -308,7 +311,7 @@ namespace platform { /*! Join two pathname segments * * This uses the forward slash '/' character unless LAMMPS is compiled - * for Windows where it used the equivalent backward slash '\\'. + * for Windows where it uses the backward slash '\\' * * \param a first path * \param b second path @@ -324,21 +327,22 @@ namespace platform { bool file_is_readable(const std::string &path); /*! Check if a file name ends in a known extension for a compressed file format - * Currently supported extensions are: .Z, .gz, .bz2, .zstd, .xz, .lzma + * + * Currently supported file extensions are: .gz, .bz2, .zstd, .xz, .lzma, lz4 * * \param file name of the file to check * \return true if the file has a known extension, otherwise false */ bool has_zip_extension(const std::string &file); - /*! Open pipe to compressed text file for reading. + /*! Open pipe to compressed text file for reading * * \param file name of the file to open * \return FILE pointer to pipe using for reading the compressed file. */ FILE *zip_read(const std::string &file); - /*! Open pipe to compressed text file for writing. + /*! Open pipe to compressed text file for writing * * \param file name of the file to open * \return FILE pointer to pipe using for reading the compressed file. */ From c341c2c6a93507f94e1f714461c553b138f19f51 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sat, 2 Oct 2021 20:00:53 -0400 Subject: [PATCH 056/372] correct platform call in kim query command --- src/KIM/kim_query.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/KIM/kim_query.cpp b/src/KIM/kim_query.cpp index c1669650cc..3e891468a6 100644 --- a/src/KIM/kim_query.cpp +++ b/src/KIM/kim_query.cpp @@ -377,7 +377,7 @@ char *do_query(const std::string &qfunction, const std::string &mname, } auto user_agent = fmt::format("kim query--LAMMPS/{} ({})", - LAMMPS_VERSION, Info::get_os_info()); + LAMMPS_VERSION, platform::os_info()); curl_easy_setopt(handle, CURLOPT_USERAGENT, user_agent.c_str()); curl_easy_setopt(handle, CURLOPT_URL, url.c_str()); From 03f7bf66499538b764cb4cf79706093dc0d50517 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sat, 2 Oct 2021 22:44:29 -0400 Subject: [PATCH 057/372] update eigen3 to the latest release and move download to our own server --- cmake/Modules/Packages/MACHDYN.cmake | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/cmake/Modules/Packages/MACHDYN.cmake b/cmake/Modules/Packages/MACHDYN.cmake index fab532541e..8729d80dbf 100644 --- a/cmake/Modules/Packages/MACHDYN.cmake +++ b/cmake/Modules/Packages/MACHDYN.cmake @@ -7,8 +7,9 @@ endif() option(DOWNLOAD_EIGEN3 "Download Eigen3 instead of using an already installed one)" ${DOWNLOAD_EIGEN3_DEFAULT}) if(DOWNLOAD_EIGEN3) message(STATUS "Eigen3 download requested - we will build our own") - set(EIGEN3_URL "https://gitlab.com/libeigen/eigen/-/archive/3.3.9/eigen-3.3.9.tar.gz" CACHE STRING "URL for Eigen3 tarball") - set(EIGEN3_MD5 "609286804b0f79be622ccf7f9ff2b660" CACHE STRING "MD5 checksum of Eigen3 tarball") + + set(EIGEN3_URL "https://download.lammps.org/thirdparty/eigen-3.4.0.tar.gz" CACHE STRING "URL for Eigen3 tarball") + set(EIGEN3_MD5 "4c527a9171d71a72a9d4186e65bea559" CACHE STRING "MD5 checksum of Eigen3 tarball") mark_as_advanced(EIGEN3_URL) mark_as_advanced(EIGEN3_MD5) include(ExternalProject) From dd2b5b22d4aa867314174bd4e806dcee1f454d40 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Mon, 4 Oct 2021 17:22:58 -0400 Subject: [PATCH 058/372] fix saed/vtk does not use the overwrite option anywhere --- doc/src/fix_saed_vtk.rst | 5 -- src/DIFFRACTION/fix_saed_vtk.cpp | 107 ++++++++++++++----------------- src/DIFFRACTION/fix_saed_vtk.h | 2 - 3 files changed, 49 insertions(+), 65 deletions(-) diff --git a/doc/src/fix_saed_vtk.rst b/doc/src/fix_saed_vtk.rst index a9e8f154e6..dd5db32966 100644 --- a/doc/src/fix_saed_vtk.rst +++ b/doc/src/fix_saed_vtk.rst @@ -28,7 +28,6 @@ Syntax Nstart = start averaging on this timestep *file* arg = filename filename = name of file to output time averages to - *overwrite* arg = none = overwrite output file with only latest output Examples """""""" @@ -161,10 +160,6 @@ the *file* keyword and this string is appended with _N.vtk where N is an index (0,1,2...) to account for situations with multiple diffraction intensity outputs. -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. - Restart, fix_modify, output, run start/stop, minimize info """"""""""""""""""""""""""""""""""""""""""""""""""""""""""" diff --git a/src/DIFFRACTION/fix_saed_vtk.cpp b/src/DIFFRACTION/fix_saed_vtk.cpp index 2e7d0897a6..89627b64ef 100644 --- a/src/DIFFRACTION/fix_saed_vtk.cpp +++ b/src/DIFFRACTION/fix_saed_vtk.cpp @@ -31,6 +31,7 @@ #include #include + using namespace LAMMPS_NS; using namespace FixConst; @@ -100,8 +101,6 @@ FixSAEDVTK::FixSAEDVTK(LAMMPS *lmp, int narg, char **arg) : error->all(FLERR,"Illegal fix saed/vtk command"); if (nfreq % nevery || nrepeat*nevery > nfreq) error->all(FLERR,"Illegal fix saed/vtk command"); - if (ave != RUNNING && overwrite) - error->all(FLERR,"Illegal fix saed/vtk command"); // allocate memory for averaging @@ -315,7 +314,7 @@ void FixSAEDVTK::invoke_vector(bigint ntimestep) if (irepeat == 0) for (int i = 0; i < nrows; i++) - vector[i] = 0.0; + vector[i] = 0.0; // accumulate results of computes,fixes,variables to local copy // compute/fix/variable may invoke computes so wrap with clear/add @@ -369,7 +368,7 @@ void FixSAEDVTK::invoke_vector(bigint ntimestep) for (int i = 0; i < nrows; i++) { vector_total[i] += vector[i]; if (window_limit) vector_total[i] -= vector_list[iwindow][i]; - vector_list[iwindow][i] = vector[i]; + vector_list[iwindow][i] = vector[i]; } iwindow++; @@ -391,8 +390,7 @@ void FixSAEDVTK::invoke_vector(bigint ntimestep) fp = fopen(nName.c_str(),"w"); if (fp == nullptr) - error->one(FLERR,"Cannot open fix saed/vtk file {}: {}", - nName,utils::getsyserror()); + error->one(FLERR,"Cannot open fix saed/vtk file {}: {}", nName,utils::getsyserror()); } fprintf(fp,"# vtk DataFile Version 3.0 c_%s\n",ids); @@ -406,71 +404,68 @@ void FixSAEDVTK::invoke_vector(bigint ntimestep) fprintf(fp,"SCALARS intensity float\n"); fprintf(fp,"LOOKUP_TABLE default\n"); - filepos = ftell(fp); - if (overwrite) fseek(fp,filepos,SEEK_SET); + // Finding the intersection of the reciprical space and Ewald sphere + int NROW1 = 0; + int NROW2 = 0; + double dinv2 = 0.0; + double r = 0.0; + double K[3]; - // Finding the intersection of the reciprical space and Ewald sphere - int NROW1 = 0; - int NROW2 = 0; - double dinv2 = 0.0; - double r = 0.0; - double K[3]; - - // Zone flag to capture entire recrocal space volume - if ((Zone[0] == 0) && (Zone[1] == 0) && (Zone[2] == 0)) { - for (int k = Knmin[2]; k <= Knmax[2]; k++) { - for (int j = Knmin[1]; j <= Knmax[1]; j++) { - for (int i = Knmin[0]; i <= Knmax[0]; i++) { - K[0] = i * dK[0]; - K[1] = j * dK[1]; - K[2] = k * dK[2]; - dinv2 = (K[0] * K[0] + K[1] * K[1] + K[2] * K[2]); - if (dinv2 < Kmax * Kmax) { - fprintf(fp,"%g\n",vector_total[NROW1]/norm); - fflush(fp); - NROW1++; - NROW2++; - } else { + // Zone flag to capture entire recrocal space volume + if ((Zone[0] == 0) && (Zone[1] == 0) && (Zone[2] == 0)) { + for (int k = Knmin[2]; k <= Knmax[2]; k++) { + for (int j = Knmin[1]; j <= Knmax[1]; j++) { + for (int i = Knmin[0]; i <= Knmax[0]; i++) { + K[0] = i * dK[0]; + K[1] = j * dK[1]; + K[2] = k * dK[2]; + dinv2 = (K[0] * K[0] + K[1] * K[1] + K[2] * K[2]); + if (dinv2 < Kmax * Kmax) { + fprintf(fp,"%g\n",vector_total[NROW1]/norm); + fflush(fp); + NROW1++; + NROW2++; + } else { fprintf(fp,"%d\n",-1); fflush(fp); NROW2++; - } } } } - } else { - for (int k = Knmin[2]; k <= Knmax[2]; k++) { - for (int j = Knmin[1]; j <= Knmax[1]; j++) { - for (int i = Knmin[0]; i <= Knmax[0]; i++) { - K[0] = i * dK[0]; - K[1] = j * dK[1]; - K[2] = k * dK[2]; - dinv2 = (K[0] * K[0] + K[1] * K[1] + K[2] * K[2]); - if (dinv2 < Kmax * Kmax) { - r=0.0; - for (int m=0; m<3; m++) r += pow(K[m] - Zone[m],2.0); - r = sqrt(r); - if ( (r > (R_Ewald - dR_Ewald) ) && (r < (R_Ewald + dR_Ewald) )) { - fprintf(fp,"%g\n",vector_total[NROW1]/norm); - fflush(fp); - NROW2++; - NROW1++; - } else { - fprintf(fp,"%d\n",-1); - fflush(fp); - NROW2++; - } + } + } else { + for (int k = Knmin[2]; k <= Knmax[2]; k++) { + for (int j = Knmin[1]; j <= Knmax[1]; j++) { + for (int i = Knmin[0]; i <= Knmax[0]; i++) { + K[0] = i * dK[0]; + K[1] = j * dK[1]; + K[2] = k * dK[2]; + dinv2 = (K[0] * K[0] + K[1] * K[1] + K[2] * K[2]); + if (dinv2 < Kmax * Kmax) { + r=0.0; + for (int m=0; m<3; m++) r += pow(K[m] - Zone[m],2.0); + r = sqrt(r); + if ( (r > (R_Ewald - dR_Ewald) ) && (r < (R_Ewald + dR_Ewald) )) { + fprintf(fp,"%g\n",vector_total[NROW1]/norm); + fflush(fp); + NROW2++; + NROW1++; } else { + fprintf(fp,"%d\n",-1); + fflush(fp); + NROW2++; + } + } else { fprintf(fp,"%d\n",-1); fflush(fp); NROW2++; - } } } } } } + } nOutput++; } @@ -497,7 +492,6 @@ void FixSAEDVTK::options(int narg, char **arg) fp = nullptr; ave = ONE; startstep = 0; - overwrite = 0; // optional args int iarg = 7; @@ -534,9 +528,6 @@ void FixSAEDVTK::options(int narg, char **arg) if (iarg+2 > narg) error->all(FLERR,"Illegal fix saed/vtk command"); startstep = utils::inumeric(FLERR,arg[iarg+1],false,lmp); iarg += 2; - } else if (strcmp(arg[iarg],"overwrite") == 0) { - overwrite = 1; - iarg += 1; } else error->all(FLERR,"Illegal fix saed/vtk command"); } } diff --git a/src/DIFFRACTION/fix_saed_vtk.h b/src/DIFFRACTION/fix_saed_vtk.h index 07aebce63d..a5691ea986 100644 --- a/src/DIFFRACTION/fix_saed_vtk.h +++ b/src/DIFFRACTION/fix_saed_vtk.h @@ -43,8 +43,6 @@ class FixSAEDVTK : public Fix { int nrows; int ave, nwindow, nsum, startstep; - int overwrite; - long filepos; int norm, iwindow, window_limit; double *vector; From 7cdd82dee29d7675819b9b9e65eb3231c3812895 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Mon, 4 Oct 2021 18:13:46 -0400 Subject: [PATCH 059/372] use platform functions for averaging fixes --- src/EXTRA-FIX/fix_ave_correlate_long.cpp | 25 +++++------ src/EXTRA-FIX/fix_ave_correlate_long.h | 2 +- src/fix_ave_chunk.cpp | 39 ++++++++-------- src/fix_ave_chunk.h | 2 +- src/fix_ave_correlate.cpp | 35 +++++++-------- src/fix_ave_correlate.h | 2 +- src/fix_ave_histo.cpp | 43 +++++++++--------- src/fix_ave_histo.h | 2 +- src/fix_ave_histo_weight.cpp | 10 ++--- src/fix_ave_time.cpp | 57 ++++++++++++------------ src/fix_ave_time.h | 2 +- 11 files changed, 106 insertions(+), 113 deletions(-) diff --git a/src/EXTRA-FIX/fix_ave_correlate_long.cpp b/src/EXTRA-FIX/fix_ave_correlate_long.cpp index 6e4e26754f..1746c7f6f5 100644 --- a/src/EXTRA-FIX/fix_ave_correlate_long.cpp +++ b/src/EXTRA-FIX/fix_ave_correlate_long.cpp @@ -36,7 +36,6 @@ #include #include -#include using namespace LAMMPS_NS; using namespace FixConst; @@ -260,11 +259,11 @@ FixAveCorrelateLong::FixAveCorrelateLong(LAMMPS * lmp, int narg, char **arg): fprintf(fp," %s*%s",arg[5+i],arg[5+j]); fprintf(fp,"\n"); } - filepos = ftell(fp); + filepos = platform::ftell(fp); } - delete [] title1; - delete [] title2; + delete[] title1; + delete[] title2; // allocate and initialize memory for calculated values and correlators @@ -319,11 +318,11 @@ FixAveCorrelateLong::FixAveCorrelateLong(LAMMPS * lmp, int narg, char **arg): FixAveCorrelateLong::~FixAveCorrelateLong() { - delete [] which; - delete [] argindex; - delete [] value2index; - for (int i = 0; i < nvalues; i++) delete [] ids[i]; - delete [] ids; + delete[] which; + delete[] argindex; + delete[] value2index; + for (int i = 0; i < nvalues; i++) delete[] ids[i]; + delete[] ids; memory->destroy(values); memory->destroy(shift); @@ -467,7 +466,7 @@ void FixAveCorrelateLong::end_of_step() evaluate(); if (fp && me == 0) { - if (overwrite) fseek(fp,filepos,SEEK_SET); + if (overwrite) platform::fseek(fp,filepos); fprintf(fp,"# Timestep: " BIGINT_FORMAT "\n", ntimestep); for (unsigned int i=0;idt*nevery); @@ -478,9 +477,9 @@ void FixAveCorrelateLong::end_of_step() } fflush(fp); if (overwrite) { - long fileend = ftell(fp); - if ((fileend > 0) && (ftruncate(fileno(fp),fileend))) - perror("Error while tuncating output"); + bigint fileend = platform::ftell(fp); + if ((fileend > 0) && (platform::ftruncate(fp,fileend))) + error->warning(FLERR,"Error while tuncating output: {}", utils::getsyserror()); } } diff --git a/src/EXTRA-FIX/fix_ave_correlate_long.h b/src/EXTRA-FIX/fix_ave_correlate_long.h index b62c6aefcb..a31ae78217 100644 --- a/src/EXTRA-FIX/fix_ave_correlate_long.h +++ b/src/EXTRA-FIX/fix_ave_correlate_long.h @@ -66,7 +66,7 @@ class FixAveCorrelateLong : public Fix { FILE *fp; int type, startstep, overwrite; - long filepos; + bigint filepos; int npair; // number of correlation pairs to calculate double *values; diff --git a/src/fix_ave_chunk.cpp b/src/fix_ave_chunk.cpp index 1328a27376..36c9eaf6fc 100644 --- a/src/fix_ave_chunk.cpp +++ b/src/fix_ave_chunk.cpp @@ -29,7 +29,6 @@ #include "variable.h" #include -#include using namespace LAMMPS_NS; using namespace FixConst; @@ -216,23 +215,23 @@ FixAveChunk::FixAveChunk(LAMMPS *lmp, int narg, char **arg) : iarg += 1; } else if (strcmp(arg[iarg],"format") == 0) { if (iarg+2 > narg) error->all(FLERR,"Illegal fix ave/chunk command"); - delete [] format_user; + delete[] format_user; format_user = utils::strdup(arg[iarg+1]); format = format_user; iarg += 2; } else if (strcmp(arg[iarg],"title1") == 0) { if (iarg+2 > narg) error->all(FLERR,"Illegal fix ave/chunk command"); - delete [] title1; + delete[] title1; title1 = utils::strdup(arg[iarg+1]); iarg += 2; } else if (strcmp(arg[iarg],"title2") == 0) { if (iarg+2 > narg) error->all(FLERR,"Illegal fix ave/chunk command"); - delete [] title2; + delete[] title2; title2 = utils::strdup(arg[iarg+1]); iarg += 2; } else if (strcmp(arg[iarg],"title3") == 0) { if (iarg+2 > narg) error->all(FLERR,"Illegal fix ave/chunk command"); - delete [] title3; + delete[] title3; title3 = utils::strdup(arg[iarg+1]); iarg += 2; } else error->all(FLERR,"Illegal fix ave/chunk command"); @@ -348,18 +347,18 @@ FixAveChunk::FixAveChunk(LAMMPS *lmp, int narg, char **arg) : if (ferror(fp)) error->one(FLERR,"Error writing file header"); - filepos = ftell(fp); + filepos = platform::ftell(fp); } - delete [] title1; - delete [] title2; - delete [] title3; + delete[] title1; + delete[] title2; + delete[] title3; // if wildcard expansion occurred, free earg memory from expand_args() // wait to do this until after file comment lines are printed if (expand) { - for (int i = 0; i < nargnew; i++) delete [] earg[i]; + for (int i = 0; i < nargnew; i++) delete[] earg[i]; memory->sfree(earg); } @@ -407,11 +406,11 @@ FixAveChunk::FixAveChunk(LAMMPS *lmp, int narg, char **arg) : FixAveChunk::~FixAveChunk() { - delete [] which; - delete [] argindex; - for (int i = 0; i < nvalues; i++) delete [] ids[i]; - delete [] ids; - delete [] value2index; + delete[] which; + delete[] argindex; + for (int i = 0; i < nvalues; i++) delete[] ids[i]; + delete[] ids; + delete[] value2index; if (fp && comm->me == 0) fclose(fp); @@ -438,7 +437,7 @@ FixAveChunk::~FixAveChunk() } } - delete [] idchunk; + delete[] idchunk; which = nullptr; argindex = nullptr; ids = nullptr; @@ -941,7 +940,7 @@ void FixAveChunk::end_of_step() if (fp && comm->me == 0) { clearerr(fp); - if (overwrite) fseek(fp,filepos,SEEK_SET); + if (overwrite) platform::fseek(fp,filepos); double count = 0.0; for (m = 0; m < nchunk; m++) count += count_total[m]; fprintf(fp,BIGINT_FORMAT " %d %g\n",ntimestep,nchunk,count); @@ -1027,9 +1026,9 @@ void FixAveChunk::end_of_step() fflush(fp); if (overwrite) { - long fileend = ftell(fp); - if ((fileend > 0) && (ftruncate(fileno(fp),fileend))) - perror("Error while tuncating output"); + bigint fileend = platform::ftell(fp); + if ((fileend > 0) && (platform::ftruncate(fp,fileend))) + error->warning(FLERR,"Error while tuncating output: {}", utils::getsyserror()); } } } diff --git a/src/fix_ave_chunk.h b/src/fix_ave_chunk.h index e7beed341f..69fdea0f06 100644 --- a/src/fix_ave_chunk.h +++ b/src/fix_ave_chunk.h @@ -61,7 +61,7 @@ class FixAveChunk : public Fix { class ComputeChunkAtom *cchunk; int lockforever; - long filepos; + bigint filepos; int maxvar; double *varatom; diff --git a/src/fix_ave_correlate.cpp b/src/fix_ave_correlate.cpp index 92b5ea3693..df6e33288e 100644 --- a/src/fix_ave_correlate.cpp +++ b/src/fix_ave_correlate.cpp @@ -30,7 +30,6 @@ #include "variable.h" #include -#include using namespace LAMMPS_NS; using namespace FixConst; @@ -139,17 +138,17 @@ FixAveCorrelate::FixAveCorrelate(LAMMPS * lmp, int narg, char **arg): iarg += 1; } else if (strcmp(arg[iarg],"title1") == 0) { if (iarg+2 > narg) error->all(FLERR,"Illegal fix ave/correlate command"); - delete [] title1; + delete[] title1; title1 = utils::strdup(arg[iarg+1]); iarg += 2; } else if (strcmp(arg[iarg],"title2") == 0) { if (iarg+2 > narg) error->all(FLERR,"Illegal fix ave/correlate command"); - delete [] title2; + delete[] title2; title2 = utils::strdup(arg[iarg+1]); iarg += 2; } else if (strcmp(arg[iarg],"title3") == 0) { if (iarg+2 > narg) error->all(FLERR,"Illegal fix ave/correlate command"); - delete [] title3; + delete[] title3; title3 = utils::strdup(arg[iarg+1]); iarg += 2; } else error->all(FLERR,"Illegal fix ave/correlate command"); @@ -256,18 +255,18 @@ FixAveCorrelate::FixAveCorrelate(LAMMPS * lmp, int narg, char **arg): if (ferror(fp)) error->one(FLERR,"Error writing file header"); - filepos = ftell(fp); + filepos = platform::ftell(fp); } - delete [] title1; - delete [] title2; - delete [] title3; + delete[] title1; + delete[] title2; + delete[] title3; // if wildcard expansion occurred, free earg memory from expand_args() // wait to do this until after file comment lines are printed if (expand) { - for (int i = 0; i < nargnew; i++) delete [] earg[i]; + for (int i = 0; i < nargnew; i++) delete[] earg[i]; memory->sfree(earg); } @@ -312,11 +311,11 @@ FixAveCorrelate::FixAveCorrelate(LAMMPS * lmp, int narg, char **arg): FixAveCorrelate::~FixAveCorrelate() { - delete [] which; - delete [] argindex; - delete [] value2index; - for (int i = 0; i < nvalues; i++) delete [] ids[i]; - delete [] ids; + delete[] which; + delete[] argindex; + delete[] value2index; + for (int i = 0; i < nvalues; i++) delete[] ids[i]; + delete[] ids; memory->destroy(values); memory->destroy(count); @@ -489,7 +488,7 @@ void FixAveCorrelate::end_of_step() if (fp && me == 0) { clearerr(fp); - if (overwrite) fseek(fp,filepos,SEEK_SET); + if (overwrite) platform::fseek(fp,filepos); fprintf(fp,BIGINT_FORMAT " %d\n",ntimestep,nrepeat); for (i = 0; i < nrepeat; i++) { fprintf(fp,"%d %d %d",i+1,i*nevery,count[i]); @@ -507,9 +506,9 @@ void FixAveCorrelate::end_of_step() fflush(fp); if (overwrite) { - long fileend = ftell(fp); - if ((fileend > 0) && (ftruncate(fileno(fp),fileend))) - perror("Error while tuncating output"); + bigint fileend = platform::ftell(fp); + if ((fileend > 0) && (platform::ftruncate(fp,fileend))) + error->warning(FLERR,"Error while tuncating output: {}", utils::getsyserror()); } } diff --git a/src/fix_ave_correlate.h b/src/fix_ave_correlate.h index d551ba7b92..6dde75c0d3 100644 --- a/src/fix_ave_correlate.h +++ b/src/fix_ave_correlate.h @@ -44,7 +44,7 @@ class FixAveCorrelate : public Fix { int type, ave, startstep, overwrite; double prefactor; - long filepos; + bigint filepos; int firstindex; // index in values ring of earliest time sample int lastindex; // index in values ring of latest time sample diff --git a/src/fix_ave_histo.cpp b/src/fix_ave_histo.cpp index 92b03035b3..8c55337074 100644 --- a/src/fix_ave_histo.cpp +++ b/src/fix_ave_histo.cpp @@ -25,7 +25,6 @@ #include "variable.h" #include -#include using namespace LAMMPS_NS; using namespace FixConst; @@ -168,7 +167,7 @@ FixAveHisto::FixAveHisto(LAMMPS *lmp, int narg, char **arg) : // if wildcard expansion occurred, free earg memory from expand_args() if (expand) { - for (int i = 0; i < nvalues; i++) delete [] earg[i]; + for (int i = 0; i < nvalues; i++) delete[] earg[i]; memory->sfree(earg); } @@ -434,12 +433,12 @@ FixAveHisto::FixAveHisto(LAMMPS *lmp, int narg, char **arg) : if (ferror(fp)) error->one(FLERR,"Error writing file header"); - filepos = ftell(fp); + filepos = platform::ftell(fp); } - delete [] title1; - delete [] title2; - delete [] title3; + delete[] title1; + delete[] title2; + delete[] title3; // allocate and initialize memory for averaging @@ -502,18 +501,18 @@ FixAveHisto::FixAveHisto(LAMMPS *lmp, int narg, char **arg) : FixAveHisto::~FixAveHisto() { - delete [] which; - delete [] argindex; - delete [] value2index; - for (int i = 0; i < nvalues; i++) delete [] ids[i]; - delete [] ids; + delete[] which; + delete[] argindex; + delete[] value2index; + for (int i = 0; i < nvalues; i++) delete[] ids[i]; + delete[] ids; if (fp && me == 0) fclose(fp); - delete [] bin; - delete [] bin_total; - delete [] bin_all; - delete [] coord; + delete[] bin; + delete[] bin_total; + delete[] bin_all; + delete[] coord; memory->destroy(stats_list); memory->destroy(bin_list); memory->destroy(vector); @@ -817,7 +816,7 @@ void FixAveHisto::end_of_step() if (fp && me == 0) { clearerr(fp); - if (overwrite) fseek(fp,filepos,SEEK_SET); + if (overwrite) platform::fseek(fp,filepos); fprintf(fp,BIGINT_FORMAT " %d %g %g %g %g\n",ntimestep,nbins, stats_total[0],stats_total[1],stats_total[2],stats_total[3]); if (stats_total[0] != 0.0) @@ -833,9 +832,9 @@ void FixAveHisto::end_of_step() fflush(fp); if (overwrite) { - long fileend = ftell(fp); - if ((fileend > 0) && (ftruncate(fileno(fp),fileend))) - perror("Error while tuncating output"); + bigint fileend = platform::ftell(fp); + if ((fileend > 0) && (platform::ftruncate(fp,fileend))) + error->warning(FLERR,"Error while tuncating output: {}",utils::getsyserror()); } } } @@ -993,17 +992,17 @@ void FixAveHisto::options(int iarg, int narg, char **arg) iarg += 1; } else if (strcmp(arg[iarg],"title1") == 0) { if (iarg+2 > narg) error->all(FLERR,"Illegal fix ave/histo command"); - delete [] title1; + delete[] title1; title1 = utils::strdup(arg[iarg+1]); iarg += 2; } else if (strcmp(arg[iarg],"title2") == 0) { if (iarg+2 > narg) error->all(FLERR,"Illegal fix ave/histo command"); - delete [] title2; + delete[] title2; title2 = utils::strdup(arg[iarg+1]); iarg += 2; } else if (strcmp(arg[iarg],"title3") == 0) { if (iarg+2 > narg) error->all(FLERR,"Illegal fix ave/histo command"); - delete [] title3; + delete[] title3; title3 = utils::strdup(arg[iarg+1]); iarg += 2; } else error->all(FLERR,"Illegal fix ave/histo command"); diff --git a/src/fix_ave_histo.h b/src/fix_ave_histo.h index 0158d04377..ef64ad74ff 100644 --- a/src/fix_ave_histo.h +++ b/src/fix_ave_histo.h @@ -44,7 +44,7 @@ class FixAveHisto : public Fix { FILE *fp; double lo, hi, binsize, bininv; int kind, beyond, overwrite; - long filepos; + bigint filepos; double stats[4], stats_total[4], stats_all[4]; double **stats_list; diff --git a/src/fix_ave_histo_weight.cpp b/src/fix_ave_histo_weight.cpp index 63321bf53e..7866490840 100644 --- a/src/fix_ave_histo_weight.cpp +++ b/src/fix_ave_histo_weight.cpp @@ -28,8 +28,6 @@ #include "update.h" #include "variable.h" -#include - using namespace LAMMPS_NS; using namespace FixConst; @@ -472,7 +470,7 @@ void FixAveHistoWeight::end_of_step() if (fp && me == 0) { clearerr(fp); - if (overwrite) fseek(fp,filepos,SEEK_SET); + if (overwrite) platform::fseek(fp,filepos); fprintf(fp,BIGINT_FORMAT " %d %g %g %g %g\n",ntimestep,nbins, stats_total[0],stats_total[1],stats_total[2],stats_total[3]); if (stats_total[0] != 0.0) @@ -488,9 +486,9 @@ void FixAveHistoWeight::end_of_step() fflush(fp); if (overwrite) { - long fileend = ftell(fp); - if ((fileend > 0) && (ftruncate(fileno(fp),fileend))) - perror("Error while tuncating output"); + bigint fileend = platform::ftell(fp); + if ((fileend > 0) && (platform::ftruncate(fp,fileend))) + error->warning(FLERR,"Error while tuncating output: {}", utils::getsyserror()); } } } diff --git a/src/fix_ave_time.cpp b/src/fix_ave_time.cpp index da9cd89e5e..a3da6e6a3d 100644 --- a/src/fix_ave_time.cpp +++ b/src/fix_ave_time.cpp @@ -28,7 +28,6 @@ #include "variable.h" #include -#include using namespace LAMMPS_NS; using namespace FixConst; @@ -274,18 +273,18 @@ FixAveTime::FixAveTime(LAMMPS *lmp, int narg, char **arg) : if (ferror(fp)) error->one(FLERR,"Error writing file header"); - filepos = ftell(fp); + filepos = platform::ftell(fp); } - delete [] title1; - delete [] title2; - delete [] title3; + delete[] title1; + delete[] title2; + delete[] title3; // if wildcard expansion occurred, free earg memory from expand_args() // wait to do this until after file comment lines are printed if (expand) { - for (int i = 0; i < nvalues; i++) delete [] earg[i]; + for (int i = 0; i < nvalues; i++) delete[] earg[i]; memory->sfree(earg); } @@ -446,24 +445,24 @@ FixAveTime::~FixAveTime() } } - delete [] format_user; + delete[] format_user; - delete [] which; - delete [] argindex; - delete [] value2index; - delete [] offcol; - delete [] varlen; - for (int i = 0; i < nvalues; i++) delete [] ids[i]; - delete [] ids; + delete[] which; + delete[] argindex; + delete[] value2index; + delete[] offcol; + delete[] varlen; + for (int i = 0; i < nvalues; i++) delete[] ids[i]; + delete[] ids; - delete [] extlist; + delete[] extlist; if (fp && me == 0) fclose(fp); memory->destroy(column); - delete [] vector; - delete [] vector_total; + delete[] vector; + delete[] vector_total; memory->destroy(array); memory->destroy(array_total); memory->destroy(array_list); @@ -673,7 +672,7 @@ void FixAveTime::invoke_scalar(bigint ntimestep) if (fp && me == 0) { clearerr(fp); - if (overwrite) fseek(fp,filepos,SEEK_SET); + if (overwrite) platform::fseek(fp,filepos); fprintf(fp,BIGINT_FORMAT,ntimestep); for (i = 0; i < nvalues; i++) fprintf(fp,format,vector_total[i]/norm); fprintf(fp,"\n"); @@ -683,9 +682,9 @@ void FixAveTime::invoke_scalar(bigint ntimestep) fflush(fp); if (overwrite) { - long fileend = ftell(fp); - if ((fileend > 0) && (ftruncate(fileno(fp),fileend))) - perror("Error while tuncating output"); + bigint fileend = platform::ftell(fp); + if ((fileend > 0) && (platform::ftruncate(fp,fileend))) + error->warning(FLERR,"Error while tuncating output: {}", utils::getsyserror()); } } } @@ -885,7 +884,7 @@ void FixAveTime::invoke_vector(bigint ntimestep) // output result to file if (fp && me == 0) { - if (overwrite) fseek(fp,filepos,SEEK_SET); + if (overwrite) platform::fseek(fp,filepos); fprintf(fp,BIGINT_FORMAT " %d\n",ntimestep,nrows); for (i = 0; i < nrows; i++) { fprintf(fp,"%d",i+1); @@ -894,9 +893,9 @@ void FixAveTime::invoke_vector(bigint ntimestep) } fflush(fp); if (overwrite) { - long fileend = ftell(fp); - if ((fileend > 0) && (ftruncate(fileno(fp),fileend))) - perror("Error while tuncating output"); + bigint fileend = platform::ftell(fp); + if ((fileend > 0) && (platform::ftruncate(fp,fileend))) + error->warning(FLERR,"Error while tuncating output: {}", utils::getsyserror()); } } } @@ -1066,23 +1065,23 @@ void FixAveTime::options(int iarg, int narg, char **arg) iarg += 1; } else if (strcmp(arg[iarg],"format") == 0) { if (iarg+2 > narg) error->all(FLERR,"Illegal fix ave/time command"); - delete [] format_user; + delete[] format_user; format_user = utils::strdup(arg[iarg+1]); format = format_user; iarg += 2; } else if (strcmp(arg[iarg],"title1") == 0) { if (iarg+2 > narg) error->all(FLERR,"Illegal fix ave/spatial command"); - delete [] title1; + delete[] title1; title1 = utils::strdup(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; + delete[] title2; title2 = utils::strdup(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; + delete[] title3; title3 = utils::strdup(arg[iarg+1]); iarg += 2; } else error->all(FLERR,"Illegal fix ave/time command"); diff --git a/src/fix_ave_time.h b/src/fix_ave_time.h index 391a06f495..3a26dd6d70 100644 --- a/src/fix_ave_time.h +++ b/src/fix_ave_time.h @@ -54,7 +54,7 @@ class FixAveTime : public Fix { int *offlist; char *format, *format_user; char *title1, *title2, *title3; - long filepos; + bigint filepos; int norm, iwindow, window_limit; double *vector; From 40f683c1a76d931141c60158af299019cd712e40 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Mon, 4 Oct 2021 18:14:21 -0400 Subject: [PATCH 060/372] use platform functions to handle piping help output to a pager when on a console --- src/lammps.cpp | 20 +++----------------- 1 file changed, 3 insertions(+), 17 deletions(-) diff --git a/src/lammps.cpp b/src/lammps.cpp index f6c4474cd5..83a7115dcf 100644 --- a/src/lammps.cpp +++ b/src/lammps.cpp @@ -56,12 +56,6 @@ #include #include -#if defined(_WIN32) -#include -#else -#include // for isatty() -#endif - #include "lmpinstalledpkgs.h" #include "lmpgitversion.h" @@ -1118,11 +1112,7 @@ void _noopt LAMMPS::help() // user. scrollback buffers are often not large enough. this is most // beneficial to windows users, who are not used to command line. -#if defined(_WIN32) - int use_pager = _isatty(fileno(fp)); -#else - int use_pager = isatty(fileno(fp)); -#endif + int use_pager = platform::is_console(fp); // cannot use this with OpenMPI since its console is non-functional @@ -1133,11 +1123,7 @@ void _noopt LAMMPS::help() if (use_pager) { pager = getenv("PAGER"); if (pager == nullptr) pager = "more"; -#if defined(_WIN32) - fp = _popen(pager,"w"); -#else - fp = popen(pager,"w"); -#endif + fp = platform::popen(pager,"w"); // reset to original state, if pipe command failed if (fp == nullptr) { @@ -1299,7 +1285,7 @@ void _noopt LAMMPS::help() // close pipe to pager, if active - if (pager != nullptr) pclose(fp); + if (pager != nullptr) platform::pclose(fp); } /* ---------------------------------------------------------------------- From ee594a879b1dd27f428c8ee4e2fdaa612d911f45 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Mon, 4 Oct 2021 22:39:24 -0400 Subject: [PATCH 061/372] make use of platform::putenv() --- src/PLUMED/fix_plumed.cpp | 4 ++-- src/input.cpp | 15 +-------------- src/lammps.cpp | 7 ++++--- 3 files changed, 7 insertions(+), 19 deletions(-) diff --git a/src/PLUMED/fix_plumed.cpp b/src/PLUMED/fix_plumed.cpp index 7a142b57f8..137cd580a8 100644 --- a/src/PLUMED/fix_plumed.cpp +++ b/src/PLUMED/fix_plumed.cpp @@ -41,7 +41,7 @@ #if defined(__PLUMED_DEFAULT_KERNEL) #define PLUMED_QUOTE_DIRECT(name) #name #define PLUMED_QUOTE(macro) PLUMED_QUOTE_DIRECT(macro) -static char plumed_default_kernel[] = "PLUMED_KERNEL=" PLUMED_QUOTE(__PLUMED_DEFAULT_KERNEL); +static const char plumed_default_kernel[] = "PLUMED_KERNEL=" PLUMED_QUOTE(__PLUMED_DEFAULT_KERNEL); #endif /* -------------------------------------------------------------------- */ @@ -68,7 +68,7 @@ FixPlumed::FixPlumed(LAMMPS *lmp, int narg, char **arg) : #if defined(__PLUMED_DEFAULT_KERNEL) if (getenv("PLUMED_KERNEL") == nullptr) - putenv(plumed_default_kernel); + platform::putenv(plumed_default_kernel); #endif p=new PLMD::Plumed; diff --git a/src/input.cpp b/src/input.cpp index 833dbaa6df..c9b471f599 100644 --- a/src/input.cpp +++ b/src/input.cpp @@ -1241,20 +1241,7 @@ void Input::shell() if (narg < 2) error->all(FLERR,"Illegal shell putenv command"); for (int i = 1; i < narg; i++) { rv = 0; -#ifdef _WIN32 - if (arg[i]) rv = _putenv(utils::strdup(arg[i])); -#else - if (arg[i]) { - std::string vardef(arg[i]); - auto found = vardef.find_first_of('='); - if (found == std::string::npos) { - rv = setenv(vardef.c_str(),"",1); - } else { - rv = setenv(vardef.substr(0,found).c_str(), - vardef.substr(found+1).c_str(),1); - } - } -#endif + if (arg[i]) rv = platform::putenv(arg[i]); rv = (rv < 0) ? errno : 0; MPI_Reduce(&rv,&err,1,MPI_INT,MPI_MAX,0,world); if (me == 0 && err != 0) { diff --git a/src/lammps.cpp b/src/lammps.cpp index 83a7115dcf..e24c42689f 100644 --- a/src/lammps.cpp +++ b/src/lammps.cpp @@ -134,15 +134,16 @@ LAMMPS::LAMMPS(int narg, char **arg, MPI_Comm communicator) : init_pkg_lists(); #if defined(LMP_PYTHON) && defined(_WIN32) - // if the LAMMPSHOME environment variable is set, it should point + // If the LAMMPSHOME environment variable is set, it should point // to the location of the LAMMPS installation tree where we bundle // the matching Python installation for use with the PYTHON package. - // this is currently only used on Windows with the windows installer packages + // This is currently only used on Windows with the Windows installer packages const char *lmpenv = getenv("LAMMPSHOME"); if (lmpenv) { - _putenv(utils::strdup(fmt::format("PYTHONHOME={}",lmpenv))); + platform::putenv(fmt::format("PYTHONHOME={}",lmpenv)); } #endif + // check if -mpicolor is first arg // if so, then 2 apps were launched with one mpirun command // this means passed communicator (e.g. MPI_COMM_WORLD) is bigger than LAMMPS From 0bdc6d47e05651cf6e69b5baa2b068945f014358 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Mon, 4 Oct 2021 22:40:40 -0400 Subject: [PATCH 062/372] port molfile plugin reader to platform namespace --- src/MOLFILE/dump_molfile.cpp | 14 +- src/MOLFILE/molfile_interface.cpp | 260 ++++-------------------------- src/platform.cpp | 2 +- 3 files changed, 37 insertions(+), 239 deletions(-) diff --git a/src/MOLFILE/dump_molfile.cpp b/src/MOLFILE/dump_molfile.cpp index 052fb444a4..35e87f94af 100644 --- a/src/MOLFILE/dump_molfile.cpp +++ b/src/MOLFILE/dump_molfile.cpp @@ -26,8 +26,8 @@ #include "memory.h" #include "update.h" -#include #include +#include #include "molfile_interface.h" @@ -131,9 +131,9 @@ DumpMolfile::~DumpMolfile() if (typenames) { for (int i = 1; i <= ntypes; i++) - delete [] typenames[i]; + delete[] typenames[i]; - delete [] typenames; + delete[] typenames; typenames = nullptr; } } @@ -152,8 +152,7 @@ void DumpMolfile::init_style() typenames = new char*[ntypes+1]; for (int itype = 1; itype <= ntypes; itype++) { /* a 32-bit int can be maximally 10 digits plus sign */ - typenames[itype] = new char[12]; - sprintf(typenames[itype],"%d",itype); + typenames[itype] = utils::strdup(std::to_string(itype)); } } @@ -207,6 +206,7 @@ void DumpMolfile::write() } } ntotal = 0; + reorderflag = 0; // if file per timestep, open new file @@ -430,9 +430,9 @@ int DumpMolfile::modify_param(int narg, char **arg) if (typenames) { for (int i = 1; i <= ntypes; i++) - delete [] typenames[i]; + delete[] typenames[i]; - delete [] typenames; + delete[] typenames; typenames = nullptr; } diff --git a/src/MOLFILE/molfile_interface.cpp b/src/MOLFILE/molfile_interface.cpp index 8e1174d8f4..e18f62b337 100644 --- a/src/MOLFILE/molfile_interface.cpp +++ b/src/MOLFILE/molfile_interface.cpp @@ -17,6 +17,11 @@ ------------------------------------------------------------------------- */ #include "molfile_interface.h" + +#include "platform.h" +#include "tokenizer.h" +#include "utils.h" + #include "molfile_plugin.h" #include @@ -25,13 +30,6 @@ #include #include // for strcasecmp() -#if defined(_WIN32) -#include -#else -#include -#include -#endif - #if vmdplugin_ABIVERSION < 16 #error "unsupported VMD molfile plugin ABI version" #endif @@ -199,172 +197,17 @@ extern "C" { return 0; } - // directory traversal helper functions - -#if defined(_WIN32) - - // Win32 directory traversal handle - typedef struct { - HANDLE h; - WIN32_FIND_DATA fd; - char *name; - char *searchname; - int dlen; - } dirhandle_t; - - // open a directory handle - static dirhandle_t *my_opendir(const char *dirname) - { - dirhandle_t *d; - int len; - - if (dirname == nullptr) - return nullptr; - d = new dirhandle_t; - - len = 2 + strlen(dirname); - d->name = new char[len]; - strcpy(d->name, dirname); - strcat(d->name, "\\"); - d->dlen = len; - - len += 1; - d->searchname = new char[len]; - strcpy(d->searchname, dirname); - strcat(d->searchname, "\\*"); - - d->h = FindFirstFile(d->searchname, &(d->fd)); - if (d->h == ((HANDLE)(-1))) { - delete[] d->searchname; - delete[] d->name; - delete d; - return nullptr; - } - return d; - } - - // get next file name from directory handle - static char *my_readdir(dirhandle_t *d) - { - if (FindNextFile(d->h, &(d->fd))) { - return d->fd.cFileName; - } - return nullptr; - } - - // close directory handle - static void my_closedir(dirhandle_t *d) - { - if (d->h != nullptr) { - FindClose(d->h); - } - delete[] d->searchname; - delete[] d->name; - delete d; - } - - // open a shared object file - static void *my_dlopen(const char *fname) { - return (void *)LoadLibrary(fname); - } - - // resolve a symbol in shared object - static void *my_dlsym(void *h, const char *sym) { - return (void *)GetProcAddress((HINSTANCE)h, sym); - } - - // close a shared object - static int my_dlclose(void *h) { - /* FreeLibrary returns nonzero on success */ - return !FreeLibrary((HINSTANCE)h); - } - -#else - - // Unix directory traversal handle - typedef struct { - DIR *d; - char *name; - int dlen; - } dirhandle_t; - - // open a directory handle - static dirhandle_t *my_opendir(const char *dirname) - { - dirhandle_t *d; - int len; - - if (dirname == nullptr) return nullptr; - - d = new dirhandle_t; - len = 2 + strlen(dirname); - d->name = new char[len]; - strcpy(d->name,dirname); - strcat(d->name,"/"); - d->dlen = len; - - d->d = opendir(d->name); - if (d->d == nullptr) { - delete[] d->name; - delete d; - return nullptr; - } - return d; - } - - // get next file name from directory handle - static char *my_readdir(dirhandle_t *d) - { - struct dirent *p; - - if ((p = readdir(d->d)) != nullptr) { - return p->d_name; - } - - return nullptr; - } - - // close directory handle - static void my_closedir(dirhandle_t *d) - { - if (d->d != nullptr) { - closedir(d->d); - } - delete[] d->name; - delete d; - return; - } - - // open a shared object file - static void *my_dlopen(const char *fname) { - return dlopen(fname, RTLD_NOW); - } - - // resolve a symbol in shared object - static void *my_dlsym(void *h, const char *sym) { - return dlsym(h, sym); - } - - // close a shared object - static int my_dlclose(void *h) { - return dlclose(h); - } - -#endif - } // end of extern "C" region using namespace LAMMPS_NS; // constructor. MolfileInterface::MolfileInterface(const char *type, const int mode) - : _plugin(0), _dso(0), _ptr(0), _info(0), _natoms(0), - _mode(mode), _caps(M_NONE) + : _plugin(nullptr), _dso(nullptr), _ptr(nullptr), _info(nullptr), _natoms(0), + _mode(mode), _caps(M_NONE), _props(0) { - _name = new char[5]; - strcpy(_name,"none"); - _type = new char[1+strlen(type)]; - strcpy(_type,type); + _name = utils::strdup("none"); + _type = utils::strdup(type); } // destructor. @@ -384,62 +227,21 @@ MolfileInterface::~MolfileInterface() // register the best matching plugin in a given directory int MolfileInterface::find_plugin(const char *pluginpath) { - dirhandle_t *dir; - char *filename, *ext, *next, *path, *plugindir; int retval = E_NONE; -#if defined(_WIN32) -#define MY_PATHSEP ';' -#else -#define MY_PATHSEP ':' -#endif if (pluginpath == nullptr) return E_DIR; - plugindir = path = strdup(pluginpath); - while (plugindir) { - // check if this a single directory or path. - next = strchr(plugindir,MY_PATHSEP); - if (next) { - *next = '\0'; - ++next; + // search for suitable file names in provided path and try to inspect them + // only look at .so files, since this is what VMD uses on all platforms + + for (const auto &dir : Tokenizer(pluginpath,":").as_vector()) { + for (const auto &filename : platform::list_directory(dir)) { + if (utils::strmatch(filename,"\\.so$")) { + int rv = load_plugin(platform::path_join(dir,filename).c_str()); + if (rv > retval) retval = rv; + } } - - dir = my_opendir(plugindir); - if (!dir) - retval = (retval > E_DIR) ? retval : E_DIR; - - // search for suitable file names and try to inspect them - while (dir) { - char *fullname; - int len; - - filename = my_readdir(dir); - if (filename == nullptr) break; - - // only look at .so files - ext = strrchr(filename, '.'); - if (ext == nullptr) continue; - if (strcasecmp(ext,".so") != 0) continue; - - // construct full pathname of potential DSO - len = dir->dlen; - len += strlen(filename); - fullname = new char[len]; - strcpy(fullname,dir->name); - strcat(fullname,filename); - - // try to register plugin at file name. - int rv = load_plugin(fullname); - if (rv > retval) retval = rv; - - delete[] fullname; - } - if (dir) - my_closedir(dir); - - plugindir = next; } - free(path); return retval; } @@ -450,22 +252,22 @@ int MolfileInterface::load_plugin(const char *filename) int len, retval = E_NONE; // access shared object - dso = my_dlopen(filename); + dso = platform::dlopen(filename); if (dso == nullptr) return E_FILE; // check for required plugin symbols - void *ifunc = my_dlsym(dso,"vmdplugin_init"); - void *rfunc = my_dlsym(dso,"vmdplugin_register"); - void *ffunc = my_dlsym(dso,"vmdplugin_fini"); + void *ifunc = platform::dlsym(dso,"vmdplugin_init"); + void *rfunc = platform::dlsym(dso,"vmdplugin_register"); + void *ffunc = platform::dlsym(dso,"vmdplugin_fini"); if (ifunc == nullptr || rfunc == nullptr || ffunc == nullptr) { - my_dlclose(dso); + platform::dlclose(dso); return E_SYMBOL; } // initialize plugin. skip plugin if it fails. if (((initfunc)(ifunc))()) { - my_dlclose(dso); + platform::dlclose(dso); return E_SYMBOL; } @@ -528,12 +330,8 @@ int MolfileInterface::load_plugin(const char *filename) forget_plugin(); delete[] _name; - len = 16; - len += strlen(plugin->prettyname); - len += strlen(plugin->author); - _name = new char[len]; - sprintf(_name,"%s v%d.%d by %s",plugin->prettyname, - plugin->majorv, plugin->minorv, plugin->author); + _name = utils::strdup(fmt::format("{} v{}.{} by {}", plugin->prettyname, + plugin->majorv, plugin->minorv, plugin->author)); // determine plugin capabilities _caps = M_NONE; @@ -569,7 +367,7 @@ int MolfileInterface::load_plugin(const char *filename) } // better luck next time. clean up and return. - my_dlclose(dso); + platform::dlclose(dso); return retval; } @@ -583,10 +381,10 @@ void MolfileInterface::forget_plugin() _plugin = nullptr; if (_dso) { - void *ffunc = my_dlsym(_dso,"vmdplugin_fini"); + void *ffunc = platform::dlsym(_dso,"vmdplugin_fini"); if (ffunc) ((finifunc)ffunc)(); - my_dlclose(_dso); + platform::dlclose(_dso); } _dso = nullptr; diff --git a/src/platform.cpp b/src/platform.cpp index ed007e089a..2f04ee0068 100644 --- a/src/platform.cpp +++ b/src/platform.cpp @@ -527,7 +527,7 @@ void *platform::dlsym(void *handle, const std::string &symbol) // open a shared object file void *platform::dlopen(const std::string &fname) { - return ::dlopen(fname.c_str(), RTLD_NOW); + return ::dlopen(fname.c_str(), RTLD_NOW | RTLD_GLOBAL); } // close a shared object From 9f2c5116fadc6ce7f9ec26c93430a3faca4d294e Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Tue, 5 Oct 2021 07:35:26 -0400 Subject: [PATCH 063/372] make lammps and msi2lmp man pages use section 1 --- doc/lammps.1 | 2 +- doc/msi2lmp.1 | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/doc/lammps.1 b/doc/lammps.1 index c868a2a86f..0e2831f5ca 100644 --- a/doc/lammps.1 +++ b/doc/lammps.1 @@ -1,4 +1,4 @@ -.TH LAMMPS "29 September 2021" "2021-09-29" +.TH LAMMPS "1" "29 September 2021" "2021-09-29" .SH NAME .B LAMMPS \- Molecular Dynamics Simulator. diff --git a/doc/msi2lmp.1 b/doc/msi2lmp.1 index 91916fb3a5..ba771da7dc 100644 --- a/doc/msi2lmp.1 +++ b/doc/msi2lmp.1 @@ -1,4 +1,4 @@ -.TH MSI2LMP "v3.9.9" "2018-11-05" +.TH MSI2LMP "1" "v3.9.9" "2018-11-05" .SH NAME .B MSI2LMP \- Converter for Materials Studio files to LAMMPS From 741cf9c7d59f876424bff642f117b6f2b148932e Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Tue, 5 Oct 2021 07:36:22 -0400 Subject: [PATCH 064/372] remove obsoleted include statements --- src/utils.cpp | 19 ------------------- 1 file changed, 19 deletions(-) diff --git a/src/utils.cpp b/src/utils.cpp index 55514fdd59..3afd87ba7b 100644 --- a/src/utils.cpp +++ b/src/utils.cpp @@ -31,25 +31,6 @@ #include #include -#if defined(__linux__) -#include // for readlink -#endif - -#if defined(__APPLE__) -#include // for fcntl -#include -#endif - -#if defined(_WIN32) -// target Windows version is Windows 7 and later -#if defined(_WIN32_WINNT) -#undef _WIN32_WINNT -#endif -#define _WIN32_WINNT _WIN32_WINNT_WIN7 -#include -#include -#endif - /*! \file utils.cpp */ /* From 340207988c08b36bb2fca279e96d7b23b65cd9b1 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Tue, 5 Oct 2021 10:36:25 -0400 Subject: [PATCH 065/372] fix a couple more bugs like in 5246cedda6ab551d201fe36dc4e51206076bfb20 --- src/INTERLAYER/pair_drip.cpp | 3 ++- src/INTERLAYER/pair_ilp_graphene_hbn.cpp | 25 ++++++++++--------- .../pair_kolmogorov_crespi_full.cpp | 25 +++++++++---------- 3 files changed, 27 insertions(+), 26 deletions(-) diff --git a/src/INTERLAYER/pair_drip.cpp b/src/INTERLAYER/pair_drip.cpp index b9a4d1f05b..85b50ba170 100644 --- a/src/INTERLAYER/pair_drip.cpp +++ b/src/INTERLAYER/pair_drip.cpp @@ -58,6 +58,7 @@ PairDRIP::PairDRIP(LAMMPS *lmp) : Pair(lmp) { single_enable = 0; restartinfo = 0; + one_coeff = 1; manybody_flag = 1; centroidstressflag = CENTROID_NOTAVAIL; unit_convert_flag = utils::get_supported_conversions(utils::ENERGY); @@ -258,7 +259,7 @@ void PairDRIP::read_file(char *filename) int n = -1; for (int m = 0; m < nparams; m++) { if (i == params[m].ielement && j == params[m].jelement) { - if (n >= 0) error->all(FLERR, "Potential file has duplicate entry"); + if (n >= 0) error->all(FLERR, "DRIP potential file has duplicate entry"); n = m; } } diff --git a/src/INTERLAYER/pair_ilp_graphene_hbn.cpp b/src/INTERLAYER/pair_ilp_graphene_hbn.cpp index 6f07d1dc1c..632bb6ae70 100644 --- a/src/INTERLAYER/pair_ilp_graphene_hbn.cpp +++ b/src/INTERLAYER/pair_ilp_graphene_hbn.cpp @@ -142,8 +142,8 @@ void PairILPGrapheneHBN::allocate() void PairILPGrapheneHBN::settings(int narg, char **arg) { if (narg < 1 || narg > 2) error->all(FLERR, "Illegal pair_style command"); - if (strcmp(force->pair_style, "hybrid/overlay") != 0) - error->all(FLERR, "ERROR: requires hybrid/overlay pair_style"); + if (!utils::strmatch(force->pair_style, "^hybrid/overlay")) + error->all(FLERR, "Pair style ilp/graphene/hbn must be used as sub-style with hybrid/overlay"); cut_global = utils::numeric(FLERR, arg[0], false, lmp); if (narg == 2) tap_flag = utils::numeric(FLERR, arg[1], false, lmp); @@ -273,16 +273,17 @@ void PairILPGrapheneHBN::read_file(char *filename) nparams++; } - - MPI_Bcast(&nparams, 1, MPI_INT, 0, world); - MPI_Bcast(&maxparam, 1, MPI_INT, 0, world); - - if (comm->me != 0) { - params = (Param *) memory->srealloc(params, maxparam * sizeof(Param), "pair:params"); - } - - MPI_Bcast(params, maxparam * sizeof(Param), MPI_BYTE, 0, world); } + + MPI_Bcast(&nparams, 1, MPI_INT, 0, world); + MPI_Bcast(&maxparam, 1, MPI_INT, 0, world); + + if (comm->me != 0) { + params = (Param *) memory->srealloc(params, maxparam * sizeof(Param), "pair:params"); + } + + MPI_Bcast(params, maxparam * sizeof(Param), MPI_BYTE, 0, world); + memory->destroy(elem2param); memory->destroy(cutILPsq); memory->create(elem2param, nelements, nelements, "pair:elem2param"); @@ -292,7 +293,7 @@ void PairILPGrapheneHBN::read_file(char *filename) int n = -1; for (int m = 0; m < nparams; m++) { if (i == params[m].ielement && j == params[m].jelement) { - if (n >= 0) error->all(FLERR, "ILP Potential file has duplicate entry"); + if (n >= 0) error->all(FLERR, "ILP potential file has duplicate entry"); n = m; } } diff --git a/src/INTERLAYER/pair_kolmogorov_crespi_full.cpp b/src/INTERLAYER/pair_kolmogorov_crespi_full.cpp index f724b4d819..a107ed29a0 100644 --- a/src/INTERLAYER/pair_kolmogorov_crespi_full.cpp +++ b/src/INTERLAYER/pair_kolmogorov_crespi_full.cpp @@ -34,7 +34,6 @@ #include "neigh_request.h" #include "neighbor.h" #include "potential_file_reader.h" -#include "tokenizer.h" #include #include @@ -142,8 +141,8 @@ void PairKolmogorovCrespiFull::allocate() void PairKolmogorovCrespiFull::settings(int narg, char **arg) { if (narg < 1 || narg > 2) error->all(FLERR, "Illegal pair_style command"); - if (strcmp(force->pair_style, "hybrid/overlay") != 0) - error->all(FLERR, "ERROR: requires hybrid/overlay pair_style"); + if (!utils::strmatch(force->pair_style, "^hybrid/overlay")) + error->all(FLERR, "Pair style kolmogorov/crespi/full must be used as sub-style with hybrid/overlay"); cut_global = utils::numeric(FLERR, arg[0], false, lmp); if (narg == 2) tap_flag = utils::numeric(FLERR, arg[1], false, lmp); @@ -270,17 +269,17 @@ void PairKolmogorovCrespiFull::read_file(char *filename) nparams++; } - - MPI_Bcast(&nparams, 1, MPI_INT, 0, world); - MPI_Bcast(&maxparam, 1, MPI_INT, 0, world); - - if (comm->me != 0) { - params = (Param *) memory->srealloc(params, maxparam * sizeof(Param), "pair:params"); - } - - MPI_Bcast(params, maxparam * sizeof(Param), MPI_BYTE, 0, world); } + MPI_Bcast(&nparams, 1, MPI_INT, 0, world); + MPI_Bcast(&maxparam, 1, MPI_INT, 0, world); + + if (comm->me != 0) { + params = (Param *) memory->srealloc(params, maxparam * sizeof(Param), "pair:params"); + } + + MPI_Bcast(params, maxparam * sizeof(Param), MPI_BYTE, 0, world); + memory->destroy(elem2param); memory->destroy(cutKCsq); memory->create(elem2param, nelements, nelements, "pair:elem2param"); @@ -290,7 +289,7 @@ void PairKolmogorovCrespiFull::read_file(char *filename) int n = -1; for (int m = 0; m < nparams; m++) { if (i == params[m].ielement && j == params[m].jelement) { - if (n >= 0) error->all(FLERR, "KC Potential file has duplicate entry"); + if (n >= 0) error->all(FLERR, "KC potential file has duplicate entry"); n = m; } } From f0940104f5165b4c955e034543acd3315471641d Mon Sep 17 00:00:00 2001 From: Steve Plimpton Date: Tue, 5 Oct 2021 11:06:32 -0600 Subject: [PATCH 066/372] first version of new fix mol/swap command --- src/MC/fix_atom_swap.cpp | 4 +- src/MC/fix_atom_swap.h | 20 +- src/MC/fix_mol_swap.cpp | 394 +++++++++++++++++++++++++++++++++++++++ src/MC/fix_mol_swap.h | 113 +++++++++++ 4 files changed, 520 insertions(+), 11 deletions(-) create mode 100644 src/MC/fix_mol_swap.cpp create mode 100644 src/MC/fix_mol_swap.h diff --git a/src/MC/fix_atom_swap.cpp b/src/MC/fix_atom_swap.cpp index 76200dc614..610f1f099e 100644 --- a/src/MC/fix_atom_swap.cpp +++ b/src/MC/fix_atom_swap.cpp @@ -74,11 +74,13 @@ FixAtomSwap::FixAtomSwap(LAMMPS *lmp, int narg, char **arg) : ncycles = utils::inumeric(FLERR,arg[4],false,lmp); seed = utils::inumeric(FLERR,arg[5],false,lmp); double temperature = utils::numeric(FLERR,arg[6],false,lmp); - beta = 1.0/(force->boltz*temperature); if (nevery <= 0) error->all(FLERR,"Illegal fix atom/swap command"); if (ncycles < 0) error->all(FLERR,"Illegal fix atom/swap command"); if (seed <= 0) error->all(FLERR,"Illegal fix atom/swap command"); + if (temperature <= 0.0) error->all(FLERR,"Illegal fix atom/swap command"); + + beta = 1.0/(force->boltz*temperature); memory->create(type_list,atom->ntypes,"atom/swap:type_list"); memory->create(mu,atom->ntypes+1,"atom/swap:mu"); diff --git a/src/MC/fix_atom_swap.h b/src/MC/fix_atom_swap.h index a77b5a944e..65d811e2b9 100644 --- a/src/MC/fix_atom_swap.h +++ b/src/MC/fix_atom_swap.h @@ -17,8 +17,8 @@ FixStyle(atom/swap,FixAtomSwap); // clang-format on #else -#ifndef LMP_FIX_MCSWAP_H -#define LMP_FIX_MCSWAP_H +#ifndef LMP_FIX_ATOM_SWAP_H +#define LMP_FIX_ATOM_SWAP_H #include "fix.h" @@ -31,14 +31,6 @@ class FixAtomSwap : public Fix { int setmask(); void init(); void pre_exchange(); - int attempt_semi_grand(); - int attempt_swap(); - double energy_full(); - int pick_semi_grand_atom(); - int pick_i_swap_atom(); - int pick_j_swap_atom(); - void update_semi_grand_atoms_list(); - void update_swap_atoms_list(); int pack_forward_comm(int, int *, double *, int, int *); void unpack_forward_comm(int, int, double *); double compute_vector(int); @@ -85,6 +77,14 @@ class FixAtomSwap : public Fix { class Compute *c_pe; void options(int, char **); + int attempt_semi_grand(); + int attempt_swap(); + double energy_full(); + int pick_semi_grand_atom(); + int pick_i_swap_atom(); + int pick_j_swap_atom(); + void update_semi_grand_atoms_list(); + void update_swap_atoms_list(); }; } // namespace LAMMPS_NS diff --git a/src/MC/fix_mol_swap.cpp b/src/MC/fix_mol_swap.cpp new file mode 100644 index 0000000000..9a7bbc5f79 --- /dev/null +++ b/src/MC/fix_mol_swap.cpp @@ -0,0 +1,394 @@ +// clang-format off +/* ---------------------------------------------------------------------- + LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator + https://www.lammps.org/, 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 "fix_mol_swap.h" + +#include "angle.h" +#include "atom.h" +#include "bond.h" +#include "comm.h" +#include "compute.h" +#include "dihedral.h" +#include "domain.h" +#include "error.h" +#include "fix.h" +#include "force.h" +#include "improper.h" +#include "kspace.h" +#include "modify.h" +#include "neighbor.h" +#include "pair.h" +#include "random_park.h" +#include "update.h" + +using namespace LAMMPS_NS; +using namespace FixConst; + +/* ---------------------------------------------------------------------- */ + +FixMolSwap::FixMolSwap(LAMMPS *lmp, int narg, char **arg) : + Fix(lmp, narg, arg) +{ + if (narg != 9) error->all(FLERR,"Illegal fix mol/swap command"); + + vector_flag = 1; + size_vector = 2; + global_freq = 1; + extvector = 0; + restart_global = 1; + time_depend = 1; + + // parse args + + nevery = utils::inumeric(FLERR,arg[3],false,lmp); + ncycles = utils::inumeric(FLERR,arg[4],false,lmp); + itype = utils::inumeric(FLERR,arg[5],false,lmp); + jtype = utils::inumeric(FLERR,arg[6],false,lmp); + seed = utils::inumeric(FLERR,arg[7],false,lmp); + double temperature = utils::numeric(FLERR,arg[8],false,lmp); + + if (nevery <= 0) error->all(FLERR,"Illegal fix mol/swap command"); + if (ncycles < 0) error->all(FLERR,"Illegal fix mol/swap command"); + if (itype <= 0 || itype > atom->ntypes || + jtype <= 0 || jtype > atom->ntypes) + error->all(FLERR,"Fix mol/swap atom types are invalid"); + if (seed <= 0) error->all(FLERR,"Illegal fix mol/swap command"); + if (temperature <= 0.0) error->all(FLERR,"Illegal fix mol/swap command"); + + beta = 1.0/(force->boltz*temperature); + + // random number generator, same for all procs + + random = new RanPark(lmp,seed); + + // set up reneighboring + + force_reneighbor = 1; + next_reneighbor = update->ntimestep + 1; + + // zero out counters + + nswap_attempts = 0.0; + nswap_successes = 0.0; + + // set comm size needed by this Fix + + if (atom->q_flag) comm_forward = 2; + else comm_forward = 1; +} + +/* ---------------------------------------------------------------------- */ + +FixMolSwap::~FixMolSwap() +{ + delete random; +} + +/* ---------------------------------------------------------------------- */ + +int FixMolSwap::setmask() +{ + int mask = 0; + mask |= PRE_EXCHANGE; + return mask; +} + +/* ---------------------------------------------------------------------- */ + +void FixMolSwap::init() +{ + // c_pe = compute used to calculate before/after potential energy + + char *id_pe = (char *) "thermo_pe"; + int ipe = modify->find_compute(id_pe); + c_pe = modify->compute[ipe]; + + // minmol = smallest molID with atoms of itype or jtype + // maxmol = largest molID with atoms of itype or jtype + // require: molID > 0, atoms in fix group + + int *mask = atom->mask; + int *type = atom->type; + tagint *molecule = atom->molecule; + int nlocal = atom->nlocal; + + tagint minmol_me = MAXTAGINT; + tagint maxmol_me = 0; + + for (int i = 0; i < nlocal; i++) { + if (molecule[i] == 0) continue; + if (!(mask[i] & groupbit)) continue; + + if (molecule[i] < minmol_me) { + if (type[i] == itype || type[i] == jtype) minmol_me = molecule[i]; + } + if (molecule[i] > maxmol_me) { + if (type[i] == itype || type[i] == jtype) maxmol_me = molecule[i]; + } + } + + MPI_Allreduce(&minmol_me,&minmol,1,MPI_LMP_TAGINT,MPI_MIN,world); + MPI_Allreduce(&maxmol_me,&maxmol,1,MPI_LMP_TAGINT,MPI_MAX,world); + + // check if all cutoffs involving itype and jtype are the same + // if not, reneighboring will be needed after swaps + + double **cutsq = force->pair->cutsq; + + unequal_cutoffs = false; + for (int ktype = 1; ktype <= atom->ntypes; ktype++) + if (cutsq[itype][ktype] != cutsq[jtype][ktype]) unequal_cutoffs = true; +} + +/* ---------------------------------------------------------------------- + perform Ncycle Monte Carlo swaps +------------------------------------------------------------------------- */ + +void FixMolSwap::pre_exchange() +{ + // just return if should not be called on this timestep + + if (next_reneighbor != update->ntimestep) return; + + // insure current system is ready to compute energy + + if (domain->triclinic) domain->x2lamda(atom->nlocal); + domain->pbc(); + comm->exchange(); + comm->borders(); + if (domain->triclinic) domain->lamda2x(atom->nlocal+atom->nghost); + if (modify->n_pre_neighbor) modify->pre_neighbor(); + neighbor->build(1); + + // energy_stored = energy of current state + // will be updated after accepted swaps + + energy_stored = energy_full(); + + // attempt Ncycle molecule swaps + + int nsuccess = 0; + for (int m = 0; m < ncycles; m++) nsuccess += attempt_swap(); + + nswap_attempts += ncycles; + nswap_successes += nsuccess; + + next_reneighbor = update->ntimestep + nevery; +} + +/* ---------------------------------------------------------------------- + attempt a swap of atom types within a random molecule + compare before/after energy and accept/reject the swap +------------------------------------------------------------------------- */ + +int FixMolSwap::attempt_swap() +{ + // pre-swap energy + + double energy_before = energy_stored; + + // pick a random molecule + // swap all of its eligible itype & jtype atoms + + tagint molID = + minmol + static_cast (random->uniform() * (maxmol-minmol+1)); + if (molID < maxmol) molID = maxmol; + + int *mask = atom->mask; + int *type = atom->type; + tagint *molecule = atom->molecule; + int nlocal = atom->nlocal; + + for (int i = 0; i < nlocal; i++) { + if (molecule[i] != molID) continue; + if (!(mask[i] & groupbit)) continue; + if (type[i] == itype) type[i] = jtype; + else if (type[i] == jtype) type[i] = itype; + } + + // if unequal_cutoffs, call comm->borders() and rebuild neighbor list + // else communicate ghost atoms + // call to comm->exchange() is a no-op but clears ghost atoms + + if (unequal_cutoffs) { + if (domain->triclinic) domain->x2lamda(atom->nlocal); + comm->exchange(); + comm->borders(); + if (domain->triclinic) domain->lamda2x(atom->nlocal+atom->nghost); + if (modify->n_pre_neighbor) modify->pre_neighbor(); + neighbor->build(1); + } else { + comm->forward_comm_fix(this); + } + + // post-swap energy + + double energy_after = energy_full(); + + // swap accepted + + if (random->uniform() < exp(beta*(energy_before - energy_after))) { + energy_stored = energy_after; + return 1; + + // swap not accepted + // restore the swapped itype & jtype atoms + // do not need to re-call comm->borders() and rebuild neighbor list + // since will be done on next cycle or in Verlet when this fix is done + + } else { + for (int i = 0; i < nlocal; i++) { + if (molecule[i] != molID) continue; + if (!(mask[i] & groupbit)) continue; + if (type[i] == itype) type[i] = jtype; + else if (type[i] == jtype) type[i] = itype; + } + } + + return 0; +} + +/* ---------------------------------------------------------------------- + compute system potential energy before or after a swap +------------------------------------------------------------------------- */ + +double FixMolSwap::energy_full() +{ + int eflag = 1; + int vflag = 0; + + if (modify->n_pre_force) modify->pre_force(vflag); + + if (force->pair) force->pair->compute(eflag,vflag); + + if (atom->molecular != Atom::ATOMIC) { + if (force->bond) force->bond->compute(eflag,vflag); + if (force->angle) force->angle->compute(eflag,vflag); + if (force->dihedral) force->dihedral->compute(eflag,vflag); + if (force->improper) force->improper->compute(eflag,vflag); + } + + if (force->kspace) force->kspace->compute(eflag,vflag); + + if (modify->n_post_force) modify->post_force(vflag); + + update->eflag_global = update->ntimestep; + double total_energy = c_pe->compute_scalar(); + + return total_energy; +} + +/* ---------------------------------------------------------------------- */ + +int FixMolSwap::pack_forward_comm(int n, int *list, double *buf, int /*pbc_flag*/, int * /*pbc*/) +{ + int i,j,m; + + int *type = atom->type; + double *q = atom->q; + + m = 0; + + if (atom->q_flag) { + for (i = 0; i < n; i++) { + j = list[i]; + buf[m++] = type[j]; + buf[m++] = q[j]; + } + } else { + for (i = 0; i < n; i++) { + j = list[i]; + buf[m++] = type[j]; + } + } + + return m; +} + +/* ---------------------------------------------------------------------- */ + +void FixMolSwap::unpack_forward_comm(int n, int first, double *buf) +{ + int i,m,last; + + int *type = atom->type; + double *q = atom->q; + + m = 0; + last = first + n; + + if (atom->q_flag) { + for (i = first; i < last; i++) { + type[i] = static_cast (buf[m++]); + q[i] = buf[m++]; + } + } else { + for (i = first; i < last; i++) + type[i] = static_cast (buf[m++]); + } +} + +/* ---------------------------------------------------------------------- + return acceptance ratio +------------------------------------------------------------------------- */ + +double FixMolSwap::compute_vector(int n) +{ + if (n == 0) return nswap_attempts; + if (n == 1) return nswap_successes; + return 0.0; +} + +/* ---------------------------------------------------------------------- + pack entire state of Fix into one write +------------------------------------------------------------------------- */ + +void FixMolSwap::write_restart(FILE *fp) +{ + int n = 0; + double list[6]; + list[n++] = random->state(); + list[n++] = ubuf(next_reneighbor).d; + list[n++] = nswap_attempts; + list[n++] = nswap_successes; + list[n++] = ubuf(update->ntimestep).d; + + if (comm->me == 0) { + int size = n * sizeof(double); + fwrite(&size,sizeof(int),1,fp); + fwrite(list,sizeof(double),n,fp); + } +} + +/* ---------------------------------------------------------------------- + use state info from restart file to restart the Fix +------------------------------------------------------------------------- */ + +void FixMolSwap::restart(char *buf) +{ + int n = 0; + double *list = (double *) buf; + + seed = static_cast (list[n++]); + random->reset(seed); + + next_reneighbor = (bigint) ubuf(list[n++]).i; + + nswap_attempts = static_cast(list[n++]); + nswap_successes = static_cast(list[n++]); + + bigint ntimestep_restart = (bigint) ubuf(list[n++]).i; + if (ntimestep_restart != update->ntimestep) + error->all(FLERR,"Must not reset timestep when restarting fix mol/swap"); +} diff --git a/src/MC/fix_mol_swap.h b/src/MC/fix_mol_swap.h new file mode 100644 index 0000000000..c84ed815c4 --- /dev/null +++ b/src/MC/fix_mol_swap.h @@ -0,0 +1,113 @@ +/* -*- c++ -*- ---------------------------------------------------------- + LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator + https://www.lammps.org/, 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 +// clang-format off +FixStyle(mol/swap,FixMolSwap); +// clang-format on +#else + +#ifndef LMP_FIX_MOL_SWAP_H +#define LMP_FIX_MOL_SWAP_H + +#include "fix.h" + +namespace LAMMPS_NS { + +class FixMolSwap : public Fix { + public: + FixMolSwap(class LAMMPS *, int, char **); + ~FixMolSwap(); + int setmask(); + void init(); + void pre_exchange(); + int pack_forward_comm(int, int *, double *, int, int *); + void unpack_forward_comm(int, int, double *); + double compute_vector(int); + void write_restart(FILE *); + void restart(char *); + + private: + int nevery, ncycles, seed; + int itype, jtype; + double temperature; + + bool unequal_cutoffs; + tagint minmol,maxmol; + double nswap_attempts; + double nswap_successes; + double beta; + double energy_stored; + + class RanPark *random; + class Compute *c_pe; + + int attempt_swap(); + double energy_full(); +}; + +} // namespace LAMMPS_NS + +#endif +#endif + +/* ERROR/WARNING messages: + +E: Illegal ... command + +Self-explanatory. Check the input script syntax and compare to the +documentation for the command. You can use -echo screen as a +command-line option when running LAMMPS to see the offending line. + +E: Region ID for fix atom/swap does not exist + +Self-explanatory. + +E: Must specify at least 2 types in fix atom/swap command + +Self-explanatory. + +E: Need nswaptypes mu values in fix atom/swap command + +Self-explanatory. + +E: Only 2 types allowed when not using semi-grand in fix atom/swap command + +Self-explanatory. + +E: Mu not allowed when not using semi-grand in fix atom/swap command + +Self-explanatory. + +E: Invalid atom type in fix atom/swap command + +The atom type specified in the atom/swap command does not exist. + +E: All atoms of a swapped type must have the same charge. + +Self-explanatory. + +E: At least one atom of each swapped type must be present to define charges. + +Self-explanatory. + +E: All atoms of a swapped type must have same charge. + +Self-explanatory. + +E: Cannot do atom/swap on atoms in atom_modify first group + +This is a restriction due to the way atoms are organized in a list to +enable the atom_modify first command. + +*/ From fc5920812f9a6a1e7f10f3646cf886828e044bf9 Mon Sep 17 00:00:00 2001 From: Steve Plimpton Date: Tue, 5 Oct 2021 13:07:34 -0600 Subject: [PATCH 067/372] new group arg for delete_atoms porosity --- doc/src/delete_atoms.rst | 24 ++++++++++++++++-------- src/delete_atoms.cpp | 35 +++++++++++++++++++++++++---------- 2 files changed, 41 insertions(+), 18 deletions(-) diff --git a/doc/src/delete_atoms.rst b/doc/src/delete_atoms.rst index d47743071b..e25e314310 100644 --- a/doc/src/delete_atoms.rst +++ b/doc/src/delete_atoms.rst @@ -20,8 +20,10 @@ Syntax cutoff = delete one atom from pairs of atoms within the cutoff (distance units) group1-ID = one atom in pair must be in this group group2-ID = other atom in pair must be in this group - *porosity* args = region-ID fraction seed + *porosity* args = group-ID region-ID fraction seed + group-ID = group within which to perform deletions region-ID = region within which to perform deletions + or NULL to only impose the group criterion fraction = delete this fraction of atoms seed = random number seed (positive integer) @@ -43,7 +45,8 @@ Examples delete_atoms region sphere compress no delete_atoms overlap 0.3 all all delete_atoms overlap 0.5 solvent colloid - delete_atoms porosity cube 0.1 482793 bond yes + delete_atoms porosity all cube 0.1 482793 bond yes + delete_atoms porosity polymer cube 0.1 482793 bond yes Description """"""""""" @@ -76,12 +79,17 @@ have occurred that no atom pairs within the cutoff will remain minimum number of atoms will be deleted, or that the same atoms will be deleted when running on different numbers of processors. -For style *porosity* a specified *fraction* of atoms are deleted -within the specified region. For example, if fraction is 0.1, then -10% of the atoms will be deleted. The atoms to delete are chosen -randomly. There is no guarantee that the exact fraction of atoms will -be deleted, or that the same atoms will be deleted when running on -different numbers of processors. +For style *porosity* a specified *fraction* of atoms are deleted which +are both in the specified group and within the specified region. The +region-ID can be specified as NULL to only impose the group +criterion. Likewise, specifying the group-ID as *all* will only impose +the region criterion. + +For example, if fraction is 0.1, then 10% of the eligible atoms will +be deleted. The atoms to delete are chosen randomly. There is no +guarantee that the exact fraction of atoms will be deleted, or that +the same atoms will be deleted when running on different numbers of +processors. If the *compress* keyword is set to *yes*, then after atoms are deleted, then atom IDs are re-assigned so that they run from 1 to the diff --git a/src/delete_atoms.cpp b/src/delete_atoms.cpp index 55b05e3d98..ad6efa13f0 100644 --- a/src/delete_atoms.cpp +++ b/src/delete_atoms.cpp @@ -422,15 +422,23 @@ void DeleteAtoms::delete_overlap(int narg, char **arg) void DeleteAtoms::delete_porosity(int narg, char **arg) { - if (narg < 4) error->all(FLERR,"Illegal delete_atoms command"); + if (narg < 5) error->all(FLERR,"Illegal delete_atoms command"); - int iregion = domain->find_region(arg[1]); - if (iregion == -1) error->all(FLERR,"Could not find delete_atoms region ID"); - domain->regions[iregion]->prematch(); + int igroup = group->find(arg[1]); + if (igroup == -1) error->all(FLERR,"Could not find delete_atoms group ID"); - double porosity_fraction = utils::numeric(FLERR,arg[2],false,lmp); - int seed = utils::inumeric(FLERR,arg[3],false,lmp); - options(narg-4,&arg[4]); + int iregion,regionflag; + if (strcmp(arg[2],"NULL") == 0) regionflag = 0; + else { + regionflag = 1; + int iregion = domain->find_region(arg[2]); + if (iregion == -1) error->all(FLERR,"Could not find delete_atoms region ID"); + domain->regions[iregion]->prematch(); + } + + double porosity_fraction = utils::numeric(FLERR,arg[3],false,lmp); + int seed = utils::inumeric(FLERR,arg[4],false,lmp); + options(narg-5,&arg[5]); RanMars *random = new RanMars(lmp,seed + comm->me); @@ -440,11 +448,18 @@ void DeleteAtoms::delete_porosity(int narg, char **arg) memory->create(dlist,nlocal,"delete_atoms:dlist"); for (int i = 0; i < nlocal; i++) dlist[i] = 0; - double **x = atom->x; + // delete fraction of atoms in both group and region - for (int i = 0; i < nlocal; i++) - if (domain->regions[iregion]->match(x[i][0],x[i][1],x[i][2])) + double **x = atom->x; + int *mask = atom->mask; + + int groupbit = group->bitmask[igroup]; + + for (int i = 0; i < nlocal; i++) { + if (!(mask[i] & groupbit)) continue; + if (regionflag && domain->regions[iregion]->match(x[i][0],x[i][1],x[i][2])) if (random->uniform() <= porosity_fraction) dlist[i] = 1; + } delete random; } From af070aa351938f688ffef63be40f6712e1bcbbec Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Tue, 5 Oct 2021 15:44:58 -0400 Subject: [PATCH 068/372] add support for seeking to the end of a file --- src/platform.cpp | 10 ++++++++-- src/platform.h | 5 +++++ unittest/utils/test_platform.cpp | 4 +++- 3 files changed, 16 insertions(+), 3 deletions(-) diff --git a/src/platform.cpp b/src/platform.cpp index 2f04ee0068..866e34b4cc 100644 --- a/src/platform.cpp +++ b/src/platform.cpp @@ -767,9 +767,15 @@ bigint platform::ftell(FILE *fp) int platform::fseek(FILE *fp, bigint pos) { #if defined(_WIN32) - return ::_fseeki64(fp, (__int64) pos, SEEK_SET); + if (pos == platform::END_OF_FILE) + return ::_fseeki64(fp, 0, SEEK_END); + else + return ::_fseeki64(fp, (__int64) pos, SEEK_SET); #else - return ::fseek(fp, (long) pos, SEEK_SET); + if (pos == platform::END_OF_FILE) + return ::fseek(fp, 0, SEEK_END); + else + return ::fseek(fp, (long) pos, SEEK_SET); #endif } diff --git a/src/platform.h b/src/platform.h index b7c5d28561..97057006ad 100644 --- a/src/platform.h +++ b/src/platform.h @@ -263,7 +263,12 @@ namespace platform { bigint ftell(FILE *fp); + /*! constant to seek to the end of the file */ + constexpr bigint END_OF_FILE = -1; + /*! Set absolute file position + * + * If the absolute position is END_OF_FILE, then position at the end of the file. * * \param fp FILE pointer of the given file * \param pos new position of the FILE pointer diff --git a/unittest/utils/test_platform.cpp b/unittest/utils/test_platform.cpp index 6c17b8876e..c5d04d3b94 100644 --- a/unittest/utils/test_platform.cpp +++ b/unittest/utils/test_platform.cpp @@ -170,7 +170,9 @@ TEST(Platform, fseek_ftell) ASSERT_EQ(platform::fseek(fp, 15), 0); ASSERT_EQ(fgetc(fp), '6'); fflush(fp); - fseek(fp, -1, SEEK_END); + ASSERT_EQ(platform::fseek(fp, platform::END_OF_FILE), 0); + ASSERT_EQ(platform::ftell(fp), 21); + ASSERT_EQ(platform::fseek(fp, 20), 0); ASSERT_EQ(fgetc(fp), 0); ASSERT_EQ(platform::ftell(fp), 21); fclose(fp); From 5128eb7b438ca96c1972336cf42f6560d8f31992 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Tue, 5 Oct 2021 15:45:42 -0400 Subject: [PATCH 069/372] port read/write_restart to use the platform namespace --- src/read_restart.cpp | 26 ++++++++++++-------------- src/write_restart.cpp | 2 +- 2 files changed, 13 insertions(+), 15 deletions(-) diff --git a/src/read_restart.cpp b/src/read_restart.cpp index dd36175a90..caa19d46fb 100644 --- a/src/read_restart.cpp +++ b/src/read_restart.cpp @@ -35,7 +35,6 @@ #include "update.h" #include -#include #include "lmprestart.h" @@ -117,6 +116,7 @@ void ReadRestart::command(int narg, char **arg) magic_string(); endian(); format_revision(); + check_eof_magic(); // read header info which creates simulation box @@ -557,20 +557,16 @@ std::string ReadRestart::file_search(const std::string &inpfile) if (loc != std::string::npos) { // convert pattern to equivalent regexp pattern.replace(loc,1,"\\d+"); - struct dirent *ep; - DIR *dp = opendir(dirname.c_str()); - if (dp == nullptr) - error->one(FLERR,"Cannot open directory {} to search for restart file: {}", - dirname, utils::getsyserror()); - while ((ep = readdir(dp))) { - std::string candidate(ep->d_name); + if (!platform::path_is_directory(dirname)) + error->one(FLERR,"Cannot open directory {} to search for restart file: {}",dirname); + + for (const auto &candidate : platform::list_directory(dirname)) { if (utils::strmatch(candidate,pattern)) { bigint num = ATOBIGINT(utils::strfind(candidate.substr(loc),"\\d+").c_str()); if (num > maxnum) maxnum = num; } } - closedir(dp); if (maxnum < 0) error->one(FLERR,"Found no restart file matching pattern"); filename.replace(filename.find('*'),1,std::to_string(maxnum)); } @@ -1084,11 +1080,11 @@ void ReadRestart::file_layout() flag = read_int(); } - // if MPI-IO file, broadcast the end of the header offste + // if MPI-IO file, broadcast the end of the header offset // this allows all ranks to compute offset to their data if (mpiioflag) { - if (me == 0) headerOffset = ftell(fp); + if (me == 0) headerOffset = platform::ftell(fp); MPI_Bcast(&headerOffset,1,MPI_LMP_BIGINT,0,world); } } @@ -1152,10 +1148,12 @@ void ReadRestart::check_eof_magic() // read magic string at end of file and restore file pointer if (me == 0) { - long curpos = ftell(fp); - fseek(fp,(long)-n,SEEK_END); + bigint curpos = platform::ftell(fp); + platform::fseek(fp,platform::END_OF_FILE); + bigint offset = platform::ftell(fp) - n; + platform::fseek(fp,offset); utils::sfread(FLERR,str,sizeof(char),n,fp,nullptr,error); - fseek(fp,curpos,SEEK_SET); + platform::fseek(fp,curpos); } MPI_Bcast(str,n,MPI_CHAR,0,world); diff --git a/src/write_restart.cpp b/src/write_restart.cpp index 7f73d868ff..4333fa5416 100644 --- a/src/write_restart.cpp +++ b/src/write_restart.cpp @@ -595,7 +595,7 @@ void WriteRestart::file_layout(int send_size) // this allows all ranks to compute offset to their data if (mpiioflag) { - if (me == 0) headerOffset = ftell(fp); + if (me == 0) headerOffset = platform::ftell(fp); MPI_Bcast(&headerOffset,1,MPI_LMP_BIGINT,0,world); } } From e3e82df9954edb71acf1d9023ce034edb4eedc64 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Tue, 5 Oct 2021 16:36:06 -0400 Subject: [PATCH 070/372] port "embedded" shell commands to use platform functions --- src/input.cpp | 85 ++++++++++++++++----------------------------------- 1 file changed, 27 insertions(+), 58 deletions(-) diff --git a/src/input.cpp b/src/input.cpp index c9b471f599..21c092f356 100644 --- a/src/input.cpp +++ b/src/input.cpp @@ -49,11 +49,6 @@ #include #include #include -#include - -#ifdef _WIN32 -#include -#endif using namespace LAMMPS_NS; @@ -1164,15 +1159,6 @@ void Input::quit() /* ---------------------------------------------------------------------- */ -char *shell_failed_message(const char* cmd, int errnum) -{ - std::string errmsg = fmt::format("Shell command '{}' failed with error '{}'", - cmd, strerror(errnum)); - char *msg = new char[errmsg.size()+1]; - strcpy(msg, errmsg.c_str()); - return msg; -} - void Input::shell() { int rv,err; @@ -1181,62 +1167,47 @@ void Input::shell() if (strcmp(arg[0],"cd") == 0) { if (narg != 2) error->all(FLERR,"Illegal shell cd command"); - rv = (chdir(arg[1]) < 0) ? errno : 0; + rv = (platform::chdir(arg[1]) < 0) ? errno : 0; MPI_Reduce(&rv,&err,1,MPI_INT,MPI_MAX,0,world); + errno = err; if (me == 0 && err != 0) { - char *message = shell_failed_message("cd",err); - error->warning(FLERR,message); - delete[] message; + error->warning(FLERR, "Shell command 'cd {}' failed with error '{}'", arg[1], utils::getsyserror()); } - } else if (strcmp(arg[0],"mkdir") == 0) { if (narg < 2) error->all(FLERR,"Illegal shell mkdir command"); - if (me == 0) + if (me == 0) { for (int i = 1; i < narg; i++) { -#if defined(_WIN32) - rv = _mkdir(arg[i]); -#else - rv = mkdir(arg[i], S_IRWXU | S_IRGRP | S_IXGRP); -#endif - if (rv < 0) { - char *message = shell_failed_message("mkdir",errno); - error->warning(FLERR,message); - delete[] message; - } + if (platform::mkdir(arg[i]) < 0) + error->warning(FLERR, "Shell command 'mkdir {}' failed with error '{}'", + arg[i],utils::getsyserror()); } - + } } else if (strcmp(arg[0],"mv") == 0) { if (narg != 3) error->all(FLERR,"Illegal shell mv command"); - rv = (rename(arg[1],arg[2]) < 0) ? errno : 0; - MPI_Reduce(&rv,&err,1,MPI_INT,MPI_MAX,0,world); - if (me == 0 && err != 0) { - char *message = shell_failed_message("mv",err); - error->warning(FLERR,message); - delete[] message; + if (me == 0) { + if (rename(arg[1],arg[2]) < 0) { + error->warning(FLERR, "Shell command 'mv {} {}' failed with error '{}'", + arg[1],arg[2],utils::getsyserror()); + } } - } else if (strcmp(arg[0],"rm") == 0) { if (narg < 2) error->all(FLERR,"Illegal shell rm command"); - if (me == 0) + if (me == 0) { for (int i = 1; i < narg; i++) { - if (unlink(arg[i]) < 0) { - char *message = shell_failed_message("rm",errno); - error->warning(FLERR,message); - delete[] message; - } + if (platform::unlink(arg[i]) < 0) + error->warning(FLERR, "Shell command 'rm {}' failed with error '{}'", + arg[i], utils::getsyserror()); } - + } } else if (strcmp(arg[0],"rmdir") == 0) { if (narg < 2) error->all(FLERR,"Illegal shell rmdir command"); - if (me == 0) + if (me == 0) { for (int i = 1; i < narg; i++) { - if (rmdir(arg[i]) < 0) { - char *message = shell_failed_message("rmdir",errno); - error->warning(FLERR,message); - delete[] message; - } + if (platform::rmdir(arg[i]) < 0) + error->warning(FLERR, "Shell command 'rmdir {}' failed with error '{}'", + arg[i], utils::getsyserror()); } - + } } else if (strcmp(arg[0],"putenv") == 0) { if (narg < 2) error->all(FLERR,"Illegal shell putenv command"); for (int i = 1; i < narg; i++) { @@ -1244,13 +1215,11 @@ void Input::shell() if (arg[i]) rv = platform::putenv(arg[i]); rv = (rv < 0) ? errno : 0; MPI_Reduce(&rv,&err,1,MPI_INT,MPI_MAX,0,world); - if (me == 0 && err != 0) { - char *message = shell_failed_message("putenv",err); - error->warning(FLERR,message); - delete[] message; - } + errno = err; + if (me == 0 && err != 0) + error->warning(FLERR, "Shell command 'putenv {}' failed with error '{}'", + arg[i], utils::getsyserror()); } - // use work string to concat args back into one string separated by spaces // invoke string in shell via system() From 0c6707bf0c77b980507e3944de9844928e643303 Mon Sep 17 00:00:00 2001 From: Stan Moore Date: Tue, 5 Oct 2021 14:49:30 -0600 Subject: [PATCH 071/372] Fix compile issue with bond_class2_kokkos and UVM-enabled --- src/KOKKOS/bond_class2_kokkos.cpp | 20 ++++++++++---------- src/KOKKOS/bond_class2_kokkos.h | 9 +++++---- 2 files changed, 15 insertions(+), 14 deletions(-) diff --git a/src/KOKKOS/bond_class2_kokkos.cpp b/src/KOKKOS/bond_class2_kokkos.cpp index e538c8e045..b4e87b4119 100644 --- a/src/KOKKOS/bond_class2_kokkos.cpp +++ b/src/KOKKOS/bond_class2_kokkos.cpp @@ -68,14 +68,14 @@ void BondClass2Kokkos::compute(int eflag_in, int vflag_in) //if(k_eatom.extent(0)destroy_kokkos(k_eatom,eatom); memoryKK->create_kokkos(k_eatom,eatom,maxeatom,"improper:eatom"); - d_eatom = k_eatom.template view(); + d_eatom = k_eatom.template view(); //} } if (vflag_atom) { //if(k_vatom.extent(0)destroy_kokkos(k_vatom,vatom); memoryKK->create_kokkos(k_vatom,vatom,maxvatom,"improper:vatom"); - d_vatom = k_vatom.template view(); + d_vatom = k_vatom.template view(); //} } @@ -210,10 +210,10 @@ void BondClass2Kokkos::coeff(int narg, char **arg) BondClass2::coeff(narg, arg); int n = atom->nbondtypes; - Kokkos::DualView k_k2("BondClass2::k2",n+1); - Kokkos::DualView k_k3("BondClass2::k3",n+1); - Kokkos::DualView k_k4("BondClass2::k4",n+1); - Kokkos::DualView k_r0("BondClass2::r0",n+1); + typename AT::tdual_ffloat_1d k_k2("BondClass2::k2",n+1); + typename AT::tdual_ffloat_1d k_k3("BondClass2::k3",n+1); + typename AT::tdual_ffloat_1d k_k4("BondClass2::k4",n+1); + typename AT::tdual_ffloat_1d k_r0("BondClass2::r0",n+1); d_k2 = k_k2.template view(); d_k3 = k_k3.template view(); @@ -247,10 +247,10 @@ void BondClass2Kokkos::read_restart(FILE *fp) BondClass2::read_restart(fp); int n = atom->nbondtypes; - Kokkos::DualView k_k2("BondClass2::k2",n+1); - Kokkos::DualView k_k3("BondClass2::k3",n+1); - Kokkos::DualView k_k4("BondClass2::k4",n+1); - Kokkos::DualView k_r0("BondClass2::r0",n+1); + typename AT::tdual_ffloat_1d k_k2("BondClass2::k2",n+1); + typename AT::tdual_ffloat_1d k_k3("BondClass2::k3",n+1); + typename AT::tdual_ffloat_1d k_k4("BondClass2::k4",n+1); + typename AT::tdual_ffloat_1d k_r0("BondClass2::r0",n+1); d_k2 = k_k2.template view(); d_k3 = k_k3.template view(); diff --git a/src/KOKKOS/bond_class2_kokkos.h b/src/KOKKOS/bond_class2_kokkos.h index 52136030aa..529046845f 100644 --- a/src/KOKKOS/bond_class2_kokkos.h +++ b/src/KOKKOS/bond_class2_kokkos.h @@ -67,10 +67,11 @@ class BondClass2Kokkos : public BondClass2 { typename Kokkos::View::value,Kokkos::MemoryTraits > f; typename AT::t_int_2d bondlist; - Kokkos::DualView k_eatom; - Kokkos::DualView k_vatom; - Kokkos::View::value,Kokkos::MemoryTraits > d_eatom; - Kokkos::View::value,Kokkos::MemoryTraits > d_vatom; + typedef typename KKDevice::value KKDeviceType; + Kokkos::DualView k_eatom; + Kokkos::DualView k_vatom; + Kokkos::View > d_eatom; + Kokkos::View > d_vatom; int nlocal,newton_bond; int eflag,vflag; From 528050aa087654c428dc72f3d80ef299af54ed1b Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Tue, 5 Oct 2021 17:57:38 -0400 Subject: [PATCH 072/372] use platform namespace to delete file --- src/write_coeff.cpp | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/write_coeff.cpp b/src/write_coeff.cpp index e030148901..6f53a97e8f 100644 --- a/src/write_coeff.cpp +++ b/src/write_coeff.cpp @@ -26,7 +26,6 @@ #include #include -#include using namespace LAMMPS_NS; @@ -170,8 +169,8 @@ void WriteCoeff::command(int narg, char **arg) } fclose(one); fclose(two); - unlink(file); + platform::unlink(file); } - delete [] file; + delete[] file; } From fcdabe0002d7af458dc869a120233dfe52704229 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Tue, 5 Oct 2021 17:58:27 -0400 Subject: [PATCH 073/372] implement a platform neutral usleep() using C++11 --- src/platform.cpp | 10 ++++++++++ src/platform.h | 9 +++++++++ src/variable.cpp | 7 +++---- 3 files changed, 22 insertions(+), 4 deletions(-) diff --git a/src/platform.cpp b/src/platform.cpp index 866e34b4cc..9039816f12 100644 --- a/src/platform.cpp +++ b/src/platform.cpp @@ -61,7 +61,9 @@ #endif //////////////////////////////////////////////////////////////////////// +#include #include +#include /* ------------------------------------------------------------------ */ @@ -172,6 +174,14 @@ double platform::walltime() return wtime; } +/* ---------------------------------------------------------------------- + sleep with microsecond resolution +------------------------------------------------------------------------ */ +void platform::usleep(int usec) +{ + return std::this_thread::sleep_for(std::chrono::microseconds(usec)); +} + /* ---------------------------------------------------------------------- get Operating system and version info ------------------------------------------------------------------------- */ diff --git a/src/platform.h b/src/platform.h index 97057006ad..31710caf2e 100644 --- a/src/platform.h +++ b/src/platform.h @@ -42,6 +42,15 @@ namespace platform { double walltime(); + + /*! Suspend execution for a microsecond interval + * + * This emulates the usleep(3) BSD function call also mentioned in POSIX.1-2001. + * + * \param usec length of delay in microseconds */ + + void usleep(int usec); + /*! Return string with the operating system version and architecture info * * \return string with info about the OS and the platform is is running on */ diff --git a/src/variable.cpp b/src/variable.cpp index 1981d000c3..22f792b5ec 100644 --- a/src/variable.cpp +++ b/src/variable.cpp @@ -39,7 +39,6 @@ #include #include #include -#include #include using namespace LAMMPS_NS; @@ -692,11 +691,11 @@ int Variable::next(int narg, char **arg) int seed = 12345 + universe->me + which[find(arg[0])]; if (!random) random = new RanMars(lmp,seed); int delay = (int) (1000000*random->uniform()); - usleep(delay); + platform::usleep(delay); while (1) { if (!rename("tmp.lammps.variable","tmp.lammps.variable.lock")) break; delay = (int) (1000000*random->uniform()); - usleep(delay); + platform::usleep(delay); } // if the file cannot be found, we may have a race with some @@ -719,7 +718,7 @@ int Variable::next(int narg, char **arg) break; } delay = (int) (1000000*random->uniform()); - usleep(delay); + platform::usleep(delay); } delete random; random = nullptr; From b2c4f08bbcae26e68e5744ecaaeb1fc955ef1ea6 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Tue, 5 Oct 2021 21:52:52 -0400 Subject: [PATCH 074/372] use C++11 functionality to determine wall time --- src/platform.cpp | 21 +++++---------------- src/platform.h | 17 +++++++++++------ 2 files changed, 16 insertions(+), 22 deletions(-) diff --git a/src/platform.cpp b/src/platform.cpp index 9039816f12..18d760b34b 100644 --- a/src/platform.cpp +++ b/src/platform.cpp @@ -106,6 +106,10 @@ static const zip_info &find_zip_type(const std::string &file) /* ------------------------------------------------------------------ */ +// set reference time stamp during executable/library init. +// should provide better resolution than using epoch, if the system clock supports it. +static auto initial_time = std::chrono::steady_clock::now(); + using namespace LAMMPS_NS; // get CPU time @@ -156,22 +160,7 @@ double platform::cputime() ------------------------------------------------------------------------ */ double platform::walltime() { - double wtime; - -#if defined(_WIN32) - - wtime = GetTickCount64() * 0.001; - -#else - - struct timeval tv; - - gettimeofday(&tv, nullptr); - wtime = 1.0 * tv.tv_sec + 1.0e-6 * tv.tv_usec; - -#endif - - return wtime; + return std::chrono::duration(std::chrono::steady_clock::now() - initial_time).count(); } /* ---------------------------------------------------------------------- diff --git a/src/platform.h b/src/platform.h index 31710caf2e..ef45ceff9b 100644 --- a/src/platform.h +++ b/src/platform.h @@ -27,25 +27,30 @@ namespace platform { /*! Return the consumed CPU time for the current process in seconds * * This is a wrapper around the POSIX function getrusage() and its Windows equivalent. - * It is to be used in a similar fashion than MPI_Wtime(). + * It is to be used in a similar fashion than MPI_Wtime(). Its resolution may + * be rather low so it can only be trusted when observing processes consuming at + * seconds or more of CPU time. * - * \return used CPU time in second */ + * \return used CPU time in seconds */ double cputime(); /*! Return the wall clock state for the current process in seconds * - * This is a wrapper around the gettimeofday() function and its Windows equivalent. - * It is to be used in a similar fashion than MPI_Wtime(). + * This this clock is counting continuous time is initialized during + * Load of the executable/library. Its absolute value must be considered + * arbitrary and thus elapsed wall times are measured in taking differences. + * It is therefore to be used in a similar fashion as MPI_Wtime() but + * has a different offset, usually leading to better resolution. * - * \return wall clock time in second */ + * \return wall clock time in seconds */ double walltime(); - /*! Suspend execution for a microsecond interval * * This emulates the usleep(3) BSD function call also mentioned in POSIX.1-2001. + * This is not a precise delay; it may be longer, but not shorter. * * \param usec length of delay in microseconds */ From 6f2076a9b8ab308963d1f0bd1040c8aefa12bf0c Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Tue, 5 Oct 2021 21:57:53 -0400 Subject: [PATCH 075/372] update docs --- doc/src/Developer_platform.rst | 6 ++++++ doc/utils/sphinx-config/false_positives.txt | 1 + src/tokenizer.cpp | 4 ++-- 3 files changed, 9 insertions(+), 2 deletions(-) diff --git a/doc/src/Developer_platform.rst b/doc/src/Developer_platform.rst index a31e9d1c72..74ad4c1aac 100644 --- a/doc/src/Developer_platform.rst +++ b/doc/src/Developer_platform.rst @@ -18,6 +18,9 @@ Time functions .. doxygenfunction:: walltime :project: progguide +.. doxygenfunction:: usleep + :project: progguide + Platform information functions ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ @@ -88,6 +91,9 @@ File and path functions and global constants Standard I/O function wrappers ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +.. doxygenvariable:: END_OF_FILE + :project: progguide + .. doxygenfunction:: ftell :project: progguide diff --git a/doc/utils/sphinx-config/false_positives.txt b/doc/utils/sphinx-config/false_positives.txt index 76127104e0..107e252074 100644 --- a/doc/utils/sphinx-config/false_positives.txt +++ b/doc/utils/sphinx-config/false_positives.txt @@ -3444,6 +3444,7 @@ usec uSemiParallel userguide username +usleep usr util utils diff --git a/src/tokenizer.cpp b/src/tokenizer.cpp index 43660d68ec..71b4ad610e 100644 --- a/src/tokenizer.cpp +++ b/src/tokenizer.cpp @@ -46,8 +46,8 @@ TokenizerException::TokenizerException(const std::string &msg, const std::string \endverbatim * - * \param str string to be processed - * \param separators string with separator characters (default: " \t\r\n\f") */ + * \param str string to be processed + * \param _separators string with separator characters (default: " \t\r\n\f") */ Tokenizer::Tokenizer(const std::string &str, const std::string &_separators) : text(str), separators(_separators), start(0), ntokens(std::string::npos) From 087c1b3a65ac45e70f2259540be861ba3cc8f169 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Tue, 5 Oct 2021 22:30:45 -0400 Subject: [PATCH 076/372] revive skipped code to detect OS revisions --- src/platform.cpp | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/platform.cpp b/src/platform.cpp index 18d760b34b..1936baaf87 100644 --- a/src/platform.cpp +++ b/src/platform.cpp @@ -16,6 +16,7 @@ * the "utils" namespace with convenience and utility functions. */ #include "platform.h" +#include "text_file_reader.h" #include "utils.h" #if HAVE_MPI @@ -227,14 +228,13 @@ std::string platform::os_info() // try to get OS distribution name, if available buf = ut.sysname; -#if 0 // disable until this is integrated into LAMMPS and TextFileReader becomes available if (platform::file_is_readable("/etc/os-release")) { try { TextFileReader reader("/etc/os-release",""); while (1) { auto words = reader.next_values(0,"="); if ((words.count() > 1) && (words.next_string() == "PRETTY_NAME")) { - distro += " " + utils::trim(words.next_string()); + buf += " " + utils::trim(words.next_string()); break; } } @@ -242,7 +242,6 @@ std::string platform::os_info() ; // EOF but keyword not found } } -#endif buf += std::string(" ") + ut.release + " " + ut.machine; #endif From cc2d23de217624064f902127c0466387182455db Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Tue, 5 Oct 2021 22:31:06 -0400 Subject: [PATCH 077/372] use platform::cputtime() --- src/info.cpp | 18 +----------------- src/timer.cpp | 52 +++++---------------------------------------------- 2 files changed, 6 insertions(+), 64 deletions(-) diff --git a/src/info.cpp b/src/info.cpp index 340ba15b0f..01ac7a095c 100644 --- a/src/info.cpp +++ b/src/info.cpp @@ -636,23 +636,7 @@ void Info::command(int narg, char **arg) if (flags & TIME) { double wallclock = MPI_Wtime() - lmp->initclock; - double cpuclock = 0.0; - -#if defined(_WIN32) - // from MSD docs. - FILETIME ct,et,kt,ut; - union { FILETIME ft; uint64_t ui; } cpu; - if (GetProcessTimes(GetCurrentProcess(),&ct,&et,&kt,&ut)) { - cpu.ft = ut; - cpuclock = cpu.ui * 0.0000001; - } -#else /* POSIX */ - struct rusage ru; - if (getrusage(RUSAGE_SELF, &ru) == 0) { - cpuclock = (double) ru.ru_utime.tv_sec; - cpuclock += (double) ru.ru_utime.tv_usec * 0.000001; - } -#endif /* ! _WIN32 */ + double cpuclock = platform::cputime(); int cpuh,cpum,cpus,wallh,wallm,walls; cpus = fmod(cpuclock,60.0); diff --git a/src/timer.cpp b/src/timer.cpp index b01a7aa9d6..4efee8871c 100644 --- a/src/timer.cpp +++ b/src/timer.cpp @@ -20,50 +20,8 @@ #include -#ifdef _WIN32 -#ifndef WIN32_LEAN_AND_MEAN -#define WIN32_LEAN_AND_MEAN -#endif -#include -#include -#else -#include -#include -#endif - using namespace LAMMPS_NS; - -// Return the CPU time for the current process in seconds very -// much in the same way as MPI_Wtime() returns the wall time. - -static double CPU_Time() -{ - double rv = 0.0; - -#ifdef _WIN32 - - // from MSD docs. - FILETIME ct,et,kt,ut; - union { FILETIME ft; uint64_t ui; } cpu; - if (GetProcessTimes(GetCurrentProcess(),&ct,&et,&kt,&ut)) { - cpu.ft = ut; - rv = cpu.ui * 0.0000001; - } - -#else /* ! _WIN32 */ - - struct rusage ru; - if (getrusage(RUSAGE_SELF, &ru) == 0) { - rv = (double) ru.ru_utime.tv_sec; - rv += (double) ru.ru_utime.tv_usec * 0.000001; - } - -#endif /* ! _WIN32 */ - - return rv; -} - /* ---------------------------------------------------------------------- */ Timer::Timer(LAMMPS *lmp) : Pointers(lmp) @@ -93,7 +51,7 @@ void Timer::_stamp(enum ttype which) { double current_cpu=0.0, current_wall=0.0; - if (_level > NORMAL) current_cpu = CPU_Time(); + if (_level > NORMAL) current_cpu = platform::cputime(); current_wall = MPI_Wtime(); if ((which > TOTAL) && (which < NUM_TIMER)) { @@ -117,7 +75,7 @@ void Timer::_stamp(enum ttype which) if (_sync) { MPI_Barrier(world); - if (_level > NORMAL) current_cpu = CPU_Time(); + if (_level > NORMAL) current_cpu = platform::cputime(); current_wall = MPI_Wtime(); cpu_array[SYNC] += current_cpu - previous_cpu; @@ -137,7 +95,7 @@ void Timer::barrier_start() if (_level < LOOP) return; - current_cpu = CPU_Time(); + current_cpu = platform::cputime(); current_wall = MPI_Wtime(); cpu_array[TOTAL] = current_cpu; @@ -156,7 +114,7 @@ void Timer::barrier_stop() if (_level < LOOP) return; - current_cpu = CPU_Time(); + current_cpu = platform::cputime(); current_wall = MPI_Wtime(); cpu_array[TOTAL] = current_cpu - cpu_array[TOTAL]; @@ -167,7 +125,7 @@ void Timer::barrier_stop() double Timer::cpu(enum ttype which) { - double current_cpu = CPU_Time(); + double current_cpu = platform::cputime(); return (current_cpu - cpu_array[which]); } From 46eaa4888e866fb616fef48a3e030a94102735c9 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Tue, 5 Oct 2021 22:31:25 -0400 Subject: [PATCH 078/372] simplify using platform function --- src/utils.cpp | 27 ++++++--------------------- 1 file changed, 6 insertions(+), 21 deletions(-) diff --git a/src/utils.cpp b/src/utils.cpp index 3afd87ba7b..d67284822c 100644 --- a/src/utils.cpp +++ b/src/utils.cpp @@ -1016,28 +1016,13 @@ bool utils::is_id(const std::string &str) std::string utils::get_potential_file_path(const std::string &path) { - std::string filepath = path; - std::string filename = platform::path_basename(path); - - if (platform::file_is_readable(filepath)) { - return filepath; + if (platform::file_is_readable(path)) { + return path; } else { - // try the environment variable directory - const char *var = getenv("LAMMPS_POTENTIALS"); - - if (var != nullptr) { -#if defined(_WIN32) - Tokenizer dirs(var, ";"); -#else - Tokenizer dirs(var, ":"); -#endif - while (dirs.has_next()) { - auto pot = platform::path_basename(filepath); - auto dir = dirs.next(); - filepath = platform::path_join(dir, pot); - - if (platform::file_is_readable(filepath)) { return filepath; } - } + for (const auto &dir : platform::list_pathenv("LAMMPS_POTENTIALS")) { + auto pot = platform::path_basename(path); + auto filepath = platform::path_join(dir, pot); + if (platform::file_is_readable(filepath)) return filepath; } } return ""; From f17aeebbcdea957e7c22458019e15ae354ce6a4e Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Tue, 5 Oct 2021 22:31:39 -0400 Subject: [PATCH 079/372] make compilable on windows --- src/KOKKOS/kokkos.cpp | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/src/KOKKOS/kokkos.cpp b/src/KOKKOS/kokkos.cpp index be32604f94..63a18ec387 100644 --- a/src/KOKKOS/kokkos.cpp +++ b/src/KOKKOS/kokkos.cpp @@ -23,7 +23,15 @@ #include #include #include -#include + +#if defined(_WIN32) +#ifndef WIN32_LEAN_AND_MEAN +#define WIN32_LEAN_AND_MEAN +#endif +#include // for _getpid() +#else +#include // for getpid() +#endif #ifdef LMP_KOKKOS_GPU @@ -591,6 +599,10 @@ int KokkosLMP::neigh_count(int m) void KokkosLMP::my_signal_handler(int sig) { if (sig == SIGSEGV) { +#if defined(_WIN32) + kill(_getpid(),SIGABRT); +#else kill(getpid(),SIGABRT); +#endif } } From 8b36061db408870be7ef5a7774741d92cd6adfd3 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Tue, 5 Oct 2021 22:53:39 -0400 Subject: [PATCH 080/372] replace MPI_Wtime() with platform::walltime() --- src/DIFFRACTION/compute_saed.cpp | 4 ++-- src/DIFFRACTION/compute_xrd.cpp | 4 ++-- src/DPD-REACT/fix_rx.cpp | 2 +- src/GPU/pair_beck_gpu.cpp | 4 ++-- src/GPU/pair_born_coul_long_cs_gpu.cpp | 4 ++-- src/GPU/pair_born_coul_long_gpu.cpp | 4 ++-- src/GPU/pair_born_coul_wolf_cs_gpu.cpp | 4 ++-- src/GPU/pair_born_coul_wolf_gpu.cpp | 4 ++-- src/GPU/pair_born_gpu.cpp | 4 ++-- src/GPU/pair_buck_coul_cut_gpu.cpp | 4 ++-- src/GPU/pair_buck_coul_long_gpu.cpp | 4 ++-- src/GPU/pair_buck_gpu.cpp | 4 ++-- src/GPU/pair_colloid_gpu.cpp | 4 ++-- src/GPU/pair_coul_cut_gpu.cpp | 4 ++-- src/GPU/pair_coul_debye_gpu.cpp | 4 ++-- src/GPU/pair_coul_dsf_gpu.cpp | 4 ++-- src/GPU/pair_coul_long_cs_gpu.cpp | 4 ++-- src/GPU/pair_coul_long_gpu.cpp | 4 ++-- src/GPU/pair_dpd_gpu.cpp | 4 ++-- src/GPU/pair_dpd_tstat_gpu.cpp | 4 ++-- src/GPU/pair_gauss_gpu.cpp | 4 ++-- src/GPU/pair_gayberne_gpu.cpp | 4 ++-- src/GPU/pair_lj96_cut_gpu.cpp | 4 ++-- src/GPU/pair_lj_charmm_coul_charmm_gpu.cpp | 4 ++-- src/GPU/pair_lj_charmm_coul_long_gpu.cpp | 4 ++-- src/GPU/pair_lj_class2_coul_long_gpu.cpp | 4 ++-- src/GPU/pair_lj_class2_gpu.cpp | 4 ++-- src/GPU/pair_lj_cubic_gpu.cpp | 4 ++-- src/GPU/pair_lj_cut_coul_cut_gpu.cpp | 4 ++-- src/GPU/pair_lj_cut_coul_debye_gpu.cpp | 4 ++-- src/GPU/pair_lj_cut_coul_dsf_gpu.cpp | 4 ++-- src/GPU/pair_lj_cut_coul_long_gpu.cpp | 4 ++-- src/GPU/pair_lj_cut_coul_msm_gpu.cpp | 4 ++-- src/GPU/pair_lj_cut_dipole_cut_gpu.cpp | 4 ++-- src/GPU/pair_lj_cut_dipole_long_gpu.cpp | 4 ++-- src/GPU/pair_lj_cut_gpu.cpp | 4 ++-- src/GPU/pair_lj_cut_tip4p_long_gpu.cpp | 4 ++-- src/GPU/pair_lj_expand_coul_long_gpu.cpp | 4 ++-- src/GPU/pair_lj_expand_gpu.cpp | 4 ++-- src/GPU/pair_lj_gromacs_gpu.cpp | 4 ++-- src/GPU/pair_lj_sdk_coul_long_gpu.cpp | 4 ++-- src/GPU/pair_lj_sdk_gpu.cpp | 4 ++-- src/GPU/pair_lj_sf_dipole_sf_gpu.cpp | 4 ++-- src/GPU/pair_lj_smooth_gpu.cpp | 4 ++-- src/GPU/pair_mie_cut_gpu.cpp | 4 ++-- src/GPU/pair_morse_gpu.cpp | 4 ++-- src/GPU/pair_resquared_gpu.cpp | 4 ++-- src/GPU/pair_soft_gpu.cpp | 4 ++-- src/GPU/pair_table_gpu.cpp | 4 ++-- src/GPU/pair_ufm_gpu.cpp | 4 ++-- src/GPU/pair_yukawa_colloid_gpu.cpp | 4 ++-- src/GPU/pair_yukawa_gpu.cpp | 4 ++-- src/GPU/pair_zbl_gpu.cpp | 4 ++-- src/GPU/pppm_gpu.cpp | 4 ++-- src/INTEL/fix_intel.cpp | 2 +- src/KOKKOS/fix_rx_kokkos.cpp | 2 +- src/KOKKOS/pair_exp6_rx_kokkos.cpp | 2 +- src/KOKKOS/pppm_kokkos.cpp | 8 ++++---- src/KSPACE/pppm.cpp | 8 ++++---- src/KSPACE/pppm_dipole.cpp | 8 ++++---- src/KSPACE/pppm_disp.cpp | 16 ++++++++-------- src/REPLICA/fix_hyper_local.cpp | 18 +++++++++--------- src/REPLICA/tad.cpp | 4 ++-- src/RIGID/fix_rigid_small.cpp | 4 ++-- src/RIGID/fix_shake.cpp | 4 ++-- src/SMTBQ/pair_smtbq.cpp | 4 ++-- src/STUBS/mpi.cpp | 18 ++---------------- src/balance.cpp | 4 ++-- src/create_atoms.cpp | 4 ++-- src/info.cpp | 2 +- src/lammps.cpp | 4 ++-- src/read_data.cpp | 4 ++-- src/read_restart.cpp | 4 ++-- src/replicate.cpp | 4 ++-- src/reset_mol_ids.cpp | 4 ++-- src/special.cpp | 4 ++-- src/timer.cpp | 18 +++++++++--------- 77 files changed, 175 insertions(+), 189 deletions(-) diff --git a/src/DIFFRACTION/compute_saed.cpp b/src/DIFFRACTION/compute_saed.cpp index e5af83ca92..77f17d77d1 100644 --- a/src/DIFFRACTION/compute_saed.cpp +++ b/src/DIFFRACTION/compute_saed.cpp @@ -348,7 +348,7 @@ void ComputeSAED::compute_vector() if (me == 0 && echo) utils::logmesg(lmp,"-----\nComputing SAED intensities"); - double t0 = MPI_Wtime(); + double t0 = platform::walltime(); double *Fvec = new double[2*nRows]; // Strct factor (real & imaginary) // -- Note, vector entries correspond to different RELP @@ -491,7 +491,7 @@ void ComputeSAED::compute_vector() vector[i] = (scratch[2*i] * scratch[2*i] + scratch[2*i+1] * scratch[2*i+1]) / natoms; } - double t2 = MPI_Wtime(); + double t2 = platform::walltime(); // compute memory usage per processor double bytes = memory_usage(); diff --git a/src/DIFFRACTION/compute_xrd.cpp b/src/DIFFRACTION/compute_xrd.cpp index c6cf7be2ce..633c135e74 100644 --- a/src/DIFFRACTION/compute_xrd.cpp +++ b/src/DIFFRACTION/compute_xrd.cpp @@ -300,7 +300,7 @@ void ComputeXRD::compute_array() if (me == 0 && echo) utils::logmesg(lmp, "-----\nComputing XRD intensities"); - double t0 = MPI_Wtime(); + double t0 = platform::walltime(); double *Fvec = new double[2*size_array_rows]; // Strct factor (real & imaginary) // -- Note: array rows correspond to different RELP @@ -496,7 +496,7 @@ void ComputeXRD::compute_array() array[i][1] = (scratch[2*i] * scratch[2*i] + scratch[2*i+1] * scratch[2*i+1]) / natoms; } - double t2 = MPI_Wtime(); + double t2 = platform::walltime(); // compute memory usage per processor double bytes = memory_usage(); diff --git a/src/DPD-REACT/fix_rx.cpp b/src/DPD-REACT/fix_rx.cpp index 526c2d508f..8971f5ae48 100644 --- a/src/DPD-REACT/fix_rx.cpp +++ b/src/DPD-REACT/fix_rx.cpp @@ -58,7 +58,7 @@ namespace /* anonymous */ { typedef double TimerType; -TimerType getTimeStamp() { return MPI_Wtime(); } +TimerType getTimeStamp() { return platform::walltime(); } double getElapsedTime( const TimerType &t0, const TimerType &t1) { return t1-t0; } } // end namespace diff --git a/src/GPU/pair_beck_gpu.cpp b/src/GPU/pair_beck_gpu.cpp index a2a3133a24..e3dfda428f 100644 --- a/src/GPU/pair_beck_gpu.cpp +++ b/src/GPU/pair_beck_gpu.cpp @@ -120,9 +120,9 @@ void PairBeckGPU::compute(int eflag, int vflag) error->one(FLERR,"Insufficient memory on accelerator"); if (host_startone(FLERR,"Insufficient memory on accelerator"); if (host_startone(FLERR,"Insufficient memory on accelerator"); if (host_startone(FLERR,"Insufficient memory on accelerator"); if (host_startone(FLERR,"Insufficient memory on accelerator"); if (host_startone(FLERR,"Insufficient memory on accelerator"); if (host_startone(FLERR,"Insufficient memory on accelerator"); if (host_startone(FLERR,"Insufficient memory on accelerator"); if (host_startone(FLERR,"Insufficient memory on accelerator"); if (host_startone(FLERR,"Insufficient memory on accelerator"); if (host_startone(FLERR,"Insufficient memory on accelerator"); if (host_startone(FLERR,"Insufficient memory on accelerator"); if (host_startone(FLERR,"Insufficient memory on accelerator"); if (host_startone(FLERR,"Insufficient memory on accelerator"); if (host_startone(FLERR,"Insufficient memory on accelerator"); if (host_startone(FLERR,"Insufficient memory on accelerator"); if (host_startone(FLERR,"Insufficient memory on accelerator"); if (host_startone(FLERR,"Insufficient memory on accelerator"); if (host_startone(FLERR,"Insufficient memory on accelerator"); if (host_start < inum) { - cpu_time = MPI_Wtime(); + cpu_time = platform::walltime(); cpu_compute(host_start, inum, eflag, vflag, ilist, numneigh, firstneigh); - cpu_time = MPI_Wtime() - cpu_time; + cpu_time = platform::walltime() - cpu_time; } } diff --git a/src/GPU/pair_lj96_cut_gpu.cpp b/src/GPU/pair_lj96_cut_gpu.cpp index f03fbc9d7f..546c31a94e 100644 --- a/src/GPU/pair_lj96_cut_gpu.cpp +++ b/src/GPU/pair_lj96_cut_gpu.cpp @@ -117,9 +117,9 @@ void PairLJ96CutGPU::compute(int eflag, int vflag) error->one(FLERR,"Insufficient memory on accelerator"); if (host_startone(FLERR,"Insufficient memory on accelerator"); if (host_startone(FLERR,"Insufficient memory on accelerator"); if (host_startone(FLERR,"Insufficient memory on accelerator"); if (host_startone(FLERR,"Insufficient memory on accelerator"); if (host_startone(FLERR,"Insufficient memory on accelerator"); if (host_startone(FLERR,"Insufficient memory on accelerator"); if (host_startone(FLERR,"Insufficient memory on accelerator"); if (host_startone(FLERR,"Insufficient memory on accelerator"); if (host_startone(FLERR,"Insufficient memory on accelerator"); if (host_startone(FLERR,"Insufficient memory on accelerator"); if (host_startone(FLERR,"Insufficient memory on accelerator"); if (host_startone(FLERR,"Insufficient memory on accelerator"); if (host_startone(FLERR,"Insufficient memory on accelerator"); if (host_startone(FLERR,"Insufficient memory on accelerator"); // if (host_startone(FLERR,"Insufficient memory on accelerator"); if (host_startone(FLERR,"Insufficient memory on accelerator"); if (host_startone(FLERR,"Insufficient memory on accelerator"); if (host_startone(FLERR,"Insufficient memory on accelerator"); if (host_start(host_start, inum, ilist, numneigh, firstneigh); else cpu_compute<1,0>(host_start, inum, ilist, numneigh, firstneigh); } else cpu_compute<0,0>(host_start, inum, ilist, numneigh, firstneigh); - cpu_time = MPI_Wtime() - cpu_time; + cpu_time = platform::walltime() - cpu_time; } } diff --git a/src/GPU/pair_lj_sdk_gpu.cpp b/src/GPU/pair_lj_sdk_gpu.cpp index 9f925d0250..938ee83e4a 100644 --- a/src/GPU/pair_lj_sdk_gpu.cpp +++ b/src/GPU/pair_lj_sdk_gpu.cpp @@ -122,12 +122,12 @@ void PairLJSDKGPU::compute(int eflag, int vflag) error->one(FLERR,"Insufficient memory on accelerator"); if (host_start(host_start, inum, ilist, numneigh, firstneigh); else cpu_compute<1,0>(host_start, inum, ilist, numneigh, firstneigh); } else cpu_compute<0,0>(host_start, inum, ilist, numneigh, firstneigh); - cpu_time = MPI_Wtime() - cpu_time; + cpu_time = platform::walltime() - cpu_time; } } diff --git a/src/GPU/pair_lj_sf_dipole_sf_gpu.cpp b/src/GPU/pair_lj_sf_dipole_sf_gpu.cpp index bd40f855dc..0bb0e66d92 100644 --- a/src/GPU/pair_lj_sf_dipole_sf_gpu.cpp +++ b/src/GPU/pair_lj_sf_dipole_sf_gpu.cpp @@ -127,9 +127,9 @@ void PairLJSFDipoleSFGPU::compute(int eflag, int vflag) error->one(FLERR,"Insufficient memory on accelerator"); if (host_startone(FLERR, "Insufficient memory on accelerator"); if (host_start < inum) { - cpu_time = MPI_Wtime(); + cpu_time = platform::walltime(); cpu_compute(host_start, inum, eflag, vflag, ilist, numneigh, firstneigh); - cpu_time = MPI_Wtime() - cpu_time; + cpu_time = platform::walltime() - cpu_time; } //fprintf("LJ_SMOOTH_GPU"); } diff --git a/src/GPU/pair_mie_cut_gpu.cpp b/src/GPU/pair_mie_cut_gpu.cpp index 568b4dbc18..a059607880 100644 --- a/src/GPU/pair_mie_cut_gpu.cpp +++ b/src/GPU/pair_mie_cut_gpu.cpp @@ -118,9 +118,9 @@ void PairMIECutGPU::compute(int eflag, int vflag) error->one(FLERR,"Insufficient memory on accelerator"); if (host_startone(FLERR,"Insufficient memory on accelerator"); if (host_startone(FLERR,"Insufficient memory on accelerator"); if (host_start < inum) { - cpu_time = MPI_Wtime(); + cpu_time = platform::walltime(); cpu_compute(host_start, inum, eflag, vflag, ilist, numneigh, firstneigh); - cpu_time = MPI_Wtime() - cpu_time; + cpu_time = platform::walltime() - cpu_time; } } diff --git a/src/GPU/pair_soft_gpu.cpp b/src/GPU/pair_soft_gpu.cpp index 9b6fc6a39a..654e2e603b 100644 --- a/src/GPU/pair_soft_gpu.cpp +++ b/src/GPU/pair_soft_gpu.cpp @@ -121,9 +121,9 @@ void PairSoftGPU::compute(int eflag, int vflag) error->one(FLERR,"Insufficient memory on accelerator"); if (host_startone(FLERR,"Insufficient memory on accelerator"); if (host_startone(FLERR,"Insufficient memory on accelerator"); if (host_startone(FLERR,"Insufficient memory on accelerator"); if (host_startone(FLERR,"Insufficient memory on accelerator"); if (host_startone(FLERR,"Insufficient memory on accelerator"); if (host_start void FixIntel::add_off_results(const ft * _noalias const f_in, const acc_t * _noalias const ev_global) { if (_offload_balance < 0.0) - _balance_other_time = MPI_Wtime() - _balance_other_time; + _balance_other_time = platform::walltime() - _balance_other_time; start_watch(TIME_OFFLOAD_WAIT); #ifdef _LMP_INTEL_OFFLOAD diff --git a/src/KOKKOS/fix_rx_kokkos.cpp b/src/KOKKOS/fix_rx_kokkos.cpp index 15b4a39849..f05fe88fd8 100644 --- a/src/KOKKOS/fix_rx_kokkos.cpp +++ b/src/KOKKOS/fix_rx_kokkos.cpp @@ -54,7 +54,7 @@ namespace /* anonymous */ { typedef double TimerType; -TimerType getTimeStamp(void) { return MPI_Wtime(); } +TimerType getTimeStamp(void) { return platform::walltime(); } double getElapsedTime( const TimerType &t0, const TimerType &t1) { return t1-t0; } } // end namespace diff --git a/src/KOKKOS/pair_exp6_rx_kokkos.cpp b/src/KOKKOS/pair_exp6_rx_kokkos.cpp index 4da3a43243..0988cb4910 100644 --- a/src/KOKKOS/pair_exp6_rx_kokkos.cpp +++ b/src/KOKKOS/pair_exp6_rx_kokkos.cpp @@ -61,7 +61,7 @@ namespace /* anonymous */ { //typedef double TimerType; -//TimerType getTimeStamp(void) { return MPI_Wtime(); } +//TimerType getTimeStamp(void) { return platform::walltime(); } //double getElapsedTime( const TimerType &t0, const TimerType &t1) { return t1-t0; } typedef struct timespec TimerType; diff --git a/src/KOKKOS/pppm_kokkos.cpp b/src/KOKKOS/pppm_kokkos.cpp index d71d7d1bad..da18bba001 100644 --- a/src/KOKKOS/pppm_kokkos.cpp +++ b/src/KOKKOS/pppm_kokkos.cpp @@ -2857,7 +2857,7 @@ int PPPMKokkos::timing_1d(int n, double &time1d) copymode = 0; MPI_Barrier(world); - time1 = MPI_Wtime(); + time1 = platform::walltime(); for (int i = 0; i < n; i++) { fft1->timing1d(d_work1,nfft_both,FFT3dKokkos::FORWARD); @@ -2867,7 +2867,7 @@ int PPPMKokkos::timing_1d(int n, double &time1d) } MPI_Barrier(world); - time2 = MPI_Wtime(); + time2 = platform::walltime(); time1d = time2 - time1; return 4; @@ -2894,7 +2894,7 @@ int PPPMKokkos::timing_3d(int n, double &time3d) copymode = 0; MPI_Barrier(world); - time1 = MPI_Wtime(); + time1 = platform::walltime(); for (int i = 0; i < n; i++) { fft1->compute(d_work1,d_work1,FFT3dKokkos::FORWARD); @@ -2904,7 +2904,7 @@ int PPPMKokkos::timing_3d(int n, double &time3d) } MPI_Barrier(world); - time2 = MPI_Wtime(); + time2 = platform::walltime(); time3d = time2 - time1; return 4; diff --git a/src/KSPACE/pppm.cpp b/src/KSPACE/pppm.cpp index b6739d43fd..9d3a06f18e 100644 --- a/src/KSPACE/pppm.cpp +++ b/src/KSPACE/pppm.cpp @@ -2981,7 +2981,7 @@ int PPPM::timing_1d(int n, double &time1d) for (int i = 0; i < 2*nfft_both; i++) work1[i] = ZEROF; MPI_Barrier(world); - time1 = MPI_Wtime(); + time1 = platform::walltime(); for (int i = 0; i < n; i++) { fft1->timing1d(work1,nfft_both,FFT3d::FORWARD); @@ -2993,7 +2993,7 @@ int PPPM::timing_1d(int n, double &time1d) } MPI_Barrier(world); - time2 = MPI_Wtime(); + time2 = platform::walltime(); time1d = time2 - time1; if (differentiation_flag) return 2; @@ -3011,7 +3011,7 @@ int PPPM::timing_3d(int n, double &time3d) for (int i = 0; i < 2*nfft_both; i++) work1[i] = ZEROF; MPI_Barrier(world); - time1 = MPI_Wtime(); + time1 = platform::walltime(); for (int i = 0; i < n; i++) { fft1->compute(work1,work1,FFT3d::FORWARD); @@ -3023,7 +3023,7 @@ int PPPM::timing_3d(int n, double &time3d) } MPI_Barrier(world); - time2 = MPI_Wtime(); + time2 = platform::walltime(); time3d = time2 - time1; if (differentiation_flag) return 2; diff --git a/src/KSPACE/pppm_dipole.cpp b/src/KSPACE/pppm_dipole.cpp index a39973c6ae..16e06ed13e 100644 --- a/src/KSPACE/pppm_dipole.cpp +++ b/src/KSPACE/pppm_dipole.cpp @@ -2443,7 +2443,7 @@ int PPPMDipole::timing_1d(int n, double &time1d) for (int i = 0; i < 2*nfft_both; i++) work1[i] = ZEROF; MPI_Barrier(world); - time1 = MPI_Wtime(); + time1 = platform::walltime(); for (int i = 0; i < n; i++) { fft1->timing1d(work1,nfft_both,FFT3d::FORWARD); @@ -2461,7 +2461,7 @@ int PPPMDipole::timing_1d(int n, double &time1d) } MPI_Barrier(world); - time2 = MPI_Wtime(); + time2 = platform::walltime(); time1d = time2 - time1; return 12; @@ -2478,7 +2478,7 @@ int PPPMDipole::timing_3d(int n, double &time3d) for (int i = 0; i < 2*nfft_both; i++) work1[i] = ZEROF; MPI_Barrier(world); - time1 = MPI_Wtime(); + time1 = platform::walltime(); for (int i = 0; i < n; i++) { fft1->compute(work1,work1,FFT3d::FFT3d::FORWARD); @@ -2496,7 +2496,7 @@ int PPPMDipole::timing_3d(int n, double &time3d) } MPI_Barrier(world); - time2 = MPI_Wtime(); + time2 = platform::walltime(); time3d = time2 - time1; return 12; diff --git a/src/KSPACE/pppm_disp.cpp b/src/KSPACE/pppm_disp.cpp index a523fcce9e..fa14cb23f0 100644 --- a/src/KSPACE/pppm_disp.cpp +++ b/src/KSPACE/pppm_disp.cpp @@ -8183,7 +8183,7 @@ int PPPMDisp::timing_1d(int n, double &time1d) for (int i = 0; i < 2*nfft_both_6; i++) work1_6[i] = ZEROF; MPI_Barrier(world); - time1 = MPI_Wtime(); + time1 = platform::walltime(); if (function[0]) { for (int i = 0; i < n; i++) { @@ -8197,11 +8197,11 @@ int PPPMDisp::timing_1d(int n, double &time1d) } MPI_Barrier(world); - time2 = MPI_Wtime(); + time2 = platform::walltime(); time1d = time2 - time1; MPI_Barrier(world); - time1 = MPI_Wtime(); + time1 = platform::walltime(); if (function[1] + function[2] + function[3]) { for (int i = 0; i < n; i++) { @@ -8215,7 +8215,7 @@ int PPPMDisp::timing_1d(int n, double &time1d) } MPI_Barrier(world); - time2 = MPI_Wtime(); + time2 = platform::walltime(); time1d += (time2 - time1)*mixing; if (differentiation_flag) return 2; @@ -8238,7 +8238,7 @@ int PPPMDisp::timing_3d(int n, double &time3d) for (int i = 0; i < 2*nfft_both_6; i++) work1_6[i] = ZEROF; MPI_Barrier(world); - time1 = MPI_Wtime(); + time1 = platform::walltime(); if (function[0]) { for (int i = 0; i < n; i++) { @@ -8252,11 +8252,11 @@ int PPPMDisp::timing_3d(int n, double &time3d) } MPI_Barrier(world); - time2 = MPI_Wtime(); + time2 = platform::walltime(); time3d = time2 - time1; MPI_Barrier(world); - time1 = MPI_Wtime(); + time1 = platform::walltime(); if (function[1] + function[2] + function[3]) { for (int i = 0; i < n; i++) { @@ -8270,7 +8270,7 @@ int PPPMDisp::timing_3d(int n, double &time3d) } MPI_Barrier(world); - time2 = MPI_Wtime(); + time2 = platform::walltime(); time3d += (time2 - time1) * mixing; if (differentiation_flag) return 2; diff --git a/src/REPLICA/fix_hyper_local.cpp b/src/REPLICA/fix_hyper_local.cpp index 4a477fad8d..ba91644c53 100644 --- a/src/REPLICA/fix_hyper_local.cpp +++ b/src/REPLICA/fix_hyper_local.cpp @@ -447,7 +447,7 @@ void FixHyperLocal::pre_reverse(int /* eflag */, int /* vflag */) int *ilist,*jlist,*numneigh,**firstneigh; //double time1,time2,time3,time4,time5,time6,time7,time8; - //time1 = MPI_Wtime(); + //time1 = platform::walltime(); nostrainyet = 0; @@ -520,7 +520,7 @@ void FixHyperLocal::pre_reverse(int /* eflag */, int /* vflag */) maxhalfstrain[iold] = halfstrain; } - //time2 = MPI_Wtime(); + //time2 = platform::walltime(); // reverse comm acquires maxstrain of all current owned atoms // needed b/c only saw half the bonds of each atom @@ -531,7 +531,7 @@ void FixHyperLocal::pre_reverse(int /* eflag */, int /* vflag */) comm->reverse_comm_fix(this); comm->forward_comm_fix(this); - //time3 = MPI_Wtime(); + //time3 = platform::walltime(); // ------------------------------------------------------------- // stage 2: @@ -636,7 +636,7 @@ void FixHyperLocal::pre_reverse(int /* eflag */, int /* vflag */) maxstrain_domain[i] = emax; } - //time4 = MPI_Wtime(); + //time4 = platform::walltime(); // reverse comm to acquire maxstrain_domain from ghost atoms // needed b/c neigh list may refer to old owned atoms that are now ghost @@ -646,7 +646,7 @@ void FixHyperLocal::pre_reverse(int /* eflag */, int /* vflag */) comm->reverse_comm_fix(this); comm->forward_comm_fix(this); - //time5 = MPI_Wtime(); + //time5 = platform::walltime(); // ------------------------------------------------------------- // stage 3: @@ -672,7 +672,7 @@ void FixHyperLocal::pre_reverse(int /* eflag */, int /* vflag */) bias[nbias++] = maxhalf[iold]; } - //time6 = MPI_Wtime(); + //time6 = platform::walltime(); // ------------------------------------------------------------- // stage 4: @@ -724,7 +724,7 @@ void FixHyperLocal::pre_reverse(int /* eflag */, int /* vflag */) // myboost += exp(beta * biascoeff[m]*vbias); } - //time7 = MPI_Wtime(); + //time7 = platform::walltime(); // ------------------------------------------------------------- // stage 5: @@ -887,7 +887,7 @@ void FixHyperLocal::build_bond_list(int natom) int *ilist,*jlist,*numneigh,**firstneigh; double time1,time2; - time1 = MPI_Wtime(); + time1 = platform::walltime(); if (natom) { nevent++; @@ -1185,7 +1185,7 @@ void FixHyperLocal::build_bond_list(int natom) // DEBUG //if (me == 0) printf("TOTAL BOND COUNT = %ld\n",allbonds); - time2 = MPI_Wtime(); + time2 = platform::walltime(); if (firstflag) nnewbond = 0; else { diff --git a/src/REPLICA/tad.cpp b/src/REPLICA/tad.cpp index 9b6ecf0b0c..881ec1604c 100644 --- a/src/REPLICA/tad.cpp +++ b/src/REPLICA/tad.cpp @@ -710,7 +710,7 @@ void TAD::perform_neb(int ievent) // time_neb += timer->get_wall(Timer::TOTAL); MPI_Barrier(world); - double time_tmp = MPI_Wtime(); + double time_tmp = platform::walltime(); double dt_hold = update->dt; update->dt = dt_neb; @@ -718,7 +718,7 @@ void TAD::perform_neb(int ievent) update->dt = dt_hold; MPI_Barrier(world); - time_neb += MPI_Wtime() - time_tmp; + time_neb += platform::walltime() - time_tmp; if (universe->me == 0) { universe->ulogfile = ulogfile_lammps; diff --git a/src/RIGID/fix_rigid_small.cpp b/src/RIGID/fix_rigid_small.cpp index 7216c56c83..7a30c8b1c9 100644 --- a/src/RIGID/fix_rigid_small.cpp +++ b/src/RIGID/fix_rigid_small.cpp @@ -391,14 +391,14 @@ FixRigidSmall::FixRigidSmall(LAMMPS *lmp, int narg, char **arg) : // sets bodytag for owned atoms // body attributes are computed later by setup_bodies() - double time1 = MPI_Wtime(); + double time1 = platform::walltime(); create_bodies(bodyID); if (customflag) delete [] bodyID; if (comm->me == 0) utils::logmesg(lmp," create bodies CPU = {:.3f} seconds\n", - MPI_Wtime()-time1); + platform::walltime()-time1); // set nlocal_body and allocate bodies I own diff --git a/src/RIGID/fix_shake.cpp b/src/RIGID/fix_shake.cpp index f1c1d30fc5..9e45ec13d8 100644 --- a/src/RIGID/fix_shake.cpp +++ b/src/RIGID/fix_shake.cpp @@ -222,13 +222,13 @@ FixShake::FixShake(LAMMPS *lmp, int narg, char **arg) : // identify all SHAKE clusters - double time1 = MPI_Wtime(); + double time1 = platform::walltime(); find_clusters(); if (comm->me == 0) utils::logmesg(lmp," find clusters CPU = {:.3f} seconds\n", - MPI_Wtime()-time1); + platform::walltime()-time1); // initialize list of SHAKE clusters to constrain diff --git a/src/SMTBQ/pair_smtbq.cpp b/src/SMTBQ/pair_smtbq.cpp index 4b7a1f2ac5..8922173433 100644 --- a/src/SMTBQ/pair_smtbq.cpp +++ b/src/SMTBQ/pair_smtbq.cpp @@ -2426,7 +2426,7 @@ void PairSMTBQ::Charge() ilist = list->ilist; - if (me == 0) t_init = MPI_Wtime(); + if (me == 0) t_init = platform::walltime(); if (step == 0) cluster = 0; // --------------------------- @@ -2729,7 +2729,7 @@ void PairSMTBQ::Charge() printf (" convergence : %f - %f\n",enegchk[gp],enegmax[gp]); } - t_end = MPI_Wtime(); + t_end = platform::walltime(); dt = t_end - t_init; printf (" temps dans charges : %f seconde. \n",dt); printf (" ======================================================== \n"); diff --git a/src/STUBS/mpi.cpp b/src/STUBS/mpi.cpp index e5cd50629e..e2098e0091 100644 --- a/src/STUBS/mpi.cpp +++ b/src/STUBS/mpi.cpp @@ -21,7 +21,6 @@ #include #include #include -#include /* data structure for double/int */ @@ -164,23 +163,10 @@ int MPI_Finalize() } /* ---------------------------------------------------------------------- */ - +static auto initial_time = std::chrono::steady_clock::now(); double MPI_Wtime() { -#if defined(_MSC_VER) - double t; - - t = GetTickCount(); - t /= 1000.0; - return t; -#else - double time; - struct timeval tv; - - gettimeofday(&tv, NULL); - time = 1.0 * tv.tv_sec + 1.0e-6 * tv.tv_usec; - return time; -#endif + return std::chrono::duration(std::chrono::steady_clock::now() - initial_time).count(); } /* ---------------------------------------------------------------------- */ diff --git a/src/balance.cpp b/src/balance.cpp index 06a3463db5..bd3ba007ef 100644 --- a/src/balance.cpp +++ b/src/balance.cpp @@ -259,7 +259,7 @@ void Balance::command(int narg, char **arg) // must reset atom map after exchange() since it clears it MPI_Barrier(world); - double start_time = MPI_Wtime(); + double start_time = platform::walltime(); lmp->init(); @@ -386,7 +386,7 @@ void Balance::command(int narg, char **arg) if (me == 0) { std::string mesg = fmt::format(" rebalancing time: {:.3f} seconds\n", - MPI_Wtime()-start_time); + platform::walltime()-start_time); mesg += fmt::format(" iteration count = {}\n",niter); for (int i = 0; i < nimbalance; ++i) mesg += imbalances[i]->info(); mesg += fmt::format(" initial/final maximal load/proc = {:.8} {:.8}\n" diff --git a/src/create_atoms.cpp b/src/create_atoms.cpp index 8baf6f88f7..e82be7d331 100644 --- a/src/create_atoms.cpp +++ b/src/create_atoms.cpp @@ -378,7 +378,7 @@ void CreateAtoms::command(int narg, char **arg) // Record wall time for atom creation MPI_Barrier(world); - double time1 = MPI_Wtime(); + double time1 = platform::walltime(); // clear ghost count and any ghost bonus data internal to AtomVec // same logic as beginning of Comm::exchange() @@ -591,7 +591,7 @@ void CreateAtoms::command(int narg, char **arg) if (scaleflag) domain->print_box(" using lattice units in "); else domain->print_box(" using box units in "); utils::logmesg(lmp," create_atoms CPU = {:.3f} seconds\n", - MPI_Wtime() - time1); + platform::walltime() - time1); } } diff --git a/src/info.cpp b/src/info.cpp index 01ac7a095c..3d24f9b56a 100644 --- a/src/info.cpp +++ b/src/info.cpp @@ -635,7 +635,7 @@ void Info::command(int narg, char **arg) } if (flags & TIME) { - double wallclock = MPI_Wtime() - lmp->initclock; + double wallclock = platform::walltime() - lmp->initclock; double cpuclock = platform::cputime(); int cpuh,cpum,cpus,wallh,wallm,walls; diff --git a/src/lammps.cpp b/src/lammps.cpp index e24c42689f..5e76e08112 100644 --- a/src/lammps.cpp +++ b/src/lammps.cpp @@ -129,7 +129,7 @@ LAMMPS::LAMMPS(int narg, char **arg, MPI_Comm communicator) : logfile = nullptr; infile = nullptr; - initclock = MPI_Wtime(); + initclock = platform::walltime(); init_pkg_lists(); @@ -719,7 +719,7 @@ LAMMPS::~LAMMPS() num_package = 0; packargs = nullptr; - double totalclock = MPI_Wtime() - initclock; + double totalclock = platform::walltime() - initclock; if ((me == 0) && (screen || logfile)) { int seconds = fmod(totalclock,60.0); totalclock = (totalclock - seconds) / 60.0; diff --git a/src/read_data.cpp b/src/read_data.cpp index e9b222d6ef..bb4fbe0315 100644 --- a/src/read_data.cpp +++ b/src/read_data.cpp @@ -114,7 +114,7 @@ void ReadData::command(int narg, char **arg) if (narg < 1) error->all(FLERR,"Illegal read_data command"); MPI_Barrier(world); - double time1 = MPI_Wtime(); + double time1 = platform::walltime(); // optional args @@ -914,7 +914,7 @@ void ReadData::command(int narg, char **arg) MPI_Barrier(world); if (comm->me == 0) - utils::logmesg(lmp," read_data CPU = {:.3f} seconds\n",MPI_Wtime()-time1); + utils::logmesg(lmp," read_data CPU = {:.3f} seconds\n",platform::walltime()-time1); } /* ---------------------------------------------------------------------- diff --git a/src/read_restart.cpp b/src/read_restart.cpp index caa19d46fb..0eab44baaa 100644 --- a/src/read_restart.cpp +++ b/src/read_restart.cpp @@ -54,7 +54,7 @@ void ReadRestart::command(int narg, char **arg) error->all(FLERR,"Cannot read_restart after simulation box is defined"); MPI_Barrier(world); - double time1 = MPI_Wtime(); + double time1 = platform::walltime(); MPI_Comm_rank(world,&me); MPI_Comm_size(world,&nprocs); @@ -522,7 +522,7 @@ void ReadRestart::command(int narg, char **arg) MPI_Barrier(world); if (comm->me == 0) - utils::logmesg(lmp," read_restart CPU = {:.3f} seconds\n",MPI_Wtime()-time1); + utils::logmesg(lmp," read_restart CPU = {:.3f} seconds\n",platform::walltime()-time1); delete mpiio; } diff --git a/src/replicate.cpp b/src/replicate.cpp index 2c2b512026..80edd7bcbc 100644 --- a/src/replicate.cpp +++ b/src/replicate.cpp @@ -79,7 +79,7 @@ void Replicate::command(int narg, char **arg) // record wall time for atom replication MPI_Barrier(world); - double time1 = MPI_Wtime(); + double time1 = platform::walltime(); // maxtag = largest atom tag across all existing atoms @@ -799,5 +799,5 @@ void Replicate::command(int narg, char **arg) MPI_Barrier(world); if (me == 0) - utils::logmesg(lmp," replicate CPU = {:.3f} seconds\n",MPI_Wtime()-time1); + utils::logmesg(lmp," replicate CPU = {:.3f} seconds\n",platform::walltime()-time1); } diff --git a/src/reset_mol_ids.cpp b/src/reset_mol_ids.cpp index 424b4bcb6c..4c973f543f 100644 --- a/src/reset_mol_ids.cpp +++ b/src/reset_mol_ids.cpp @@ -96,7 +96,7 @@ void ResetMolIDs::command(int narg, char **arg) // record wall time for resetting molecule IDs MPI_Barrier(world); - double time1 = MPI_Wtime(); + double time1 = platform::walltime(); // initialize system since comm->borders() will be invoked @@ -132,7 +132,7 @@ void ResetMolIDs::command(int narg, char **arg) else utils::logmesg(lmp," number of new molecule IDs = {}\n",nchunk); utils::logmesg(lmp," reset_mol_ids CPU = {:.3f} seconds\n", - MPI_Wtime()-time1); + platform::walltime()-time1); } } diff --git a/src/special.cpp b/src/special.cpp index dcc0d0c0ad..9f480da78f 100644 --- a/src/special.cpp +++ b/src/special.cpp @@ -56,7 +56,7 @@ Special::~Special() void Special::build() { MPI_Barrier(world); - double time1 = MPI_Wtime(); + double time1 = platform::walltime(); if (me == 0) { const double * const special_lj = force->special_lj; @@ -1303,5 +1303,5 @@ void Special::timer_output(double time1) { if (comm->me == 0) utils::logmesg(lmp," special bonds CPU = {:.3f} seconds\n", - MPI_Wtime()-time1); + platform::walltime()-time1); } diff --git a/src/timer.cpp b/src/timer.cpp index 4efee8871c..0cbf687137 100644 --- a/src/timer.cpp +++ b/src/timer.cpp @@ -52,7 +52,7 @@ void Timer::_stamp(enum ttype which) double current_cpu=0.0, current_wall=0.0; if (_level > NORMAL) current_cpu = platform::cputime(); - current_wall = MPI_Wtime(); + current_wall = platform::walltime(); if ((which > TOTAL) && (which < NUM_TIMER)) { const double delta_cpu = current_cpu - previous_cpu; @@ -76,7 +76,7 @@ void Timer::_stamp(enum ttype which) if (_sync) { MPI_Barrier(world); if (_level > NORMAL) current_cpu = platform::cputime(); - current_wall = MPI_Wtime(); + current_wall = platform::walltime(); cpu_array[SYNC] += current_cpu - previous_cpu; wall_array[SYNC] += current_wall - previous_wall; @@ -96,7 +96,7 @@ void Timer::barrier_start() if (_level < LOOP) return; current_cpu = platform::cputime(); - current_wall = MPI_Wtime(); + current_wall = platform::walltime(); cpu_array[TOTAL] = current_cpu; wall_array[TOTAL] = current_wall; @@ -115,7 +115,7 @@ void Timer::barrier_stop() if (_level < LOOP) return; current_cpu = platform::cputime(); - current_wall = MPI_Wtime(); + current_wall = platform::walltime(); cpu_array[TOTAL] = current_cpu - cpu_array[TOTAL]; wall_array[TOTAL] = current_wall - wall_array[TOTAL]; @@ -134,7 +134,7 @@ double Timer::cpu(enum ttype which) double Timer::elapsed(enum ttype which) { if (_level == OFF) return 0.0; - double current_wall = MPI_Wtime(); + double current_wall = platform::walltime(); return (current_wall - wall_array[which]); } @@ -165,7 +165,7 @@ void Timer::print_timeout(FILE *fp) // format timeout setting if (_timeout > 0) { // time since init_timeout() - const double d = MPI_Wtime() - timeout_start; + const double d = platform::walltime() - timeout_start; // remaining timeout in seconds int s = _timeout - d; // remaining 1/100ths of seconds @@ -184,7 +184,7 @@ void Timer::print_timeout(FILE *fp) bool Timer::_check_timeout() { - double walltime = MPI_Wtime() - timeout_start; + double walltime = platform::walltime() - timeout_start; // broadcast time to insure all ranks act the same. MPI_Bcast(&walltime,1,MPI_DOUBLE,0,world); @@ -202,7 +202,7 @@ bool Timer::_check_timeout() /* ---------------------------------------------------------------------- */ double Timer::get_timeout_remain() { - return (_timeout < 0.0) ? 0.0 : _timeout + timeout_start - MPI_Wtime(); + return (_timeout < 0.0) ? 0.0 : _timeout + timeout_start - platform::walltime(); } /* ---------------------------------------------------------------------- @@ -243,7 +243,7 @@ void Timer::modify_params(int narg, char **arg) ++iarg; } - timeout_start = MPI_Wtime(); + timeout_start = platform::walltime(); if (comm->me == 0) { // format timeout setting From 81492533e69abf164179526e2e4de317787cd922 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Tue, 5 Oct 2021 23:19:52 -0400 Subject: [PATCH 081/372] recover serial compilation --- src/STUBS/mpi.cpp | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/STUBS/mpi.cpp b/src/STUBS/mpi.cpp index e2098e0091..c178b06803 100644 --- a/src/STUBS/mpi.cpp +++ b/src/STUBS/mpi.cpp @@ -17,10 +17,11 @@ #include "../version.h" -#include -#include -#include -#include +#include +#include +#include +#include +#include /* data structure for double/int */ From e3cb5a5e2503f9fc77093206380e83c5a9cc7c9e Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Wed, 6 Oct 2021 07:09:36 -0400 Subject: [PATCH 082/372] restore old version of MPI_Wtime(). we're not using it anyway. --- src/STUBS/mpi.cpp | 27 ++++++++++++++++++++------- 1 file changed, 20 insertions(+), 7 deletions(-) diff --git a/src/STUBS/mpi.cpp b/src/STUBS/mpi.cpp index c178b06803..e5cd50629e 100644 --- a/src/STUBS/mpi.cpp +++ b/src/STUBS/mpi.cpp @@ -17,11 +17,11 @@ #include "../version.h" -#include -#include -#include -#include -#include +#include +#include +#include +#include +#include /* data structure for double/int */ @@ -164,10 +164,23 @@ int MPI_Finalize() } /* ---------------------------------------------------------------------- */ -static auto initial_time = std::chrono::steady_clock::now(); + double MPI_Wtime() { - return std::chrono::duration(std::chrono::steady_clock::now() - initial_time).count(); +#if defined(_MSC_VER) + double t; + + t = GetTickCount(); + t /= 1000.0; + return t; +#else + double time; + struct timeval tv; + + gettimeofday(&tv, NULL); + time = 1.0 * tv.tv_sec + 1.0e-6 * tv.tv_usec; + return time; +#endif } /* ---------------------------------------------------------------------- */ From 9fc23a2bda905535c761db3bb7b5308a833069ec Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Wed, 6 Oct 2021 07:10:04 -0400 Subject: [PATCH 083/372] make use of platform namespace functions --- tools/lammps-shell/lammps-shell.cpp | 77 +++++++++++------------------ 1 file changed, 30 insertions(+), 47 deletions(-) diff --git a/tools/lammps-shell/lammps-shell.cpp b/tools/lammps-shell/lammps-shell.cpp index 76fa04d71a..936b539d43 100644 --- a/tools/lammps-shell/lammps-shell.cpp +++ b/tools/lammps-shell/lammps-shell.cpp @@ -1,7 +1,7 @@ // LAMMPS Shell. An improved interactive LAMMPS session with // command line editing, history, TAB expansion and shell escapes -// Copyright (c) 2020 Axel Kohlmeyer +// Copyright (c) 2020, 2021 Axel Kohlmeyer // This software is distributed under the GNU General Public License. @@ -15,21 +15,12 @@ #include #include -#if !defined(_WIN32) -#include -#else +#if defined(_WIN32) #if !defined(WIN32_LEAN_AND_MEAN) #define WIN32_LEAN_AND_MEAN #endif -#include -#include #include -#define chdir(x) _chdir(x) -#define getcwd(buf, len) _getcwd(buf, len) -#define isatty(x) _isatty(x) -#endif - -#if !defined(_WIN32) +#else #include #endif @@ -42,10 +33,10 @@ using namespace LAMMPS_NS; -char *omp_threads = nullptr; -const int buflen = 512; -char buf[buflen]; void *lmp = nullptr; +char *omp_threads = nullptr; +constexpr int BUFLEN = 512; +char buf[BUFLEN]; enum { ATOM_STYLE, @@ -214,7 +205,7 @@ template char *style_generator(const char *text, int state) } while (idx < num) { - lammps_style_name(lmp, lmp_style[STYLE], idx, buf, buflen); + lammps_style_name(lmp, lmp_style[STYLE], idx, buf, BUFLEN); ++idx; if ((len == 0) || (strncmp(text, buf, len) == 0)) return dupstring(buf); } @@ -231,7 +222,7 @@ template char *id_generator(const char *text, int state) } while (idx < num) { - lammps_id_name(lmp, lmp_id[ID], idx, buf, buflen); + lammps_id_name(lmp, lmp_id[ID], idx, buf, BUFLEN); ++idx; if ((len == 0) || (strncmp(text, buf, len) == 0)) return dupstring(buf); } @@ -389,8 +380,8 @@ static char *plugin_name_generator(const char *text, int state) nmax = lammps_plugin_count(); while (idx < nmax) { - char style[buflen], name[buflen]; - lammps_plugin_name(idx, style, name, buflen); + char style[BUFLEN], name[BUFLEN]; + lammps_plugin_name(idx, style, name, BUFLEN); ++idx; if (words[2] == style) { if (strncmp(name, words[3].c_str(), len) == 0) @@ -475,7 +466,7 @@ char *group_generator(const char *text, int state) } while (idx < num) { - lammps_id_name(lmp, "group", idx, buf, buflen); + lammps_id_name(lmp, "group", idx, buf, BUFLEN); ++idx; if ((len == 0) || (strncmp(text, buf, len) == 0)) return dupstring(buf); } @@ -577,7 +568,7 @@ static void init_commands() // store optional commands from command styles ncmds = lammps_style_count(lmp, "command"); for (int i = 0; i < ncmds; ++i) { - if (lammps_style_name(lmp, "command", i, buf, buflen)) commands.push_back(buf); + if (lammps_style_name(lmp, "command", i, buf, BUFLEN)) commands.push_back(buf); } // store LAMMPS shell specific command names @@ -599,7 +590,7 @@ static void init_commands() // otherwise any tabs in redirected input will cause havoc. const char *test_mode = getenv("LAMMPS_SHELL_TESTING"); if (test_mode) std::cout << "*TESTING* using LAMMPS Shell in test mode *TESTING*\n"; - if (isatty(fileno(stdin)) || test_mode) { + if (platform::is_console(stdin) || test_mode) { rl_attempted_completion_function = cmd_completion; } else { rl_bind_key('\t', rl_insert); @@ -608,10 +599,11 @@ static void init_commands() // read saved history, but not in test mode. if (!test_mode) read_history(".lammps_history"); -#if !defined(_WIN32) - signal(SIGINT, ctrl_c_handler); -#else + // intercept CTRL-C +#if defined(_WIN32) SetConsoleCtrlHandler(ctrl_c_handler, TRUE); +#else + signal(SIGINT, ctrl_c_handler); #endif } @@ -685,7 +677,7 @@ static int shell_cmd(const std::string &cmd) free(text); return 0; } else if ((words[0] == "pwd") || ((words[0] == "cd") && (words.size() == 1))) { - if (getcwd(buf, buflen)) std::cout << buf << "\n"; + std::cout << platform::current_directory() << "\n"; free(text); return 0; } else if (words[0] == "cd") { @@ -741,28 +733,19 @@ int main(int argc, char **argv) #if defined(_WIN32) // Special hack for Windows: if the current working directory is // the "system folder" (because that is where cmd.exe lives) - // switch to the user's documents directory. Avoid buffer overflow - // and skip this step if the path is too long for our buffer. - if (getcwd(buf, buflen)) { - if ((strstr(buf, "System32") || strstr(buf, "system32"))) { - char *drive = getenv("HOMEDRIVE"); - char *path = getenv("HOMEPATH"); - buf[0] = '\0'; - int len = strlen("\\Documents"); - if (drive) len += strlen(drive); - if (path) len += strlen(path); - if (len < buflen) { - if (drive) strcat(buf, drive); - if (path) strcat(buf, path); - strcat(buf, "\\Documents"); - chdir(buf); - } - } + // switch to the user's documents directory. + + auto curdir = platform::current_directory(); + if (utils::strmatch(curdir,"[Ss]ystem32")) { + std::string docdir = getenv("HOMEDRIVE"); + docdir += getenv("HOMEPATH"); + docdir += "\\Documents"; + platform::chdir(docdir); } #endif - lammps_get_os_info(buf, buflen); - std::cout << "LAMMPS Shell version 1.1 OS: " << buf; + lammps_get_os_info(buf, BUFLEN); + std::cout << "LAMMPS Shell version 1.2 OS: " << buf; if (!lammps_config_has_exceptions()) std::cout << "WARNING: LAMMPS was compiled without exceptions\n" @@ -777,7 +760,7 @@ int main(int argc, char **argv) // to use the maximum number of threads available since this is // not intended to be run with MPI. omp_threads = dupstring(std::string("OMP_NUM_THREADS=" + std::to_string(nthreads))); - putenv(omp_threads); + platform::putenv(omp_threads); // handle the special case where the first argument is not a flag but a file // this happens for example when using file type associations on Windows. @@ -787,7 +770,7 @@ int main(int argc, char **argv) if ((argc > 1) && (argv[1][0] != '-')) { --argc; input_file = platform::path_basename(argv[1]); - chdir(platform::path_dirname(input_file).c_str()); + platform::chdir(platform::path_dirname(input_file)); for (int i = 1; i < argc; ++i) argv[i] = argv[i + 1]; } From 7801d112b38e44e10604a226d8f2f2ad5fec9545 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Wed, 6 Oct 2021 07:10:35 -0400 Subject: [PATCH 084/372] enable building plugins for windows --- examples/plugins/CMakeLists.txt | 22 +++++++++++++--------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/examples/plugins/CMakeLists.txt b/examples/plugins/CMakeLists.txt index 59c2802b45..e4c084fc1d 100644 --- a/examples/plugins/CMakeLists.txt +++ b/examples/plugins/CMakeLists.txt @@ -36,11 +36,6 @@ if((CMAKE_CXX_COMPILER_ID STREQUAL "Intel") OR (CMAKE_CXX_COMPILER_ID STREQUAL " set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -restrict") endif() -# bail out on windows -if(CMAKE_SYSTEM_NAME STREQUAL Windows) - message(FATAL_ERROR "LAMMPS plugins are currently not supported on Windows") -endif() - set(CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}) include(CheckIncludeFileCXX) include(LAMMPSInterfaceCXX) @@ -62,12 +57,21 @@ add_library(zero2plugin MODULE zero2plugin.cpp pair_zero2.cpp bond_zero2.cpp angle_zero2.cpp dihedral_zero2.cpp improper_zero2.cpp) target_link_libraries(zero2plugin PRIVATE lammps) -set_target_properties(morse2plugin nve2plugin helloplugin zero2plugin PROPERTIES - PREFIX "" - LINK_FLAGS "-rdynamic") +set_target_properties(morse2plugin nve2plugin helloplugin zero2plugin PROPERTIES PREFIX "") # MacOS seems to need this if(CMAKE_SYSTEM_NAME STREQUAL Darwin) + set_target_properties(morse2plugin nve2plugin helloplugin zero2plugin + PROPERTIES LINK_FLAGS "-Wl,-undefined,dynamic_lookup") +elseif(CMAKE_SYSTEM_NAME STREQUAL "Windows") +# tell CMake to export all symbols to a .dll on Windows with special case for MinGW cross-compilers + set_target_properties(morse2plugin nve2plugin helloplugin zero2plugin + PROPERTIES WINDOWS_EXPORT_ALL_SYMBOLS TRUE) + if(CMAKE_CROSSCOMPILING) + set_target_properties(morse2plugin nve2plugin helloplugin zero2plugin + PROPERTIES LINK_FLAGS "-Wl,--export-all-symbols") + endif() +else() set_target_properties(morse2plugin nve2plugin helloplugin zero2plugin PROPERTIES - LINK_FLAGS "-Wl,-undefined,dynamic_lookup") + LINK_FLAGS "-rdynamic") endif() From 10a8a1b325f6a87184049c8ef6cf3a452c2d7e3d Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Wed, 6 Oct 2021 08:45:56 -0400 Subject: [PATCH 085/372] add dlerror() call wrapper --- doc/src/Developer_platform.rst | 3 +++ src/platform.cpp | 16 ++++++++++++++++ src/platform.h | 10 ++++++++++ 3 files changed, 29 insertions(+) diff --git a/doc/src/Developer_platform.rst b/doc/src/Developer_platform.rst index 74ad4c1aac..19836b1ff2 100644 --- a/doc/src/Developer_platform.rst +++ b/doc/src/Developer_platform.rst @@ -133,6 +133,9 @@ Dynamically loaded object or library functions .. doxygenfunction:: dlsym :project: progguide +.. doxygenfunction:: dlerror + :project: progguide + Compressed file I/O functions ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ diff --git a/src/platform.cpp b/src/platform.cpp index 1936baaf87..427085a6be 100644 --- a/src/platform.cpp +++ b/src/platform.cpp @@ -507,6 +507,13 @@ void *platform::dlopen(const std::string &fname) return (void *) LoadLibrary(fname.c_str()); } +// return dynamic linker error string + +std::string platform::dlerror() +{ + return ""; +} + // close a shared object int platform::dlclose(void *handle) { @@ -528,6 +535,15 @@ void *platform::dlopen(const std::string &fname) return ::dlopen(fname.c_str(), RTLD_NOW | RTLD_GLOBAL); } +// return dynamic linker error string + +std::string platform::dlerror() +{ + const char *errmesg = ::dlerror(); + if (errmesg) return std::string(errmesg); + else return ""; +} + // close a shared object int platform::dlclose(void *handle) { diff --git a/src/platform.h b/src/platform.h index ef45ceff9b..794fd692b0 100644 --- a/src/platform.h +++ b/src/platform.h @@ -133,6 +133,16 @@ namespace platform { void *dlopen(const std::string &fname); + /*! Obtain error diagnostic info after dynamic linking function calls + * + * Return a human-readable string describing the most recent error that + * occurred when using one of the functions for dynamic loading objects + * the last call to this function. The string is empty, if there was no error. + * + * \return string with error message or empty */ + + std::string dlerror(); + /*! Close a shared object * * This releases the object corresponding to the provided handle. From 4aae11f8fb10a66219f23ffde1845fca51d035da Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Wed, 6 Oct 2021 08:46:20 -0400 Subject: [PATCH 086/372] port plugin loader to platform namespace --- examples/plugins/LAMMPSInterfaceCXX.cmake | 4 +++- src/PLUGIN/plugin.cpp | 28 +++++++---------------- 2 files changed, 11 insertions(+), 21 deletions(-) diff --git a/examples/plugins/LAMMPSInterfaceCXX.cmake b/examples/plugins/LAMMPSInterfaceCXX.cmake index 02f9159319..d52cf8f4e5 100644 --- a/examples/plugins/LAMMPSInterfaceCXX.cmake +++ b/examples/plugins/LAMMPSInterfaceCXX.cmake @@ -23,7 +23,9 @@ endfunction(validate_option) # LAMMPS C++ interface. We only need the header related parts. add_library(lammps INTERFACE) target_include_directories(lammps INTERFACE ${LAMMPS_HEADER_DIR}) - +if((CMAKE_SYSTEM_NAME STREQUAL "Windows") AND CMAKE_CROSSCOMPILING) + target_link_libraries(lammps INTERFACE ${CMAKE_BINARY_DIR}/../liblammps.dll.a) +endif() ################################################################################ # MPI configuration if(NOT CMAKE_CROSSCOMPILING) diff --git a/src/PLUGIN/plugin.cpp b/src/PLUGIN/plugin.cpp index 270c9958f5..443fecc99f 100644 --- a/src/PLUGIN/plugin.cpp +++ b/src/PLUGIN/plugin.cpp @@ -25,12 +25,6 @@ #include #include -#ifdef _WIN32 -#include -#else -#include -#endif - namespace LAMMPS_NS { // list of plugin information data for loaded styles @@ -87,31 +81,28 @@ namespace LAMMPS_NS { #if defined(LMP_PLUGIN) int me = lmp->comm->me; -#if defined(WIN32) - lmp->error->all(FLERR,"Loading of plugins on Windows is not supported\n"); -#else // open DSO file from given path; load symbols globally - dlerror(); - void *dso = dlopen(file,RTLD_NOW|RTLD_GLOBAL); + platform::dlerror(); + void *dso = platform::dlopen(file); if (dso == nullptr) { if (me == 0) - utils::logmesg(lmp,"Open of file {} failed: {}\n",file,dlerror()); + utils::logmesg(lmp,"Open of file {} failed: {}\n",file,platform::dlerror()); return; } // look up lammpsplugin_init() function in DSO // function must have C bindings so there is no name mangling - dlerror(); - void *initfunc = dlsym(dso,"lammpsplugin_init"); + platform::dlerror(); + void *initfunc = platform::dlsym(dso,"lammpsplugin_init"); if (initfunc == nullptr) { - dlclose(dso); + platform::dlclose(dso); if (me == 0) utils::logmesg(lmp,"Plugin symbol lookup failure in file {}: {}\n", - file,dlerror()); + file,platform::dlerror()); return; } @@ -121,7 +112,6 @@ namespace LAMMPS_NS (*(lammpsplugin_initfunc)(initfunc))((void *)lmp, dso, (void *)&plugin_register); -#endif #endif } @@ -410,9 +400,7 @@ namespace LAMMPS_NS -- dso_refcounter[handle]; if (dso_refcounter[handle] == 0) { -#ifndef WIN32 - dlclose(handle); -#endif + platform::dlclose(handle); } #endif } From bbfb2d2712e66793438098174ce58f8e19084e9b Mon Sep 17 00:00:00 2001 From: Stan Moore Date: Wed, 6 Oct 2021 08:27:25 -0700 Subject: [PATCH 087/372] Add missing code to modify_kokkos --- src/KOKKOS/modify_kokkos.cpp | 102 ++++++++++++++++++++++++++++++++--- src/KOKKOS/modify_kokkos.h | 3 ++ 2 files changed, 97 insertions(+), 8 deletions(-) diff --git a/src/KOKKOS/modify_kokkos.cpp b/src/KOKKOS/modify_kokkos.cpp index 868de3e11e..08bbfa762f 100644 --- a/src/KOKKOS/modify_kokkos.cpp +++ b/src/KOKKOS/modify_kokkos.cpp @@ -38,7 +38,20 @@ ModifyKokkos::ModifyKokkos(LAMMPS *lmp) : Modify(lmp) void ModifyKokkos::setup(int vflag) { // compute setup needs to come before fix setup - // b/c NH fixes need use DOF of temperature computes + // b/c NH fixes need DOF of temperature computes + // fix group setup() is special case since populates a dynamic group + // needs to be done before temperature compute setup + + for (int i = 0; i < nfix; i++) { + if (strcmp(fix[i]->style,"GROUP") == 0) { + atomKK->sync(fix[i]->execution_space,fix[i]->datamask_read); + int prev_auto_sync = lmp->kokkos->auto_sync; + if (!fix[i]->kokkosable) lmp->kokkos->auto_sync = 1; + fix[i]->setup(vflag); + lmp->kokkos->auto_sync = prev_auto_sync; + atomKK->modified(fix[i]->execution_space,fix[i]->datamask_modify); + } + } for (int i = 0; i < ncompute; i++) compute[i]->setup(); @@ -124,6 +137,37 @@ void ModifyKokkos::setup_pre_neighbor() } } +/* ---------------------------------------------------------------------- + setup post_neighbor call, only for fixes that define post_neighbor + called from Verlet, RESPA +------------------------------------------------------------------------- */ + +void ModifyKokkos::setup_post_neighbor() +{ + if (update->whichflag == 1) + for (int i = 0; i < n_post_neighbor; i++) { + atomKK->sync(fix[list_post_neighbor[i]]->execution_space, + fix[list_post_neighbor[i]]->datamask_read); + int prev_auto_sync = lmp->kokkos->auto_sync; + if (!fix[list_post_neighbor[i]]->kokkosable) lmp->kokkos->auto_sync = 1; + fix[list_post_neighbor[i]]->setup_post_neighbor(); + lmp->kokkos->auto_sync = prev_auto_sync; + atomKK->modified(fix[list_post_neighbor[i]]->execution_space, + fix[list_post_neighbor[i]]->datamask_modify); + } + else if (update->whichflag == 2) + for (int i = 0; i < n_min_post_neighbor; i++) { + atomKK->sync(fix[list_min_post_neighbor[i]]->execution_space, + fix[list_min_post_neighbor[i]]->datamask_read); + int prev_auto_sync = lmp->kokkos->auto_sync; + if (!fix[list_min_post_neighbor[i]]->kokkosable) lmp->kokkos->auto_sync = 1; + fix[list_min_post_neighbor[i]]->setup_post_neighbor(); + lmp->kokkos->auto_sync = prev_auto_sync; + atomKK->modified(fix[list_min_post_neighbor[i]]->execution_space, + fix[list_min_post_neighbor[i]]->datamask_modify); + } +} + /* ---------------------------------------------------------------------- setup pre_force call, only for fixes that define pre_force called from Verlet, RESPA, Min @@ -258,6 +302,24 @@ void ModifyKokkos::pre_neighbor() } } +/* ---------------------------------------------------------------------- + post_neighbor call, only for relevant fixes +------------------------------------------------------------------------- */ + +void ModifyKokkos::post_neighbor() +{ + for (int i = 0; i < n_post_neighbor; i++) { + atomKK->sync(fix[list_post_neighbor[i]]->execution_space, + fix[list_post_neighbor[i]]->datamask_read); + int prev_auto_sync = lmp->kokkos->auto_sync; + if (!fix[list_post_neighbor[i]]->kokkosable) lmp->kokkos->auto_sync = 1; + fix[list_post_neighbor[i]]->post_neighbor(); + lmp->kokkos->auto_sync = prev_auto_sync; + atomKK->modified(fix[list_post_neighbor[i]]->execution_space, + fix[list_post_neighbor[i]]->datamask_modify); + } +} + /* ---------------------------------------------------------------------- pre_force call, only for relevant fixes ------------------------------------------------------------------------- */ @@ -420,6 +482,12 @@ void ModifyKokkos::post_run() atomKK->modified(fix[i]->execution_space, fix[i]->datamask_modify); } + + // must reset this to its default value, since computes may be added + // or removed between runs and with this change we will redirect any + // calls to addstep_compute() to addstep_compute_all() instead. + n_timeflag = -1; + } /* ---------------------------------------------------------------------- @@ -567,6 +635,24 @@ void ModifyKokkos::min_pre_neighbor() } } +/* ---------------------------------------------------------------------- + minimizer post-neighbor call, only for relevant fixes +------------------------------------------------------------------------- */ + +void ModifyKokkos::min_post_neighbor() +{ + for (int i = 0; i < n_min_post_neighbor; i++) { + atomKK->sync(fix[list_min_post_neighbor[i]]->execution_space, + fix[list_min_post_neighbor[i]]->datamask_read); + int prev_auto_sync = lmp->kokkos->auto_sync; + if (!fix[list_min_post_neighbor[i]]->kokkosable) lmp->kokkos->auto_sync = 1; + fix[list_min_post_neighbor[i]]->min_post_neighbor(); + lmp->kokkos->auto_sync = prev_auto_sync; + atomKK->modified(fix[list_min_post_neighbor[i]]->execution_space, + fix[list_min_post_neighbor[i]]->datamask_modify); + } +} + /* ---------------------------------------------------------------------- minimizer pre-force call, only for relevant fixes ------------------------------------------------------------------------- */ @@ -646,7 +732,7 @@ double ModifyKokkos::min_energy(double *fextra) } /* ---------------------------------------------------------------------- - store current state of extra dof, only for relevant fixes + store current state of extra minimizer dof, only for relevant fixes ------------------------------------------------------------------------- */ void ModifyKokkos::min_store() @@ -664,7 +750,7 @@ void ModifyKokkos::min_store() } /* ---------------------------------------------------------------------- - mange state of extra dof on a stack, only for relevant fixes + manage state of extra minimizer dof on a stack, only for relevant fixes ------------------------------------------------------------------------- */ void ModifyKokkos::min_clearstore() @@ -710,7 +796,7 @@ void ModifyKokkos::min_popstore() } /* ---------------------------------------------------------------------- - displace extra dof along vector hextra, only for relevant fixes + displace extra minimizer dof along vector hextra, only for relevant fixes ------------------------------------------------------------------------- */ void ModifyKokkos::min_step(double alpha, double *hextra) @@ -755,7 +841,7 @@ double ModifyKokkos::max_alpha(double *hextra) } /* ---------------------------------------------------------------------- - extract extra dof for minimization, only for relevant fixes + extract extra minimizer dof, only for relevant fixes ------------------------------------------------------------------------- */ int ModifyKokkos::min_dof() @@ -775,7 +861,7 @@ int ModifyKokkos::min_dof() } /* ---------------------------------------------------------------------- - reset reference state of fix, only for relevant fixes + reset minimizer reference state of fix, only for relevant fixes ------------------------------------------------------------------------- */ int ModifyKokkos::min_reset_ref() @@ -788,10 +874,10 @@ int ModifyKokkos::min_reset_ref() int prev_auto_sync = lmp->kokkos->auto_sync; if (!fix[list_min_energy[i]]->kokkosable) lmp->kokkos->auto_sync = 1; itmp = fix[list_min_energy[i]]->min_reset_ref(); - lmp->kokkos->auto_sync = prev_auto_sync; if (itmp) itmpall = 1; + lmp->kokkos->auto_sync = prev_auto_sync; atomKK->modified(fix[list_min_energy[i]]->execution_space, fix[list_min_energy[i]]->datamask_modify); } - return itmpall; +return itmpall; } diff --git a/src/KOKKOS/modify_kokkos.h b/src/KOKKOS/modify_kokkos.h index 9b75b7c607..25911743b2 100644 --- a/src/KOKKOS/modify_kokkos.h +++ b/src/KOKKOS/modify_kokkos.h @@ -26,6 +26,7 @@ class ModifyKokkos : public Modify { void setup(int); void setup_pre_exchange(); void setup_pre_neighbor(); + void setup_post_neighbor(); void setup_pre_force(int); void setup_pre_reverse(int, int); void initial_integrate(int); @@ -33,6 +34,7 @@ class ModifyKokkos : public Modify { void pre_decide(); void pre_exchange(); void pre_neighbor(); + void post_neighbor(); void pre_force(int); void pre_reverse(int,int); void post_force(int); @@ -52,6 +54,7 @@ class ModifyKokkos : public Modify { void min_pre_exchange(); void min_pre_neighbor(); + void min_post_neighbor(); void min_pre_force(int); void min_pre_reverse(int,int); void min_post_force(int); From d9288ae7e9bf47da56d549ac228723cf8e2265b6 Mon Sep 17 00:00:00 2001 From: Stan Moore Date: Wed, 6 Oct 2021 08:33:02 -0700 Subject: [PATCH 088/372] whitespace --- src/KOKKOS/modify_kokkos.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/KOKKOS/modify_kokkos.cpp b/src/KOKKOS/modify_kokkos.cpp index 08bbfa762f..5545351f53 100644 --- a/src/KOKKOS/modify_kokkos.cpp +++ b/src/KOKKOS/modify_kokkos.cpp @@ -879,5 +879,5 @@ int ModifyKokkos::min_reset_ref() atomKK->modified(fix[list_min_energy[i]]->execution_space, fix[list_min_energy[i]]->datamask_modify); } -return itmpall; + return itmpall; } From 5059bfe32b79e02c97fa88f2341038523fca57fe Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Wed, 6 Oct 2021 12:09:20 -0400 Subject: [PATCH 089/372] add Stan to Modify class as co-codeowner --- .github/CODEOWNERS | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 7508d8e4c1..ba702784f4 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -83,7 +83,7 @@ src/library.* @sjplimp src/main.cpp @sjplimp src/min_*.* @sjplimp src/memory.* @sjplimp -src/modify.* @sjplimp +src/modify.* @sjplimp @stanmoore1 src/molecule.* @sjplimp src/my_page.h @sjplimp src/my_pool_chunk.h @sjplimp From 891d4c278ff3303c79dc51a305b374f3402b11e2 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Wed, 6 Oct 2021 14:08:45 -0400 Subject: [PATCH 090/372] port dump movie to platform namespace --- src/dump_movie.cpp | 26 +++++++++++++------------- src/dump_movie.h | 1 + 2 files changed, 14 insertions(+), 13 deletions(-) diff --git a/src/dump_movie.cpp b/src/dump_movie.cpp index fb834b5fb0..52c0522289 100644 --- a/src/dump_movie.cpp +++ b/src/dump_movie.cpp @@ -41,28 +41,29 @@ DumpMovie::DumpMovie(LAMMPS *lmp, int narg, char **arg) : /* ---------------------------------------------------------------------- */ +DumpMovie::~DumpMovie() +{ + if (fp) platform::pclose(fp); + fp = nullptr; +} + +/* ---------------------------------------------------------------------- */ + void DumpMovie::openfile() { - char moviecmd[1024]; - if ((comm->me == 0) && (fp == nullptr)) { #ifdef LAMMPS_FFMPEG - sprintf(moviecmd,"ffmpeg -v error -y -r %.2f -f image2pipe -c:v ppm -i - " - "-r 24.0 -b:v %dk %s ", framerate, bitrate, filename); + auto moviecmd = fmt::format("ffmpeg -v error -y -r {:.2f} -f image2pipe -c:v ppm -i - " + "-r 24.0 -b:v {}k {}", framerate, bitrate, filename); + fp = platform::popen(moviecmd,"w"); #else + fp = nullptr; error->one(FLERR,"Support for writing movies not included"); #endif -#if defined(_WIN32) - fp = _popen(moviecmd,"wb"); -#else - fp = popen(moviecmd,"w"); -#endif - if (fp == nullptr) - error->one(FLERR,"Failed to open FFmpeg pipeline to " - "file {}",filename); + error->one(FLERR,"Failed to open FFmpeg pipeline to file {}",filename); } } /* ---------------------------------------------------------------------- */ @@ -100,4 +101,3 @@ int DumpMovie::modify_param(int narg, char **arg) return 0; } - diff --git a/src/dump_movie.h b/src/dump_movie.h index 1c41cb09b5..770193e039 100644 --- a/src/dump_movie.h +++ b/src/dump_movie.h @@ -27,6 +27,7 @@ namespace LAMMPS_NS { class DumpMovie : public DumpImage { public: DumpMovie(LAMMPS *, int, char **); + virtual ~DumpMovie(); virtual void openfile(); virtual void init_style(); From 3d86a0f5f661e1d1ac7c466c5232b088cebe64e4 Mon Sep 17 00:00:00 2001 From: Stan Moore Date: Wed, 6 Oct 2021 11:15:34 -0700 Subject: [PATCH 091/372] Fix two bugs in compute_orientorder_atom_kokkos --- src/KOKKOS/compute_orientorder_atom_kokkos.cpp | 14 ++++++++++---- src/MAKE/MACHINES/Makefile.summit_kokkos | 6 +++--- 2 files changed, 13 insertions(+), 7 deletions(-) diff --git a/src/KOKKOS/compute_orientorder_atom_kokkos.cpp b/src/KOKKOS/compute_orientorder_atom_kokkos.cpp index 131e9933e8..f7ec879e3c 100644 --- a/src/KOKKOS/compute_orientorder_atom_kokkos.cpp +++ b/src/KOKKOS/compute_orientorder_atom_kokkos.cpp @@ -173,8 +173,6 @@ void ComputeOrientOrderAtomKokkos::compute_peratom() x = atomKK->k_x.view(); mask = atomKK->k_mask.view(); - Kokkos::deep_copy(d_qnm,{0.0,0.0}); - int vector_length_default = 1; int team_size_default = 1; if (!host_flag) @@ -185,6 +183,8 @@ void ComputeOrientOrderAtomKokkos::compute_peratom() if (chunk_size > inum - chunk_offset) chunk_size = inum - chunk_offset; + Kokkos::deep_copy(d_qnm,{0.0,0.0}); + //Neigh { int vector_length = vector_length_default; @@ -286,7 +286,7 @@ void ComputeOrientOrderAtomKokkos::operator() (TagComputeOrientOrder const int i = d_ilist[ii + chunk_offset]; const int ncount = d_ncount(ii); - // if not nnn neighbors, order parameter = 0; + // if not nnn neighbors, order parameter = 0 if ((ncount == 0) || (ncount < nnn)) { for (int jj = 0; jj < ncol; jj++) @@ -316,7 +316,7 @@ void ComputeOrientOrderAtomKokkos::operator() (TagComputeOrientOrder const int ncount = d_ncount(ii); if (jj >= ncount) return; - // if not nnn neighbors, order parameter = 0; + // if not nnn neighbors, order parameter = 0 if ((ncount == 0) || (ncount < nnn)) return; @@ -328,6 +328,12 @@ template KOKKOS_INLINE_FUNCTION void ComputeOrientOrderAtomKokkos::operator() (TagComputeOrientOrderAtomBOOP2,const int& ii) const { const int ncount = d_ncount(ii); + + // if not nnn neighbors, order parameter = 0 + + if ((ncount == 0) || (ncount < nnn)) + return; + calc_boop2(ncount, ii); } diff --git a/src/MAKE/MACHINES/Makefile.summit_kokkos b/src/MAKE/MACHINES/Makefile.summit_kokkos index 95ee7e39a8..4bd74a89c0 100644 --- a/src/MAKE/MACHINES/Makefile.summit_kokkos +++ b/src/MAKE/MACHINES/Makefile.summit_kokkos @@ -9,7 +9,7 @@ SHELL = /bin/sh KOKKOS_ABSOLUTE_PATH = $(shell cd $(KOKKOS_PATH); pwd) CC = $(KOKKOS_ABSOLUTE_PATH)/bin/nvcc_wrapper -CCFLAGS = -g -O3 +CCFLAGS = -g -O3 -DLAMMPS_BIGBIG SHFLAGS = -fPIC DEPFLAGS = -M @@ -68,9 +68,9 @@ FFT_LIB = -lcufft # PATH = path(s) for JPEG library and/or PNG library # LIB = name(s) of JPEG library and/or PNG library -JPG_INC = +JPG_INC = -DLAMMPS_PNG -I~/libpng-1.6.37/include JPG_PATH = -JPG_LIB = +JPG_LIB = -L~/libpng-1.6.37/lib -lpng # --------------------------------------------------------------------- # build rules and dependencies From a539c317b3297089c26c93917cf9c0af6a458252 Mon Sep 17 00:00:00 2001 From: Stan Moore Date: Wed, 6 Oct 2021 11:43:40 -0700 Subject: [PATCH 092/372] Revert changes to makefile --- src/MAKE/MACHINES/Makefile.summit_kokkos | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/MAKE/MACHINES/Makefile.summit_kokkos b/src/MAKE/MACHINES/Makefile.summit_kokkos index 4bd74a89c0..95ee7e39a8 100644 --- a/src/MAKE/MACHINES/Makefile.summit_kokkos +++ b/src/MAKE/MACHINES/Makefile.summit_kokkos @@ -9,7 +9,7 @@ SHELL = /bin/sh KOKKOS_ABSOLUTE_PATH = $(shell cd $(KOKKOS_PATH); pwd) CC = $(KOKKOS_ABSOLUTE_PATH)/bin/nvcc_wrapper -CCFLAGS = -g -O3 -DLAMMPS_BIGBIG +CCFLAGS = -g -O3 SHFLAGS = -fPIC DEPFLAGS = -M @@ -68,9 +68,9 @@ FFT_LIB = -lcufft # PATH = path(s) for JPEG library and/or PNG library # LIB = name(s) of JPEG library and/or PNG library -JPG_INC = -DLAMMPS_PNG -I~/libpng-1.6.37/include +JPG_INC = JPG_PATH = -JPG_LIB = -L~/libpng-1.6.37/lib -lpng +JPG_LIB = # --------------------------------------------------------------------- # build rules and dependencies From ec1a55b35bf3c623f3a490d75b9c1e244a61c593 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Wed, 6 Oct 2021 15:04:48 -0400 Subject: [PATCH 093/372] use platform code for reading/writing of compressed text file via a pipe --- src/EXTRA-FIX/fix_tmd.cpp | 29 +++++++++--------------- src/EXTRA-FIX/fix_tmd.h | 2 +- src/PHONON/dynamical_matrix.cpp | 37 +++++++++++++------------------ src/PHONON/third_order.cpp | 35 +++++++++++++---------------- src/REAXFF/fix_reaxff_bonds.cpp | 25 +++++++-------------- src/REAXFF/fix_reaxff_bonds.h | 2 +- src/REAXFF/fix_reaxff_species.cpp | 34 ++++++++++++---------------- src/REAXFF/fix_reaxff_species.h | 2 +- src/REPLICA/neb.cpp | 28 +++++++++-------------- src/SPIN/neb_spin.cpp | 25 +++++++-------------- src/dump.cpp | 19 ++++------------ src/read_data.cpp | 28 ++++++----------------- src/read_data.h | 2 +- src/reader.cpp | 27 ++++++---------------- src/reader.h | 2 +- 15 files changed, 104 insertions(+), 193 deletions(-) diff --git a/src/EXTRA-FIX/fix_tmd.cpp b/src/EXTRA-FIX/fix_tmd.cpp index a46eb89713..93d7ae6a56 100644 --- a/src/EXTRA-FIX/fix_tmd.cpp +++ b/src/EXTRA-FIX/fix_tmd.cpp @@ -123,7 +123,10 @@ nfileevery(0), fp(nullptr), xf(nullptr), xold(nullptr) FixTMD::~FixTMD() { - if (nfileevery && me == 0) fclose(fp); + if (nfileevery && me == 0) { + if (compressed) platform::pclose(fp); + else fclose(fp); + } // unregister callbacks to this fix from Atom class @@ -517,30 +520,18 @@ void FixTMD::readfile(char *file) test if gzipped ------------------------------------------------------------------------- */ -void FixTMD::open(char *file) +void FixTMD::open(const std::string &file) { - if (utils::strmatch(file,"\\.gz$")) { + if (platform::has_zip_extension(file)) { compressed = 1; - -#ifdef LAMMPS_GZIP - auto gunzip = fmt::format("gzip -c -d {}",file); - -#ifdef _WIN32 - fp = _popen(gunzip.c_str(),"rb"); -#else - fp = popen(gunzip.c_str(),"r"); -#endif - -#else - error->one(FLERR,"Cannot open gzipped file without gzip support"); -#endif + fp = platform::zip_read(file); + if (!fp) error->one(FLERR,"Cannot open compressed file for reading"); } else { compressed = 0; - fp = fopen(file,"r"); + fp = fopen(file.c_str(),"r"); } - if (fp == nullptr) - error->one(FLERR,"Cannot open file {}: {}",file, utils::getsyserror()); + if (!fp) error->one(FLERR,"Cannot open file {}: {}", file, utils::getsyserror()); } /* ---------------------------------------------------------------------- */ diff --git a/src/EXTRA-FIX/fix_tmd.h b/src/EXTRA-FIX/fix_tmd.h index fd818eb583..b85869930a 100644 --- a/src/EXTRA-FIX/fix_tmd.h +++ b/src/EXTRA-FIX/fix_tmd.h @@ -52,7 +52,7 @@ class FixTMD : public Fix { double **xf, **xold; void readfile(char *); - void open(char *); + void open(const std::string &); }; } // namespace LAMMPS_NS diff --git a/src/PHONON/dynamical_matrix.cpp b/src/PHONON/dynamical_matrix.cpp index f7cb3f7f44..b2f473f9cc 100644 --- a/src/PHONON/dynamical_matrix.cpp +++ b/src/PHONON/dynamical_matrix.cpp @@ -55,9 +55,12 @@ DynamicalMatrix::DynamicalMatrix(LAMMPS *lmp) : Command(lmp), fp(nullptr) DynamicalMatrix::~DynamicalMatrix() { - if (fp && me == 0) fclose(fp); + if (fp && me == 0) { + if (compressed) platform::pclose(fp); + else fclose(fp); memory->destroy(groupmap); fp = nullptr; + } } /* ---------------------------------------------------------------------- @@ -212,32 +215,24 @@ void DynamicalMatrix::options(int narg, char **arg) some derived classes override this function ------------------------------------------------------------------------- */ -void DynamicalMatrix::openfile(const char* filename) +void DynamicalMatrix::openfile(const char *filename) { // if file already opened, return - //if (me!=0) return; if (file_opened) return; - - if (compressed) { -#ifdef LAMMPS_GZIP - char gzip[128]; - sprintf(gzip,"gzip -6 > %s",filename); -#ifdef _WIN32 - fp = _popen(gzip,"wb"); -#else - fp = popen(gzip,"w"); -#endif -#else - error->one(FLERR,"Cannot open gzipped file"); -#endif - } else if (binaryflag) { + fp = nullptr; + + if (me == 0) { + if (compressed) { + fp = platform::zip_write(std::string(filename)+".gz"); + if (!fp) error->one(FLERR,"Cannot open gzipped file"); + } else if (binaryflag) { fp = fopen(filename,"wb"); - } else { + } else { fp = fopen(filename,"w"); + } + if (!fp) error->one(FLERR,"Cannot open dynmat file: {}", utils::getsyserror()); } - - if (fp == nullptr) error->one(FLERR,"Cannot open dump file"); - + file_opened = 1; } diff --git a/src/PHONON/third_order.cpp b/src/PHONON/third_order.cpp index 565e8b50e5..ca91a424af 100644 --- a/src/PHONON/third_order.cpp +++ b/src/PHONON/third_order.cpp @@ -55,7 +55,10 @@ ThirdOrder::ThirdOrder(LAMMPS *lmp) : Command(lmp), fp(nullptr) ThirdOrder::~ThirdOrder() { - if (fp && me == 0) fclose(fp); + if (fp && me == 0) { + if (compressed) platform::pclose(fp); + else fclose(fp); + } fp = nullptr; memory->destroy(groupmap); } @@ -215,27 +218,19 @@ void ThirdOrder::openfile(const char* filename) { // if file already opened, return if (file_opened) return; + fp = nullptr; - if (compressed) { -#ifdef LAMMPS_GZIP - char gzip[128]; - sprintf(gzip,"gzip -6 > %s",filename); -#ifdef _WIN32 - fp = _popen(gzip,"wb"); -#else - fp = popen(gzip,"w"); -#endif -#else - error->one(FLERR,"Cannot open gzipped file"); -#endif - } else if (binaryflag) { - fp = fopen(filename,"wb"); - } else { - fp = fopen(filename,"w"); + if (me == 0) { + if (compressed) { + fp = platform::zip_write(std::string(filename)+".gz"); + if (!fp) error->one(FLERR,"Cannot open gzipped file"); + } else if (binaryflag) { + fp = fopen(filename,"wb"); + } else { + fp = fopen(filename,"w"); + } + if (!fp) error->one(FLERR,"Cannot open third_order file: {}", utils::getsyserror()); } - - if (fp == nullptr) error->one(FLERR,"Cannot open dump file"); - file_opened = 1; } diff --git a/src/REAXFF/fix_reaxff_bonds.cpp b/src/REAXFF/fix_reaxff_bonds.cpp index f13056c5b6..07d0c73f3d 100644 --- a/src/REAXFF/fix_reaxff_bonds.cpp +++ b/src/REAXFF/fix_reaxff_bonds.cpp @@ -45,30 +45,21 @@ FixReaxFFBonds::FixReaxFFBonds(LAMMPS *lmp, int narg, char **arg) : MPI_Comm_size(world,&nprocs); ntypes = atom->ntypes; nmax = atom->nmax; + compressed = 0; nevery = utils::inumeric(FLERR,arg[3],false,lmp); - if (nevery <= 0) - error->all(FLERR,"Illegal fix reaxff/bonds command"); + if (nevery <= 0) error->all(FLERR,"Illegal fix reaxff/bonds command"); if (me == 0) { - char *suffix = strrchr(arg[4],'.'); - if (suffix && strcmp(suffix,".gz") == 0) { -#ifdef LAMMPS_GZIP - auto gzip = fmt::format("gzip -6 > {}",arg[4]); -#ifdef _WIN32 - fp = _popen(gzip.c_str(),"wb"); -#else - fp = popen(gzip.c_str(),"w"); -#endif -#else - error->one(FLERR,"Cannot open gzipped file"); -#endif + if (platform::has_zip_extension(arg[4])) { + compressed = 1; + fp = platform::zip_write(arg[4]); + if (!fp) error->one(FLERR,"Cannot open compressed file"); } else fp = fopen(arg[4],"w"); - if (!fp) - error->one(FLERR,fmt::format("Cannot open fix reaxff/bonds file {}: " - "{}",arg[4],utils::getsyserror())); + if (!fp) error->one(FLERR,fmt::format("Cannot open fix reaxff/bonds file {}: " + "{}",arg[4],utils::getsyserror())); } if (atom->tag_consecutive() == 0) diff --git a/src/REAXFF/fix_reaxff_bonds.h b/src/REAXFF/fix_reaxff_bonds.h index 4c2fd535ea..4c40017e43 100644 --- a/src/REAXFF/fix_reaxff_bonds.h +++ b/src/REAXFF/fix_reaxff_bonds.h @@ -36,7 +36,7 @@ class FixReaxFFBonds : public Fix { void end_of_step(); protected: - int me, nprocs, nmax, ntypes, maxsize; + int me, nprocs, nmax, ntypes, maxsize, compressed; int *numneigh; tagint **neighid; double **abo; diff --git a/src/REAXFF/fix_reaxff_species.cpp b/src/REAXFF/fix_reaxff_species.cpp index 4fc08975a8..856020227d 100644 --- a/src/REAXFF/fix_reaxff_species.cpp +++ b/src/REAXFF/fix_reaxff_species.cpp @@ -56,6 +56,7 @@ FixReaxFFSpecies::FixReaxFFSpecies(LAMMPS *lmp, int narg, char **arg) : size_peratom_cols = 0; peratom_freq = 1; + compressed = 0; nvalid = -1; MPI_Comm_rank(world,&me); @@ -106,23 +107,14 @@ FixReaxFFSpecies::FixReaxFFSpecies(LAMMPS *lmp, int narg, char **arg) : strcpy(tmparg[2],arg[5]); if (me == 0) { - char *suffix = strrchr(arg[6],'.'); - if (suffix && strcmp(suffix,".gz") == 0) { -#ifdef LAMMPS_GZIP - auto gzip = fmt::format("gzip -6 > {}",arg[6]); -#ifdef _WIN32 - fp = _popen(gzip.c_str(),"wb"); -#else - fp = popen(gzip.c_str(),"w"); -#endif -#else - error->one(FLERR,"Cannot open gzipped file"); -#endif + if (platform::has_zip_extension(arg[6])) { + fp = platform::zip_write(arg[6]); + compressed = 1; + if (!fp) error->one(FLERR,"Cannot open compressed file"); } else fp = fopen(arg[6],"w"); - if (!fp) - error->one(FLERR,fmt::format("Cannot open fix reaxff/species file {}: " - "{}",arg[6],utils::getsyserror())); + if (!fp) error->one(FLERR,fmt::format("Cannot open fix reaxff/species file {}: " + "{}",arg[6],utils::getsyserror())); } x0 = nullptr; @@ -256,9 +248,12 @@ FixReaxFFSpecies::~FixReaxFFSpecies() if (filepos) delete [] filepos; - if (me == 0) fclose(fp); - if (me == 0 && posflag && multipos_opened) fclose(pos); - + if (me == 0) { + if (compressed) platform::pclose(fp); + else fclose(fp); + if (posflag && multipos_opened) fclose(pos); + } + modify->delete_compute("SPECATOM"); modify->delete_fix("SPECBOND"); } @@ -683,8 +678,7 @@ void FixReaxFFSpecies::OpenPos() char *ptr = strchr(filepos,'*'); *ptr = '\0'; if (padflag == 0) - sprintf(filecurrent,"%s" BIGINT_FORMAT "%s", - filepos,ntimestep,ptr+1); + sprintf(filecurrent,"%s" BIGINT_FORMAT "%s",filepos,ntimestep,ptr+1); else { char bif[8],pad[16]; strcpy(bif,BIGINT_FORMAT); diff --git a/src/REAXFF/fix_reaxff_species.h b/src/REAXFF/fix_reaxff_species.h index bcfcf2b6dd..91326273b6 100644 --- a/src/REAXFF/fix_reaxff_species.h +++ b/src/REAXFF/fix_reaxff_species.h @@ -45,7 +45,7 @@ class FixReaxFFSpecies : public Fix { protected: int me, nprocs, nmax, nlocal, ntypes, ntotal; - int nrepeat, nfreq, posfreq; + int nrepeat, nfreq, posfreq, compressed; int Nmoltype, vector_nmole, vector_nspec; int *Name, *MolName, *NMol, *nd, *MolType, *molmap; double *clusterID; diff --git a/src/REPLICA/neb.cpp b/src/REPLICA/neb.cpp index 9e6e32772d..281d0e830f 100644 --- a/src/REPLICA/neb.cpp +++ b/src/REPLICA/neb.cpp @@ -94,7 +94,10 @@ NEB::~NEB() MPI_Comm_free(&roots); memory->destroy(all); delete[] rdist; - if (fp) fclose(fp); + if (fp) { + if (compressed) platform::pclose(fp); + else fclose(fp); + } } /* ---------------------------------------------------------------------- @@ -539,28 +542,17 @@ void NEB::readfile(char *file, int flag) /* ---------------------------------------------------------------------- universe proc 0 opens NEB data file - test if gzipped + test if compressed ------------------------------------------------------------------------- */ void NEB::open(char *file) { compressed = 0; - char *suffix = file + strlen(file) - 3; - if (suffix > file && strcmp(suffix,".gz") == 0) compressed = 1; - if (!compressed) fp = fopen(file,"r"); - else { -#ifdef LAMMPS_GZIP - auto gunzip = std::string("gzip -c -d ") + file; -#ifdef _WIN32 - fp = _popen(gunzip.c_str(),"rb"); -#else - fp = popen(gunzip.c_str(),"r"); -#endif - -#else - error->one(FLERR,"Cannot open gzipped file"); -#endif - } + if (platform::has_zip_extension(file)) { + compressed = 1; + fp = platform::zip_read(file); + if (!fp) error->one(FLERR,"Cannot open compressed file"); + } else fp = fopen(file,"r"); if (fp == nullptr) error->one(FLERR,"Cannot open file {}: {}",file,utils::getsyserror()); diff --git a/src/SPIN/neb_spin.cpp b/src/SPIN/neb_spin.cpp index fe24235a98..c2cefdcc97 100644 --- a/src/SPIN/neb_spin.cpp +++ b/src/SPIN/neb_spin.cpp @@ -79,7 +79,10 @@ NEBSpin::~NEBSpin() MPI_Comm_free(&roots); memory->destroy(all); delete[] rdist; - if (fp) fclose(fp); + if (fp) { + if (compressed) platform::pclose(fp); + else fclose(fp); + } } /* ---------------------------------------------------------------------- @@ -690,22 +693,10 @@ int NEBSpin::initial_rotation(double *spi, double *sploc, double fraction) void NEBSpin::open(char *file) { compressed = 0; - char *suffix = file + strlen(file) - 3; - if (suffix > file && strcmp(suffix,".gz") == 0) compressed = 1; - if (!compressed) fp = fopen(file,"r"); - else { -#ifdef LAMMPS_GZIP - auto gunzip = std::string("gzip -c -d ") + file; -#ifdef _WIN32 - fp = _popen(gunzip.c_str(),"rb"); -#else - fp = popen(gunzip.c_str(),"r"); -#endif - -#else - error->one(FLERR,"Cannot open gzipped file"); -#endif - } + if (platform::has_zip_extension(file)) { + fp = platform::zip_read(file); + if (!fp) error->one(FLERR,"Cannot open compressed file"); + } else fp = fopen(file,"r"); if (fp == nullptr) error->one(FLERR,"Cannot open file {}: {}",file,utils::getsyserror()); diff --git a/src/dump.cpp b/src/dump.cpp index 647fd3d38d..637ded53d0 100644 --- a/src/dump.cpp +++ b/src/dump.cpp @@ -108,9 +108,8 @@ Dump::Dump(LAMMPS *lmp, int /*narg*/, char **arg) : Pointers(lmp) // if contains '%', write one file per proc and replace % with proc-ID // if contains '*', write one file per timestep and replace * with timestep // check file suffixes - // if ends in .bin = binary file - // else if ends in .gz = gzipped text file - // else if ends in .zst = Zstd compressed text file + // if ends in .bin -> binary file + // else if ends in .gz or other known extensions -> compressed text file // else ASCII text file fp = nullptr; @@ -144,8 +143,7 @@ Dump::Dump(LAMMPS *lmp, int /*narg*/, char **arg) : Pointers(lmp) if (strchr(filename,'*')) multifile = 1; if (utils::strmatch(filename, "\\.bin$")) binary = 1; - if (utils::strmatch(filename, "\\.gz$") - || utils::strmatch(filename, "\\.zst$")) compressed = 1; + if (platform::has_zip_extension(filename)) compressed = 1; } /* ---------------------------------------------------------------------- */ @@ -580,16 +578,7 @@ void Dump::openfile() if (filewriter) { if (compressed) { -#ifdef LAMMPS_GZIP - auto gzip = fmt::format("gzip -6 > {}",filecurrent); -#ifdef _WIN32 - fp = _popen(gzip.c_str(),"wb"); -#else - fp = popen(gzip.c_str(),"w"); -#endif -#else - error->one(FLERR,"Cannot open gzipped file"); -#endif + fp = platform::zip_write(filecurrent); } else if (binary) { fp = fopen(filecurrent,"wb"); } else if (append_flag) { diff --git a/src/read_data.cpp b/src/read_data.cpp index bb4fbe0315..bbc3e20d44 100644 --- a/src/read_data.cpp +++ b/src/read_data.cpp @@ -741,7 +741,7 @@ void ReadData::command(int narg, char **arg) // close file if (me == 0) { - if (compressed) pclose(fp); + if (compressed) platform::pclose(fp); else fclose(fp); fp = nullptr; } @@ -1954,31 +1954,17 @@ int ReadData::reallocate(int **pcount, int cmax, int amax) test if gzipped ------------------------------------------------------------------------- */ -void ReadData::open(char *file) +void ReadData::open(const std::string &file) { - if (utils::strmatch(file,"\\.gz$")) { + if (platform::has_zip_extension(file)) { compressed = 1; - -#ifdef LAMMPS_GZIP - auto gunzip = fmt::format("gzip -c -d {}",file); - -#ifdef _WIN32 - fp = _popen(gunzip.c_str(),"rb"); -#else - fp = popen(gunzip.c_str(),"r"); -#endif - -#else - error->one(FLERR,"Cannot open gzipped file without gzip support"); -#endif + fp = platform::zip_read(file); + if (!fp) error->one(FLERR,"Cannot open compressed file {}", file); } else { compressed = 0; - fp = fopen(file,"r"); + fp = fopen(file.c_str(),"r"); + if (!fp) error->one(FLERR,"Cannot open file {}: {}", file, utils::getsyserror()); } - - if (fp == nullptr) - error->one(FLERR,"Cannot open file {}: {}", - file, utils::getsyserror()); } /* ---------------------------------------------------------------------- diff --git a/src/read_data.h b/src/read_data.h index 482c45e6e6..3374f48be0 100644 --- a/src/read_data.h +++ b/src/read_data.h @@ -78,7 +78,7 @@ class ReadData : public Command { // methods - void open(char *); + void open(const std::string &); void scan(int &, int &, int &, int &); int reallocate(int **, int, int); void header(int); diff --git a/src/reader.cpp b/src/reader.cpp index 71036e7444..3a07417912 100644 --- a/src/reader.cpp +++ b/src/reader.cpp @@ -32,33 +32,20 @@ Reader::Reader(LAMMPS *lmp) : Pointers(lmp) generic version for ASCII files that may be compressed ------------------------------------------------------------------------- */ -void Reader::open_file(const char *file) +void Reader::open_file(const std::string &file) { if (fp != nullptr) close_file(); - if (utils::strmatch(file,"\\.gz$")) { + if (platform::has_zip_extension(file)) { compressed = 1; - -#ifdef LAMMPS_GZIP - auto gunzip = fmt::format("gzip -c -d {}",file); - -#ifdef _WIN32 - fp = _popen(gunzip.c_str(),"rb"); -#else - fp = popen(gunzip.c_str(),"r"); -#endif - -#else - error->one(FLERR,"Cannot open gzipped file without gzip support"); -#endif + fp = platform::zip_read(file); + if (!fp) error->one(FLERR,"Cannot open compressed file for reading"); } else { compressed = 0; - fp = fopen(file,"r"); + fp = fopen(file.c_str(),"r"); } - if (fp == nullptr) - error->one(FLERR,"Cannot open file {}: {}", - file, utils::getsyserror()); + if (!fp) error->one(FLERR,"Cannot open file {}: {}", file, utils::getsyserror()); } /* ---------------------------------------------------------------------- @@ -69,7 +56,7 @@ void Reader::open_file(const char *file) void Reader::close_file() { if (fp == nullptr) return; - if (compressed) pclose(fp); + if (compressed) platform::pclose(fp); else fclose(fp); fp = nullptr; } diff --git a/src/reader.h b/src/reader.h index 2d71750f98..18977790cd 100644 --- a/src/reader.h +++ b/src/reader.h @@ -33,7 +33,7 @@ class Reader : protected Pointers { int &, int &, int &) = 0; virtual void read_atoms(int, int, double **) = 0; - virtual void open_file(const char *); + virtual void open_file(const std::string &); virtual void close_file(); protected: From 6c7b42a190ee3242f0c11b75bff6bfab6f401ffc Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Wed, 6 Oct 2021 15:24:59 -0400 Subject: [PATCH 094/372] small tweaks and fixes for compiling with MSVC++ --- cmake/CMakeLists.txt | 4 +++- src/dump.cpp | 4 ++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt index 3af67bf8e0..4ca978338f 100644 --- a/cmake/CMakeLists.txt +++ b/cmake/CMakeLists.txt @@ -97,9 +97,11 @@ if(PKG_KOKKOS AND (CMAKE_CXX_STANDARD LESS 14)) endif() set(CMAKE_CXX_STANDARD_REQUIRED ON) set(CMAKE_CXX_EXTENSIONS OFF CACHE BOOL "Use compiler extensions") -# ugly hack for MSVC which by default always reports an old C++ standard in the __cplusplus macro +# ugly hacks for MSVC which by default always reports an old C++ standard in the __cplusplus macro +# and prints lots of pointless warnings about "unsafe" functions if(MSVC) add_compile_options(/Zc:__cplusplus) + add_compile_definitions(_CRT_SECURE_NO_WARNINGS) endif() # export all symbols when building a .dll file on windows diff --git a/src/dump.cpp b/src/dump.cpp index 637ded53d0..7dbe95c1d3 100644 --- a/src/dump.cpp +++ b/src/dump.cpp @@ -196,7 +196,7 @@ Dump::~Dump() if (multifile == 0 && fp != nullptr) { if (compressed) { - if (filewriter) pclose(fp); + if (filewriter) platform::pclose(fp); } else { if (filewriter) fclose(fp); } @@ -518,7 +518,7 @@ void Dump::write() if (multifile) { if (compressed) { - if (filewriter && fp != nullptr) pclose(fp); + if (filewriter && fp != nullptr) platform::pclose(fp); } else { if (filewriter && fp != nullptr) fclose(fp); } From 7a1cf322e5cfd8cf46bedd923cb5a2f5c5c6d69f Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Wed, 6 Oct 2021 15:57:26 -0400 Subject: [PATCH 095/372] more tweaks for Visual C++ compilation and portability --- cmake/CMakeLists.txt | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt index 4ca978338f..2e1504f1f0 100644 --- a/cmake/CMakeLists.txt +++ b/cmake/CMakeLists.txt @@ -101,6 +101,8 @@ set(CMAKE_CXX_EXTENSIONS OFF CACHE BOOL "Use compiler extensions") # and prints lots of pointless warnings about "unsafe" functions if(MSVC) add_compile_options(/Zc:__cplusplus) + add_compile_options(/wd4244) + add_compile_options(/wd4267) add_compile_definitions(_CRT_SECURE_NO_WARNINGS) endif() @@ -473,9 +475,12 @@ foreach(HEADER cmath) endif(NOT FOUND_${HEADER}) endforeach(HEADER) -set(MATH_LIBRARIES "m" CACHE STRING "math library") -mark_as_advanced( MATH_LIBRARIES ) -target_link_libraries(lammps PRIVATE ${MATH_LIBRARIES}) +# make the standard math library overrideable and autodetected (for systems that don't have it) +find_library(STANDARD_MATH_LIB m DOC "Standard Math library") +mark_as_advanced(STANDARD_MATH_LIB) +if(STANDARD_MATH_LIB) + target_link_libraries(lammps PRIVATE ${STANDARD_MATH_LIB}) +endif() ###################################### # Generate Basic Style files @@ -613,7 +618,7 @@ endif() # and after everything else that is compiled locally ###################################################################### if(CMAKE_SYSTEM_NAME STREQUAL "Windows") - target_link_libraries(lammps PRIVATE -lwsock32 -lpsapi) + target_link_libraries(lammps PRIVATE "wsock32;psapi") endif() ###################################################### From 4260d31b85f715c2fe649a4e8b8d4e4c3bd25c03 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Wed, 6 Oct 2021 15:57:33 -0400 Subject: [PATCH 096/372] whitespace --- src/PHONON/dynamical_matrix.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/PHONON/dynamical_matrix.cpp b/src/PHONON/dynamical_matrix.cpp index b2f473f9cc..8861a87491 100644 --- a/src/PHONON/dynamical_matrix.cpp +++ b/src/PHONON/dynamical_matrix.cpp @@ -220,7 +220,7 @@ void DynamicalMatrix::openfile(const char *filename) // if file already opened, return if (file_opened) return; fp = nullptr; - + if (me == 0) { if (compressed) { fp = platform::zip_write(std::string(filename)+".gz"); @@ -232,7 +232,7 @@ void DynamicalMatrix::openfile(const char *filename) } if (!fp) error->one(FLERR,"Cannot open dynmat file: {}", utils::getsyserror()); } - + file_opened = 1; } From 50d997526cbe33ada1af0af206a8656048a54215 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Wed, 6 Oct 2021 16:13:12 -0400 Subject: [PATCH 097/372] a few more MSVC++ tweaks for improved compatibility and fewer warnings --- cmake/Modules/Tools.cmake | 4 +++- src/lammps.cpp | 4 ++-- src/platform.cpp | 2 +- 3 files changed, 6 insertions(+), 4 deletions(-) diff --git a/cmake/Modules/Tools.cmake b/cmake/Modules/Tools.cmake index 146764dbd5..c3b0a0771d 100644 --- a/cmake/Modules/Tools.cmake +++ b/cmake/Modules/Tools.cmake @@ -25,7 +25,9 @@ if(BUILD_TOOLS) get_filename_component(MSI2LMP_SOURCE_DIR ${LAMMPS_TOOLS_DIR}/msi2lmp/src ABSOLUTE) file(GLOB MSI2LMP_SOURCES ${MSI2LMP_SOURCE_DIR}/[^.]*.c) add_executable(msi2lmp ${MSI2LMP_SOURCES}) - target_link_libraries(msi2lmp PRIVATE ${MATH_LIBRARIES}) + if(STANDARD_MATH_LIB) + target_link_libraries(msi2lmp PRIVATE ${STANDARD_MATH_LIB}) + endif() install(TARGETS msi2lmp DESTINATION ${CMAKE_INSTALL_BINDIR}) install(FILES ${LAMMPS_DOC_DIR}/msi2lmp.1 DESTINATION ${CMAKE_INSTALL_MANDIR}/man1) endif() diff --git a/src/lammps.cpp b/src/lammps.cpp index 5e76e08112..f4dd4e5708 100644 --- a/src/lammps.cpp +++ b/src/lammps.cpp @@ -657,7 +657,7 @@ LAMMPS::LAMMPS(int narg, char **arg, MPI_Comm communicator) : int n = plast[i] - pfirst[i]; packargs[i] = new char*[n+1]; for (int j=0; j < n; ++j) - packargs[i][j] = strdup(arg[pfirst[i]+j]); + packargs[i][j] = utils::strdup(arg[pfirst[i]+j]); packargs[i][n] = nullptr; } memory->destroy(pfirst); @@ -711,7 +711,7 @@ LAMMPS::~LAMMPS() if (num_package) { for (int i = 0; i < num_package; i++) { for (char **ptr = packargs[i]; *ptr != nullptr; ++ptr) - free(*ptr); + delete[] *ptr; delete[] packargs[i]; } delete[] packargs; diff --git a/src/platform.cpp b/src/platform.cpp index 427085a6be..ddd9d8ba8e 100644 --- a/src/platform.cpp +++ b/src/platform.cpp @@ -619,7 +619,7 @@ bool platform::is_console(FILE *fp) { if (!fp) return false; #if defined(_WIN32) - return (_isatty(fileno(fp)) == 1); + return (_isatty(_fileno(fp)) == 1); #else return (isatty(fileno(fp)) == 1); #endif From f643c2b98f676e68d5cc472b1364d34d98abd288 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Wed, 6 Oct 2021 16:32:43 -0400 Subject: [PATCH 098/372] portability changes --- src/MANYBODY/pair_atm.cpp | 8 ++++---- src/OPENMP/npair_half_size_multi_newton_omp.cpp | 2 +- src/REAXFF/fix_reaxff_species.cpp | 2 +- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/MANYBODY/pair_atm.cpp b/src/MANYBODY/pair_atm.cpp index 81adef5871..f7eda909e6 100644 --- a/src/MANYBODY/pair_atm.cpp +++ b/src/MANYBODY/pair_atm.cpp @@ -128,9 +128,9 @@ void PairATM::compute(int eflag, int vflag) rij[0] = x[j][0] - xi; if (rij[0] < 0.0) continue; rij[1] = x[j][1] - yi; - if (rij[0] == 0.0 and rij[1] < 0.0) continue; + if (rij[0] == 0.0 && rij[1] < 0.0) continue; rij[2] = x[j][2] - zi; - if (rij[0] == 0.0 and rij[1] == 0.0 and rij[2] < 0.0) continue; + if (rij[0] == 0.0 && rij[1] == 0.0 && rij[2] < 0.0) continue; rij2 = rij[0]*rij[0] + rij[1]*rij[1] + rij[2]*rij[2]; if (rij2 > cutoff_squared) continue; @@ -141,9 +141,9 @@ void PairATM::compute(int eflag, int vflag) rik[0] = x[k][0] - xi; if (rik[0] < 0.0) continue; rik[1] = x[k][1] - yi; - if (rik[0] == 0.0 and rik[1] < 0.0) continue; + if (rik[0] == 0.0 && rik[1] < 0.0) continue; rik[2] = x[k][2] - zi; - if (rik[0] == 0.0 and rik[1] == 0.0 and rik[2] < 0.0) continue; + if (rik[0] == 0.0 && rik[1] == 0.0 && rik[2] < 0.0) continue; rik2 = rik[0]*rik[0] + rik[1]*rik[1] + rik[2]*rik[2]; if (rik2 > cutoff_squared) continue; diff --git a/src/OPENMP/npair_half_size_multi_newton_omp.cpp b/src/OPENMP/npair_half_size_multi_newton_omp.cpp index cdc68e1b42..bcf87d385c 100644 --- a/src/OPENMP/npair_half_size_multi_newton_omp.cpp +++ b/src/OPENMP/npair_half_size_multi_newton_omp.cpp @@ -108,7 +108,7 @@ void NPairHalfSizeMultiNewtonOmp::build(NeighList *list) // if j is ghost, only store if j coords are "above and to the right" of i for (j = js; j >= 0; j = bins[j]) { - if(icollection != jcollection and j < i) continue; + if(icollection != jcollection && j < i) continue; if (j >= nlocal) { if (x[j][2] < ztmp) continue; diff --git a/src/REAXFF/fix_reaxff_species.cpp b/src/REAXFF/fix_reaxff_species.cpp index 856020227d..897f36d988 100644 --- a/src/REAXFF/fix_reaxff_species.cpp +++ b/src/REAXFF/fix_reaxff_species.cpp @@ -253,7 +253,7 @@ FixReaxFFSpecies::~FixReaxFFSpecies() else fclose(fp); if (posflag && multipos_opened) fclose(pos); } - + modify->delete_compute("SPECATOM"); modify->delete_fix("SPECBOND"); } From aab3e085a265e898faecca85cc45cf6a2d206165 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Wed, 6 Oct 2021 16:41:29 -0400 Subject: [PATCH 099/372] silence compiler warning on windows --- src/MANYBODY/pair_polymorphic.cpp | 2 +- src/MOLECULE/angle_table.cpp | 2 +- src/MOLECULE/bond_table.cpp | 2 +- src/error.cpp | 9 +++++---- src/pair_table.cpp | 2 +- src/utils.cpp | 2 +- tools/msi2lmp/src/SearchAndFill.c | 4 ++++ 7 files changed, 14 insertions(+), 9 deletions(-) diff --git a/src/MANYBODY/pair_polymorphic.cpp b/src/MANYBODY/pair_polymorphic.cpp index f12d369e0d..ce476e1204 100644 --- a/src/MANYBODY/pair_polymorphic.cpp +++ b/src/MANYBODY/pair_polymorphic.cpp @@ -593,7 +593,7 @@ void PairPolymorphic::read_file(char *file) if ((ng == 0) || (nr == 0) || (nx == 0)) error->one(FLERR,"Error reading potential file header"); - } catch (TokenizerException &e) { + } catch (TokenizerException &) { error->one(FLERR,"Potential file incompatible with this pair style version"); } diff --git a/src/MOLECULE/angle_table.cpp b/src/MOLECULE/angle_table.cpp index 4299e375f1..a5ba07b779 100644 --- a/src/MOLECULE/angle_table.cpp +++ b/src/MOLECULE/angle_table.cpp @@ -412,7 +412,7 @@ void AngleTable::read_table(Table *tb, char *file, char *keyword) tb->afile[i] = values.next_double(); tb->efile[i] = values.next_double(); tb->ffile[i] = values.next_double(); - } catch (TokenizerException &e) { + } catch (TokenizerException &) { ++cerror; } } diff --git a/src/MOLECULE/bond_table.cpp b/src/MOLECULE/bond_table.cpp index 5637dfa699..db1314c76f 100644 --- a/src/MOLECULE/bond_table.cpp +++ b/src/MOLECULE/bond_table.cpp @@ -340,7 +340,7 @@ void BondTable::read_table(Table *tb, char *file, char *keyword) tb->rfile[i] = values.next_double(); tb->efile[i] = values.next_double(); tb->ffile[i] = values.next_double(); - } catch (TokenizerException &e) { + } catch (TokenizerException &) { ++cerror; } diff --git a/src/error.cpp b/src/error.cpp index 9811a1d3eb..5338f41cca 100644 --- a/src/error.cpp +++ b/src/error.cpp @@ -58,7 +58,8 @@ void Error::universe_all(const std::string &file, int line, const std::string &s std::string mesg = "ERROR: " + str; try { mesg += fmt::format(" ({}:{})\n",truncpath(file),line); - } catch (fmt::format_error &e) { + } catch (fmt::format_error &) { + ; // do nothing } if (universe->me == 0) { if (universe->uscreen) fputs(mesg.c_str(),universe->uscreen); @@ -147,9 +148,9 @@ void Error::all(const std::string &file, int line, const std::string &str) std::string mesg = "ERROR: " + str; if (input && input->line) lastcmd = input->line; try { - mesg += fmt::format(" ({}:{})\nLast command: {}\n", - truncpath(file),line,lastcmd); - } catch (fmt::format_error &e) { + mesg += fmt::format(" ({}:{})\nLast command: {}\n", truncpath(file),line,lastcmd); + } catch (fmt::format_error &) { + ; // do nothing } utils::logmesg(lmp,mesg); } diff --git a/src/pair_table.cpp b/src/pair_table.cpp index 60272b5276..7b77a847f1 100644 --- a/src/pair_table.cpp +++ b/src/pair_table.cpp @@ -407,7 +407,7 @@ void PairTable::read_table(Table *tb, char *file, char *keyword) rfile = values.next_double(); tb->efile[i] = conversion_factor * values.next_double(); tb->ffile[i] = conversion_factor * values.next_double(); - } catch (TokenizerException &e) { + } catch (TokenizerException &) { ++cerror; } diff --git a/src/utils.cpp b/src/utils.cpp index d67284822c..d87eb3784b 100644 --- a/src/utils.cpp +++ b/src/utils.cpp @@ -1172,7 +1172,7 @@ double utils::timespec2seconds(const std::string ×pec) if (!values.has_next()) break; vals[i] = values.next_int(); } - } catch (TokenizerException &e) { + } catch (TokenizerException &) { return -1.0; } diff --git a/tools/msi2lmp/src/SearchAndFill.c b/tools/msi2lmp/src/SearchAndFill.c index 1a85ee111f..ff05ff13d0 100644 --- a/tools/msi2lmp/src/SearchAndFill.c +++ b/tools/msi2lmp/src/SearchAndFill.c @@ -13,6 +13,10 @@ #include #include +#if defined(_WIN32) +#define strdup(x) _strdup(x) +#endif + static int blank_line(char *line) { while (*line != '\0') { From a9bccee7b2cfe36e7a3e76304f69408d2836765f Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Wed, 6 Oct 2021 17:43:41 -0400 Subject: [PATCH 100/372] add utility to convert a string to lowercase --- doc/src/Developer_utils.rst | 3 +++ src/utils.cpp | 11 +++++++++++ src/utils.h | 7 +++++++ unittest/utils/test_utils.cpp | 6 ++++++ 4 files changed, 27 insertions(+) diff --git a/doc/src/Developer_utils.rst b/doc/src/Developer_utils.rst index 3cf059594b..72d7a80fa4 100644 --- a/doc/src/Developer_utils.rst +++ b/doc/src/Developer_utils.rst @@ -103,6 +103,9 @@ and parsing files or arguments. .. doxygenfunction:: strdup :project: progguide +.. doxygenfunction:: lowercase + :project: progguide + .. doxygenfunction:: trim :project: progguide diff --git a/src/utils.cpp b/src/utils.cpp index d87eb3784b..14241316de 100644 --- a/src/utils.cpp +++ b/src/utils.cpp @@ -694,6 +694,17 @@ char *utils::strdup(const std::string &text) return tmp; } +/* ---------------------------------------------------------------------- + Return string converted to lowercase +------------------------------------------------------------------------- */ + +std::string utils::lowercase(const std::string &text) +{ + std::string converted; + for (auto c : text) converted += ::tolower(c); + return converted; +} + /* ---------------------------------------------------------------------- Return string without leading or trailing whitespace ------------------------------------------------------------------------- */ diff --git a/src/utils.h b/src/utils.h index 0437633ea6..af8bec2aeb 100644 --- a/src/utils.h +++ b/src/utils.h @@ -282,6 +282,13 @@ namespace utils { char *strdup(const std::string &text); + /*! Convert string to lowercase + * + * \param line string that should be converted + * \return new string with all lowercase characters */ + + std::string lowercase(const std::string &line); + /*! Trim leading and trailing whitespace. Like TRIM() in Fortran. * * \param line string that should be trimmed diff --git a/unittest/utils/test_utils.cpp b/unittest/utils/test_utils.cpp index b2c688cd59..9e050f18e4 100644 --- a/unittest/utils/test_utils.cpp +++ b/unittest/utils/test_utils.cpp @@ -64,6 +64,12 @@ TEST(Utils, trim) ASSERT_THAT(trimmed, StrEq("")); } +TEST(Utils, lowercase) +{ + ASSERT_THAT(utils::lowercase("Gba35%*zAKgRvr"), StrEq("gba35%*zakgrvr")); + ASSERT_THAT(utils::lowercase("A BC DEFG"), StrEq("a bc defg")); +} + TEST(Utils, trim_comment) { auto trimmed = utils::trim_comment("some text # comment"); From ef84435b7c7256ad3390e1649f73cf05aecf25b6 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Wed, 6 Oct 2021 17:44:45 -0400 Subject: [PATCH 101/372] replace non-portable strcasecmp() with comparing two strings converted to lowercase --- src/REAXFF/pair_reaxff.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/REAXFF/pair_reaxff.cpp b/src/REAXFF/pair_reaxff.cpp index a8cc249e58..000209a606 100644 --- a/src/REAXFF/pair_reaxff.cpp +++ b/src/REAXFF/pair_reaxff.cpp @@ -39,7 +39,6 @@ #include #include -#include // for strcasecmp() #include "reaxff_api.h" @@ -299,7 +298,7 @@ void PairReaxFF::coeff(int nargs, char **args) // pair_coeff element map for (int i = 3; i < nargs; i++) for (int j = 0; j < nreax_types; j++) - if (strcasecmp(args[i],api->system->reax_param.sbp[j].name) == 0) { + if (utils::lowercase(args[i]) == utils::lowercase(api->system->reax_param.sbp[j].name)) { map[i-2] = j; itmp ++; } From b3ca238a61f4ad8c6b127588bdc3115d7d33d519 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Wed, 6 Oct 2021 17:44:57 -0400 Subject: [PATCH 102/372] silence warning --- src/main.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main.cpp b/src/main.cpp index 568da132e2..095e1752da 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -79,7 +79,7 @@ int main(int argc, char **argv) KokkosLMP::finalize(); Python::finalize(); MPI_Abort(ae.universe, 1); - } catch (LAMMPSException &e) { + } catch (LAMMPSException &) { KokkosLMP::finalize(); Python::finalize(); MPI_Barrier(lammps_comm); From 5c34fe4d5d171e01c52a83ba889bdcc8b604f0a4 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Wed, 6 Oct 2021 20:43:56 -0500 Subject: [PATCH 103/372] Replace strcasecmp() --- src/DIFFRACTION/compute_saed.cpp | 11 +++++------ src/DIFFRACTION/compute_xrd.cpp | 3 +-- 2 files changed, 6 insertions(+), 8 deletions(-) diff --git a/src/DIFFRACTION/compute_saed.cpp b/src/DIFFRACTION/compute_saed.cpp index 77f17d77d1..e2df7fe3b8 100644 --- a/src/DIFFRACTION/compute_saed.cpp +++ b/src/DIFFRACTION/compute_saed.cpp @@ -31,7 +31,6 @@ #include #include -#include // for strcasecmp() #include "omp_compat.h" using namespace LAMMPS_NS; @@ -85,13 +84,13 @@ ComputeSAED::ComputeSAED(LAMMPS *lmp, int narg, char **arg) : ztype[i] = SAEDmaxType + 1; } for (int i=0; iall(FLERR,"Compute SAED: Invalid ASF atom type"); + } + if (ztype[i] == SAEDmaxType + 1) + error->all(FLERR,"Compute SAED: Invalid ASF atom type"); iarg++; } diff --git a/src/DIFFRACTION/compute_xrd.cpp b/src/DIFFRACTION/compute_xrd.cpp index 633c135e74..d798c2f4db 100644 --- a/src/DIFFRACTION/compute_xrd.cpp +++ b/src/DIFFRACTION/compute_xrd.cpp @@ -32,7 +32,6 @@ #include #include -#include // for strcasecmp() #include "omp_compat.h" using namespace LAMMPS_NS; @@ -87,7 +86,7 @@ ComputeXRD::ComputeXRD(LAMMPS *lmp, int narg, char **arg) : } for (int i = 0; i < ntypes; i++) { for (int j = 0; j < XRDmaxType; j++) { - if (strcasecmp(arg[iarg],XRDtypeList[j]) == 0) { + if (utils::lowercase(arg[iarg]) == utils::lowercase(XRDtypeList[j])) { ztype[i] = j; } } From 98d9b675f94f47d8f3256953980b8dc5dc4c89e3 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Wed, 6 Oct 2021 20:44:27 -0500 Subject: [PATCH 104/372] Use portable logical operators --- src/DRUDE/fix_tgnh_drude.cpp | 2 +- src/ORIENT/fix_orient_eco.cpp | 2 +- src/PHONON/third_order.cpp | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/DRUDE/fix_tgnh_drude.cpp b/src/DRUDE/fix_tgnh_drude.cpp index eb8922d4cc..700f9669d8 100644 --- a/src/DRUDE/fix_tgnh_drude.cpp +++ b/src/DRUDE/fix_tgnh_drude.cpp @@ -761,7 +761,7 @@ void FixTGNHDrude::setup_mol_mass_dof() { dof_mol, dof_int, dof_drude); } } - if (dof_mol <=0 or dof_int <=0 or dof_drude <=0) + if (dof_mol <=0 || dof_int <=0 || dof_drude <=0) error->all(FLERR, "TGNHC thermostat requires DOFs of molecules, atoms and dipoles larger than 0"); } diff --git a/src/ORIENT/fix_orient_eco.cpp b/src/ORIENT/fix_orient_eco.cpp index 6ec4e278ec..55486adc37 100644 --- a/src/ORIENT/fix_orient_eco.cpp +++ b/src/ORIENT/fix_orient_eco.cpp @@ -550,7 +550,7 @@ int FixOrientECO::get_norm() { squared_distance = delta[0] * delta[0] + delta[1] * delta[1] + delta[2] * delta[2]; // check if atom is within cutoff region - if ((squared_distance != 0.0) and (squared_distance < squared_cutoff)) { + if ((squared_distance != 0.0) && (squared_distance < squared_cutoff)) { ++neigh; squared_distance *= inv_squared_cutoff; diff --git a/src/PHONON/third_order.cpp b/src/PHONON/third_order.cpp index ca91a424af..04a2417f13 100644 --- a/src/PHONON/third_order.cpp +++ b/src/PHONON/third_order.cpp @@ -203,7 +203,7 @@ void ThirdOrder::options(int narg, char **arg) iarg += 2; } else error->all(FLERR,"Illegal third_order command"); } - if (file_flag == 1 and me == 0) { + if (file_flag == 1 && me == 0) { openfile(filename); } } From b8d6df6461df6d42a52ea064494a3f7970fb68a4 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Wed, 6 Oct 2021 20:44:42 -0500 Subject: [PATCH 105/372] add missing platform scope --- src/SPIN/neb_spin.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/SPIN/neb_spin.cpp b/src/SPIN/neb_spin.cpp index c2cefdcc97..80f5f56324 100644 --- a/src/SPIN/neb_spin.cpp +++ b/src/SPIN/neb_spin.cpp @@ -555,12 +555,12 @@ void NEBSpin::readfile(char *file, int flag) if (flag == 0) { if (me_universe == 0) { - if (compressed) pclose(fp); + if (compressed) platform::pclose(fp); else fclose(fp); } } else { if (me == 0 && ireplica) { - if (compressed) pclose(fp); + if (compressed) platform::pclose(fp); else fclose(fp); } } From 059f450f1b369c5acea8ed840a88fbca30ffea11 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Thu, 7 Oct 2021 00:00:33 -0400 Subject: [PATCH 106/372] add uppercase string utility function (for symmetry) --- doc/src/Developer_utils.rst | 3 +++ src/utils.cpp | 13 ++++++++++++- src/utils.h | 7 +++++++ unittest/utils/test_utils.cpp | 4 +++- 4 files changed, 25 insertions(+), 2 deletions(-) diff --git a/doc/src/Developer_utils.rst b/doc/src/Developer_utils.rst index 72d7a80fa4..db47a9e3c3 100644 --- a/doc/src/Developer_utils.rst +++ b/doc/src/Developer_utils.rst @@ -106,6 +106,9 @@ and parsing files or arguments. .. doxygenfunction:: lowercase :project: progguide +.. doxygenfunction:: uppercase + :project: progguide + .. doxygenfunction:: trim :project: progguide diff --git a/src/utils.cpp b/src/utils.cpp index 14241316de..db909078a9 100644 --- a/src/utils.cpp +++ b/src/utils.cpp @@ -312,7 +312,7 @@ int utils::logical(const char *file, int line, const char *str, bool do_abort, L lmp->error->all(file, line, msg); } - // convert to ascii and lowercase + // convert to ascii std::string buf(str); if (has_utf8(buf)) buf = utf8_subst(buf); @@ -705,6 +705,17 @@ std::string utils::lowercase(const std::string &text) return converted; } +/* ---------------------------------------------------------------------- + Return string converted to uppercase +------------------------------------------------------------------------- */ + +std::string utils::uppercase(const std::string &text) +{ + std::string converted; + for (auto c : text) converted += ::toupper(c); + return converted; +} + /* ---------------------------------------------------------------------- Return string without leading or trailing whitespace ------------------------------------------------------------------------- */ diff --git a/src/utils.h b/src/utils.h index af8bec2aeb..1feee26f27 100644 --- a/src/utils.h +++ b/src/utils.h @@ -289,6 +289,13 @@ namespace utils { std::string lowercase(const std::string &line); + /*! Convert string to uppercase + * + * \param line string that should be converted + * \return new string with all uppercase characters */ + + std::string uppercase(const std::string &line); + /*! Trim leading and trailing whitespace. Like TRIM() in Fortran. * * \param line string that should be trimmed diff --git a/unittest/utils/test_utils.cpp b/unittest/utils/test_utils.cpp index 9e050f18e4..72a90a95a0 100644 --- a/unittest/utils/test_utils.cpp +++ b/unittest/utils/test_utils.cpp @@ -64,10 +64,12 @@ TEST(Utils, trim) ASSERT_THAT(trimmed, StrEq("")); } -TEST(Utils, lowercase) +TEST(Utils, casemod) { ASSERT_THAT(utils::lowercase("Gba35%*zAKgRvr"), StrEq("gba35%*zakgrvr")); ASSERT_THAT(utils::lowercase("A BC DEFG"), StrEq("a bc defg")); + ASSERT_THAT(utils::uppercase("Gba35%*zAKgRvr"), StrEq("GBA35%*ZAKGRVR")); + ASSERT_THAT(utils::uppercase("a bc defg"), StrEq("A BC DEFG")); } TEST(Utils, trim_comment) From c8ff66e07fe0af5ffa9d47141252f01a31b41768 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Thu, 7 Oct 2021 06:48:49 -0400 Subject: [PATCH 107/372] correct file extension for Zstd compressed files --- src/platform.cpp | 2 +- unittest/utils/test_platform.cpp | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/platform.cpp b/src/platform.cpp index ddd9d8ba8e..2d56adcc11 100644 --- a/src/platform.cpp +++ b/src/platform.cpp @@ -84,7 +84,7 @@ static const std::vector zip_styles = { {"", "", "", "", zip_info::NONE}, {"gz", "gzip", " > ", " -cdf ", zip_info::GZIP}, {"bz2", "bzip2", " > ", " -cdf ", zip_info::BZIP2}, - {"zstd", "zstd", " -q > ", " -cdf ", zip_info::ZSTD}, + {"zst", "zstd", " -q > ", " -cdf ", zip_info::ZSTD}, {"xz", "xz", " > ", " -cdf ", zip_info::XZ}, {"lzma", "xz", " --format=lzma > ", " --format=lzma -cdf ", zip_info::LZMA}, {"lz4", "lz4", " > ", " -cdf ", zip_info::LZ4}, diff --git a/unittest/utils/test_platform.cpp b/unittest/utils/test_platform.cpp index c5d04d3b94..eddb6e1b20 100644 --- a/unittest/utils/test_platform.cpp +++ b/unittest/utils/test_platform.cpp @@ -362,7 +362,7 @@ TEST(Platform, has_zip_extension) ASSERT_FALSE(platform::has_zip_extension("dum.my")); ASSERT_TRUE(platform::has_zip_extension("dummy.gz")); ASSERT_TRUE(platform::has_zip_extension("dummy.bz2")); - ASSERT_TRUE(platform::has_zip_extension("dummy.zstd")); + ASSERT_TRUE(platform::has_zip_extension("dummy.zst")); ASSERT_TRUE(platform::has_zip_extension("dummy.xz")); ASSERT_TRUE(platform::has_zip_extension("dummy.lzma")); ASSERT_TRUE(platform::has_zip_extension("dummy.lz4")); @@ -370,9 +370,9 @@ TEST(Platform, has_zip_extension) TEST(Platform, zip_read_write) { - const std::vector test_files = {"zip_test.zip", "zip_test.gz", "zip_test.bz2", - "zip_test.zstd", "zip_test.xz", "zip_test.lzma", - "zip_test.lz4", "zip_test.unk", "zip test.gz"}; + const std::vector test_files = {"zip_test.zip", "zip_test.gz", "zip_test.bz2", + "zip_test.zst", "zip_test.xz", "zip_test.lzma", + "zip_test.lz4", "zip_test.unk", "zip test.gz"}; for (const auto &file : test_files) { platform::unlink(file); FILE *fp = platform::zip_write(file); From 7372211d90a0e130fa1ee3bff40b154cdd07521f Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Thu, 7 Oct 2021 07:42:13 -0400 Subject: [PATCH 108/372] there is no more need to keep a copy of the arguments this also eliminates buffer overflow bugs where the terminating 0 bytes of copied strings are overwritten causing the fix to fail. --- src/REAXFF/fix_reaxff_species.cpp | 9 +-------- src/REAXFF/fix_reaxff_species.h | 1 - 2 files changed, 1 insertion(+), 9 deletions(-) diff --git a/src/REAXFF/fix_reaxff_species.cpp b/src/REAXFF/fix_reaxff_species.cpp index 4fc08975a8..e3250be56d 100644 --- a/src/REAXFF/fix_reaxff_species.cpp +++ b/src/REAXFF/fix_reaxff_species.cpp @@ -99,12 +99,6 @@ FixReaxFFSpecies::FixReaxFFSpecies(LAMMPS *lmp, int narg, char **arg) : error->warning(FLERR,"Resetting reneighboring criteria for fix reaxff/species"); } - tmparg = nullptr; - memory->create(tmparg,4,4,"reaxff/species:tmparg"); - strcpy(tmparg[0],arg[3]); - strcpy(tmparg[1],arg[4]); - strcpy(tmparg[2],arg[5]); - if (me == 0) { char *suffix = strrchr(arg[6],'.'); if (suffix && strcmp(suffix,".gz") == 0) { @@ -251,7 +245,6 @@ FixReaxFFSpecies::~FixReaxFFSpecies() memory->destroy(NMol); memory->destroy(MolType); memory->destroy(MolName); - memory->destroy(tmparg); if (filepos) delete [] filepos; @@ -314,7 +307,7 @@ void FixReaxFFSpecies::init() "abo15 abo16 abo17 abo18 abo19 abo20 abo21 abo22 abo23 abo24"); // create a fix to point to fix_ave_atom for averaging stored properties - auto fixcmd = fmt::format("SPECBOND all ave/atom {} {} {}",tmparg[0],tmparg[1],tmparg[2]); + auto fixcmd = fmt::format("SPECBOND all ave/atom {} {} {}",nevery,nrepeat,nfreq); for (int i = 1; i < 32; ++i) fixcmd += " c_SPECATOM[" + std::to_string(i) + "]"; f_SPECBOND = (FixAveAtom *) modify->add_fix(fixcmd); setupflag = 1; diff --git a/src/REAXFF/fix_reaxff_species.h b/src/REAXFF/fix_reaxff_species.h index bcfcf2b6dd..a59a1de4b6 100644 --- a/src/REAXFF/fix_reaxff_species.h +++ b/src/REAXFF/fix_reaxff_species.h @@ -53,7 +53,6 @@ class FixReaxFFSpecies : public Fix { double bg_cut; double **BOCut; - char **tmparg; FILE *fp, *pos; int eleflag, posflag, multipos, padflag, setupflag; From a818be585d71c6e85dd265a0d4890c03f6f69c9d Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Thu, 7 Oct 2021 12:22:16 -0400 Subject: [PATCH 109/372] use portable functions from platform and utils namespaces --- src/COLVARS/fix_colvars.cpp | 29 +++++++++++++---------------- src/DPD-MESO/pair_mdpd.cpp | 30 ++++++++++++++---------------- src/DPD-MESO/pair_tdpd.cpp | 32 +++++++++++++++----------------- src/EXTRA-FIX/fix_tmd.cpp | 2 +- src/REAXFF/reaxff_ffield.cpp | 10 ++++------ src/REPLICA/neb.cpp | 4 ++-- 6 files changed, 49 insertions(+), 58 deletions(-) diff --git a/src/COLVARS/fix_colvars.cpp b/src/COLVARS/fix_colvars.cpp index 32211f7689..6d6799b43e 100644 --- a/src/COLVARS/fix_colvars.cpp +++ b/src/COLVARS/fix_colvars.cpp @@ -303,7 +303,7 @@ FixColvars::FixColvars(LAMMPS *lmp, int narg, char **arg) : me = comm->me; root2root = MPI_COMM_NULL; - conf_file = strdup(arg[3]); + conf_file = utils::strdup(arg[3]); rng_seed = 1966; unwrap_flag = 1; @@ -319,22 +319,22 @@ FixColvars::FixColvars(LAMMPS *lmp, int narg, char **arg) : error->all(FLERR,"Missing argument to keyword"); if (0 == strcmp(arg[iarg], "input")) { - inp_name = strdup(arg[iarg+1]); + inp_name = utils::strdup(arg[iarg+1]); } else if (0 == strcmp(arg[iarg], "output")) { - out_name = strdup(arg[iarg+1]); + out_name = utils::strdup(arg[iarg+1]); } else if (0 == strcmp(arg[iarg], "seed")) { rng_seed = utils::inumeric(FLERR,arg[iarg+1],false,lmp); } else if (0 == strcmp(arg[iarg], "unwrap")) { unwrap_flag = utils::logical(FLERR,arg[iarg+1],false,lmp); } else if (0 == strcmp(arg[iarg], "tstat")) { - tmp_name = strdup(arg[iarg+1]); + tmp_name = utils::strdup(arg[iarg+1]); } else { error->all(FLERR,"Unknown fix colvars parameter"); } ++iarg; ++iarg; } - if (!out_name) out_name = strdup("out"); + if (!out_name) out_name = utils::strdup("out"); /* initialize various state variables. */ tstat_id = -1; @@ -359,10 +359,10 @@ FixColvars::FixColvars(LAMMPS *lmp, int narg, char **arg) : FixColvars::~FixColvars() { - memory->sfree(conf_file); - memory->sfree(inp_name); - memory->sfree(out_name); - memory->sfree(tmp_name); + delete[] conf_file; + delete[] inp_name; + delete[] out_name; + delete[] tmp_name; memory->sfree(comm_buf); if (proxy) { @@ -430,17 +430,15 @@ void FixColvars::one_time_init() // create and initialize the colvars proxy if (me == 0) { - if (screen) fputs("colvars: Creating proxy instance\n",screen); - if (logfile) fputs("colvars: Creating proxy instance\n",logfile); + utils::logmesg(lmp,"colvars: Creating proxy instance\n"); #ifdef LAMMPS_BIGBIG - if (screen) fputs("colvars: cannot handle atom ids > 2147483647\n",screen); - if (logfile) fputs("colvars: cannot handle atom ids > 2147483647\n",logfile); + utils::logmesg(lmp,"colvars: cannot handle atom ids > 2147483647\n"); #endif if (inp_name) { if (strcmp(inp_name,"NULL") == 0) { - memory->sfree(inp_name); + delete[] inp_name; inp_name = nullptr; } } @@ -458,8 +456,7 @@ void FixColvars::one_time_init() } } - proxy = new colvarproxy_lammps(lmp,inp_name,out_name, - rng_seed,t_target,root2root); + proxy = new colvarproxy_lammps(lmp,inp_name,out_name,rng_seed,t_target,root2root); proxy->init(conf_file); num_coords = (proxy->modify_atom_positions()->size()); diff --git a/src/DPD-MESO/pair_mdpd.cpp b/src/DPD-MESO/pair_mdpd.cpp index 9e704de2a7..bdadb8fb23 100644 --- a/src/DPD-MESO/pair_mdpd.cpp +++ b/src/DPD-MESO/pair_mdpd.cpp @@ -19,19 +19,19 @@ #include "pair_mdpd.h" +#include "atom.h" +#include "citeme.h" +#include "comm.h" +#include "error.h" +#include "force.h" +#include "memory.h" +#include "neigh_list.h" +#include "neighbor.h" +#include "random_mars.h" +#include "update.h" + #include #include -#include "atom.h" -#include "comm.h" -#include "update.h" -#include "force.h" -#include "neighbor.h" -#include "neigh_list.h" -#include "random_mars.h" -#include "citeme.h" -#include "memory.h" -#include "error.h" - using namespace LAMMPS_NS; @@ -218,11 +218,9 @@ void PairMDPD::settings(int narg, char **arg) // initialize Marsaglia RNG with processor-unique seed - if (seed <= 0) { - struct timespec time; - clock_gettime( CLOCK_REALTIME, &time ); - seed = time.tv_nsec; // if seed is non-positive, get the current time as the seed - } + if (seed <= 0) + seed = (int) (platform::walltime() * 1073741824.0); + delete random; random = new RanMars(lmp,(seed + comm->me) % 900000000); diff --git a/src/DPD-MESO/pair_tdpd.cpp b/src/DPD-MESO/pair_tdpd.cpp index e99edfa5ff..1f48e12f55 100644 --- a/src/DPD-MESO/pair_tdpd.cpp +++ b/src/DPD-MESO/pair_tdpd.cpp @@ -18,19 +18,19 @@ ------------------------------------------------------------------------- */ #include "pair_tdpd.h" -#include -#include -#include "atom.h" -#include "comm.h" -#include "update.h" -#include "force.h" -#include "neighbor.h" -#include "neigh_list.h" -#include "random_mars.h" -#include "citeme.h" -#include "memory.h" -#include "error.h" +#include "atom.h" +#include "citeme.h" +#include "comm.h" +#include "error.h" +#include "force.h" +#include "memory.h" +#include "neigh_list.h" +#include "neighbor.h" +#include "random_mars.h" +#include "update.h" + +#include using namespace LAMMPS_NS; @@ -240,11 +240,9 @@ void PairTDPD::settings(int narg, char **arg) // initialize Marsaglia RNG with processor-unique seed - if (seed <= 0) { - struct timespec time; - clock_gettime( CLOCK_REALTIME, &time ); - seed = time.tv_nsec; // if seed is non-positive, get the current time as the seed - } + if (seed <= 0) + seed = (int) (platform::walltime() * 1073741824.0); + delete random; random = new RanMars(lmp,(seed + comm->me) % 900000000); diff --git a/src/EXTRA-FIX/fix_tmd.cpp b/src/EXTRA-FIX/fix_tmd.cpp index 93d7ae6a56..123814b22a 100644 --- a/src/EXTRA-FIX/fix_tmd.cpp +++ b/src/EXTRA-FIX/fix_tmd.cpp @@ -495,7 +495,7 @@ void FixTMD::readfile(char *file) delete [] buffer; if (me == 0) { - if (compressed) pclose(fp); + if (compressed) platform::pclose(fp); else fclose(fp); } diff --git a/src/REAXFF/reaxff_ffield.cpp b/src/REAXFF/reaxff_ffield.cpp index 6297f4cf94..a07d37e0f4 100644 --- a/src/REAXFF/reaxff_ffield.cpp +++ b/src/REAXFF/reaxff_ffield.cpp @@ -32,7 +32,6 @@ #include "text_file_reader.h" #include "utils.h" -#include #include #include #include @@ -161,11 +160,10 @@ namespace ReaxFF { if (values.count() < 9) THROW_ERROR("Invalid force field file format"); - auto element = values.next_string(); - int len = MIN(element.size(),3); // truncate stored element symbol if necessary - for (j = 0; j < len; ++j) - sbp[i].name[j] = toupper(element[j]); - sbp[i].name[len] = '\0'; + // copy element symbol in uppercase and truncate stored element symbol if necessary + auto element = utils::uppercase(values.next_string()); + strncpy(sbp[i].name,element.c_str(),4); + sbp[i].name[4] = '\0'; sbp[i].r_s = values.next_double(); sbp[i].valency = values.next_double(); diff --git a/src/REPLICA/neb.cpp b/src/REPLICA/neb.cpp index 281d0e830f..318ee0a3c7 100644 --- a/src/REPLICA/neb.cpp +++ b/src/REPLICA/neb.cpp @@ -528,12 +528,12 @@ void NEB::readfile(char *file, int flag) if (flag == 0) { if (me_universe == 0) { - if (compressed) pclose(fp); + if (compressed) platform::pclose(fp); else fclose(fp); } } else { if (me == 0 && ireplica) { - if (compressed) pclose(fp); + if (compressed) platform::pclose(fp); else fclose(fp); } } From 3661b8cd5030897d738ce0a7062ddb55983ce0f1 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Thu, 7 Oct 2021 12:22:26 -0400 Subject: [PATCH 110/372] optimize --- src/utils.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/utils.cpp b/src/utils.cpp index db909078a9..035b68d660 100644 --- a/src/utils.cpp +++ b/src/utils.cpp @@ -700,8 +700,8 @@ char *utils::strdup(const std::string &text) std::string utils::lowercase(const std::string &text) { - std::string converted; - for (auto c : text) converted += ::tolower(c); + std::string converted(text); + for (auto &c : converted) c = ::tolower(c); return converted; } @@ -711,8 +711,8 @@ std::string utils::lowercase(const std::string &text) std::string utils::uppercase(const std::string &text) { - std::string converted; - for (auto c : text) converted += ::toupper(c); + std::string converted(text); + for (auto &c : converted) c = ::toupper(c); return converted; } From 4f17082d74de96364f61192909a6151ae9c52f91 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Thu, 7 Oct 2021 12:23:17 -0400 Subject: [PATCH 111/372] use portable logic operators --- src/EXTRA-PAIR/pair_e3b.cpp | 2 +- src/KOKKOS/fix_rx_kokkos.cpp | 2 +- src/MDI/fix_mdi_engine.cpp | 2 +- src/ML-IAP/mliap_model_python.cpp | 2 +- src/NETCDF/dump_netcdf.cpp | 2 +- src/NETCDF/dump_netcdf_mpiio.cpp | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/EXTRA-PAIR/pair_e3b.cpp b/src/EXTRA-PAIR/pair_e3b.cpp index a904939e42..7e865ac6f8 100644 --- a/src/EXTRA-PAIR/pair_e3b.cpp +++ b/src/EXTRA-PAIR/pair_e3b.cpp @@ -643,7 +643,7 @@ void PairE3B::checkInputs(const double &bondL) if (k2 == NOT_SET) error->all(FLERR, "K2 keyword missing"); //now test that values are within acceptable ranges - if (k2 < 0.0 or k3 < 0.0) error->all(FLERR, "exponential decay is negative"); + if (k2 < 0.0 || k3 < 0.0) error->all(FLERR, "exponential decay is negative"); if (bondL < 0.0) error->all(FLERR, "OH bond length is negative"); if (rc2 < 0.0 || rc3 < 0.0 || rs < 0.0) error->all(FLERR, "potential cutoff is negative"); if (rs > rc3) error->all(FLERR, "potential switching distance is larger than cutoff"); diff --git a/src/KOKKOS/fix_rx_kokkos.cpp b/src/KOKKOS/fix_rx_kokkos.cpp index f05fe88fd8..caa79c77b1 100644 --- a/src/KOKKOS/fix_rx_kokkos.cpp +++ b/src/KOKKOS/fix_rx_kokkos.cpp @@ -2075,7 +2075,7 @@ void FixRxKokkos::computeLocalTemperature() // Local list views. (This isn't working!) NeighListKokkos* k_list = static_cast*>(list); - if (not(list->kokkos)) + if (!list->kokkos) error->one(FLERR,"list is not a Kokkos list\n"); //typename ArrayTypes::t_neighbors_2d d_neighbors = k_list->d_neighbors; diff --git a/src/MDI/fix_mdi_engine.cpp b/src/MDI/fix_mdi_engine.cpp index 8024623e43..b08209080a 100644 --- a/src/MDI/fix_mdi_engine.cpp +++ b/src/MDI/fix_mdi_engine.cpp @@ -388,7 +388,7 @@ char *FixMDIEngine::engine_mode(const char *node) // respond to commands from the driver - while (not exit_flag and not local_exit_flag) { + while (!exit_flag && !local_exit_flag) { // read the next command from the driver // all procs call this, but only proc 0 receives the command diff --git a/src/ML-IAP/mliap_model_python.cpp b/src/ML-IAP/mliap_model_python.cpp index 3d91107449..b89d17f289 100644 --- a/src/ML-IAP/mliap_model_python.cpp +++ b/src/ML-IAP/mliap_model_python.cpp @@ -132,7 +132,7 @@ void MLIAPModelPython::connect_param_counts() void MLIAPModelPython::compute_gradients(MLIAPData *data) { - if (not model_loaded) { error->all(FLERR, "Model not loaded."); } + if (!model_loaded) { error->all(FLERR, "Model not loaded."); } PyGILState_STATE gstate = PyGILState_Ensure(); MLIAPPY_compute_gradients(this, data); diff --git a/src/NETCDF/dump_netcdf.cpp b/src/NETCDF/dump_netcdf.cpp index b0bf57a41c..5f30c941ca 100644 --- a/src/NETCDF/dump_netcdf.cpp +++ b/src/NETCDF/dump_netcdf.cpp @@ -274,7 +274,7 @@ void DumpNetCDF::openfile() if (append_flag && !multifile) { // Fixme! Perform checks if dimensions and variables conform with // data structure standard. - if (not platform::file_is_readable(filecurrent)) + if (!platform::file_is_readable(filecurrent)) error->all(FLERR, "cannot append to non-existent file {}",filecurrent); if (singlefile_opened) return; diff --git a/src/NETCDF/dump_netcdf_mpiio.cpp b/src/NETCDF/dump_netcdf_mpiio.cpp index b14cef4f68..0a76203f96 100644 --- a/src/NETCDF/dump_netcdf_mpiio.cpp +++ b/src/NETCDF/dump_netcdf_mpiio.cpp @@ -272,7 +272,7 @@ void DumpNetCDFMPIIO::openfile() if (append_flag && !multifile) { // Fixme! Perform checks if dimensions and variables conform with // data structure standard. - if (not platform::file_is_readable(filecurrent)) + if (!platform::file_is_readable(filecurrent)) error->all(FLERR, "cannot append to non-existent file {}", filecurrent); MPI_Offset index[NC_MAX_VAR_DIMS], count[NC_MAX_VAR_DIMS]; From 6a9bb577cf480e64c67bfd267ce5b82fe971db3f Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Thu, 7 Oct 2021 12:38:11 -0400 Subject: [PATCH 112/372] rename "zip" functions to "compress" functions. update related docs --- doc/src/Build_settings.rst | 20 ++++---- doc/src/Developer_platform.rst | 6 +-- doc/utils/sphinx-config/false_positives.txt | 1 + src/COMPRESS/dump_atom_gz.cpp | 2 +- src/COMPRESS/dump_cfg_gz.cpp | 2 +- src/COMPRESS/dump_custom_gz.cpp | 2 +- src/COMPRESS/dump_custom_zstd.cpp | 2 +- src/COMPRESS/dump_local_gz.cpp | 2 +- src/COMPRESS/dump_local_zstd.cpp | 2 +- src/COMPRESS/dump_xyz_gz.cpp | 2 +- src/COMPRESS/dump_xyz_zstd.cpp | 2 +- src/EXTRA-FIX/fix_tmd.cpp | 6 +-- src/PHONON/dynamical_matrix.cpp | 6 +-- src/PHONON/third_order.cpp | 6 +-- src/REAXFF/fix_reaxff_bonds.cpp | 4 +- src/REAXFF/fix_reaxff_species.cpp | 4 +- src/REPLICA/neb.cpp | 4 +- src/SPIN/neb_spin.cpp | 6 +-- src/dump.cpp | 6 +-- src/library.cpp | 7 +-- src/platform.cpp | 52 ++++++++++----------- src/platform.h | 8 ++-- src/read_data.cpp | 6 +-- src/reader.cpp | 4 +- 24 files changed, 83 insertions(+), 79 deletions(-) diff --git a/doc/src/Build_settings.rst b/doc/src/Build_settings.rst index c7397935d8..01bd8e2c80 100644 --- a/doc/src/Build_settings.rst +++ b/doc/src/Build_settings.rst @@ -354,8 +354,10 @@ Read or write compressed files ----------------------------------------- If this option is enabled, large files can be read or written with -gzip compression by several LAMMPS commands, including -:doc:`read_data `, :doc:`rerun `, and :doc:`dump `. +compression by ``gzip`` or similar tools by several LAMMPS commands, +including :doc:`read_data `, :doc:`rerun `, and +:doc:`dump `. Currently supported compression tools are: +``gzip``, ``bzip2``, ``zstd``, and ``lzma``. .. tabs:: @@ -364,8 +366,7 @@ gzip compression by several LAMMPS commands, including .. code-block:: bash -D WITH_GZIP=value # yes or no - # default is yes if CMake can find gzip, else no - -D GZIP_EXECUTABLE=path # path to gzip executable if CMake cannot find it + # default is yes if CMake can find the gzip program, else no .. tab:: Traditional make @@ -373,14 +374,15 @@ gzip compression by several LAMMPS commands, including LMP_INC = -DLAMMPS_GZIP -This option requires that your operating system fully supports the "popen()" -function in the standard runtime library and that a ``gzip`` executable can be -found by LAMMPS during a run. +This option requires that your operating system fully supports the +"popen()" function in the standard runtime library and that a ``gzip`` +or other executable can be found by LAMMPS in the standard search path +during a run. .. note:: - On some clusters with high-speed networks, using the "fork()" library - call (required by "popen()") can interfere with the fast communication + On clusters with high-speed networks, using the "fork()" library call + (required by "popen()") can interfere with the fast communication library and lead to simulations using compressed output or input to hang or crash. For selected operations, compressed file I/O is also available using a compression library instead, which is what the diff --git a/doc/src/Developer_platform.rst b/doc/src/Developer_platform.rst index 19836b1ff2..4cea36f94c 100644 --- a/doc/src/Developer_platform.rst +++ b/doc/src/Developer_platform.rst @@ -139,11 +139,11 @@ Dynamically loaded object or library functions Compressed file I/O functions ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -.. doxygenfunction:: has_zip_extension +.. doxygenfunction:: has_compress_extension :project: progguide -.. doxygenfunction:: zip_read +.. doxygenfunction:: compressed_read :project: progguide -.. doxygenfunction:: zip_write +.. doxygenfunction:: compressed_write :project: progguide diff --git a/doc/utils/sphinx-config/false_positives.txt b/doc/utils/sphinx-config/false_positives.txt index 107e252074..ccc321c7e0 100644 --- a/doc/utils/sphinx-config/false_positives.txt +++ b/doc/utils/sphinx-config/false_positives.txt @@ -1223,6 +1223,7 @@ Guo gw gyromagnetic gz +gzip gzipped Haak Hafskjold diff --git a/src/COMPRESS/dump_atom_gz.cpp b/src/COMPRESS/dump_atom_gz.cpp index 38229a71bb..5f799054bb 100644 --- a/src/COMPRESS/dump_atom_gz.cpp +++ b/src/COMPRESS/dump_atom_gz.cpp @@ -33,7 +33,7 @@ DumpAtomGZ::~DumpAtomGZ() {} /* ---------------------------------------------------------------------- generic opening of a dump file - ASCII or binary or gzipped + ASCII or binary or compressed some derived classes override this function ------------------------------------------------------------------------- */ diff --git a/src/COMPRESS/dump_cfg_gz.cpp b/src/COMPRESS/dump_cfg_gz.cpp index ea51ce87c3..8d6347d978 100644 --- a/src/COMPRESS/dump_cfg_gz.cpp +++ b/src/COMPRESS/dump_cfg_gz.cpp @@ -35,7 +35,7 @@ DumpCFGGZ::~DumpCFGGZ() {} /* ---------------------------------------------------------------------- generic opening of a dump file - ASCII or binary or gzipped + ASCII or binary or compressed some derived classes override this function ------------------------------------------------------------------------- */ diff --git a/src/COMPRESS/dump_custom_gz.cpp b/src/COMPRESS/dump_custom_gz.cpp index 7cbab10cb4..f40cf8d3d1 100644 --- a/src/COMPRESS/dump_custom_gz.cpp +++ b/src/COMPRESS/dump_custom_gz.cpp @@ -33,7 +33,7 @@ DumpCustomGZ::~DumpCustomGZ() {} /* ---------------------------------------------------------------------- generic opening of a dump file - ASCII or binary or gzipped + ASCII or binary or compressed some derived classes override this function ------------------------------------------------------------------------- */ diff --git a/src/COMPRESS/dump_custom_zstd.cpp b/src/COMPRESS/dump_custom_zstd.cpp index 8b7d153fc4..347c9c08e2 100644 --- a/src/COMPRESS/dump_custom_zstd.cpp +++ b/src/COMPRESS/dump_custom_zstd.cpp @@ -45,7 +45,7 @@ DumpCustomZstd::~DumpCustomZstd() /* ---------------------------------------------------------------------- generic opening of a dump file - ASCII or binary or gzipped + ASCII or binary or compressed some derived classes override this function ------------------------------------------------------------------------- */ diff --git a/src/COMPRESS/dump_local_gz.cpp b/src/COMPRESS/dump_local_gz.cpp index 206e2aeb09..a23fa1a1ac 100644 --- a/src/COMPRESS/dump_local_gz.cpp +++ b/src/COMPRESS/dump_local_gz.cpp @@ -33,7 +33,7 @@ DumpLocalGZ::~DumpLocalGZ() {} /* ---------------------------------------------------------------------- generic opening of a dump file - ASCII or binary or gzipped + ASCII or binary or compressed some derived classes override this function ------------------------------------------------------------------------- */ diff --git a/src/COMPRESS/dump_local_zstd.cpp b/src/COMPRESS/dump_local_zstd.cpp index 91fb36bb6e..1d3fc4756e 100644 --- a/src/COMPRESS/dump_local_zstd.cpp +++ b/src/COMPRESS/dump_local_zstd.cpp @@ -39,7 +39,7 @@ DumpLocalZstd::~DumpLocalZstd() {} /* ---------------------------------------------------------------------- generic opening of a dump file - ASCII or binary or gzipped + ASCII or binary or compressed some derived classes override this function ------------------------------------------------------------------------- */ diff --git a/src/COMPRESS/dump_xyz_gz.cpp b/src/COMPRESS/dump_xyz_gz.cpp index a1acad7fc2..2d9548bf14 100644 --- a/src/COMPRESS/dump_xyz_gz.cpp +++ b/src/COMPRESS/dump_xyz_gz.cpp @@ -32,7 +32,7 @@ DumpXYZGZ::~DumpXYZGZ() {} /* ---------------------------------------------------------------------- generic opening of a dump file - ASCII or binary or gzipped + ASCII or binary or compressed some derived classes override this function ------------------------------------------------------------------------- */ diff --git a/src/COMPRESS/dump_xyz_zstd.cpp b/src/COMPRESS/dump_xyz_zstd.cpp index 534bc0ee56..b56488ec09 100644 --- a/src/COMPRESS/dump_xyz_zstd.cpp +++ b/src/COMPRESS/dump_xyz_zstd.cpp @@ -38,7 +38,7 @@ DumpXYZZstd::~DumpXYZZstd() {} /* ---------------------------------------------------------------------- generic opening of a dump file - ASCII or binary or gzipped + ASCII or binary or compressed some derived classes override this function ------------------------------------------------------------------------- */ diff --git a/src/EXTRA-FIX/fix_tmd.cpp b/src/EXTRA-FIX/fix_tmd.cpp index 123814b22a..4d85687e4d 100644 --- a/src/EXTRA-FIX/fix_tmd.cpp +++ b/src/EXTRA-FIX/fix_tmd.cpp @@ -517,14 +517,14 @@ void FixTMD::readfile(char *file) /* ---------------------------------------------------------------------- proc 0 opens TMD data file - test if gzipped + test if compressed ------------------------------------------------------------------------- */ void FixTMD::open(const std::string &file) { - if (platform::has_zip_extension(file)) { + if (platform::has_compress_extension(file)) { compressed = 1; - fp = platform::zip_read(file); + fp = platform::compressed_read(file); if (!fp) error->one(FLERR,"Cannot open compressed file for reading"); } else { compressed = 0; diff --git a/src/PHONON/dynamical_matrix.cpp b/src/PHONON/dynamical_matrix.cpp index 8861a87491..e236e24a15 100644 --- a/src/PHONON/dynamical_matrix.cpp +++ b/src/PHONON/dynamical_matrix.cpp @@ -211,7 +211,7 @@ void DynamicalMatrix::options(int narg, char **arg) /* ---------------------------------------------------------------------- generic opening of a file - ASCII or binary or gzipped + ASCII or binary or compressed some derived classes override this function ------------------------------------------------------------------------- */ @@ -223,8 +223,8 @@ void DynamicalMatrix::openfile(const char *filename) if (me == 0) { if (compressed) { - fp = platform::zip_write(std::string(filename)+".gz"); - if (!fp) error->one(FLERR,"Cannot open gzipped file"); + fp = platform::compressed_write(std::string(filename)+".gz"); + if (!fp) error->one(FLERR,"Cannot open compressed file"); } else if (binaryflag) { fp = fopen(filename,"wb"); } else { diff --git a/src/PHONON/third_order.cpp b/src/PHONON/third_order.cpp index 04a2417f13..3206882a4a 100644 --- a/src/PHONON/third_order.cpp +++ b/src/PHONON/third_order.cpp @@ -210,7 +210,7 @@ void ThirdOrder::options(int narg, char **arg) /* ---------------------------------------------------------------------- generic opening of a file - ASCII or binary or gzipped + ASCII or binary or compressed some derived classes override this function ------------------------------------------------------------------------- */ @@ -222,8 +222,8 @@ void ThirdOrder::openfile(const char* filename) if (me == 0) { if (compressed) { - fp = platform::zip_write(std::string(filename)+".gz"); - if (!fp) error->one(FLERR,"Cannot open gzipped file"); + fp = platform::compressed_write(std::string(filename)+".gz"); + if (!fp) error->one(FLERR,"Cannot open compressed file"); } else if (binaryflag) { fp = fopen(filename,"wb"); } else { diff --git a/src/REAXFF/fix_reaxff_bonds.cpp b/src/REAXFF/fix_reaxff_bonds.cpp index 07d0c73f3d..740a32a0a6 100644 --- a/src/REAXFF/fix_reaxff_bonds.cpp +++ b/src/REAXFF/fix_reaxff_bonds.cpp @@ -52,9 +52,9 @@ FixReaxFFBonds::FixReaxFFBonds(LAMMPS *lmp, int narg, char **arg) : if (nevery <= 0) error->all(FLERR,"Illegal fix reaxff/bonds command"); if (me == 0) { - if (platform::has_zip_extension(arg[4])) { + if (platform::has_compress_extension(arg[4])) { compressed = 1; - fp = platform::zip_write(arg[4]); + fp = platform::compressed_write(arg[4]); if (!fp) error->one(FLERR,"Cannot open compressed file"); } else fp = fopen(arg[4],"w"); diff --git a/src/REAXFF/fix_reaxff_species.cpp b/src/REAXFF/fix_reaxff_species.cpp index 897f36d988..7bf6f34aa7 100644 --- a/src/REAXFF/fix_reaxff_species.cpp +++ b/src/REAXFF/fix_reaxff_species.cpp @@ -107,8 +107,8 @@ FixReaxFFSpecies::FixReaxFFSpecies(LAMMPS *lmp, int narg, char **arg) : strcpy(tmparg[2],arg[5]); if (me == 0) { - if (platform::has_zip_extension(arg[6])) { - fp = platform::zip_write(arg[6]); + if (platform::has_compress_extension(arg[6])) { + fp = platform::compressed_write(arg[6]); compressed = 1; if (!fp) error->one(FLERR,"Cannot open compressed file"); } else fp = fopen(arg[6],"w"); diff --git a/src/REPLICA/neb.cpp b/src/REPLICA/neb.cpp index 318ee0a3c7..8cfc4b5c24 100644 --- a/src/REPLICA/neb.cpp +++ b/src/REPLICA/neb.cpp @@ -548,9 +548,9 @@ void NEB::readfile(char *file, int flag) void NEB::open(char *file) { compressed = 0; - if (platform::has_zip_extension(file)) { + if (platform::has_compress_extension(file)) { compressed = 1; - fp = platform::zip_read(file); + fp = platform::compressed_read(file); if (!fp) error->one(FLERR,"Cannot open compressed file"); } else fp = fopen(file,"r"); diff --git a/src/SPIN/neb_spin.cpp b/src/SPIN/neb_spin.cpp index 80f5f56324..1c987f8e7e 100644 --- a/src/SPIN/neb_spin.cpp +++ b/src/SPIN/neb_spin.cpp @@ -687,14 +687,14 @@ int NEBSpin::initial_rotation(double *spi, double *sploc, double fraction) /* ---------------------------------------------------------------------- universe proc 0 opens NEBSpin data file - test if gzipped + test if compressed ------------------------------------------------------------------------- */ void NEBSpin::open(char *file) { compressed = 0; - if (platform::has_zip_extension(file)) { - fp = platform::zip_read(file); + if (platform::has_compress_extension(file)) { + fp = platform::compressed_read(file); if (!fp) error->one(FLERR,"Cannot open compressed file"); } else fp = fopen(file,"r"); diff --git a/src/dump.cpp b/src/dump.cpp index 7dbe95c1d3..d00c42086d 100644 --- a/src/dump.cpp +++ b/src/dump.cpp @@ -143,7 +143,7 @@ Dump::Dump(LAMMPS *lmp, int /*narg*/, char **arg) : Pointers(lmp) if (strchr(filename,'*')) multifile = 1; if (utils::strmatch(filename, "\\.bin$")) binary = 1; - if (platform::has_zip_extension(filename)) compressed = 1; + if (platform::has_compress_extension(filename)) compressed = 1; } /* ---------------------------------------------------------------------- */ @@ -528,7 +528,7 @@ void Dump::write() /* ---------------------------------------------------------------------- generic opening of a dump file - ASCII or binary or gzipped + ASCII or binary or compressed some derived classes override this function ------------------------------------------------------------------------- */ @@ -578,7 +578,7 @@ void Dump::openfile() if (filewriter) { if (compressed) { - fp = platform::zip_write(filecurrent); + fp = platform::compressed_write(filecurrent); } else if (binary) { fp = fopen(filecurrent,"wb"); } else if (append_flag) { diff --git a/src/library.cpp b/src/library.cpp index bf5ea50f58..ed208413e6 100644 --- a/src/library.cpp +++ b/src/library.cpp @@ -4420,15 +4420,16 @@ int lammps_config_has_mpi_support() /* ---------------------------------------------------------------------- */ -/** Check if the LAMMPS library supports compressed files via a pipe to gzip +/** Check if the LAMMPS library supports reading or writing compressed + * files via a pipe to gzip or similar compression programs \verbatim embed:rst Several LAMMPS commands (e.g. :doc:`read_data`, :doc:`write_data`, :doc:`dump styles atom, custom, and xyz `) support reading and writing compressed files via creating a pipe to the ``gzip`` program. This function checks whether this feature was :ref:`enabled at compile -time `. It does **not** check whether the ``gzip`` itself is -installed and usable. +time `. It does **not** check whether``gzip`` or any other +supported compression programs themselves are installed and usable. \endverbatim * * \return 1 if yes, otherwise 0 diff --git a/src/platform.cpp b/src/platform.cpp index 2d56adcc11..00636ec703 100644 --- a/src/platform.cpp +++ b/src/platform.cpp @@ -69,40 +69,40 @@ /* ------------------------------------------------------------------ */ /// Struct for listing on-the-fly compression/decompression commands -struct zip_info { +struct compress_info { /// identifier for the different compression algorithms enum styles { NONE, GZIP, BZIP2, ZSTD, XZ, LZMA, LZ4 }; const std::string extension; ///< filename extension for the current algorithm const std::string command; ///< command to perform compression or decompression - const std::string zipflags; ///< flags to append to compress from stdin to stdout - const std::string unzipflags; ///< flags to decompress file to stdout + const std::string compressflags; ///< flags to append to compress from stdin to stdout + const std::string uncompressflags; ///< flags to decompress file to stdout const int style; ///< compression style flag }; // clang-format off -static const std::vector zip_styles = { - {"", "", "", "", zip_info::NONE}, - {"gz", "gzip", " > ", " -cdf ", zip_info::GZIP}, - {"bz2", "bzip2", " > ", " -cdf ", zip_info::BZIP2}, - {"zst", "zstd", " -q > ", " -cdf ", zip_info::ZSTD}, - {"xz", "xz", " > ", " -cdf ", zip_info::XZ}, - {"lzma", "xz", " --format=lzma > ", " --format=lzma -cdf ", zip_info::LZMA}, - {"lz4", "lz4", " > ", " -cdf ", zip_info::LZ4}, +static const std::vector compress_styles = { + {"", "", "", "", compress_info::NONE}, + {"gz", "gzip", " > ", " -cdf ", compress_info::GZIP}, + {"bz2", "bzip2", " > ", " -cdf ", compress_info::BZIP2}, + {"zst", "zstd", " -q > ", " -cdf ", compress_info::ZSTD}, + {"xz", "xz", " > ", " -cdf ", compress_info::XZ}, + {"lzma", "xz", " --format=lzma > ", " --format=lzma -cdf ", compress_info::LZMA}, + {"lz4", "lz4", " > ", " -cdf ", compress_info::LZ4}, }; // clang-format on /* ------------------------------------------------------------------ */ -static const zip_info &find_zip_type(const std::string &file) +static const compress_info &find_compress_type(const std::string &file) { std::size_t dot = file.find_last_of('.'); if (dot != std::string::npos) { const std::string ext = file.substr(dot + 1); - for (const auto &i : zip_styles) { + for (const auto &i : compress_styles) { if (i.extension == ext) return i; } } - return zip_styles[0]; + return compress_styles[0]; } /* ------------------------------------------------------------------ */ @@ -925,26 +925,26 @@ bool platform::file_is_readable(const std::string &path) check if filename has a known compression extension ------------------------------------------------------------------------- */ -bool platform::has_zip_extension(const std::string &file) +bool platform::has_compress_extension(const std::string &file) { - return find_zip_type(file).style != zip_info::NONE; + return find_compress_type(file).style != compress_info::NONE; } /* ---------------------------------------------------------------------- open pipe to read a compressed file ------------------------------------------------------------------------- */ -FILE *platform::zip_read(const std::string &file) +FILE *platform::compressed_read(const std::string &file) { FILE *fp = nullptr; #if defined(LAMMPS_GZIP) - auto zip = find_zip_type(file); - if (zip.style == zip_info::NONE) return nullptr; + auto compress = find_compress_type(file); + if (compress.style == compress_info::NONE) return nullptr; - if (find_exe_path(zip.command).size()) + if (find_exe_path(compress.command).size()) // put quotes around file name so that they may contain blanks - fp = popen((zip.command + zip.unzipflags + "\"" + file + "\""), "r"); + fp = popen((compress.command + compress.uncompressflags + "\"" + file + "\""), "r"); #endif return fp; } @@ -953,17 +953,17 @@ FILE *platform::zip_read(const std::string &file) open pipe to write a compressed file ------------------------------------------------------------------------- */ -FILE *platform::zip_write(const std::string &file) +FILE *platform::compressed_write(const std::string &file) { FILE *fp = nullptr; #if defined(LAMMPS_GZIP) - auto zip = find_zip_type(file); - if (zip.style == zip_info::NONE) return nullptr; + auto compress = find_compress_type(file); + if (compress.style == compress_info::NONE) return nullptr; - if (find_exe_path(zip.command).size()) + if (find_exe_path(compress.command).size()) // put quotes around file name so that they may contain blanks - fp = popen((zip.command + zip.zipflags + "\"" + file + "\""), "w"); + fp = popen((compress.command + compress.compressflags + "\"" + file + "\""), "w"); #endif return fp; } diff --git a/src/platform.h b/src/platform.h index 794fd692b0..de8ecce016 100644 --- a/src/platform.h +++ b/src/platform.h @@ -357,26 +357,26 @@ namespace platform { /*! Check if a file name ends in a known extension for a compressed file format * - * Currently supported file extensions are: .gz, .bz2, .zstd, .xz, .lzma, lz4 + * Currently supported file extensions are: .gz, .bz2, .zst, .xz, .lzma, lz4 * * \param file name of the file to check * \return true if the file has a known extension, otherwise false */ - bool has_zip_extension(const std::string &file); + bool has_compress_extension(const std::string &file); /*! Open pipe to compressed text file for reading * * \param file name of the file to open * \return FILE pointer to pipe using for reading the compressed file. */ - FILE *zip_read(const std::string &file); + FILE *compressed_read(const std::string &file); /*! Open pipe to compressed text file for writing * * \param file name of the file to open * \return FILE pointer to pipe using for reading the compressed file. */ - FILE *zip_write(const std::string &file); + FILE *compressed_write(const std::string &file); } // namespace platform } // namespace LAMMPS_NS diff --git a/src/read_data.cpp b/src/read_data.cpp index bbc3e20d44..c17ab97229 100644 --- a/src/read_data.cpp +++ b/src/read_data.cpp @@ -1951,14 +1951,14 @@ int ReadData::reallocate(int **pcount, int cmax, int amax) /* ---------------------------------------------------------------------- proc 0 opens data file - test if gzipped + test if compressed ------------------------------------------------------------------------- */ void ReadData::open(const std::string &file) { - if (platform::has_zip_extension(file)) { + if (platform::has_compress_extension(file)) { compressed = 1; - fp = platform::zip_read(file); + fp = platform::compressed_read(file); if (!fp) error->one(FLERR,"Cannot open compressed file {}", file); } else { compressed = 0; diff --git a/src/reader.cpp b/src/reader.cpp index 3a07417912..f2652d868d 100644 --- a/src/reader.cpp +++ b/src/reader.cpp @@ -36,9 +36,9 @@ void Reader::open_file(const std::string &file) { if (fp != nullptr) close_file(); - if (platform::has_zip_extension(file)) { + if (platform::has_compress_extension(file)) { compressed = 1; - fp = platform::zip_read(file); + fp = platform::compressed_read(file); if (!fp) error->one(FLERR,"Cannot open compressed file for reading"); } else { compressed = 0; From 0f442fddd98007a0655330bca2ae40ce6760b0eb Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Thu, 7 Oct 2021 12:39:58 -0400 Subject: [PATCH 113/372] correct use of utils function --- src/REAXFF/reaxff_ffield.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/REAXFF/reaxff_ffield.cpp b/src/REAXFF/reaxff_ffield.cpp index a07d37e0f4..f3f9bf6a00 100644 --- a/src/REAXFF/reaxff_ffield.cpp +++ b/src/REAXFF/reaxff_ffield.cpp @@ -39,6 +39,7 @@ using LAMMPS_NS::utils::open_potential; using LAMMPS_NS::utils::getsyserror; +using LAMMPS_NS::utils::uppercase; namespace ReaxFF { @@ -161,9 +162,9 @@ namespace ReaxFF { THROW_ERROR("Invalid force field file format"); // copy element symbol in uppercase and truncate stored element symbol if necessary - auto element = utils::uppercase(values.next_string()); + auto element = uppercase(values.next_string()); strncpy(sbp[i].name,element.c_str(),4); - sbp[i].name[4] = '\0'; + sbp[i].name[3] = '\0'; sbp[i].r_s = values.next_double(); sbp[i].valency = values.next_double(); From 2c7b67203ab38ae172d7516d069798497a5c6716 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Thu, 7 Oct 2021 13:44:18 -0400 Subject: [PATCH 114/372] recover unit test compile --- unittest/utils/test_platform.cpp | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/unittest/utils/test_platform.cpp b/unittest/utils/test_platform.cpp index eddb6e1b20..0f39534c31 100644 --- a/unittest/utils/test_platform.cpp +++ b/unittest/utils/test_platform.cpp @@ -356,26 +356,26 @@ TEST(Platform, file_is_readable) #endif } -TEST(Platform, has_zip_extension) +TEST(Platform, has_compress_extension) { - ASSERT_FALSE(platform::has_zip_extension("dummy")); - ASSERT_FALSE(platform::has_zip_extension("dum.my")); - ASSERT_TRUE(platform::has_zip_extension("dummy.gz")); - ASSERT_TRUE(platform::has_zip_extension("dummy.bz2")); - ASSERT_TRUE(platform::has_zip_extension("dummy.zst")); - ASSERT_TRUE(platform::has_zip_extension("dummy.xz")); - ASSERT_TRUE(platform::has_zip_extension("dummy.lzma")); - ASSERT_TRUE(platform::has_zip_extension("dummy.lz4")); + ASSERT_FALSE(platform::has_compress_extension("dummy")); + ASSERT_FALSE(platform::has_compress_extension("dum.my")); + ASSERT_TRUE(platform::has_compress_extension("dummy.gz")); + ASSERT_TRUE(platform::has_compress_extension("dummy.bz2")); + ASSERT_TRUE(platform::has_compress_extension("dummy.zst")); + ASSERT_TRUE(platform::has_compress_extension("dummy.xz")); + ASSERT_TRUE(platform::has_compress_extension("dummy.lzma")); + ASSERT_TRUE(platform::has_compress_extension("dummy.lz4")); } -TEST(Platform, zip_read_write) +TEST(Platform, compress_read_write) { const std::vector test_files = {"zip_test.zip", "zip_test.gz", "zip_test.bz2", "zip_test.zst", "zip_test.xz", "zip_test.lzma", "zip_test.lz4", "zip_test.unk", "zip test.gz"}; for (const auto &file : test_files) { platform::unlink(file); - FILE *fp = platform::zip_write(file); + FILE *fp = platform::compressed_write(file); if (!fp) { platform::unlink(file); continue; @@ -388,7 +388,7 @@ TEST(Platform, zip_read_write) fflush(fp); platform::pclose(fp); - fp = platform::zip_read(file); + fp = platform::compressed_read(file); ASSERT_NE(fp, nullptr); char buf[128]; char *ptr = fgets(buf, 128, fp); From 2b27af1572c55713f71ff15e5891cbcba6dfdc40 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Thu, 7 Oct 2021 14:37:37 -0400 Subject: [PATCH 115/372] fix a few more MSVC issues and reduce warnings --- .gitignore | 7 ++++++- src/EXTRA-DUMP/xdr_compat.h | 4 ++-- src/ML-SNAP/pair_snap.cpp | 13 +++++-------- src/MOLFILE/molfile_interface.cpp | 4 +--- 4 files changed, 14 insertions(+), 14 deletions(-) diff --git a/.gitignore b/.gitignore index ae708ff184..3fb3af0d13 100644 --- a/.gitignore +++ b/.gitignore @@ -37,8 +37,8 @@ vgcore.* .Trashes ehthumbs.db Thumbs.db -.clang-format .lammps_history +.vs #cmake /build* @@ -49,3 +49,8 @@ Thumbs.db /Testing /cmake_install.cmake /lmp +out/Debug +out/RelWithDebInfo +out/Release +out/x86 +out/x64 diff --git a/src/EXTRA-DUMP/xdr_compat.h b/src/EXTRA-DUMP/xdr_compat.h index 30aecbcb62..6557a60a53 100644 --- a/src/EXTRA-DUMP/xdr_compat.h +++ b/src/EXTRA-DUMP/xdr_compat.h @@ -59,8 +59,8 @@ extern "C" { typedef int bool_t; -#if defined(__MINGW32__) || defined(__APPLE__) || defined(__FreeBSD__) || \ - defined(__DragonFly__) || defined(__OpenBSD__) || defined(__NetBSD__) +#if defined(_WIN32) || defined(__APPLE__) || defined(__FreeBSD__) || \ + defined(__DragonFly__) || defined(__OpenBSD__) || defined(__NetBSD__) typedef char *caddr_t; typedef unsigned int u_int; #endif diff --git a/src/ML-SNAP/pair_snap.cpp b/src/ML-SNAP/pair_snap.cpp index d7cd953615..d6da639734 100644 --- a/src/ML-SNAP/pair_snap.cpp +++ b/src/ML-SNAP/pair_snap.cpp @@ -500,8 +500,7 @@ void PairSNAP::read_files(char *coefffilename, char *paramfilename) nelemtmp = words.next_int(); ncoeffall = words.next_int(); } catch (TokenizerException &e) { - error->all(FLERR,"Incorrect format in SNAP coefficient " - "file: {}", e.what()); + error->all(FLERR,"Incorrect format in SNAP coefficient file: {}", e.what()); } // clean out old arrays and set up element lists @@ -538,7 +537,7 @@ void PairSNAP::read_files(char *coefffilename, char *paramfilename) std::vector words; try { words = Tokenizer(utils::trim_comment(line),"\"' \t\n\r\f").as_vector(); - } catch (TokenizerException &e) { + } catch (TokenizerException &) { // ignore } if (words.size() != 3) @@ -599,8 +598,7 @@ void PairSNAP::read_files(char *coefffilename, char *paramfilename) coeffelem[jelem][icoeff] = coeff.next_double(); } catch (TokenizerException &e) { - error->all(FLERR,"Incorrect format in SNAP coefficient " - "file: {}", e.what()); + error->all(FLERR,"Incorrect format in SNAP coefficient file: {}", e.what()); } } } @@ -609,8 +607,7 @@ void PairSNAP::read_files(char *coefffilename, char *paramfilename) for (int jelem = 0; jelem < nelements; jelem++) { if (elementflags[jelem] == 0) - error->all(FLERR,"Element {} not found in SNAP coefficient " - "file", elements[jelem]); + error->all(FLERR,"Element {} not found in SNAP coefficient file", elements[jelem]); } delete[] elementflags; @@ -660,7 +657,7 @@ void PairSNAP::read_files(char *coefffilename, char *paramfilename) std::vector words; try { words = Tokenizer(utils::trim_comment(line),"\"' \t\n\r\f").as_vector(); - } catch (TokenizerException &e) { + } catch (TokenizerException &) { // ignore } diff --git a/src/MOLFILE/molfile_interface.cpp b/src/MOLFILE/molfile_interface.cpp index e18f62b337..808bc16ab4 100644 --- a/src/MOLFILE/molfile_interface.cpp +++ b/src/MOLFILE/molfile_interface.cpp @@ -27,8 +27,6 @@ #include #include #include -#include -#include // for strcasecmp() #if vmdplugin_ABIVERSION < 16 #error "unsupported VMD molfile plugin ABI version" @@ -249,7 +247,7 @@ int MolfileInterface::find_plugin(const char *pluginpath) int MolfileInterface::load_plugin(const char *filename) { void *dso; - int len, retval = E_NONE; + int retval = E_NONE; // access shared object dso = platform::dlopen(filename); From 3a3f07d91a4abba951404fb7523d6bb4be024244 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Thu, 7 Oct 2021 15:05:32 -0400 Subject: [PATCH 116/372] use portable logic operators --- src/DPD-REACT/fix_rx.cpp | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/src/DPD-REACT/fix_rx.cpp b/src/DPD-REACT/fix_rx.cpp index 8971f5ae48..b14831ee8d 100644 --- a/src/DPD-REACT/fix_rx.cpp +++ b/src/DPD-REACT/fix_rx.cpp @@ -126,7 +126,7 @@ FixRX::FixRX(LAMMPS *lmp, int narg, char **arg) : error->all(FLERR, errmsg); } - if (comm->me == 0 and Verbosity > 1) { + if (comm->me == 0 && Verbosity > 1) { std::string msg = "FixRX: matrix format is "; if (useSparseKinetics) msg += std::string("sparse"); @@ -172,7 +172,7 @@ FixRX::FixRX(LAMMPS *lmp, int narg, char **arg) : char *word = arg[iarg++]; minSteps = atoi( word ); - if (comm->me == 0 and Verbosity > 1) { + if (comm->me == 0 && Verbosity > 1) { char msg[128]; sprintf(msg, "FixRX: RK4 numSteps= %d", minSteps); error->message(FLERR, msg); @@ -197,7 +197,7 @@ FixRX::FixRX(LAMMPS *lmp, int narg, char **arg) : // maxIters must be at least minSteps. maxIters = std::max( minSteps, maxIters ); - if (comm->me == 0 and Verbosity > 1) { + if (comm->me == 0 && Verbosity > 1) { //printf("FixRX: RKF45 minSteps= %d maxIters= %d absTol= %e relTol= %e\n", minSteps, maxIters, absTol, relTol); char msg[128]; sprintf(msg, "FixRX: RKF45 minSteps= %d maxIters= %d relTol= %.1e absTol= %.1e diagnosticFrequency= %d", minSteps, maxIters, relTol, absTol, diagnosticFrequency); @@ -371,7 +371,7 @@ void FixRX::initSparse() { const int Verbosity = 1; - if (comm->me == 0 and Verbosity > 1) { + if (comm->me == 0 && Verbosity > 1) { for (int k = 0; k < nspecies; ++k) printf("atom->dvname[%d]= %s\n", k, atom->dvname[k]); @@ -421,7 +421,7 @@ void FixRX::initSparse() std::string pstr, rstr; bool allAreIntegral = true; for (int k = 0; k < nspecies; ++k) { - if (stoichReactants[i][k] == 0 and stoichProducts[i][k] == 0) + if (stoichReactants[i][k] == 0 && stoichProducts[i][k] == 0) nzeros++; if (stoichReactants[i][k] > 0.0) { @@ -448,7 +448,7 @@ void FixRX::initSparse() pstr += atom->dvname[k]; } } - if (comm->me == 0 and Verbosity > 1) + if (comm->me == 0 && Verbosity > 1) printf("rx%3d: %d %d %d ... %s %s %s\n", i, nreac_i, nprod_i, allAreIntegral, rstr.c_str(), /*reversible[i]*/ (false) ? "<=>" : "=", pstr.c_str()); mxreac = std::max( mxreac, nreac_i ); @@ -457,7 +457,7 @@ void FixRX::initSparse() if (allAreIntegral) nIntegral++; } - if (comm->me == 0 and Verbosity > 1) { + if (comm->me == 0 && Verbosity > 1) { char msg[256]; sprintf(msg, "FixRX: Sparsity of Stoichiometric Matrix= %.1f%% non-zeros= %d nspecies= %d nreactions= %d maxReactants= %d maxProducts= %d maxSpecies= %d integralReactions= %d", 100*(double(nzeros) / (nspecies * nreactions)), nzeros, nspecies, nreactions, mxreac, mxprod, (mxreac + mxprod), SparseKinetics_enableIntegralReactions); error->message(FLERR, msg); @@ -539,7 +539,7 @@ void FixRX::initSparse() sparseKinetics_isIntegralReaction[i] = isIntegral_i; } - if (comm->me == 0 and Verbosity > 1) { + if (comm->me == 0 && Verbosity > 1) { for (int i = 1; i < nu_bin.size(); ++i) if (nu_bin[i] > 0) printf("nu_bin[%d] = %d\n", i, nu_bin[i]); @@ -554,7 +554,7 @@ void FixRX::initSparse() rstr += " + "; char digit[6]; - if (SparseKinetics_enableIntegralReactions and sparseKinetics_isIntegralReaction[i]) + if (SparseKinetics_enableIntegralReactions && sparseKinetics_isIntegralReaction[i]) sprintf(digit,"%d ", sparseKinetics_inu[i][kk]); else sprintf(digit,"%4.1f ", sparseKinetics_nu[i][kk]); @@ -570,7 +570,7 @@ void FixRX::initSparse() pstr += " + "; char digit[6]; - if (SparseKinetics_enableIntegralReactions and sparseKinetics_isIntegralReaction[i]) + if (SparseKinetics_enableIntegralReactions && sparseKinetics_isIntegralReaction[i]) sprintf(digit,"%d ", sparseKinetics_inu[i][kk]); else sprintf(digit,"%4.1f ", sparseKinetics_nu[i][kk]); @@ -578,7 +578,7 @@ void FixRX::initSparse() pstr += atom->dvname[k]; } } - if (comm->me == 0 and Verbosity > 1) + if (comm->me == 0 && Verbosity > 1) printf("rx%3d: %s %s %s\n", i, rstr.c_str(), /*reversible[i]*/ (false) ? "<=>" : "=", pstr.c_str()); } // end for nreactions From ef8aa4de9014e6e2d5e88e1cdcc553f4050cc89c Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Thu, 7 Oct 2021 15:29:46 -0400 Subject: [PATCH 117/372] silence warning --- src/QEQ/fix_qeq.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/QEQ/fix_qeq.cpp b/src/QEQ/fix_qeq.cpp index a0d012bb5b..e2cae80dd4 100644 --- a/src/QEQ/fix_qeq.cpp +++ b/src/QEQ/fix_qeq.cpp @@ -767,7 +767,7 @@ void FixQEq::read_file(char *file) for (int n=nlo; n <= nhi; ++n) zcore[n] = val; for (int n=nlo; n <= nhi; ++n) setflag[n] = 1; } - } catch (EOFException &e) { + } catch (EOFException &) { ; // catch and ignore to exit loop } catch (std::exception &e) { error->one(FLERR,e.what()); From 5d5cc0ac55ac3885d3a37b6704f0a7f24dc60d8e Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Thu, 7 Oct 2021 15:31:26 -0400 Subject: [PATCH 118/372] preset with packages that build natively on windows with visual c++ --- cmake/presets/windows.cmake | 66 +++++++++++++++++++++++++++++++++++++ 1 file changed, 66 insertions(+) create mode 100644 cmake/presets/windows.cmake diff --git a/cmake/presets/windows.cmake b/cmake/presets/windows.cmake new file mode 100644 index 0000000000..267d1b6154 --- /dev/null +++ b/cmake/presets/windows.cmake @@ -0,0 +1,66 @@ +set(WIN_PACKAGES + ASPHERE + AWPMD + BOCS + BODY + BROWNIAN + CG-DNA + CG-SDK + CLASS2 + COLLOID + COLVARS + CORESHELL + DIELECTRIC + DIFFRACTION + DIPOLE + DPD-BASIC + DPD-MESO + DPD-REACT + DPD-SMOOTH + DRUDE + EFF + EXTRA-COMPUTE + EXTRA-DUMP + EXTRA-FIX + EXTRA-MOLECULE + EXTRA-PAIR + FEP + GRANULAR + INTERLAYER + KSPACE + MANIFOLD + MANYBODY + MC + MEAM + MGPT + MISC + ML-IAP + ML-SNAP + MOFFF + MOLECULE + MOLFILE + OPENMP + ORIENT + PERI + PHONON + POEMS + PTM + QEQ + QTB + REACTION + REAXFF + REPLICA + RIGID + SHOCK + SMTBQ + SPH + SPIN + SRD + TALLY + UEF + YAFF) + +foreach(PKG ${WIN_PACKAGES}) + set(PKG_${PKG} ON CACHE BOOL "" FORCE) +endforeach() + From d5b3ea263b1dc810485b740a0715a7ff106ed81e Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Thu, 7 Oct 2021 15:42:33 -0400 Subject: [PATCH 119/372] awpmd requires blas, mgpt is not portable --- cmake/presets/windows.cmake | 2 -- 1 file changed, 2 deletions(-) diff --git a/cmake/presets/windows.cmake b/cmake/presets/windows.cmake index 267d1b6154..d4e69c5fca 100644 --- a/cmake/presets/windows.cmake +++ b/cmake/presets/windows.cmake @@ -1,6 +1,5 @@ set(WIN_PACKAGES ASPHERE - AWPMD BOCS BODY BROWNIAN @@ -32,7 +31,6 @@ set(WIN_PACKAGES MANYBODY MC MEAM - MGPT MISC ML-IAP ML-SNAP From 4fca127ea41ac1259e873b796459952bac1249cd Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Thu, 7 Oct 2021 15:59:12 -0400 Subject: [PATCH 120/372] copy MSVC++ compiler hacks to plugin CMakeLists.txt file --- examples/plugins/CMakeLists.txt | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/examples/plugins/CMakeLists.txt b/examples/plugins/CMakeLists.txt index e4c084fc1d..c61454870a 100644 --- a/examples/plugins/CMakeLists.txt +++ b/examples/plugins/CMakeLists.txt @@ -14,6 +14,15 @@ endif() project(plugins VERSION 1.0 LANGUAGES CXX) +# ugly hacks for MSVC which by default always reports an old C++ standard in the __cplusplus macro +# and prints lots of pointless warnings about "unsafe" functions +if(MSVC) + add_compile_options(/Zc:__cplusplus) + add_compile_options(/wd4244) + add_compile_options(/wd4267) + add_compile_definitions(_CRT_SECURE_NO_WARNINGS) +endif() + # NOTE: the next line should be commented out when used outside of the LAMMPS package get_filename_component(LAMMPS_SOURCE_DIR ${PROJECT_SOURCE_DIR}/../../src ABSOLUTE) set(LAMMPS_HEADER_DIR ${LAMMPS_SOURCE_DIR} CACHE PATH "Location of LAMMPS headers") From e12fa5779497d824a297e6991a2e5f4bba345bbb Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Thu, 7 Oct 2021 17:11:04 -0400 Subject: [PATCH 121/372] A few more tweaks --- src/MISC/fix_pair_tracker.cpp | 7 +++---- src/MOLFILE/reader_molfile.cpp | 28 +++++++--------------------- src/MOLFILE/reader_molfile.h | 2 +- 3 files changed, 11 insertions(+), 26 deletions(-) diff --git a/src/MISC/fix_pair_tracker.cpp b/src/MISC/fix_pair_tracker.cpp index 95151375c4..d4b640434e 100644 --- a/src/MISC/fix_pair_tracker.cpp +++ b/src/MISC/fix_pair_tracker.cpp @@ -79,15 +79,14 @@ FixPairTracker::FixPairTracker(LAMMPS *lmp, int narg, char **arg) : } else if (strcmp(arg[iarg], "type/include") == 0) { if (iarg + 1 >= narg) error->all(FLERR, "Invalid keyword in fix pair/tracker command"); int ntypes = atom->ntypes; - - int i, j, itype, jtype, in, jn, infield, jnfield; + int i, j, itype, jtype; int inlo, inhi, jnlo, jnhi; - char *istr, *jstr; + if (!type_filter) { memory->create(type_filter, ntypes + 1, ntypes + 1, "fix/pair/tracker:type_filter"); for (i = 0; i <= ntypes; i++) { - for (j = 0; j <= ntypes; j++) { type_filter[i][j] = 0; } + for (j = 0; j <= ntypes; j++) type_filter[i][j] = 0; } } diff --git a/src/MOLFILE/reader_molfile.cpp b/src/MOLFILE/reader_molfile.cpp index e04b615018..57c8ad3a6e 100644 --- a/src/MOLFILE/reader_molfile.cpp +++ b/src/MOLFILE/reader_molfile.cpp @@ -85,13 +85,7 @@ void ReaderMolfile::settings(int narg, char **arg) if (mf->find_plugin(path)!= MFI::E_MATCH) error->one(FLERR,"No suitable molfile plugin found"); - if (screen) - fprintf(screen,"Dump reader uses molfile plugin: %s\n", - mf->get_plugin_name()); - - if (logfile) - fprintf(logfile,"Dump reader uses molfile plugin: %s\n", - mf->get_plugin_name()); + utils::logmesg(lmp,"Dump reader uses molfile plugin: {}\n", mf->get_plugin_name()); } } @@ -100,30 +94,22 @@ void ReaderMolfile::settings(int narg, char **arg) only called by proc 0 ------------------------------------------------------------------------- */ -void ReaderMolfile::open_file(const char *file) +void ReaderMolfile::open_file(const std::string &file) { int rv; - char str[1024]; - + // close open file, if needed. if (mf->is_open()) mf->close(); - rv = mf->open(file,&natoms); + rv = mf->open(file.c_str(),&natoms); - if (rv != MFI::E_NONE) { - snprintf(str,1024,"Cannot open file %s",file); - error->one(FLERR,str); - } + if (rv != MFI::E_NONE) error->one(FLERR,"Cannot open file {}", file); - if (natoms < 1) { - snprintf(str,1024,"No atoms in file %s",file); - error->one(FLERR,str); - } + if (natoms < 1) error->one(FLERR,"No atoms in file {}", file); memory->create(types,natoms,"reader:types"); memory->create(coords,3*natoms,"reader:coords"); - if (mf->has_vels()) - memory->create(vels,3*natoms,"reader:vels"); + if (mf->has_vels()) memory->create(vels,3*natoms,"reader:vels"); // initialize system properties, if available if (mf->has_props()) { diff --git a/src/MOLFILE/reader_molfile.h b/src/MOLFILE/reader_molfile.h index 1f7fead9c0..4330eaf4eb 100644 --- a/src/MOLFILE/reader_molfile.h +++ b/src/MOLFILE/reader_molfile.h @@ -39,7 +39,7 @@ class ReaderMolfile : public Reader { int &, int &, int &); virtual void read_atoms(int, int, double **); - virtual void open_file(const char *); + virtual void open_file(const std::string &); virtual void close_file(); private: From 4b86dbd200e08fb8351c9fda7aa2ddce3384d2be Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Thu, 7 Oct 2021 17:11:33 -0400 Subject: [PATCH 122/372] add cmake configuration file for visual studio --- cmake/CMakeSettings.json | 55 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 55 insertions(+) create mode 100644 cmake/CMakeSettings.json diff --git a/cmake/CMakeSettings.json b/cmake/CMakeSettings.json new file mode 100644 index 0000000000..dada2f6752 --- /dev/null +++ b/cmake/CMakeSettings.json @@ -0,0 +1,55 @@ +{ + "configurations": [ + { + "name": "x64-Debug-MSVC", + "generator": "Ninja", + "configurationType": "Debug", + "buildRoot": "${workspaceRoot}\\build\\${name}", + "installRoot": "${workspaceRoot}\\install\\${name}", + "cmakeCommandArgs": "-S ${workspaceRoot}\\cmake -C ${workspaceRoot}\\cmake\\presets\\windows.cmake", + "buildCommandArgs": "", + "ctestCommandArgs": "", + "inheritEnvironments": [ "msvc_x64_x64" ], + "variables": [ + { + "name": "BUILD_SHARED_LIBS", + "value": "True", + "type": "BOOL" + }, + { + "name": "BUILD_TOOLS", + "value": "True", + "type": "BOOL" + }, + { + "name": "LAMMPS_EXCEPTIONS", + "value": "True", + "type": "BOOL" + } + ] + }, + { + "name": "x64-Debug-Clang", + "generator": "Ninja", + "configurationType": "Debug", + "buildRoot": "${workspaceRoot}\\build\\${name}", + "installRoot": "${workspaceRoot}\\install\\${name}", + "cmakeCommandArgs": "-S ${workspaceRoot}\\cmake -C ${workspaceRoot}\\cmake\\presets\\windows.cmake", + "buildCommandArgs": "", + "ctestCommandArgs": "", + "inheritEnvironments": [ "clang_cl_x64" ], + "variables": [ + { + "name": "BUILD_TOOLS", + "value": "True", + "type": "BOOL" + }, + { + "name": "LAMMPS_EXCEPTIONS", + "value": "True", + "type": "BOOL" + } + ] + } + ] +} \ No newline at end of file From 30c146457ae571892bbe44cd15b97cbf2bce4fb8 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Thu, 7 Oct 2021 20:29:01 -0400 Subject: [PATCH 123/372] improve messages --- src/REAXFF/fix_reaxff_species.cpp | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/src/REAXFF/fix_reaxff_species.cpp b/src/REAXFF/fix_reaxff_species.cpp index e3250be56d..d4da856b2a 100644 --- a/src/REAXFF/fix_reaxff_species.cpp +++ b/src/REAXFF/fix_reaxff_species.cpp @@ -95,9 +95,9 @@ FixReaxFFSpecies::FixReaxFFSpecies(LAMMPS *lmp, int narg, char **arg) : rene_flag = 1; } - if (me == 0 && rene_flag) { - error->warning(FLERR,"Resetting reneighboring criteria for fix reaxff/species"); - } + if (me == 0 && rene_flag) + error->warning(FLERR,"Resetting reneighboring criteria to 'delay {} every {} check no' " + "for fix reaxff/species",neighbor->delay, neighbor->every); if (me == 0) { char *suffix = strrchr(arg[6],'.'); @@ -115,8 +115,7 @@ FixReaxFFSpecies::FixReaxFFSpecies(LAMMPS *lmp, int narg, char **arg) : } else fp = fopen(arg[6],"w"); if (!fp) - error->one(FLERR,fmt::format("Cannot open fix reaxff/species file {}: " - "{}",arg[6],utils::getsyserror())); + error->one(FLERR,"Cannot open fix reaxff/species file {}: {}",arg[6],utils::getsyserror())); } x0 = nullptr; From b5061b69bedd3a6687f40460f0d09089e7204648 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Thu, 7 Oct 2021 20:45:27 -0400 Subject: [PATCH 124/372] add warning to fix reaxff/species to explain the impact of large averaging --- doc/src/fix_reaxff_species.rst | 11 +++++++++++ src/REAXFF/fix_reaxff_species.cpp | 2 +- src/RIGID/fix_rigid_small.cpp | 3 +-- 3 files changed, 13 insertions(+), 3 deletions(-) diff --git a/doc/src/fix_reaxff_species.rst b/doc/src/fix_reaxff_species.rst index 434e18d8a5..a652777ba7 100644 --- a/doc/src/fix_reaxff_species.rst +++ b/doc/src/fix_reaxff_species.rst @@ -56,6 +56,17 @@ number of molecules of each species. In this context, "species" means a unique molecule. The chemical formula of each species is given in the first line. +.. warning:: + + In order to compute averaged data, it is required that there are no + neighbor list rebuilds between the *Nfreq* steps. For that reason, fix + *reaxff/species* may change your neighbor list settings. There will + be a warning message showing the new settings. Having an *Nfreq* + setting that is larger than what is required for correct computation + of the ReaxFF force field interactions can thus lead to incorrect + results. For typical ReaxFF calculations a value of 100 is already + quite large. + If the filename ends with ".gz", the output file is written in gzipped format. A gzipped dump file will be about 3x smaller than the text version, but will also take longer to write. diff --git a/src/REAXFF/fix_reaxff_species.cpp b/src/REAXFF/fix_reaxff_species.cpp index d4da856b2a..c48fcd5704 100644 --- a/src/REAXFF/fix_reaxff_species.cpp +++ b/src/REAXFF/fix_reaxff_species.cpp @@ -115,7 +115,7 @@ FixReaxFFSpecies::FixReaxFFSpecies(LAMMPS *lmp, int narg, char **arg) : } else fp = fopen(arg[6],"w"); if (!fp) - error->one(FLERR,"Cannot open fix reaxff/species file {}: {}",arg[6],utils::getsyserror())); + error->one(FLERR,"Cannot open fix reaxff/species file {}: {}",arg[6],utils::getsyserror()); } x0 = nullptr; diff --git a/src/RIGID/fix_rigid_small.cpp b/src/RIGID/fix_rigid_small.cpp index 7216c56c83..3dbdb96568 100644 --- a/src/RIGID/fix_rigid_small.cpp +++ b/src/RIGID/fix_rigid_small.cpp @@ -2563,8 +2563,7 @@ void FixRigidSmall::write_restart_file(const char *file) auto outfile = std::string(file) + ".rigid"; fp = fopen(outfile.c_str(),"w"); if (fp == nullptr) - error->one(FLERR,"Cannot open fix rigid restart file {}: {}", - outfile,utils::getsyserror()); + error->one(FLERR,"Cannot open fix rigid restart file {}: {}",outfile,utils::getsyserror()); fmt::print(fp,"# fix rigid mass, COM, inertia tensor info for " "{} bodies on timestep {}\n\n",nbody,update->ntimestep); From 392ebf7db765ca008754570609b089689a17f1db Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Fri, 8 Oct 2021 11:34:21 -0400 Subject: [PATCH 125/372] revise automatic seed generation --- src/DPD-MESO/pair_mdpd.cpp | 7 +++++-- src/DPD-MESO/pair_tdpd.cpp | 7 +++++-- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/src/DPD-MESO/pair_mdpd.cpp b/src/DPD-MESO/pair_mdpd.cpp index bdadb8fb23..53994800d0 100644 --- a/src/DPD-MESO/pair_mdpd.cpp +++ b/src/DPD-MESO/pair_mdpd.cpp @@ -217,9 +217,12 @@ void PairMDPD::settings(int narg, char **arg) seed = utils::inumeric(FLERR,arg[2],false,lmp); // initialize Marsaglia RNG with processor-unique seed + // create a positive seed based on the system clock, if requested. - if (seed <= 0) - seed = (int) (platform::walltime() * 1073741824.0); + if (seed <= 0) { + constexpr double LARGE_NUM = 2<<30; + seed = int(fmod(platform::walltime() * LARGE_NUM, LARGE_NUM)) + 1; + } delete random; random = new RanMars(lmp,(seed + comm->me) % 900000000); diff --git a/src/DPD-MESO/pair_tdpd.cpp b/src/DPD-MESO/pair_tdpd.cpp index 1f48e12f55..70168c0e2a 100644 --- a/src/DPD-MESO/pair_tdpd.cpp +++ b/src/DPD-MESO/pair_tdpd.cpp @@ -239,9 +239,12 @@ void PairTDPD::settings(int narg, char **arg) seed = utils::inumeric(FLERR,arg[2],false,lmp); // initialize Marsaglia RNG with processor-unique seed + // create a positive seed based on the system clock, if requested. - if (seed <= 0) - seed = (int) (platform::walltime() * 1073741824.0); + if (seed <= 0) { + constexpr double LARGE_NUM = 2<<30; + seed = int(fmod(platform::walltime() * LARGE_NUM, LARGE_NUM)) + 1; + } delete random; random = new RanMars(lmp,(seed + comm->me) % 900000000); From cc11fa37b2b3fda3d544c4e0f9422b652ce182ba Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Fri, 8 Oct 2021 11:44:09 -0400 Subject: [PATCH 126/372] whitespace --- src/MISC/fix_pair_tracker.cpp | 2 +- src/MOLFILE/reader_molfile.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/MISC/fix_pair_tracker.cpp b/src/MISC/fix_pair_tracker.cpp index d4b640434e..3616855869 100644 --- a/src/MISC/fix_pair_tracker.cpp +++ b/src/MISC/fix_pair_tracker.cpp @@ -81,7 +81,7 @@ FixPairTracker::FixPairTracker(LAMMPS *lmp, int narg, char **arg) : int ntypes = atom->ntypes; int i, j, itype, jtype; int inlo, inhi, jnlo, jnhi; - + if (!type_filter) { memory->create(type_filter, ntypes + 1, ntypes + 1, "fix/pair/tracker:type_filter"); diff --git a/src/MOLFILE/reader_molfile.cpp b/src/MOLFILE/reader_molfile.cpp index 57c8ad3a6e..5f75ae50f5 100644 --- a/src/MOLFILE/reader_molfile.cpp +++ b/src/MOLFILE/reader_molfile.cpp @@ -97,7 +97,7 @@ void ReaderMolfile::settings(int narg, char **arg) void ReaderMolfile::open_file(const std::string &file) { int rv; - + // close open file, if needed. if (mf->is_open()) mf->close(); From 6e8da80148039e6ba1dfc8fbefebb93ccb38a01c Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Fri, 8 Oct 2021 13:57:09 -0400 Subject: [PATCH 127/372] adjustments for intel compilers on windows --- cmake/CMakeLists.txt | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt index 2e1504f1f0..37975084c8 100644 --- a/cmake/CMakeLists.txt +++ b/cmake/CMakeLists.txt @@ -82,11 +82,22 @@ include(CheckIncludeFileCXX) # set required compiler flags and compiler/CPU arch specific optimizations if((CMAKE_CXX_COMPILER_ID STREQUAL "Intel") OR (CMAKE_CXX_COMPILER_ID STREQUAL "IntelLLVM")) - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -restrict") - if(CMAKE_CXX_COMPILER_VERSION VERSION_EQUAL 17.3 OR CMAKE_CXX_COMPILER_VERSION VERSION_EQUAL 17.4) - set(CMAKE_TUNE_DEFAULT "-xCOMMON-AVX512") + if(CMAKE_SYSTEM_NAME STREQUAL "Windows") + if (CMAKE_CXX_COMPILER_ID STREQUAL "Intel") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /Qrestrict") + endif() + if(CMAKE_CXX_COMPILER_VERSION VERSION_EQUAL 17.3 OR CMAKE_CXX_COMPILER_VERSION VERSION_EQUAL 17.4) + set(CMAKE_TUNE_DEFAULT "/QxCOMMON-AVX512") + else() + set(CMAKE_TUNE_DEFAULT "/QxHost") + endif() else() - set(CMAKE_TUNE_DEFAULT "-xHost") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -restrict") + if(CMAKE_CXX_COMPILER_VERSION VERSION_EQUAL 17.3 OR CMAKE_CXX_COMPILER_VERSION VERSION_EQUAL 17.4) + set(CMAKE_TUNE_DEFAULT "-xCOMMON-AVX512") + else() + set(CMAKE_TUNE_DEFAULT "-xHost") + endif() endif() endif() From 46efae5998e0737e54afc4ff135989c76161fdce Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Fri, 8 Oct 2021 13:58:08 -0400 Subject: [PATCH 128/372] needed for compilation on windows. not really used because of platform::walltime() --- src/STUBS/mpi.cpp | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/STUBS/mpi.cpp b/src/STUBS/mpi.cpp index e5cd50629e..d3823a0297 100644 --- a/src/STUBS/mpi.cpp +++ b/src/STUBS/mpi.cpp @@ -21,7 +21,13 @@ #include #include #include + +#if defined(_WIN32) +#define WIN32_LEAN_AND_MEAN +#include +#else #include +#endif /* data structure for double/int */ From fb137b26bf6a7544cb7b706b447e8561667a115c Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Fri, 8 Oct 2021 13:59:17 -0400 Subject: [PATCH 129/372] silence compiler warnings --- src/platform.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/platform.cpp b/src/platform.cpp index 00636ec703..4db5042e78 100644 --- a/src/platform.cpp +++ b/src/platform.cpp @@ -396,6 +396,10 @@ std::string platform::mpi_info(int &major, int &minor) #if (defined(MPI_VERSION) && (MPI_VERSION > 2)) || defined(MPI_STUBS) static char version[MPI_MAX_LIBRARY_VERSION_STRING]; MPI_Get_library_version(version, &len); + if (len > 80) { + char *ptr = strchr(version + 80, '\n'); + if (ptr) *ptr = '\0'; + } #else constexpr int MAX_VERSION_STRING = 32; static char version[MAX_VERSION_STRING]; @@ -404,10 +408,6 @@ std::string platform::mpi_info(int &major, int &minor) #if defined(MPI_VERSION) MPI_Get_version(&major, &minor); - if (len > 80) { - char *ptr = strchr(version + 80, '\n'); - if (ptr) *ptr = '\0'; - } #else major = 1; minor = 0; From 83bc70bf05b7e0c37f2583904d6617b359b0d838 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Fri, 8 Oct 2021 15:11:16 -0400 Subject: [PATCH 130/372] workaround for classic intel compiler on windows --- src/platform.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/platform.cpp b/src/platform.cpp index 4db5042e78..b057c6415b 100644 --- a/src/platform.cpp +++ b/src/platform.cpp @@ -289,6 +289,9 @@ std::string platform::compiler_info() #elif defined(__PGI) buf = fmt::format("PGI C++ {}.{}", __PGIC__, __PGIC_MINOR__); #elif defined(__INTEL_COMPILER) +#if !defined(__VERSION__) +#define __VERSION__ __INTEL_COMPILER_BUILD_DATE +#endif double version = static_cast(__INTEL_COMPILER) * 0.01; buf = fmt::format("Intel Classic C++ {:.2f}.{} / {}", version, __INTEL_COMPILER_UPDATE, __VERSION__); From ae0fa17132a821c57a5314efe3aa8619dd546c5a Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Fri, 8 Oct 2021 15:33:26 -0400 Subject: [PATCH 131/372] make consistent with include files --- src/STUBS/mpi.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/STUBS/mpi.cpp b/src/STUBS/mpi.cpp index d3823a0297..3f4cc5964f 100644 --- a/src/STUBS/mpi.cpp +++ b/src/STUBS/mpi.cpp @@ -173,7 +173,7 @@ int MPI_Finalize() double MPI_Wtime() { -#if defined(_MSC_VER) +#if defined(_WIN32) double t; t = GetTickCount(); From 09bcfc2116c84a31f8a5cf436e455d83b4b08647 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Fri, 8 Oct 2021 15:33:49 -0400 Subject: [PATCH 132/372] document visual studio support --- doc/src/Build_windows.rst | 44 ++++++++++++++++++++++++++++++++------- 1 file changed, 37 insertions(+), 7 deletions(-) diff --git a/doc/src/Build_windows.rst b/doc/src/Build_windows.rst index 3a56f29d09..fa2296d302 100644 --- a/doc/src/Build_windows.rst +++ b/doc/src/Build_windows.rst @@ -4,6 +4,7 @@ Notes for building LAMMPS on Windows * :ref:`General remarks ` * :ref:`Running Linux on Windows ` * :ref:`Using GNU GCC ported to Windows ` +* :ref:`Using Visual Studio ` * :ref:`Using a cross-compiler ` ---------- @@ -31,13 +32,13 @@ pre-compiled Windows binary packages are sufficient for your needs. If it is necessary for you to compile LAMMPS on a Windows machine (e.g. because it is your main desktop), please also consider using a virtual machine software and compile and run LAMMPS in a Linux virtual -machine, or - if you have a sufficiently up-to-date Windows 10 -installation - consider using the Windows subsystem for Linux. This -optional Windows feature allows you to run the bash shell from Ubuntu -from within Windows and from there on, you can pretty much use that -shell like you are running on an Ubuntu Linux machine (e.g. installing -software via apt-get and more). For more details on that, please see -:doc:`this tutorial `. +machine, or - if you have a sufficiently up-to-date Windows 10 or +Windows 11 installation - consider using the Windows subsystem for +Linux. This optional Windows feature allows you to run the bash shell +from Ubuntu from within Windows and from there on, you can pretty much +use that shell like you are running on an Ubuntu Linux machine +(e.g. installing software via apt-get and more). For more details on +that, please see :doc:`this tutorial `. .. _gnu: @@ -67,6 +68,35 @@ requiring changes to the LAMMPS source code, or figure out corrections yourself, please report them on the lammps-users mailing list, or file them as an issue or pull request on the LAMMPS GitHub project. +.. _msvc: + +Using Microsoft Visual Studio +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +Following the integration of the :doc:`platform namespace +` into the LAMMPS code base, portability of LAMMPS +to be compiled on Windows using Visual Studio has been significantly +improved. This has been tested with Visual Studio 2019 (aka version +16). Not all features and packages in LAMMPS are currently supported +out of the box, but a preset ``cmake/presets/windows.cmake`` is provided +that contains the packages that have been compiled successfully. You +must use the CMake based build procedure, and either use the integrated +CMake support of Visual Studio or use an external CMake installation to +create build files for the Visual Studio build system. Please note that +on launching Visual Studio it will scan the directory tree and likely +miss the correct master ``CMakeLists.txt``. Try to open the +``cmake/CMakeSettings.json`` and use those CMake configurations as a +starting point. It is also possible to configure and compile LAMMPS +from the command line with a CMake binary from `cmake.org `_. + +To support running in parallel you can compile with OpenMP enabled using +the OPENMP package or install Microsoft MPI (including the SDK) and compile +LAMMPS with MPI enabled. + +This is work in progress and you should contact the LAMMPS developers +via GitHub, the forum, or the mailing list, if you have questions or +LAMMPS specific problems. + .. _cross: Using a cross-compiler From dd6e3c1acc734a1879bb09f865e0fa844a00ccf7 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Fri, 8 Oct 2021 20:07:20 -0400 Subject: [PATCH 133/372] avoid variable length array and signed vs. unsigned warnings --- lib/gpu/geryon/ocl_device.h | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/lib/gpu/geryon/ocl_device.h b/lib/gpu/geryon/ocl_device.h index 003b4b3ba7..df53aff5b8 100644 --- a/lib/gpu/geryon/ocl_device.h +++ b/lib/gpu/geryon/ocl_device.h @@ -481,7 +481,7 @@ int UCL_Device::set_platform(int pid) { cl_device_id *subdevice_list = new cl_device_id[num_subdevices]; CL_SAFE_CALL(clCreateSubDevices(device_list[i], props, num_subdevices, subdevice_list, &num_subdevices)); - for (int j=0; j= 3.0) op.has_shuffle_support=true; } + delete[] buffer2; #endif _properties.push_back(op); @@ -836,7 +837,7 @@ int UCL_Device::auto_set_platform(const enum UCL_DEVICE_TYPE type, bool vendor_match=false; bool type_match=false; - int max_cus=0; + unsigned int max_cus=0; int best_platform=0; std::string vendor_upper=vendor; From ba44d6aba2753e288650060a8fb76d7f190d553c Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sat, 9 Oct 2021 10:20:47 -0400 Subject: [PATCH 134/372] must set define to "see" the lammps_open() library function --- lib/qmmm/pwqmmm.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/lib/qmmm/pwqmmm.c b/lib/qmmm/pwqmmm.c index 99b2aed513..a00000f655 100644 --- a/lib/qmmm/pwqmmm.c +++ b/lib/qmmm/pwqmmm.c @@ -26,6 +26,8 @@ #error "Unsupported QE coupling API. Want API version 1." #endif +// we need to pass an MPI communicator to the LAMMPS library interface +#define LAMMPS_LIB_MPI #include "library.h" static const char delim[] = " \t\n\r"; @@ -67,8 +69,8 @@ int main(int argc, char **argv) #if 1 // AK: temporary hack if ( qmmmcfg.nmm != 2 ) { if (me == 0) { - fprintf( stderr, "\n Error in the number of processors for MM code" - "\n for the time being only two processor are allowed\n"); + fprintf( stderr, "\n Error in the number of processors for the MM code.\n" + " Currently only requesting 2 MM processors is allowed.\n"); } MPI_Finalize(); return -1; From 2e122ff62b3b243b7519f617cfde77445d5eaa18 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sat, 9 Oct 2021 19:46:52 -0400 Subject: [PATCH 135/372] Add GitHub action compiling LAMMPS with Visual C++ --- .github/workflows/compile-msvc.yml | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 .github/workflows/compile-msvc.yml diff --git a/.github/workflows/compile-msvc.yml b/.github/workflows/compile-msvc.yml new file mode 100644 index 0000000000..68ddafb887 --- /dev/null +++ b/.github/workflows/compile-msvc.yml @@ -0,0 +1,27 @@ +# GitHub action to build LAMMPS on Windows with Visual C++ +name: "Native Windows Compilation" + +on: + push: + branches: [platform-namespace] + +jobs: + build: + name: Windows Compilation Test + if: ${{ github.repository == 'akohlmey/lammps' }} + runs-on: windows-latest + + steps: + - name: Checkout repository + uses: actions/checkout@v2 + with: + fetch-depth: 2 + + - name: Building LAMMPS via CMake + shell: bash + run: | + cmake -C ../cmake/presets/windowws.cmake \ + -S cmake -B build \ + -D BUILD_SHARED_LIBS=on \ + -D LAMMPS_EXCEPTIONS=on + cmake --build build --config Release From 5ad7e5a81586dbfb38ece0a376d36bef6aa0c83f Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sat, 9 Oct 2021 19:55:30 -0400 Subject: [PATCH 136/372] correct path to preset file and do two quick runs for checking the binary --- .github/workflows/compile-msvc.yml | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/.github/workflows/compile-msvc.yml b/.github/workflows/compile-msvc.yml index 68ddafb887..8e2e644690 100644 --- a/.github/workflows/compile-msvc.yml +++ b/.github/workflows/compile-msvc.yml @@ -20,8 +20,14 @@ jobs: - name: Building LAMMPS via CMake shell: bash run: | - cmake -C ../cmake/presets/windowws.cmake \ + cmake -C cmake/presets/windows.cmake \ -S cmake -B build \ -D BUILD_SHARED_LIBS=on \ -D LAMMPS_EXCEPTIONS=on cmake --build build --config Release + + - name: Run LAMMPS executable + shell: bash + run: | + ./build/Release/lmp.exe -h + ./build/Release/lmp.exe -in bench/in.lj From c3629b5f0147046004f74e898baf14cd531c8c22 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sat, 9 Oct 2021 20:27:47 -0400 Subject: [PATCH 137/372] MS VC++ needs to have STUBS with PUBLIC linkage --- cmake/CMakeLists.txt | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt index 37975084c8..95d454a25f 100644 --- a/cmake/CMakeLists.txt +++ b/cmake/CMakeLists.txt @@ -298,7 +298,11 @@ else() set_target_properties(mpi_stubs PROPERTIES OUTPUT_NAME lammps_mpi_stubs${LAMMPS_MACHINE}) target_include_directories(mpi_stubs PUBLIC $) if(BUILD_SHARED_LIBS) - target_link_libraries(lammps PRIVATE mpi_stubs) + if(MSVC) + target_link_libraries(lammps PUBLIC mpi_stubs) + else() + target_link_libraries(lammps PRIVATE mpi_stubs) + endif() target_include_directories(lammps INTERFACE $) target_compile_definitions(lammps INTERFACE $) else() From 1bbed2579b904c06ea0be611b3faf18b16abe031 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sat, 9 Oct 2021 20:32:39 -0400 Subject: [PATCH 138/372] try alternate approach to make MSVC++ happy linking STUBS --- cmake/CMakeLists.txt | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt index 95d454a25f..fc427acdc9 100644 --- a/cmake/CMakeLists.txt +++ b/cmake/CMakeLists.txt @@ -298,11 +298,12 @@ else() set_target_properties(mpi_stubs PROPERTIES OUTPUT_NAME lammps_mpi_stubs${LAMMPS_MACHINE}) target_include_directories(mpi_stubs PUBLIC $) if(BUILD_SHARED_LIBS) + target_link_libraries(lammps PRIVATE mpi_stubs) if(MSVC) - target_link_libraries(lammps PUBLIC mpi_stubs) - else() - target_link_libraries(lammps PRIVATE mpi_stubs) - endif() + target_link_libraries(lmp PRIVATE mpi_stubs) + target_include_directories(lmp INTERFACE $) + target_compile_definitions(lmp INTERFACE $) + endif(MSVC) target_include_directories(lammps INTERFACE $) target_compile_definitions(lammps INTERFACE $) else() From 64b27fa28e9a369cfbccefb443602d3fdb028b65 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sat, 9 Oct 2021 20:54:18 -0400 Subject: [PATCH 139/372] only run windows compilation action on master branch in lammps repo --- .github/workflows/compile-msvc.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/compile-msvc.yml b/.github/workflows/compile-msvc.yml index 8e2e644690..307dc81fe6 100644 --- a/.github/workflows/compile-msvc.yml +++ b/.github/workflows/compile-msvc.yml @@ -3,12 +3,12 @@ name: "Native Windows Compilation" on: push: - branches: [platform-namespace] + branches: [master] jobs: build: name: Windows Compilation Test - if: ${{ github.repository == 'akohlmey/lammps' }} + if: ${{ github.repository == 'lammps/lammps' }} runs-on: windows-latest steps: From eb6b73c7520a3ff23476f602d5de9eddd433d716 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sun, 10 Oct 2021 04:39:16 -0400 Subject: [PATCH 140/372] update documentation to refer to the new branch names (develop, release) --- doc/src/Build_diskspace.rst | 2 +- doc/src/Build_manual.rst | 15 ++-- doc/src/Howto_github.rst | 133 ++++++++++++++++++++--------------- doc/src/Install_git.rst | 47 +++++++++---- doc/src/Intro_opensource.rst | 2 +- doc/src/Manual_version.rst | 2 +- 6 files changed, 123 insertions(+), 78 deletions(-) diff --git a/doc/src/Build_diskspace.rst b/doc/src/Build_diskspace.rst index 48ab21fd70..80d83956cb 100644 --- a/doc/src/Build_diskspace.rst +++ b/doc/src/Build_diskspace.rst @@ -14,7 +14,7 @@ environments with restricted disk space capacity it may be needed to reduce the storage requirements. Here are some suggestions: - Create a so-called shallow repository by cloning only the last commit - instead of the full project history by using ``git clone git@github.com:lammps/lammps --depth=1 --branch=master``. + instead of the full project history by using ``git clone git@github.com:lammps/lammps --depth=1 --branch=develop``. This reduces the downloaded size to about half. With ``--depth=1`` it is not possible to check out different versions/branches of LAMMPS, using ``--depth=1000`` will make multiple recent versions available at little extra storage needs (the entire git history had nearly 30,000 commits in fall 2021). diff --git a/doc/src/Build_manual.rst b/doc/src/Build_manual.rst index d12c6dc498..5dbefd8b6e 100644 --- a/doc/src/Build_manual.rst +++ b/doc/src/Build_manual.rst @@ -33,12 +33,15 @@ various tools and files. Some of them have to be installed (see below). For the rest the build process will attempt to download and install them into a python virtual environment and local folders. -A current version of the manual (latest patch release, aka unstable -branch) is is available online at: -`https://docs.lammps.org/Manual.html `_. -A version of the manual corresponding to the ongoing development (aka master branch) -is available online at: `https://docs.lammps.org/latest/ -`_ +A current version of the manual (latest patch release, that is the state +of the *release* branch) is is available online at: +`https://docs.lammps.org/ `_. +A version of the manual corresponding to the ongoing development (that is +the state of the *develop* branch) is available online at: +`https://docs.lammps.org/latest/ `_ +A version of the manual corresponding to the latest stable LAMMPS release +(that is the state of the *stable* branch) is available online at: +`https://docs.lammps.org/stable/ `_ Build using GNU make -------------------- diff --git a/doc/src/Howto_github.rst b/doc/src/Howto_github.rst index 0bb931fccd..278b9e4bfd 100644 --- a/doc/src/Howto_github.rst +++ b/doc/src/Howto_github.rst @@ -7,11 +7,11 @@ LAMMPS GitHub tutorial This document describes the process of how to use GitHub to integrate changes or additions you have made to LAMMPS into the official LAMMPS -distribution. It uses the process of updating this very tutorial as -an example to describe the individual steps and options. You need to -be familiar with git and you may want to have a look at the -`git book `_ to reacquaint yourself with some -of the more advanced git features used below. +distribution. It uses the process of updating this very tutorial as an +example to describe the individual steps and options. You need to be +familiar with git and you may want to have a look at the `git book +`_ to familiarize yourself with some of the +more advanced git features used below. As of fall 2016, submitting contributions to LAMMPS via pull requests on GitHub is the preferred option for integrating contributed features @@ -37,15 +37,15 @@ username or e-mail address and password. **Forking the repository** To get changes into LAMMPS, you need to first fork the `lammps/lammps` -repository on GitHub. At the time of writing, *master* is the preferred +repository on GitHub. At the time of writing, *develop* is the preferred target branch. Thus go to `LAMMPS on GitHub `_ -and make sure branch is set to "master", as shown in the figure below. +and make sure branch is set to "develop", as shown in the figure below. .. image:: JPG/tutorial_branch.png :align: center -If it is not, use the button to change it to *master*\ . Once it is, use the -fork button to create a fork. +If it is not, use the button to change it to *develop*. Once it is, use +the fork button to create a fork. .. image:: JPG/tutorial_fork.png :align: center @@ -64,11 +64,12 @@ LAMMPS development. **Adding changes to your own fork** Additions to the upstream version of LAMMPS are handled using *feature -branches*\ . For every new feature, a so-called feature branch is +branches*. For every new feature, a so-called feature branch is created, which contains only those modification relevant to one specific feature. For example, adding a single fix would consist of creating a branch with only the fix header and source file and nothing else. It is -explained in more detail here: `feature branch workflow `_. +explained in more detail here: `feature branch workflow +`_. **Feature branches** @@ -94,8 +95,8 @@ The above command copies ("clones") the git repository to your local machine to a directory with the name you chose. If none is given, it will default to "lammps". Typical names are "mylammps" or something similar. -You can use this local clone to make changes and -test them without interfering with the repository on GitHub. +You can use this local clone to make changes and test them without +interfering with the repository on GitHub. To pull changes from upstream into this copy, you can go to the directory and use git pull: @@ -103,28 +104,45 @@ and use git pull: .. code-block:: bash $ cd mylammps - $ git checkout master - $ git pull https://github.com/lammps/lammps + $ git checkout develop + $ git pull https://github.com/lammps/lammps develop You can also add this URL as a remote: .. code-block:: bash - $ git remote add lammps_upstream https://www.github.com/lammps/lammps + $ git remote add upstream https://www.github.com/lammps/lammps -At this point, you typically make a feature branch from the updated master +From then on you can update your upstream branches with: + +.. code-block:: bash + + $ git fetch upstream + +and then refer to the upstream repository branches with +`upstream/develop` or `upstream/release` and so on. + +At this point, you typically make a feature branch from the updated branch for the feature you want to work on. This tutorial contains the workflow that updated this tutorial, and hence we will call the branch "github-tutorial-update": .. code-block:: bash - $ git checkout -b github-tutorial-update master + $ git fetch upstream + $ git checkout -b github-tutorial-update upstream/develop Now that we have changed branches, we can make our changes to our local repository. Just remember that if you want to start working on another, unrelated feature, you should switch branches! +.. note:: + + Committing changes to the *develop*, *release*, or *stable* branches + is strongly discouraged. While it may be convenient initially, it + will create more work in the long run. Various texts and tutorials + on using git effectively discuss the motivation for this. + **After changes are made** After everything is done, add the files to the branch and commit them: @@ -287,28 +305,32 @@ After each push, the automated checks are run again. LAMMPS developers may add labels to your pull request to assign it to categories (mostly for bookkeeping purposes), but a few of them are -important: needs_work, work_in_progress, test-for-regression, and -full-regression-test. The first two indicate, that your pull request -is not considered to be complete. With "needs_work" the burden is on -exclusively on you; while "work_in_progress" can also mean, that a -LAMMPS developer may want to add changes. Please watch the comments -to the pull requests. The two "test" labels are used to trigger -extended tests before the code is merged. This is sometimes done by -LAMMPS developers, if they suspect that there may be some subtle -side effects from your changes. It is not done by default, because -those tests are very time consuming. +important: *needs_work*, *work_in_progress*, *run_tests*, +*test_for_regression*, and *ready_for_merge*. The first two indicate, +that your pull request is not considered to be complete. With +"needs_work" the burden is on exclusively on you; while +"work_in_progress" can also mean, that a LAMMPS developer may want to +add changes. Please watch the comments to the pull requests. The two +"test" labels are used to trigger extended tests before the code is +merged. This is sometimes done by LAMMPS developers, if they suspect +that there may be some subtle side effects from your changes. It is not +done by default, because those tests are very time consuming. The +*ready_for_merge* label is usually attached when the LAMMPS developer +assigned to the pull request considers this request complete and to +trigger a final full test evaluation. **Reviews** -As of Summer 2018, a pull request needs at least 1 approving review -from a LAMMPS developer with write access to the repository. -In case your changes touch code that certain developers are associated -with, they are auto-requested by the GitHub software. Those associations -are set in the file -`.github/CODEOWNERS `_ -Thus if you want to be automatically notified to review when anybody -changes files or packages, that you have contributed to LAMMPS, you can -add suitable patterns to that file, or a LAMMPS developer may add you. +As of Fall 2021, a pull request needs to pass all automatic tests and at +least 1 approving review from a LAMMPS developer with write access to +the repository before it is eligible for merging. In case your changes +touch code that certain developers are associated with, they are +auto-requested by the GitHub software. Those associations are set in +the file `.github/CODEOWNERS +`_ Thus +if you want to be automatically notified to review when anybody changes +files or packages, that **you** have contributed to LAMMPS, you can add +suitable patterns to that file, or a LAMMPS developer may add you. Otherwise, you can also manually request reviews from specific developers, or LAMMPS developers - in their assessment of your pull request - may @@ -329,7 +351,7 @@ LAMMPS developer (including him/herself) or c) Axel Kohlmeyer (akohlmey). After the review, the developer can choose to implement changes directly or suggest them to you. * Case c) means that the pull request has been assigned to the developer - overseeing the merging of pull requests into the master branch. + overseeing the merging of pull requests into the *develop* branch. In this case, Axel assigned the tutorial to Steve: @@ -351,11 +373,11 @@ Sometimes, however, you might not feel comfortable having other people push changes into your own branch, or maybe the maintainers are not sure their idea was the right one. In such a case, they can make changes, reassign you as the assignee, and file a "reverse pull request", i.e. -file a pull request in your GitHub repository to include changes in the -branch, that you have submitted as a pull request yourself. In that -case, you can choose to merge their changes back into your branch, -possibly make additional changes or corrections and proceed from there. -It looks something like this: +file a pull request in **your** forked GitHub repository to include +changes in the branch, that you have submitted as a pull request +yourself. In that case, you can choose to merge their changes back into +your branch, possibly make additional changes or corrections and proceed +from there. It looks something like this: .. image:: JPG/tutorial_reverse_pull_request.png :align: center @@ -419,7 +441,7 @@ This merge also shows up on the lammps GitHub page: **After a merge** -When everything is fine, the feature branch is merged into the master branch: +When everything is fine, the feature branch is merged into the *develop* branch: .. image:: JPG/tutorial_merged.png :align: center @@ -433,8 +455,8 @@ branch! .. code-block:: bash - $ git checkout master - $ git pull master + $ git checkout develop + $ git pull https://github.com/lammps/lammps develop $ git branch -d github-tutorial-update If you do not pull first, it is not really a problem but git will warn @@ -442,6 +464,7 @@ you at the next statement that you are deleting a local branch that was not yet fully merged into HEAD. This is because git does not yet know your branch just got merged into LAMMPS upstream. If you first delete and then pull, everything should still be fine. +You can display all branches that are fully merged by: Finally, if you delete the branch locally, you might want to push this to your remote(s) as well: @@ -453,14 +476,14 @@ to your remote(s) as well: **Recent changes in the workflow** Some changes to the workflow are not captured in this tutorial. For -example, in addition to the master branch, to which all new features -should be submitted, there is now also an "unstable" and a "stable" -branch; these have the same content as "master", but are only updated -after a patch release or stable release was made. -Furthermore, the naming of the patches now follow the pattern -"patch_" to simplify comparisons between releases. -Finally, all patches and submissions are subject to automatic testing -and code checks to make sure they at the very least compile. +example, in addition to the *develop* branch, to which all new features +should be submitted, there is also a *release* and a *stable* branch; +these have the same content as *develop*, but are only updated after a +patch release or stable release was made. Furthermore, the naming of +the patches now follow the pattern "patch_" to +simplify comparisons between releases. Finally, all patches and +submissions are subject to automatic testing and code checks to make +sure they at the very least compile. A discussion of the LAMMPS developer GitHub workflow can be found in the file -`doc/github-development-workflow.md `_ +`doc/github-development-workflow.md `_ diff --git a/doc/src/Install_git.rst b/doc/src/Install_git.rst index f62bad6847..4e7db77873 100644 --- a/doc/src/Install_git.rst +++ b/doc/src/Install_git.rst @@ -9,7 +9,8 @@ has several advantages: command. * You can create your own development branches to add code to LAMMPS. * You can submit your new features back to GitHub for inclusion in - LAMMPS. + LAMMPS. For that you should first create your own :doc:`fork on + GitHub `. You must have `git `_ installed on your system to use the commands explained below to communicate with the git servers on @@ -20,35 +21,53 @@ provides `limited support for subversion clients `_. As of October 2016, the official home of public LAMMPS development is on GitHub. The previously advertised LAMMPS git repositories on - git.lammps.org and bitbucket.org are now deprecated or offline. + git.lammps.org and bitbucket.org are now offline or deprecated. .. _git: https://git-scm.com .. _svn: https://help.github.com/en/github/importing-your-projects-to-github/working-with-subversion-on-github -You can follow LAMMPS development on 3 different git branches: +You can follow the LAMMPS development on 3 different git branches: -* **stable** : this branch is updated with every stable release -* **unstable** : this branch is updated with every patch release -* **master** : this branch continuously follows ongoing development +* **stable** : this branch is updated with every stable release; + updates are always "fast forward" merges from *develop* +* **release** : this branch is updated with every patch release; + updates are always "fast forward" merges from *develop* +* **develop** : this branch follows the ongoing development and + is updated with every merge commit of a pull request To access the git repositories on your box, use the clone command to create a local copy of the LAMMPS repository with a command like: .. code-block:: bash - $ git clone -b unstable https://github.com/lammps/lammps.git mylammps + $ git clone -b release https://github.com/lammps/lammps.git mylammps where "mylammps" is the name of the directory you wish to create on -your machine and "unstable" is one of the 3 branches listed above. +your machine and "release" is one of the 3 branches listed above. (Note that you actually download all 3 branches; you can switch between them at any time using "git checkout ".) +.. note:: + + The complete git history of the LAMMPS project is quite large because + it contains the entire commit history of the project since fall 2006, + which includes the time when LAMMPS was managed with subversion. This + also includes commits that have added and removed some large files + (mostly by accident). If you do not need access to the entire commit + history, you can speed up the "cloning" process and reduce local disk + space requirements by using the *--depth* git command line flag thus + create a "shallow clone" of the repository that contains only a + subset of the git history. Using a depth of 1000 is usually sufficient + to include the head commits of the *develop* and the *release* branches. + To include the head commit of the *stable* branch you may need a depth + of up to 10000. + Once the command completes, your directory will contain the same files as if you unpacked a current LAMMPS tarball, with the exception, that the HTML documentation files are not included. They can be fetched from the LAMMPS website by typing ``make fetch`` in the doc directory. -Or they can be generated from the content provided in doc/src by -typing ``make html`` from the doc directory. +Or they can be generated from the content provided in ``doc/src`` by +typing ``make html`` from the ``doc`` directory. After initial cloning, as bug fixes and new features are added to LAMMPS you can stay up-to-date by typing the following git commands @@ -56,9 +75,9 @@ from within the "mylammps" directory: .. code-block:: bash - $ git checkout unstable # not needed if you always stay in this branch - $ git checkout stable # use one of these 3 checkout commands - $ git checkout master # to choose the branch to follow + $ git checkout release # not needed if you always stay in this branch + $ git checkout stable # use one of these 3 checkout commands + $ git checkout develop # to choose the branch to follow $ git pull Doing a "pull" will not change any files you have added to the LAMMPS @@ -81,7 +100,7 @@ Stable versions and what tagID to use for a particular stable version are discussed on `this page `_. Note that this command will print some warnings, because in order to get back to the latest revision and to be able to update with ``git pull`` -again, you will need to do ``git checkout unstable`` (or +again, you will need to do ``git checkout release`` (or check out any other desired branch) first. Once you have updated your local files with a ``git pull`` (or ``git diff --git a/doc/src/Intro_opensource.rst b/doc/src/Intro_opensource.rst index fa857e5014..a1baaf5185 100644 --- a/doc/src/Intro_opensource.rst +++ b/doc/src/Intro_opensource.rst @@ -19,7 +19,7 @@ software and open-source distribution, see `www.gnu.org `_ or `www.opensource.org `_. The legal text of the GPL as it applies to LAMMPS is in the LICENSE file included in the LAMMPS distribution. -.. _gpl: https://github.com/lammps/lammps/blob/master/LICENSE +.. _gpl: https://github.com/lammps/lammps/blob/develop/LICENSE .. _lgpl: https://www.gnu.org/licenses/old-licenses/lgpl-2.1.html diff --git a/doc/src/Manual_version.rst b/doc/src/Manual_version.rst index ae9bd556c4..b705ce8c4a 100644 --- a/doc/src/Manual_version.rst +++ b/doc/src/Manual_version.rst @@ -7,7 +7,7 @@ correctly and reliably at all times. You can follow its development in a public `git repository on GitHub `_. Whenever we fix a bug or update or add a feature, it will be merged into -the `master` branch of the git repository. When a sufficient number of +the *develop* branch of the git repository. When a sufficient number of changes have accumulated *and* the software passes a set of automated tests, we release it in the next *patch* release, which are made every few weeks. Info on patch releases are on `this website page From 0c57267a85dd32f222b2be7bbcf7574e8710c664 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sun, 10 Oct 2021 04:44:45 -0400 Subject: [PATCH 141/372] update branch names --- doc/github-development-workflow.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/doc/github-development-workflow.md b/doc/github-development-workflow.md index c0e35daf3f..1c0eddedcf 100644 --- a/doc/github-development-workflow.md +++ b/doc/github-development-workflow.md @@ -33,9 +33,9 @@ when necessary. ## Pull Requests ALL changes to the LAMMPS code and documentation, however trivial, MUST -be submitted as a pull request to GitHub. All changes to the "master" +be submitted as a pull request to GitHub. All changes to the "develop" branch must be made exclusively through merging pull requests. The -"unstable" and "stable" branches, respectively are only to be updated +"release" and "stable" branches, respectively are only to be updated upon patch or stable releases with fast-forward merges based on the associated tags. Pull requests may also be submitted to (long-running) feature branches created by LAMMPS developers inside the LAMMPS project, @@ -123,16 +123,16 @@ and thus were this comment should be placed. LAMMPS uses a continuous release development model with incremental changes, i.e. significant effort is made - including automated pre-merge -testing - that the code in the branch "master" does not get easily +testing - that the code in the branch "develop" does not get easily broken. These tests are run after every update to a pull request. More extensive and time consuming tests (including regression testing) are -performed after code is merged to the "master" branch. There are patch +performed after code is merged to the "develop" branch. There are patch releases of LAMMPS every 3-5 weeks at a point, when the LAMMPS developers feel, that a sufficient amount of changes have happened, and the post-merge testing has been successful. These patch releases are -marked with a `patch_` tag and the "unstable" branch +marked with a `patch_` tag and the "release" branch follows only these versions (and thus is always supposed to be of -production quality, unlike "master", which may be temporary broken, in +production quality, unlike "develop", which may be temporary broken, in the case of larger change sets or unexpected incompatibilities or side effects. From a3e59082bfabedc922c7c101279f667190946deb Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Mon, 11 Oct 2021 08:13:44 -0400 Subject: [PATCH 142/372] small adjustments and apply clang-format --- src/ML-PACE/pair_pace.cpp | 171 ++++++++++++++++++-------------------- 1 file changed, 83 insertions(+), 88 deletions(-) diff --git a/src/ML-PACE/pair_pace.cpp b/src/ML-PACE/pair_pace.cpp index 4a8f7d9512..e3131a8193 100644 --- a/src/ML-PACE/pair_pace.cpp +++ b/src/ML-PACE/pair_pace.cpp @@ -1,4 +1,3 @@ -// clang-format off /* ---------------------------------------------------------------------- LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator https://www.lammps.org/, Sandia National Laboratories @@ -43,52 +42,47 @@ Copyright 2021 Yury Lysogorskiy^1, Cas van der Oord^2, Anton Bochkarev^1, #include #include +#include "ace_c_basis.h" #include "ace_evaluator.h" #include "ace_recursive.h" -#include "ace_c_basis.h" #include "ace_version.h" namespace LAMMPS_NS { - struct ACEImpl { - ACEImpl() : basis_set(nullptr), ace(nullptr){} - ~ACEImpl() {delete basis_set; delete ace;} - ACECTildeBasisSet *basis_set; - ACERecursiveEvaluator *ace; - }; -} +struct ACEImpl { + ACEImpl() : basis_set(nullptr), ace(nullptr) {} + ~ACEImpl() + { + delete basis_set; + delete ace; + } + ACECTildeBasisSet *basis_set; + ACERecursiveEvaluator *ace; +}; +} // namespace LAMMPS_NS using namespace LAMMPS_NS; using namespace MathConst; -#define MAXLINE 1024 -#define DELTA 4 +static char const *const elements_pace[] = { + "X", "H", "He", "Li", "Be", "B", "C", "N", "O", "F", "Ne", "Na", "Mg", "Al", "Si", + "P", "S", "Cl", "Ar", "K", "Ca", "Sc", "Ti", "V", "Cr", "Mn", "Fe", "Co", "Ni", "Cu", + "Zn", "Ga", "Ge", "As", "Se", "Br", "Kr", "Rb", "Sr", "Y", "Zr", "Nb", "Mo", "Tc", "Ru", + "Rh", "Pd", "Ag", "Cd", "In", "Sn", "Sb", "Te", "I", "Xe", "Cs", "Ba", "La", "Ce", "Pr", + "Nd", "Pm", "Sm", "Eu", "Gd", "Tb", "Dy", "Ho", "Er", "Tm", "Yb", "Lu", "Hf", "Ta", "W", + "Re", "Os", "Ir", "Pt", "Au", "Hg", "Tl", "Pb", "Bi", "Po", "At", "Rn", "Fr", "Ra", "Ac", + "Th", "Pa", "U", "Np", "Pu", "Am", "Cm", "Bk", "Cf", "Es", "Fm", "Md", "No", "Lr"}; +static constexpr int elements_num_pace = sizeof(elements_pace) / sizeof(const char *); -//added YL - -//keywords for ACE evaluator style -#define RECURSIVE_KEYWORD "recursive" -#define PRODUCT_KEYWORD "product" - -static int elements_num_pace = 104; -static char const *const elements_pace[104] = {"X", "H", "He", "Li", "Be", "B", "C", "N", "O", "F", "Ne", "Na", - "Mg", "Al", "Si", "P", "S", "Cl", "Ar", "K", "Ca", "Sc", "Ti", "V", "Cr", "Mn", - "Fe", "Co", "Ni", "Cu", "Zn", "Ga", "Ge", "As", "Se", "Br", "Kr", "Rb", "Sr", - "Y", "Zr", "Nb", "Mo", "Tc", "Ru", "Rh", "Pd", "Ag", "Cd", "In", "Sn", "Sb", - "Te", "I", "Xe", "Cs", "Ba", "La", "Ce", "Pr", "Nd", "Pm", "Sm", "Eu", "Gd", - "Tb", "Dy", "Ho", "Er", "Tm", "Yb", "Lu", "Hf", "Ta", "W", "Re", "Os", "Ir", - "Pt", "Au", "Hg", "Tl", "Pb", "Bi", "Po", "At", "Rn", "Fr", "Ra", "Ac", "Th", - "Pa", "U", "Np", "Pu", "Am", "Cm", "Bk", "Cf", "Es", "Fm", "Md", "No", "Lr" -}; - -static int AtomicNumberByName_pace(char *elname) { +static int AtomicNumberByName_pace(char *elname) +{ for (int i = 1; i < elements_num_pace; i++) - if (strcmp(elname, elements_pace[i]) == 0) - return i; + if (strcmp(elname, elements_pace[i]) == 0) return i; return -1; } /* ---------------------------------------------------------------------- */ -PairPACE::PairPACE(LAMMPS *lmp) : Pair(lmp) { +PairPACE::PairPACE(LAMMPS *lmp) : Pair(lmp) +{ single_enable = 0; restartinfo = 0; one_coeff = 1; @@ -104,7 +98,8 @@ PairPACE::PairPACE(LAMMPS *lmp) : Pair(lmp) { check if allocated, since class can be destructed when incomplete ------------------------------------------------------------------------- */ -PairPACE::~PairPACE() { +PairPACE::~PairPACE() +{ if (copymode) return; delete aceimpl; @@ -118,7 +113,8 @@ PairPACE::~PairPACE() { /* ---------------------------------------------------------------------- */ -void PairPACE::compute(int eflag, int vflag) { +void PairPACE::compute(int eflag, int vflag) +{ int i, j, ii, jj, inum, jnum; double delx, dely, delz, evdwl; double fij[3]; @@ -149,8 +145,7 @@ void PairPACE::compute(int eflag, int vflag) { // the pointer to the list of neighbors of "i" firstneigh = list->firstneigh; - if (inum != nlocal) - error->all(FLERR,"inum: {} nlocal: {} are different",inum, nlocal); + if (inum != nlocal) error->all(FLERR, "inum: {} nlocal: {} are different", inum, nlocal); // Aidan Thompson told RD (26 July 2019) that practically always holds: // inum = nlocal @@ -160,7 +155,6 @@ void PairPACE::compute(int eflag, int vflag) { // skin atoms can be removed by setting skin to zero but here // they are disregarded anyway - //determine the maximum number of neighbours int max_jnum = -1; int nei = 0; @@ -168,8 +162,7 @@ void PairPACE::compute(int eflag, int vflag) { i = ilist[ii]; jnum = numneigh[i]; nei = nei + jnum; - if (jnum > max_jnum) - max_jnum = jnum; + if (jnum > max_jnum) max_jnum = jnum; } aceimpl->ace->resize_neighbours_cache(max_jnum); @@ -199,6 +192,7 @@ void PairPACE::compute(int eflag, int vflag) { } catch (exception &e) { error->one(FLERR, e.what()); } + // 'compute_atom' will update the `aceimpl->ace->e_atom` and `aceimpl->ace->neighbours_forces(jj, alpha)` arrays for (jj = 0; jj < jnum; jj++) { @@ -209,9 +203,9 @@ void PairPACE::compute(int eflag, int vflag) { dely = x[j][1] - ytmp; delz = x[j][2] - ztmp; - fij[0] = scale[itype][jtype]*aceimpl->ace->neighbours_forces(jj, 0); - fij[1] = scale[itype][jtype]*aceimpl->ace->neighbours_forces(jj, 1); - fij[2] = scale[itype][jtype]*aceimpl->ace->neighbours_forces(jj, 2); + fij[0] = scale[itype][jtype] * aceimpl->ace->neighbours_forces(jj, 0); + fij[1] = scale[itype][jtype] * aceimpl->ace->neighbours_forces(jj, 1); + fij[2] = scale[itype][jtype] * aceimpl->ace->neighbours_forces(jj, 2); f[i][0] += fij[0]; f[i][1] += fij[1]; @@ -222,15 +216,14 @@ void PairPACE::compute(int eflag, int vflag) { // tally per-atom virial contribution if (vflag) - ev_tally_xyz(i, j, nlocal, newton_pair, 0.0, 0.0, - fij[0], fij[1], fij[2], - -delx, -dely, -delz); + ev_tally_xyz(i, j, nlocal, newton_pair, 0.0, 0.0, fij[0], fij[1], fij[2], -delx, -dely, + -delz); } // tally energy contribution if (eflag) { // evdwl = energy of atom I - evdwl = scale[1][1]*aceimpl->ace->e_atom; + evdwl = scale[1][1] * aceimpl->ace->e_atom; ev_tally_full(i, 2.0 * evdwl, 0.0, 0.0, 0.0, 0.0, 0.0); } } @@ -242,42 +235,45 @@ void PairPACE::compute(int eflag, int vflag) { /* ---------------------------------------------------------------------- */ -void PairPACE::allocate() { +void PairPACE::allocate() +{ allocated = 1; - int n = atom->ntypes; + int n = atom->ntypes + 1; - memory->create(setflag, n + 1, n + 1, "pair:setflag"); - memory->create(cutsq, n + 1, n + 1, "pair:cutsq"); - memory->create(scale, n + 1, n + 1,"pair:scale"); - map = new int[n+1]; + memory->create(setflag, n, n, "pair:setflag"); + memory->create(cutsq, n, n, "pair:cutsq"); + memory->create(scale, n, n, "pair:scale"); + map = new int[n]; } /* ---------------------------------------------------------------------- global settings ------------------------------------------------------------------------- */ -void PairPACE::settings(int narg, char **arg) { - if (narg > 1) - error->all(FLERR,"Illegal pair_style command."); +void PairPACE::settings(int narg, char **arg) +{ + if (narg > 1) error->all(FLERR, "Illegal pair_style command."); // ACE potentials are parameterized in metal units - if (strcmp("metal",update->unit_style) != 0) - error->all(FLERR,"ACE potentials require 'metal' units"); + if (strcmp("metal", update->unit_style) != 0) + error->all(FLERR, "ACE potentials require 'metal' units"); - recursive = true; // default evaluator style: RECURSIVE + recursive = true; // default evaluator style: RECURSIVE if (narg > 0) { - if (strcmp(arg[0], RECURSIVE_KEYWORD) == 0) + if (strcmp(arg[0], "recursive") == 0) recursive = true; - else if (strcmp(arg[0], PRODUCT_KEYWORD) == 0) { + else if (strcmp(arg[0], "product") == 0) { recursive = false; - } else error->all(FLERR,"Illegal pair_style command"); + } else + error->all(FLERR, "Illegal pair_style command"); } if (comm->me == 0) { - utils::logmesg(lmp,"ACE version: {}.{}.{}\n", - VERSION_YEAR, VERSION_MONTH, VERSION_DAY); - if (recursive) utils::logmesg(lmp,"Recursive evaluator is used\n"); - else utils::logmesg(lmp,"Product evaluator is used\n"); + utils::logmesg(lmp, "ACE version: {}.{}.{}\n", VERSION_YEAR, VERSION_MONTH, VERSION_DAY); + if (recursive) + utils::logmesg(lmp, "Recursive evaluator is used\n"); + else + utils::logmesg(lmp, "Product evaluator is used\n"); } } @@ -285,28 +281,29 @@ void PairPACE::settings(int narg, char **arg) { set coeffs for one or more type pairs ------------------------------------------------------------------------- */ -void PairPACE::coeff(int narg, char **arg) { +void PairPACE::coeff(int narg, char **arg) +{ if (!allocated) allocate(); - map_element2type(narg-3,arg+3); + map_element2type(narg - 3, arg + 3); auto potential_file_name = utils::get_potential_file_path(arg[2]); char **elemtypes = &arg[3]; //load potential file delete aceimpl->basis_set; - if (comm->me == 0) - utils::logmesg(lmp,"Loading {}\n", potential_file_name); + if (comm->me == 0) utils::logmesg(lmp, "Loading {}\n", potential_file_name); aceimpl->basis_set = new ACECTildeBasisSet(potential_file_name); if (comm->me == 0) { - utils::logmesg(lmp,"Total number of basis functions\n"); + utils::logmesg(lmp, "Total number of basis functions\n"); for (SPECIES_TYPE mu = 0; mu < aceimpl->basis_set->nelements; mu++) { int n_r1 = aceimpl->basis_set->total_basis_size_rank1[mu]; int n = aceimpl->basis_set->total_basis_size[mu]; - utils::logmesg(lmp,"\t{}: {} (r=1) {} (r>1)\n", aceimpl->basis_set->elements_name[mu], n_r1, n); + utils::logmesg(lmp, "\t{}: {} (r=1) {} (r>1)\n", aceimpl->basis_set->elements_name[mu], n_r1, + n); } } @@ -323,26 +320,25 @@ void PairPACE::coeff(int narg, char **arg) { for (int i = 1; i <= n; i++) { char *elemname = elemtypes[i - 1]; int atomic_number = AtomicNumberByName_pace(elemname); - if (atomic_number == -1) - error->all(FLERR,"'{}' is not a valid element\n", elemname); + if (atomic_number == -1) error->all(FLERR, "'{}' is not a valid element\n", elemname); SPECIES_TYPE mu = aceimpl->basis_set->get_species_index_by_name(elemname); if (mu != -1) { if (comm->me == 0) - utils::logmesg(lmp,"Mapping LAMMPS atom type #{}({}) -> " - "ACE species type #{}\n", i, elemname, mu); + utils::logmesg(lmp, "Mapping LAMMPS atom type #{}({}) -> ACE species type #{}\n", i, + elemname, mu); map[i] = mu; - aceimpl->ace->element_type_mapping(i) = mu; // set up LAMMPS atom type to ACE species mapping for ace evaluator + // set up LAMMPS atom type to ACE species mapping for ace evaluator + aceimpl->ace->element_type_mapping(i) = mu; } else { - error->all(FLERR,"Element {} is not supported by ACE-potential from file {}", elemname,potential_file_name); + error->all(FLERR, "Element {} is not supported by ACE-potential from file {}", elemname, + potential_file_name); } } // initialize scale factor for (int i = 1; i <= n; i++) { - for (int j = i; j <= n; j++) { - scale[i][j] = 1.0; - } + for (int j = i; j <= n; j++) { scale[i][j] = 1.0; } } aceimpl->ace->set_basis(*aceimpl->basis_set, 1); @@ -352,11 +348,10 @@ void PairPACE::coeff(int narg, char **arg) { init specific to this pair style ------------------------------------------------------------------------- */ -void PairPACE::init_style() { - if (atom->tag_enable == 0) - error->all(FLERR, "Pair style pACE requires atom IDs"); - if (force->newton_pair == 0) - error->all(FLERR, "Pair style pACE requires newton pair on"); +void PairPACE::init_style() +{ + if (atom->tag_enable == 0) error->all(FLERR, "Pair style pACE requires atom IDs"); + if (force->newton_pair == 0) error->all(FLERR, "Pair style pACE requires newton pair on"); // request a full neighbor list int irequest = neighbor->request(this, instance_me); @@ -368,7 +363,8 @@ void PairPACE::init_style() { init for one type pair i,j and corresponding j,i ------------------------------------------------------------------------- */ -double PairPACE::init_one(int i, int j) { +double PairPACE::init_one(int i, int j) +{ if (setflag[i][j] == 0) error->all(FLERR, "All pair coeffs are not set"); //cutoff from the basis set's radial functions settings scale[j][i] = scale[i][j]; @@ -381,7 +377,6 @@ double PairPACE::init_one(int i, int j) { void *PairPACE::extract(const char *str, int &dim) { dim = 2; - if (strcmp(str,"scale") == 0) return (void *) scale; + if (strcmp(str, "scale") == 0) return (void *) scale; return nullptr; } - From 6d2b32f0b279e836cc6ce561282e24e943645a78 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Mon, 11 Oct 2021 14:35:23 -0400 Subject: [PATCH 143/372] move chi field calculation to fix qeq/reaxff --- src/KOKKOS/fix_acks2_reaxff_kokkos.cpp | 6 +- src/KOKKOS/fix_qeq_reaxff_kokkos.cpp | 6 +- src/OPENMP/fix_qeq_reaxff_omp.cpp | 15 ++--- src/REAXFF/fix_acks2_reaxff.cpp | 12 ++-- src/REAXFF/fix_qeq_reaxff.cpp | 65 +++++++++++------- src/REAXFF/fix_qeq_reaxff.h | 3 +- src/fix_efield.cpp | 92 ++++---------------------- src/fix_efield.h | 10 +-- 8 files changed, 73 insertions(+), 136 deletions(-) diff --git a/src/KOKKOS/fix_acks2_reaxff_kokkos.cpp b/src/KOKKOS/fix_acks2_reaxff_kokkos.cpp index d02cd1f255..cb65667a17 100644 --- a/src/KOKKOS/fix_acks2_reaxff_kokkos.cpp +++ b/src/KOKKOS/fix_acks2_reaxff_kokkos.cpp @@ -393,8 +393,7 @@ void FixACKS2ReaxFFKokkos::pre_force(int vflag) k_X_diag.template sync(); } - if (field_flag) - get_chi_field(); + if (efield) get_chi_field(); // init_matvec @@ -521,8 +520,7 @@ void FixACKS2ReaxFFKokkos::allocate_array() d_z = k_z.template view(); } - if (field_flag) - get_chi_field(); + if (efield) get_chi_field(); // init_storage Kokkos::parallel_for(Kokkos::RangePolicy(0,NN),*this); diff --git a/src/KOKKOS/fix_qeq_reaxff_kokkos.cpp b/src/KOKKOS/fix_qeq_reaxff_kokkos.cpp index af67d25af8..b35bbc46ee 100644 --- a/src/KOKKOS/fix_qeq_reaxff_kokkos.cpp +++ b/src/KOKKOS/fix_qeq_reaxff_kokkos.cpp @@ -257,8 +257,7 @@ void FixQEqReaxFFKokkos::pre_force(int /*vflag*/) // init_matvec - if (field_flag) - get_chi_field(); + if (efield) get_chi_field(); k_s_hist.template sync(); k_t_hist.template sync(); @@ -384,8 +383,7 @@ void FixQEqReaxFFKokkos::allocate_array() // init_storage - if (field_flag) - get_chi_field(); + if (efield) get_chi_field(); FixQEqReaxFFKokkosZeroFunctor zero_functor(this); Kokkos::parallel_for(ignum,zero_functor); diff --git a/src/OPENMP/fix_qeq_reaxff_omp.cpp b/src/OPENMP/fix_qeq_reaxff_omp.cpp index 2071755fd1..0b0ba589cf 100644 --- a/src/OPENMP/fix_qeq_reaxff_omp.cpp +++ b/src/OPENMP/fix_qeq_reaxff_omp.cpp @@ -232,8 +232,7 @@ void FixQEqReaxFFOMP::compute_H() void FixQEqReaxFFOMP::init_storage() { - if (field_flag) - get_chi_field(); + if (efield) get_chi_field(); #if defined(_OPENMP) #pragma omp parallel for schedule(static) @@ -241,8 +240,7 @@ void FixQEqReaxFFOMP::init_storage() for (int i = 0; i < NN; i++) { Hdia_inv[i] = 1. / eta[atom->type[i]]; b_s[i] = -chi[atom->type[i]]; - if (field_flag) - b_s[i] -= chi_field[i]; + if (efield) b_s[i] -= chi_field[i]; b_t[i] = -1.0; b_prc[i] = 0; b_prm[i] = 0; @@ -279,8 +277,7 @@ void FixQEqReaxFFOMP::pre_force(int /* vflag */) if (n > n_cap*DANGER_ZONE || m_fill > m_cap*DANGER_ZONE) reallocate_matrix(); - if (field_flag) - get_chi_field(); + if (efield) get_chi_field(); init_matvec(); @@ -318,8 +315,7 @@ void FixQEqReaxFFOMP::init_matvec() /* init pre-conditioner for H and init solution vectors */ Hdia_inv[i] = 1. / eta[atom->type[i]]; b_s[i] = -chi[atom->type[i]]; - if (field_flag) - b_s[i] -= chi_field[i]; + if (efield) b_s[i] -= chi_field[i]; b_t[i] = -1.0; // Predictor Step @@ -348,8 +344,7 @@ void FixQEqReaxFFOMP::init_matvec() /* init pre-conditioner for H and init solution vectors */ Hdia_inv[i] = 1. / eta[atom->type[i]]; b_s[i] = -chi[atom->type[i]]; - if (field_flag) - b_s[i] -= chi_field[i]; + if (efield) b_s[i] -= chi_field[i]; b_t[i] = -1.0; /* linear extrapolation for s & t from previous solutions */ diff --git a/src/REAXFF/fix_acks2_reaxff.cpp b/src/REAXFF/fix_acks2_reaxff.cpp index aa4923d91d..1de4eaaf1c 100644 --- a/src/REAXFF/fix_acks2_reaxff.cpp +++ b/src/REAXFF/fix_acks2_reaxff.cpp @@ -316,15 +316,13 @@ void FixACKS2ReaxFF::init_bondcut() void FixACKS2ReaxFF::init_storage() { - if (field_flag) - get_chi_field(); + if (efield) get_chi_field(); for (int ii = 0; ii < NN; ii++) { int i = ilist[ii]; if (atom->mask[i] & groupbit) { b_s[i] = -chi[atom->type[i]]; - if (field_flag) - b_s[i] -= chi_field[i]; + if (efield) b_s[i] -= chi_field[i]; b_s[NN + i] = 0.0; s[i] = 0.0; s[NN + i] = 0.0; @@ -366,8 +364,7 @@ void FixACKS2ReaxFF::pre_force(int /*vflag*/) if (n > n_cap*DANGER_ZONE || m_fill > m_cap*DANGER_ZONE) reallocate_matrix(); - if (field_flag) - get_chi_field(); + if (efield) get_chi_field(); init_matvec(); @@ -402,8 +399,7 @@ void FixACKS2ReaxFF::init_matvec() /* init pre-conditioner for H and init solution vectors */ Hdia_inv[i] = 1. / eta[atom->type[i]]; b_s[i] = -chi[atom->type[i]]; - if (field_flag) - b_s[i] -= chi_field[i]; + if (efield) b_s[i] -= chi_field[i]; b_s[NN+i] = 0.0; /* cubic extrapolation for s from previous solutions */ diff --git a/src/REAXFF/fix_qeq_reaxff.cpp b/src/REAXFF/fix_qeq_reaxff.cpp index ac143d95c4..5b5a792c16 100644 --- a/src/REAXFF/fix_qeq_reaxff.cpp +++ b/src/REAXFF/fix_qeq_reaxff.cpp @@ -33,6 +33,7 @@ #include "neigh_request.h" #include "neighbor.h" #include "pair.h" +#include "region.h" #include "respa.h" #include "text_file_reader.h" #include "update.h" @@ -382,11 +383,14 @@ void FixQEqReaxFF::init() if (group->count(igroup) == 0) error->all(FLERR,"Fix qeq/reaxff group has no atoms"); - field_flag = 0; - for (int n = 0; n < modify->nfix; n++) - if (utils::strmatch(modify->fix[n]->style,"^efield")) - field_flag = 1; + efield = nullptr; + int ifix = modify->find_fix_by_style("^efield"); + if (ifix >= 0) efield = (FixEfield *) modify->fix[ifix]; + if (efield && (strcmp(update->unit_style,"real") != 0)) + error->all(FLERR,"Must use unit_style real with fix qeq/reax and external fields"); + if (efield && efield->varflag != FixEfield::CONSTANT) + error->all(FLERR,"Cannot yet use fix qeq/reaxff with variable efield"); // need a half neighbor list w/ Newton off and ghost neighbors // built whenever re-neighboring occurs @@ -511,16 +515,14 @@ void FixQEqReaxFF::min_setup_pre_force(int vflag) void FixQEqReaxFF::init_storage() { - if (field_flag) - get_chi_field(); + if (efield) get_chi_field(); for (int ii = 0; ii < NN; ii++) { int i = ilist[ii]; if (atom->mask[i] & groupbit) { Hdia_inv[i] = 1. / eta[atom->type[i]]; b_s[i] = -chi[atom->type[i]]; - if (field_flag) - b_s[i] -= chi_field[i]; + if (efield) b_s[i] -= chi_field[i]; b_t[i] = -1.0; b_prc[i] = 0; b_prm[i] = 0; @@ -558,8 +560,7 @@ void FixQEqReaxFF::pre_force(int /*vflag*/) if (n > n_cap*DANGER_ZONE || m_fill > m_cap*DANGER_ZONE) reallocate_matrix(); - if (field_flag) - get_chi_field(); + if (efield) get_chi_field(); init_matvec(); @@ -600,8 +601,7 @@ void FixQEqReaxFF::init_matvec() /* init pre-conditioner for H and init solution vectors */ Hdia_inv[i] = 1. / eta[atom->type[i]]; b_s[i] = -chi[atom->type[i]]; - if (field_flag) - b_s[i] -= chi_field[i]; + if (efield) b_s[i] -= chi_field[i]; b_t[i] = -1.0; /* quadratic extrapolation for s & t from previous solutions */ @@ -1072,25 +1072,42 @@ void FixQEqReaxFF::vector_add(double* dest, double c, double* v, int k) void FixQEqReaxFF::get_chi_field() { - int nlocal = atom->nlocal; - memset(&chi_field[0],0.0,atom->nmax*sizeof(double)); + if (!efield) return; - if (!(strcmp(update->unit_style,"real") == 0)) - error->all(FLERR,"Must use unit_style real with fix qeq/reax and external fields"); + const double * const *x = (const double * const *)atom->x; + const int *mask = atom->mask; + const imageint *image = atom->image; - double factor = 1.0/force->qe2f; + const double factor = 1.0/force->qe2f; + const int nlocal = atom->nlocal; - // loop over all fixes, find fix efield + // update electric field region if necessary - for (int n = 0; n < modify->nfix; n++) { - if (utils::strmatch(modify->fix[n]->style,"^efield")) { + Region *region = nullptr; + if (efield->iregion >= 0) { + region = domain->regions[efield->iregion]; + region->prematch(); + } - FixEfield* fix_efield = (FixEfield*) modify->fix[n]; - double* field_energy = fix_efield->get_energy(); // Real units of kcal/mol/angstrom, need to convert to eV + // we currently only constant efield. Also atom selection is for the group of fix efield. - for (int i = 0; i < nlocal; i++) - chi_field[i] += field_energy[i]*factor; + if (efield->varflag == FixEfield::CONSTANT) { + double unwrap[3]; + const double fx = efield->ex; + const double fy = efield->ey; + const double fz = efield->ez; + const int efgroupbit = efield->groupbit; + + // charge interactions + // force = qE, potential energy = F dot x in unwrapped coords + + for (int i = 0; i < nlocal; i++) { + if (mask[i] & efgroupbit) { + if (region && !region->match(x[i][0],x[i][1],x[i][2])) continue; + domain->unmap(x[i],image[i],unwrap); + chi_field[i] = factor*(fx*unwrap[0] + fy*unwrap[1] + fz*unwrap[2]); + } } } } diff --git a/src/REAXFF/fix_qeq_reaxff.h b/src/REAXFF/fix_qeq_reaxff.h index cc5bd09791..ac54ff72ca 100644 --- a/src/REAXFF/fix_qeq_reaxff.h +++ b/src/REAXFF/fix_qeq_reaxff.h @@ -65,6 +65,7 @@ class FixQEqReaxFF : public Fix { int nlevels_respa; class NeighList *list; class PairReaxFF *reaxff; + class FixEfield *efield; int *ilist, *jlist, *numneigh, **firstneigh; double swa, swb; // lower/upper Taper cutoff radius @@ -140,8 +141,6 @@ class FixQEqReaxFF : public Fix { // dual CG support int dual_enabled; // 0: Original, separate s & t optimization; 1: dual optimization int matvecs_s, matvecs_t; // Iteration count for each system - - int field_flag; // 1: field enabled }; } // namespace LAMMPS_NS diff --git a/src/fix_efield.cpp b/src/fix_efield.cpp index 229e63b74d..c6d8c36ada 100644 --- a/src/fix_efield.cpp +++ b/src/fix_efield.cpp @@ -19,30 +19,29 @@ #include "fix_efield.h" -#include #include "atom.h" -#include "update.h" -#include "domain.h" #include "comm.h" -#include "modify.h" -#include "force.h" -#include "respa.h" -#include "input.h" -#include "variable.h" -#include "region.h" -#include "memory.h" +#include "domain.h" #include "error.h" +#include "force.h" +#include "input.h" +#include "memory.h" +#include "modify.h" +#include "region.h" +#include "respa.h" +#include "update.h" +#include "variable.h" + +#include using namespace LAMMPS_NS; using namespace FixConst; -enum{NONE,CONSTANT,EQUAL,ATOM}; - /* ---------------------------------------------------------------------- */ FixEfield::FixEfield(LAMMPS *lmp, int narg, char **arg) : Fix(lmp, narg, arg), xstr(nullptr), ystr(nullptr), zstr(nullptr), - estr(nullptr), idregion(nullptr), efield(nullptr), energy(nullptr) + estr(nullptr), idregion(nullptr), efield(nullptr) { if (narg < 6) error->all(FLERR,"Illegal fix efield command"); @@ -125,7 +124,6 @@ FixEfield::~FixEfield() delete [] estr; delete [] idregion; memory->destroy(efield); - memory->destroy(energy); } /* ---------------------------------------------------------------------- */ @@ -453,69 +451,3 @@ double FixEfield::compute_vector(int n) return fsum_all[n+1]; } -/* ---------------------------------------------------------------------- - get E -------------------------------------------------------------------------- */ - -double* FixEfield::get_energy() -{ - double **x = atom->x; - int *mask = atom->mask; - imageint *image = atom->image; - - int nlocal = atom->nlocal; - - // reallocate energy array if necessary - - if (atom->nmax > maxatom_energy) { - maxatom_energy = atom->nmax; - memory->destroy(energy); - memory->create(energy,maxatom_energy,"efield:energy"); - } - memset(&energy[0],0.0,maxatom_energy*sizeof(double)); - - // update region if necessary - - Region *region = NULL; - if (iregion >= 0) { - region = domain->regions[iregion]; - region->prematch(); - } - - int warn_flag_local = 0; - - // constant efield - - if (varflag == CONSTANT) { - double unwrap[3]; - - // charge interactions - // force = qE, potential energy = F dot x in unwrapped coords - - if (qflag) { - for (int i = 0; i < nlocal; i++) { - if (mask[i] & groupbit) { - if (region && !region->match(x[i][0],x[i][1],x[i][2])) continue; - const double fx = ex; - const double fy = ey; - const double fz = ez; - - domain->unmap(x[i],image[i],unwrap); - energy[i] -= fx*unwrap[0] + fy*unwrap[1] + fz*unwrap[2]; - if (fabs(fx*(x[i][0]-unwrap[0])) + fabs(fy*(x[i][1]-unwrap[1])) + - fabs(fz*(x[i][2]-unwrap[2])) > 0.0) - warn_flag_local = 1; - } - } - } - } else { - error->all(FLERR,"Cannot yet use fix qeq/reaxff with variable efield"); - } - - int warn_flag; - MPI_Allreduce(&warn_flag_local,&warn_flag,1,MPI_INT,MPI_SUM,world); - if (warn_flag && comm->me == 0) - error->warning(FLERR,"Using non-zero image flags in field direction with fix qeq/reaxff"); - - return energy; -} diff --git a/src/fix_efield.h b/src/fix_efield.h index 86ccdae7e5..20201518ab 100644 --- a/src/fix_efield.h +++ b/src/fix_efield.h @@ -25,6 +25,7 @@ FixStyle(efield,FixEfield); namespace LAMMPS_NS { class FixEfield : public Fix { + friend class FixQEqReaxFF; public: FixEfield(class LAMMPS *, int, char **); ~FixEfield(); @@ -38,9 +39,10 @@ class FixEfield : public Fix { double memory_usage(); double compute_scalar(); double compute_vector(int); - double* get_energy(); - private: + enum { NONE, CONSTANT, EQUAL, ATOM }; + + protected: double ex, ey, ez; int varflag, iregion; char *xstr, *ystr, *zstr, *estr; @@ -50,8 +52,8 @@ class FixEfield : public Fix { double qe2f; int qflag, muflag; - int maxatom,maxatom_energy; - double **efield,*energy; + int maxatom, maxatom_energy; + double **efield; int force_flag; double fsum[4], fsum_all[4]; From 2290ade2f20f39e9a68821f6d9f9536c34705239 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Mon, 11 Oct 2021 15:06:24 -0400 Subject: [PATCH 144/372] ensure that fix efield is initialized before accessing its data. --- src/REAXFF/fix_acks2_reaxff.h | 1 - src/REAXFF/fix_qeq_reaxff.cpp | 6 +- src/fix_efield.cpp | 4 +- .../atomic-pair-reaxff-acks2_efield.yaml | 268 +++++++++--------- 4 files changed, 140 insertions(+), 139 deletions(-) diff --git a/src/REAXFF/fix_acks2_reaxff.h b/src/REAXFF/fix_acks2_reaxff.h index 4256d9743e..6c4b85e23e 100644 --- a/src/REAXFF/fix_acks2_reaxff.h +++ b/src/REAXFF/fix_acks2_reaxff.h @@ -40,7 +40,6 @@ class FixACKS2ReaxFF : public FixQEqReaxFF { int last_rows_rank, last_rows_flag; double **s_hist_X, **s_hist_last; - double *bcut_acks2, bond_softness, **bcut; // acks2 parameters sparse_matrix X; diff --git a/src/REAXFF/fix_qeq_reaxff.cpp b/src/REAXFF/fix_qeq_reaxff.cpp index 5b5a792c16..3d57037cf0 100644 --- a/src/REAXFF/fix_qeq_reaxff.cpp +++ b/src/REAXFF/fix_qeq_reaxff.cpp @@ -389,9 +389,13 @@ void FixQEqReaxFF::init() if (efield && (strcmp(update->unit_style,"real") != 0)) error->all(FLERR,"Must use unit_style real with fix qeq/reax and external fields"); + // ensure that fix efield is properly initialized before accessing its data + if (efield) efield->init(); + if (efield && efield->varflag != FixEfield::CONSTANT) error->all(FLERR,"Cannot yet use fix qeq/reaxff with variable efield"); - // need a half neighbor list w/ Newton off and ghost neighbors + + // we need a half neighbor list w/ Newton off and ghost neighbors // built whenever re-neighboring occurs int irequest = neighbor->request(this,instance_me); diff --git a/src/fix_efield.cpp b/src/fix_efield.cpp index c6d8c36ada..6fa3fc5297 100644 --- a/src/fix_efield.cpp +++ b/src/fix_efield.cpp @@ -200,9 +200,7 @@ void FixEfield::init() error->all(FLERR,"Fix efield with dipoles cannot use atom-style variables"); if (muflag && update->whichflag == 2 && comm->me == 0) - error->warning(FLERR, - "The minimizer does not re-orient dipoles " - "when using fix efield"); + error->warning(FLERR, "The minimizer does not re-orient dipoles when using fix efield"); if (varflag == CONSTANT && estyle != NONE) error->all(FLERR,"Cannot use variable energy with " diff --git a/unittest/force-styles/tests/atomic-pair-reaxff-acks2_efield.yaml b/unittest/force-styles/tests/atomic-pair-reaxff-acks2_efield.yaml index 418e8d02f8..df5028ebf0 100644 --- a/unittest/force-styles/tests/atomic-pair-reaxff-acks2_efield.yaml +++ b/unittest/force-styles/tests/atomic-pair-reaxff-acks2_efield.yaml @@ -1,6 +1,6 @@ --- lammps_version: 29 Sep 2021 -date_generated: Thu Sep 30 08:28:46 2021 +date_generated: Mon Oct 11 15:04:02 2021 epsilon: 5e-09 skip_tests: omp prerequisites: ! | @@ -35,141 +35,141 @@ pair_coeff: ! | extract: ! "" natoms: 64 init_vdwl: -1315.674323112547 -init_coul: -251.82894337220728 +init_coul: -251.82090045725639 init_stress: ! |- - -3.6256945758708036e+02 -5.3634290055356348e+02 -3.2712792543305824e+02 -1.8735692443254337e+02 -7.3226416286372796e+01 2.8628413998557846e+02 + -3.6248203180610562e+02 -5.3650193090416508e+02 -3.2704899016718207e+02 -1.8743806303083343e+02 -7.3095987266072214e+01 2.8639763194591950e+02 init_forces: ! |2 - 1 -6.0154879754984847e-01 2.0490911229762435e+01 1.6645868409384249e+01 - 2 -1.2761509197328829e+02 -6.4510446708282785e+01 -3.3805033949845111e+01 - 3 -1.6340594906578147e+02 -1.3398558727194414e+01 4.5684277690771779e+01 - 4 -7.8516116313792974e+00 1.2977219235117263e+02 -1.6424464644835544e+02 - 5 4.8881022131661034e+01 1.3348287588792989e+00 1.9102676537650911e+01 - 6 -3.2218386007387529e+01 -1.0434675194441733e+02 -2.9320199889959419e+01 - 7 5.4687565672978145e+01 -4.0913130205883220e+01 -5.8353439112584439e+01 - 8 -3.4374536858006408e+01 -5.4579558860019823e+01 3.9161499237773661e+01 - 9 1.0603251800101887e+02 2.4536072953416372e+01 -8.2928788192542029e+01 - 10 8.3444966772858873e+00 5.5905829007829055e+00 1.5836812763421671e+01 - 11 8.6682106260518399e-01 -5.8996265706493297e+01 -3.9872177103237625e+01 - 12 4.4191983748578252e+01 1.4903291889641397e+02 -1.6219114902362313e+02 - 13 -1.4906197921581901e+02 -1.1995522754366907e+02 1.0915702891133039e+02 - 14 -1.6840881138989259e+00 -2.4233704479540215e+01 -2.4811720547240064e+01 - 15 2.8936489115097370e+01 9.0168397617724935e+01 5.2090344636929249e+00 - 16 1.1515917785952955e+02 2.8281112244054714e+01 6.7569884393252394e+01 - 17 4.4254236896272509e+01 4.2405991701226377e+01 7.2799220577678824e+01 - 18 -7.8661474753163247e+00 -1.3659447348038833e+02 6.1065853677477804e+01 - 19 1.0685745830584035e+02 2.0723240505616749e+02 4.4125485886538023e+01 - 20 -4.9542084152667712e+01 -8.1670006768022276e+01 -2.8994861667393657e+01 - 21 -1.3289862768681564e+02 3.7558104734082590e+01 -1.0101767786981229e+02 - 22 1.3266855178651528e+02 -1.1782606684343813e+02 5.4036101810784274e+01 - 23 5.1407610909516592e+01 -2.3874012401090560e+01 -4.7708995785069028e+01 - 24 3.2363015107022008e+01 8.7105847828801600e+01 6.6914622951207662e+01 - 25 -7.6345678294694011e+01 1.4702273116008962e+02 -6.9635677366941891e+01 - 26 1.3052537104724411e+02 -7.6696421609995213e+01 -6.8145063843176118e+01 - 27 6.2283352702761547e+01 5.0074967255142333e+01 3.3472575546943631e+01 - 28 8.1232050028726395e+00 -3.8518056219602643e+00 -1.5909871018201754e+01 - 29 -1.1706745841892726e+02 7.1116510258697346e+01 1.0440286073080344e+02 - 30 2.6670669937334090e+01 -1.1285172689888849e+02 1.8628079295071519e+01 - 31 -1.0848115908913097e+02 1.0993408938052653e+02 -5.5578339221069761e+01 - 32 -1.4604759790414388e+01 4.2812434419719693e+01 3.8845926505395511e+01 - 33 -2.9520332853396411e+01 -7.8741560425743211e+00 4.0691645839948691e+01 - 34 9.4394466656903248e+01 5.1575725533434905e+01 5.0009959181781118e+00 - 35 1.3879481127694734e+02 1.3024654544250058e+01 -3.9250638167728880e+01 - 36 -5.4284793690417608e+01 -8.6096634683942625e+01 6.3572285876499528e+01 - 37 4.8502978680315444e+01 7.1094505792066101e+01 -6.4171063798122049e+01 - 38 -1.2070810306031437e+02 -2.3923073007095348e+02 1.0638889958589006e+02 - 39 4.7402294129887252e+00 1.1128169294007042e+01 9.5229588224810726e+01 - 40 -4.2105918954988910e+00 2.8922240497979339e+00 -3.8853885945522486e+00 - 41 -1.2581981998022140e+02 -1.1458436625786676e+02 1.5632166020305606e+01 - 42 4.3294461247674860e+01 -1.1323959798608851e+02 -1.2148885112552533e+02 - 43 -6.1464076737642506e+00 -1.1289705518300156e+01 1.3009715987202921e+02 - 44 2.3307656992366880e+01 -7.2455227526013468e+00 -2.1408896428915366e+01 - 45 -2.2862781452836398e+01 1.3728776878825514e+02 1.7762899672609757e+02 - 46 4.5765827563197973e+01 -6.7544775840057909e+01 3.7531795790712650e+01 - 47 -3.2697160859583640e+01 -5.3000463872529252e+01 -5.4681321277439828e+01 - 48 2.0323151781437127e+02 -3.0316677301325933e+02 -1.7383564674322281e+02 - 49 -6.8022252075611078e+01 3.9183313795637588e+01 3.5905040859651280e+01 - 50 8.8914188882096532e+00 1.4185906944036410e+02 1.5865229158118265e+02 - 51 3.5558467560874440e+01 -3.2565782793991261e+01 1.4766952238292825e+02 - 52 -1.0584465033940732e+02 1.0312404614360871e+02 -5.0602155397876125e+01 - 53 -3.3994847657310238e+01 9.4953275870768138e+01 -2.0788220549238974e+02 - 54 3.1060448661845527e+01 -5.5551331984850442e+01 4.7449645251589637e+01 - 55 8.0181854223109625e+01 -1.2981736896073650e+02 5.6594065562892716e+01 - 56 -1.2362123079928249e+01 -2.8595892153560477e+01 -5.6828887834998776e+00 - 57 4.5291099295923921e+01 1.5919694513314849e+02 9.9973856736854358e+01 - 58 -2.8759578518403369e+01 6.0635477053858999e+01 -2.3799927138389361e+01 - 59 -2.2258058554651186e+02 1.3033269239620597e+02 1.4065377860761922e+02 - 60 -2.7058124659542148e+01 1.4140236646055249e+02 -1.2767138983533778e+02 - 61 -6.3881319919673096e+01 -1.6334315073212363e+02 -1.2897680607557277e+02 - 62 6.9327514026657596e+01 6.4167453646545141e+01 -9.4053647502303434e+01 - 63 1.1096611865815618e+02 -1.8935951908777891e+01 -7.9804991261269080e+01 - 64 -3.1898370901788069e+00 5.2575682335077881e-02 8.3839144348275312e+00 -run_vdwl: -1315.6737992581136 -run_coul: -251.82912263294082 + 1 -6.0474888543374250e-01 2.0489649995558754e+01 1.6648364779019744e+01 + 2 -1.2749134842729102e+02 -6.4503057574327073e+01 -3.3718453656574930e+01 + 3 -1.6342191173987982e+02 -1.3393229948000869e+01 4.5694274570610652e+01 + 4 -7.8854643738361601e+00 1.2972879461866518e+02 -1.6419615181006944e+02 + 5 4.8919028111728558e+01 1.3819098076417511e+00 1.9053450706472873e+01 + 6 -3.2216914902686355e+01 -1.0434775916626768e+02 -2.9318847227302268e+01 + 7 5.4684250482474496e+01 -4.0912897084090297e+01 -5.8349936825290740e+01 + 8 -3.4367021683063456e+01 -5.4584797656977585e+01 3.9155995710188556e+01 + 9 1.0600851517860997e+02 2.4498474157371156e+01 -8.2913093189173011e+01 + 10 8.3447555122428945e+00 5.5887654013312265e+00 1.5835121440453630e+01 + 11 8.7572566893644610e-01 -5.8986862879536041e+01 -3.9886865373529496e+01 + 12 4.4192345243601785e+01 1.4903392498874101e+02 -1.6218370486731774e+02 + 13 -1.4906640085858768e+02 -1.1996153586254185e+02 1.0915649288501857e+02 + 14 -1.6833012837170072e+00 -2.4233165182314483e+01 -2.4811938863342640e+01 + 15 2.8898786208161422e+01 9.0133089611581354e+01 5.2288108254884502e+00 + 16 1.1506676261173565e+02 2.8307591282944003e+01 6.7469070898638549e+01 + 17 4.4257973806416992e+01 4.2407688485923074e+01 7.2793365925840433e+01 + 18 -7.8977859494116300e+00 -1.3669750942661153e+02 6.1120481191966931e+01 + 19 1.0684914671183908e+02 2.0723159679482674e+02 4.4131491641634142e+01 + 20 -4.9535230351257923e+01 -8.1659711231323953e+01 -2.8988673695399932e+01 + 21 -1.3290061561881626e+02 3.7559062025695049e+01 -1.0102144944394804e+02 + 22 1.3266879649177807e+02 -1.1782711519876337e+02 5.4033868409821174e+01 + 23 5.1412768765820744e+01 -2.3872394714355163e+01 -4.7713714953621249e+01 + 24 3.2397200883161723e+01 8.7139210825850910e+01 6.6886164799436017e+01 + 25 -7.6340762972498425e+01 1.4702473102700208e+02 -6.9633473850736578e+01 + 26 1.3052749262039134e+02 -7.6695482657430858e+01 -6.8146832497552452e+01 + 27 6.2311328472972022e+01 5.0102146475294738e+01 3.3487656891465093e+01 + 28 8.1220660377519014e+00 -3.8526584610995638e+00 -1.5911015141625269e+01 + 29 -1.1706729068476002e+02 7.1116576477118556e+01 1.0440265768703344e+02 + 30 2.6655660049196644e+01 -1.1286162374010593e+02 1.8649616508460088e+01 + 31 -1.0847573454065018e+02 1.0999786960515976e+02 -5.5644474464115881e+01 + 32 -1.4601550882506764e+01 4.2814168618056271e+01 3.8844512642781829e+01 + 33 -2.9523705560873584e+01 -7.8738611064108870e+00 4.0690697413797913e+01 + 34 9.4330789388586496e+01 5.1581866766538482e+01 4.9652665701242871e+00 + 35 1.3877931988938562e+02 1.2981185992845743e+01 -3.9285626545724483e+01 + 36 -5.4281635961457255e+01 -8.6097513480939028e+01 6.3568634213235761e+01 + 37 4.8504225500561368e+01 7.1094239906310165e+01 -6.4173067133746329e+01 + 38 -1.2066891638994815e+02 -2.3920176902796737e+02 1.0640521226438770e+02 + 39 4.7488293654083238e+00 1.1166191882479307e+01 9.5263143005518629e+01 + 40 -4.2084051248415868e+00 2.8924624990689383e+00 -3.8864497992312974e+00 + 41 -1.2581078648542228e+02 -1.1458578261672687e+02 1.5622587628084212e+01 + 42 4.3308292540862560e+01 -1.1323405493901932e+02 -1.2149477714325465e+02 + 43 -6.1587444023100080e+00 -1.1291818226674597e+01 1.3011699482876304e+02 + 44 2.3308040192407436e+01 -7.2458060870809842e+00 -2.1411592197658475e+01 + 45 -2.2860729759655108e+01 1.3728736904257494e+02 1.7762717296134940e+02 + 46 4.5769057235977925e+01 -6.7544602163517524e+01 3.7523830941935529e+01 + 47 -3.2702317993220667e+01 -5.3003738108804356e+01 -5.4679913394119872e+01 + 48 2.0332089603497599e+02 -3.0317483137796347e+02 -1.7385385920473672e+02 + 49 -6.8096084527994051e+01 3.9169024045628518e+01 3.5938376283054012e+01 + 50 8.9675894077393270e+00 1.4184624320072172e+02 1.5861454562527356e+02 + 51 3.5568943556122257e+01 -3.2562283481868455e+01 1.4766101383357829e+02 + 52 -1.0584057829258875e+02 1.0312235620825653e+02 -5.0609137884615848e+01 + 53 -3.4007748684053084e+01 9.4952314958175407e+01 -2.0786631792300025e+02 + 54 3.1059962195077311e+01 -5.5559501950052180e+01 4.7448054107780315e+01 + 55 8.0175215230090444e+01 -1.2981884067102311e+02 5.6596779206710927e+01 + 56 -1.2384422784037508e+01 -2.8595624968835004e+01 -5.6642147617504595e+00 + 57 4.5292326329866704e+01 1.5919693082065845e+02 9.9972956212900030e+01 + 58 -2.8755449205031599e+01 6.0636061740026541e+01 -2.3804095261332346e+01 + 59 -2.2258323329086073e+02 1.3033276121477300e+02 1.4065450346074496e+02 + 60 -2.7053767966908950e+01 1.4140884150929287e+02 -1.2766063272045497e+02 + 61 -6.3876457686609292e+01 -1.6334214518985453e+02 -1.2898084618000010e+02 + 62 6.9336974950833849e+01 6.4184374812555248e+01 -9.4061024912913510e+01 + 63 1.1091626260128440e+02 -1.8954854753727091e+01 -7.9743958117332326e+01 + 64 -3.2102600057900830e+00 6.9354135543417822e-02 8.3529729679024722e+00 +run_vdwl: -1315.6737992579026 +run_coul: -251.821079754404 run_stress: ! |- - -3.6257326646509171e+02 -5.3633931399834717e+02 -3.2713145896248852e+02 -1.8734601044825959e+02 -7.3233567994370262e+01 2.8627653927125738e+02 + -3.6248584076016164e+02 -5.3649833911871724e+02 -3.2705252376426523e+02 -1.8742714543193361e+02 -7.3103141718023124e+01 2.8639002855016633e+02 run_forces: ! |2 - 1 -6.0214627573514556e-01 2.0491386416768172e+01 1.6645711600342462e+01 - 2 -1.2761420763937384e+02 -6.4511773427180955e+01 -3.3802952557276939e+01 - 3 -1.6340608053661612e+02 -1.3401993175534717e+01 4.5682270589426395e+01 - 4 -7.8531544934264623e+00 1.2977276473099647e+02 -1.6424506125971675e+02 - 5 4.8880181512887845e+01 1.3352668533413361e+00 1.9101127318269754e+01 - 6 -3.2219030693174382e+01 -1.0434553973171852e+02 -2.9321861110858695e+01 - 7 5.4688797668689652e+01 -4.0914067636927541e+01 -5.8353268270633606e+01 - 8 -3.4375157494416307e+01 -5.4579947628359641e+01 3.9161035654250107e+01 - 9 1.0603414816205533e+02 2.4537600652275287e+01 -8.2930720411092054e+01 - 10 8.3460090375363851e+00 5.5873457294567306e+00 1.5832157267048057e+01 - 11 8.6892538484030335e-01 -5.8998026029103862e+01 -3.9878492352580025e+01 - 12 4.4192202281242011e+01 1.4903379855441727e+02 -1.6219582663063494e+02 - 13 -1.4906584757238437e+02 -1.1995559454394335e+02 1.0916169289124973e+02 - 14 -1.6828243042828270e+00 -2.4233094733519096e+01 -2.4809728105611640e+01 - 15 2.8939307801033564e+01 9.0168502090113790e+01 5.2080795626673408e+00 - 16 1.1515975212523766e+02 2.8282615719386932e+01 6.7569229132040050e+01 - 17 4.4253518201157711e+01 4.2405636265171424e+01 7.2799486576955999e+01 - 18 -7.8660652684668078e+00 -1.3659485654603807e+02 6.1065520388434372e+01 - 19 1.0685840221078762e+02 2.0723262764851302e+02 4.4126295054963897e+01 - 20 -4.9547376758855030e+01 -8.1664390184599469e+01 -2.9004063364474312e+01 - 21 -1.3289870968984053e+02 3.7556521095772311e+01 -1.0101561352524682e+02 - 22 1.3266905839761847e+02 -1.1782634157575328e+02 5.4036102994550859e+01 - 23 5.1406670288984778e+01 -2.3874752067941657e+01 -4.7709848050443959e+01 - 24 3.2360723646580617e+01 8.7108961412343263e+01 6.6918620689256002e+01 - 25 -7.6346347642655672e+01 1.4702322330099889e+02 -6.9634928409846580e+01 - 26 1.3052552995677755e+02 -7.6697121852723356e+01 -6.8144155635092048e+01 - 27 6.2283983095056371e+01 5.0075584344530611e+01 3.3473096901312701e+01 - 28 8.1197685495143439e+00 -3.8518986387766376e+00 -1.5913830082847198e+01 - 29 -1.1706701040648062e+02 7.1117299838894127e+01 1.0440194717333269e+02 - 30 2.6670602559236272e+01 -1.1285367475162086e+02 1.8628684821931220e+01 - 31 -1.0848188373714390e+02 1.0993395426889997e+02 -5.5579133864111398e+01 - 32 -1.4605292415373500e+01 4.2815795552280335e+01 3.8852361717819555e+01 - 33 -2.9517288321380654e+01 -7.8706168381396768e+00 4.0688043009936059e+01 - 34 9.4394661846860970e+01 5.1574880122935610e+01 5.0015857473357794e+00 - 35 1.3879503365745956e+02 1.3025141269886902e+01 -3.9251037822841923e+01 - 36 -5.4284990066064154e+01 -8.6095875439083741e+01 6.3572450715796457e+01 - 37 4.8502951310284544e+01 7.1092807457873405e+01 -6.4169156928480206e+01 - 38 -1.2070676699683328e+02 -2.3923032996704939e+02 1.0638935719492810e+02 - 39 4.7404453450854662e+00 1.1127624680633673e+01 9.5229308661499644e+01 - 40 -4.2107802526767983e+00 2.8921643118234011e+00 -3.8854294282688469e+00 - 41 -1.2582005930255532e+02 -1.1458555503982160e+02 1.5632960434366298e+01 - 42 4.3293341312744495e+01 -1.1324103202558409e+02 -1.2148799562881659e+02 - 43 -6.1454116088849728e+00 -1.1288795470041670e+01 1.3009652876141311e+02 - 44 2.3305290650364885e+01 -7.2439195790134221e+00 -2.1408010166153833e+01 - 45 -2.2861098671764225e+01 1.3729019889399979e+02 1.7762827899322482e+02 - 46 4.5767534010271007e+01 -6.7545186309699446e+01 3.7532548864297787e+01 - 47 -3.2698000001035446e+01 -5.3000014412923967e+01 -5.4681126433363666e+01 - 48 2.0323234514549853e+02 -3.0316993553970457e+02 -1.7383638982008839e+02 - 49 -6.8022066008163009e+01 3.9184360974303871e+01 3.5904719161687055e+01 - 50 8.8888102273386398e+00 1.4185921522184009e+02 1.5865294581703230e+02 - 51 3.5561860499398996e+01 -3.2570050830132502e+01 1.4767468933707980e+02 - 52 -1.0584566926084322e+02 1.0312482774358462e+02 -5.0601758660288674e+01 - 53 -3.3998101356279598e+01 9.4956830332700946e+01 -2.0788722486626233e+02 - 54 3.1066899475210167e+01 -5.5555602081792458e+01 4.7458263284720914e+01 - 55 8.0181933085468117e+01 -1.2981727337020556e+02 5.6593424480518294e+01 - 56 -1.2362077444339070e+01 -2.8594809824362390e+01 -5.6826993022632353e+00 - 57 4.5291055420289460e+01 1.5919552268332740e+02 9.9973285519875958e+01 - 58 -2.8759732845525242e+01 6.0634526797600500e+01 -2.3800965247316636e+01 - 59 -2.2258073507995616e+02 1.3033432002740730e+02 1.4065491055966689e+02 - 60 -2.7057501703204316e+01 1.4140567135934367e+02 -1.2767031982605356e+02 - 61 -6.3880828775902302e+01 -1.6334105542195670e+02 -1.2897647523237976e+02 - 62 6.9329301545636469e+01 6.4164830272747352e+01 -9.4048883564897153e+01 - 63 1.1096681382579916e+02 -1.8935195651576731e+01 -7.9806045193644053e+01 - 64 -3.1936156133135496e+00 4.6513700660101048e-02 8.3862808743546626e+00 + 1 -6.0534645145648003e-01 2.0490125142856343e+01 1.6648208023093289e+01 + 2 -1.2749046366870745e+02 -6.4504381248900700e+01 -3.3716375596974380e+01 + 3 -1.6342204335899717e+02 -1.3396664396482173e+01 4.5692267509451177e+01 + 4 -7.8870068093839381e+00 1.2972936781684837e+02 -1.6419656645734710e+02 + 5 4.8918187767250529e+01 1.3823473902089916e+00 1.9051901498667373e+01 + 6 -3.2217559408292800e+01 -1.0434654692224890e+02 -2.9320508669124575e+01 + 7 5.4685482542934963e+01 -4.0913834522837853e+01 -5.8349766019648300e+01 + 8 -3.4367642772956280e+01 -5.4585186892759367e+01 3.9155531771540218e+01 + 9 1.0601014501546494e+02 2.4500001511422795e+01 -8.2915025009415800e+01 + 10 8.3462678605079503e+00 5.5855282366135333e+00 1.5830465964187832e+01 + 11 8.7783011742612149e-01 -5.8988623148460874e+01 -3.9893180667775169e+01 + 12 4.4192563652665477e+01 1.4903480456696022e+02 -1.6218838252950351e+02 + 13 -1.4907026911859381e+02 -1.1996190268755961e+02 1.0916115686191783e+02 + 14 -1.6820374642303830e+00 -2.4232555426634963e+01 -2.4809946417719761e+01 + 15 2.8901602741068682e+01 9.0133191694045664e+01 5.2278573470177072e+00 + 16 1.1506733821329195e+02 2.8309093992724236e+01 6.7468417805747620e+01 + 17 4.4257255431684463e+01 4.2407333214416951e+01 7.2793631733387386e+01 + 18 -7.8977034468957488e+00 -1.3669789133291792e+02 6.1120146993309191e+01 + 19 1.0685009056217766e+02 2.0723181938553230e+02 4.4132300789748633e+01 + 20 -4.9540522923054496e+01 -8.1654094590184428e+01 -2.8997875362041071e+01 + 21 -1.3290069759452277e+02 3.7557478358730158e+01 -1.0101938510036251e+02 + 22 1.3266930310569251e+02 -1.1782738996724052e+02 5.4033869597187142e+01 + 23 5.1411828172687052e+01 -2.3873134320726876e+01 -4.7714567146505658e+01 + 24 3.2394909823512677e+01 8.7142324555442215e+01 6.6890162049549701e+01 + 25 -7.6341432355343244e+01 1.4702522316559507e+02 -6.9632724851295876e+01 + 26 1.3052765150969583e+02 -7.6696182913969395e+01 -6.8145924300379818e+01 + 27 6.2311958892509331e+01 5.0102763422779617e+01 3.3488178292027470e+01 + 28 8.1186295261640566e+00 -3.8527514615597682e+00 -1.5914974194595397e+01 + 29 -1.1706684265874600e+02 7.1117366064210685e+01 1.0440174413169855e+02 + 30 2.6655592601243921e+01 -1.1286357159794112e+02 1.8650222025318016e+01 + 31 -1.0847645947858814e+02 1.0999773345124531e+02 -5.5645268409936840e+01 + 32 -1.4602083482733319e+01 4.2817529781102081e+01 3.8850947830915153e+01 + 33 -2.9520660987903561e+01 -7.8703219223782552e+00 4.0687094597635955e+01 + 34 9.4330984288340304e+01 5.1581021253231995e+01 4.9658562842576037e+00 + 35 1.3877954225794704e+02 1.2981672960908002e+01 -3.9286026004795474e+01 + 36 -5.4281832355709049e+01 -8.6096754308296994e+01 6.3568799091657759e+01 + 37 4.8504198102471200e+01 7.1092541583554180e+01 -6.4171160261393979e+01 + 38 -1.2066758000224574e+02 -2.3920136882520853e+02 1.0640567006320937e+02 + 39 4.7490452022853722e+00 1.1165646897952268e+01 9.5262863232580543e+01 + 40 -4.2085934927746331e+00 2.8924027673385053e+00 -3.8864906267852453e+00 + 41 -1.2581102584993123e+02 -1.1458697139063914e+02 1.5623382059204921e+01 + 42 4.3307172659951547e+01 -1.1323548884377668e+02 -1.2149392171689064e+02 + 43 -6.1577481628398711e+00 -1.1290908173680807e+01 1.3011636386659001e+02 + 44 2.3305673881682942e+01 -7.2442029045404066e+00 -2.1410705920606127e+01 + 45 -2.2859046973467493e+01 1.3728979914298196e+02 1.7762645521906552e+02 + 46 4.5770763692126557e+01 -6.7545012643732250e+01 3.7524584079778663e+01 + 47 -3.2703157129860266e+01 -5.3003288712663696e+01 -5.4679718667335798e+01 + 48 2.0332172363044410e+02 -3.0317799427585521e+02 -1.7385460171636424e+02 + 49 -6.8095898817475813e+01 3.9170071697073382e+01 3.5938054139215069e+01 + 50 8.9649805163244558e+00 1.4184638942162550e+02 1.5861520011389007e+02 + 51 3.5572336572326343e+01 -3.2566551596255863e+01 1.4766618079532589e+02 + 52 -1.0584159720006831e+02 1.0312313779927695e+02 -5.0608741149756575e+01 + 53 -3.4011002586413966e+01 9.4955869394378155e+01 -2.0787133718905216e+02 + 54 3.1066412932871927e+01 -5.5563772173201052e+01 4.7456671973726081e+01 + 55 8.0175294108441150e+01 -1.2981874507023045e+02 5.6596138094613501e+01 + 56 -1.2384377111863076e+01 -2.8594542597333827e+01 -5.6640252472693300e+00 + 57 4.5292282475583974e+01 1.5919550837365520e+02 9.9972384981534574e+01 + 58 -2.8755603512163074e+01 6.0635111477784655e+01 -2.3805133344801074e+01 + 59 -2.2258338293365904e+02 1.3033438858598447e+02 1.4065563522798971e+02 + 60 -2.7053145071164007e+01 1.4141214632431618e+02 -1.2765956262388919e+02 + 61 -6.3875966560680567e+01 -1.6334004987975155e+02 -1.2898051535560722e+02 + 62 6.9338762467687147e+01 6.4181751436246046e+01 -9.4056261135312837e+01 + 63 1.1091695804223893e+02 -1.8954098180429035e+01 -7.9745012228597403e+01 + 64 -3.2140386259794864e+00 6.3292061355858090e-02 8.3553398760433684e+00 ... From a45dbb6510d369e08bf1e6c446b3c54520ee364b Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Mon, 11 Oct 2021 16:35:42 -0400 Subject: [PATCH 145/372] no need for static string buffers anymore --- src/KOKKOS/fix_acks2_reaxff_kokkos.cpp | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/src/KOKKOS/fix_acks2_reaxff_kokkos.cpp b/src/KOKKOS/fix_acks2_reaxff_kokkos.cpp index cb65667a17..63fb1e7a53 100644 --- a/src/KOKKOS/fix_acks2_reaxff_kokkos.cpp +++ b/src/KOKKOS/fix_acks2_reaxff_kokkos.cpp @@ -1356,14 +1356,11 @@ int FixACKS2ReaxFFKokkos::bicgstab_solve() if (comm->me == 0) { if (omega == 0 || rho == 0) { - char str[128]; - sprintf(str,"Fix acks2/reaxff/kk BiCGStab numerical breakdown, omega = %g, rho = %g",omega,rho); - error->warning(FLERR,str); + error->warning(FLERR,"Fix acks2/reaxff/kk BiCGStab numerical breakdown, omega = {:.8}, rho = {:.8}", + omega,rho); } else if (i >= imax) { - char str[128]; - sprintf(str,"Fix acks2/reaxff/kk BiCGStab convergence failed after %d iterations " - "at " BIGINT_FORMAT " step",i,update->ntimestep); - error->warning(FLERR,str); + error->warning(FLERR,"Fix acks2/reaxff/kk BiCGStab convergence failed after {} iterations " + "at step {}", i, update->ntimestep); } } From 4faca6531afe2a02a0693bfd42bb653f0ca20c7e Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Mon, 11 Oct 2021 16:35:54 -0400 Subject: [PATCH 146/372] fix typo --- src/REAXFF/fix_acks2_reaxff.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/REAXFF/fix_acks2_reaxff.cpp b/src/REAXFF/fix_acks2_reaxff.cpp index 1de4eaaf1c..f9a3b384bd 100644 --- a/src/REAXFF/fix_acks2_reaxff.cpp +++ b/src/REAXFF/fix_acks2_reaxff.cpp @@ -615,7 +615,7 @@ int FixACKS2ReaxFF::BiCGStab(double *b, double *x) error->warning(FLERR,"Fix acks2/reaxff BiCGStab numerical breakdown, omega = {:.8}, rho = {:.8}", omega,rho); } else if (i >= imax) { - error->warning(FLERR,"Fix acks2/reaxff BiCGStab convergence failed afteri {} iterations " + error->warning(FLERR,"Fix acks2/reaxff BiCGStab convergence failed after {} iterations " "at step {}", i, update->ntimestep); } } From e79930dfb904c247600eea0899630853f31c580c Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Mon, 11 Oct 2021 16:48:38 -0400 Subject: [PATCH 147/372] add check to prohibit using fix efield component in periodic direction with reaxff --- src/REAXFF/fix_qeq_reaxff.cpp | 21 +- .../atomic-pair-reaxff-acks2_efield.yaml | 271 +++++++++--------- 2 files changed, 151 insertions(+), 141 deletions(-) diff --git a/src/REAXFF/fix_qeq_reaxff.cpp b/src/REAXFF/fix_qeq_reaxff.cpp index 3d57037cf0..3d4c6a8815 100644 --- a/src/REAXFF/fix_qeq_reaxff.cpp +++ b/src/REAXFF/fix_qeq_reaxff.cpp @@ -24,6 +24,7 @@ #include "atom.h" #include "citeme.h" #include "comm.h" +#include "domain.h" #include "error.h" #include "fix_efield.h" #include "force.h" @@ -56,6 +57,7 @@ public: }; static constexpr double EV_TO_KCAL_PER_MOL = 14.4; +static constexpr double SMALL = 1.0e-14; static const char cite_fix_qeq_reaxff[] = "fix qeq/reaxff command:\n\n" @@ -386,14 +388,21 @@ void FixQEqReaxFF::init() efield = nullptr; int ifix = modify->find_fix_by_style("^efield"); if (ifix >= 0) efield = (FixEfield *) modify->fix[ifix]; - if (efield && (strcmp(update->unit_style,"real") != 0)) - error->all(FLERR,"Must use unit_style real with fix qeq/reax and external fields"); - // ensure that fix efield is properly initialized before accessing its data - if (efield) efield->init(); + // ensure that fix efield is properly initialized before accessing its data and check some settings + if (efield) { + efield->init(); + if (strcmp(update->unit_style,"real") != 0) + error->all(FLERR,"Must use unit_style real with fix qeq/reax and external fields"); + if (efield->varflag != FixEfield::CONSTANT) + error->all(FLERR,"Cannot yet use fix qeq/reaxff with variable efield"); - if (efield && efield->varflag != FixEfield::CONSTANT) - error->all(FLERR,"Cannot yet use fix qeq/reaxff with variable efield"); + if (((fabs(efield->ex) > SMALL) && domain->xperiodic) || + ((fabs(efield->ey) > SMALL) && domain->yperiodic) || + ((fabs(efield->ez) > SMALL) && domain->zperiodic)) + error->all(FLERR,"Must not have electric field component in direction of periodic " + " boundary when using charge equilibration with ReaxFF."); + } // we need a half neighbor list w/ Newton off and ghost neighbors // built whenever re-neighboring occurs diff --git a/unittest/force-styles/tests/atomic-pair-reaxff-acks2_efield.yaml b/unittest/force-styles/tests/atomic-pair-reaxff-acks2_efield.yaml index df5028ebf0..c1ce9400df 100644 --- a/unittest/force-styles/tests/atomic-pair-reaxff-acks2_efield.yaml +++ b/unittest/force-styles/tests/atomic-pair-reaxff-acks2_efield.yaml @@ -1,6 +1,6 @@ --- lammps_version: 29 Sep 2021 -date_generated: Mon Oct 11 15:04:02 2021 +date_generated: Mon Oct 11 16:46:47 2021 epsilon: 5e-09 skip_tests: omp prerequisites: ! | @@ -9,6 +9,7 @@ prerequisites: ! | fix efield pre_commands: ! | echo screen + boundary m p m variable newton_pair delete variable newton_pair index on atom_modify map array @@ -34,142 +35,142 @@ pair_coeff: ! | * * acks2_ff.water H O extract: ! "" natoms: 64 -init_vdwl: -1315.674323112547 -init_coul: -251.82090045725639 +init_vdwl: -1263.7843580276833 +init_coul: -241.77314680827783 init_stress: ! |- - -3.6248203180610562e+02 -5.3650193090416508e+02 -3.2704899016718207e+02 -1.8743806303083343e+02 -7.3095987266072214e+01 2.8639763194591950e+02 + -1.0732860357525092e+03 -1.0969136803775482e+03 -8.9679213159248161e+02 -6.2188995258019281e+02 8.0978562087079951e+01 -3.3551831576810690e+02 init_forces: ! |2 - 1 -6.0474888543374250e-01 2.0489649995558754e+01 1.6648364779019744e+01 - 2 -1.2749134842729102e+02 -6.4503057574327073e+01 -3.3718453656574930e+01 - 3 -1.6342191173987982e+02 -1.3393229948000869e+01 4.5694274570610652e+01 - 4 -7.8854643738361601e+00 1.2972879461866518e+02 -1.6419615181006944e+02 - 5 4.8919028111728558e+01 1.3819098076417511e+00 1.9053450706472873e+01 - 6 -3.2216914902686355e+01 -1.0434775916626768e+02 -2.9318847227302268e+01 - 7 5.4684250482474496e+01 -4.0912897084090297e+01 -5.8349936825290740e+01 - 8 -3.4367021683063456e+01 -5.4584797656977585e+01 3.9155995710188556e+01 - 9 1.0600851517860997e+02 2.4498474157371156e+01 -8.2913093189173011e+01 - 10 8.3447555122428945e+00 5.5887654013312265e+00 1.5835121440453630e+01 - 11 8.7572566893644610e-01 -5.8986862879536041e+01 -3.9886865373529496e+01 - 12 4.4192345243601785e+01 1.4903392498874101e+02 -1.6218370486731774e+02 - 13 -1.4906640085858768e+02 -1.1996153586254185e+02 1.0915649288501857e+02 - 14 -1.6833012837170072e+00 -2.4233165182314483e+01 -2.4811938863342640e+01 - 15 2.8898786208161422e+01 9.0133089611581354e+01 5.2288108254884502e+00 - 16 1.1506676261173565e+02 2.8307591282944003e+01 6.7469070898638549e+01 - 17 4.4257973806416992e+01 4.2407688485923074e+01 7.2793365925840433e+01 - 18 -7.8977859494116300e+00 -1.3669750942661153e+02 6.1120481191966931e+01 - 19 1.0684914671183908e+02 2.0723159679482674e+02 4.4131491641634142e+01 - 20 -4.9535230351257923e+01 -8.1659711231323953e+01 -2.8988673695399932e+01 - 21 -1.3290061561881626e+02 3.7559062025695049e+01 -1.0102144944394804e+02 - 22 1.3266879649177807e+02 -1.1782711519876337e+02 5.4033868409821174e+01 - 23 5.1412768765820744e+01 -2.3872394714355163e+01 -4.7713714953621249e+01 - 24 3.2397200883161723e+01 8.7139210825850910e+01 6.6886164799436017e+01 - 25 -7.6340762972498425e+01 1.4702473102700208e+02 -6.9633473850736578e+01 - 26 1.3052749262039134e+02 -7.6695482657430858e+01 -6.8146832497552452e+01 - 27 6.2311328472972022e+01 5.0102146475294738e+01 3.3487656891465093e+01 - 28 8.1220660377519014e+00 -3.8526584610995638e+00 -1.5911015141625269e+01 - 29 -1.1706729068476002e+02 7.1116576477118556e+01 1.0440265768703344e+02 - 30 2.6655660049196644e+01 -1.1286162374010593e+02 1.8649616508460088e+01 - 31 -1.0847573454065018e+02 1.0999786960515976e+02 -5.5644474464115881e+01 - 32 -1.4601550882506764e+01 4.2814168618056271e+01 3.8844512642781829e+01 - 33 -2.9523705560873584e+01 -7.8738611064108870e+00 4.0690697413797913e+01 - 34 9.4330789388586496e+01 5.1581866766538482e+01 4.9652665701242871e+00 - 35 1.3877931988938562e+02 1.2981185992845743e+01 -3.9285626545724483e+01 - 36 -5.4281635961457255e+01 -8.6097513480939028e+01 6.3568634213235761e+01 - 37 4.8504225500561368e+01 7.1094239906310165e+01 -6.4173067133746329e+01 - 38 -1.2066891638994815e+02 -2.3920176902796737e+02 1.0640521226438770e+02 - 39 4.7488293654083238e+00 1.1166191882479307e+01 9.5263143005518629e+01 - 40 -4.2084051248415868e+00 2.8924624990689383e+00 -3.8864497992312974e+00 - 41 -1.2581078648542228e+02 -1.1458578261672687e+02 1.5622587628084212e+01 - 42 4.3308292540862560e+01 -1.1323405493901932e+02 -1.2149477714325465e+02 - 43 -6.1587444023100080e+00 -1.1291818226674597e+01 1.3011699482876304e+02 - 44 2.3308040192407436e+01 -7.2458060870809842e+00 -2.1411592197658475e+01 - 45 -2.2860729759655108e+01 1.3728736904257494e+02 1.7762717296134940e+02 - 46 4.5769057235977925e+01 -6.7544602163517524e+01 3.7523830941935529e+01 - 47 -3.2702317993220667e+01 -5.3003738108804356e+01 -5.4679913394119872e+01 - 48 2.0332089603497599e+02 -3.0317483137796347e+02 -1.7385385920473672e+02 - 49 -6.8096084527994051e+01 3.9169024045628518e+01 3.5938376283054012e+01 - 50 8.9675894077393270e+00 1.4184624320072172e+02 1.5861454562527356e+02 - 51 3.5568943556122257e+01 -3.2562283481868455e+01 1.4766101383357829e+02 - 52 -1.0584057829258875e+02 1.0312235620825653e+02 -5.0609137884615848e+01 - 53 -3.4007748684053084e+01 9.4952314958175407e+01 -2.0786631792300025e+02 - 54 3.1059962195077311e+01 -5.5559501950052180e+01 4.7448054107780315e+01 - 55 8.0175215230090444e+01 -1.2981884067102311e+02 5.6596779206710927e+01 - 56 -1.2384422784037508e+01 -2.8595624968835004e+01 -5.6642147617504595e+00 - 57 4.5292326329866704e+01 1.5919693082065845e+02 9.9972956212900030e+01 - 58 -2.8755449205031599e+01 6.0636061740026541e+01 -2.3804095261332346e+01 - 59 -2.2258323329086073e+02 1.3033276121477300e+02 1.4065450346074496e+02 - 60 -2.7053767966908950e+01 1.4140884150929287e+02 -1.2766063272045497e+02 - 61 -6.3876457686609292e+01 -1.6334214518985453e+02 -1.2898084618000010e+02 - 62 6.9336974950833849e+01 6.4184374812555248e+01 -9.4061024912913510e+01 - 63 1.1091626260128440e+02 -1.8954854753727091e+01 -7.9743958117332326e+01 - 64 -3.2102600057900830e+00 6.9354135543417822e-02 8.3529729679024722e+00 -run_vdwl: -1315.6737992579026 -run_coul: -251.821079754404 + 1 1.6546391079420221e+01 1.8861758944082130e+01 2.0995653962315806e+01 + 2 1.4111235729849533e+01 1.1562148258279237e+01 1.7393710487932907e+01 + 3 -1.6239245832069577e+02 7.4190659084767430e-01 3.1265619190286909e+01 + 4 -3.7147367389925115e+01 -4.1363429018534575e+01 9.7478167060301875e+00 + 5 8.4659282359703411e+01 1.1715106080985931e+01 -2.0690183352373207e+01 + 6 -6.7208703993974851e+01 -1.0878565879924859e+02 -6.7593451962795870e+00 + 7 5.5853305658642057e+01 -3.6422472922878974e+01 -5.9874797494309583e+01 + 8 7.5561170694434864e+01 3.7223369080308792e+01 -9.1364575541097750e+01 + 9 9.1113045964459189e+01 -8.0419886829521925e+00 -5.4841050914075417e+01 + 10 -5.0531057477339854e+00 2.0267263384912127e+01 3.8892689633641368e+01 + 11 2.2657842431552653e+00 -5.5298191902892022e+01 -3.3353516245565721e+01 + 12 -8.6533251375363335e+01 -6.9397568715256767e+01 7.0612280239691444e+01 + 13 6.5590825624744852e+01 3.4684073618160760e+01 -1.0088972064790433e+02 + 14 -3.6414638133615385e+00 -2.4434713792657710e+01 -2.4468269138467015e+01 + 15 -1.8836775084082767e+01 4.6726736688341660e+01 4.0644108557999864e+01 + 16 -3.5136712133445607e+00 1.9615714188966621e+01 2.1986915731584052e+01 + 17 3.0824371211869405e+01 5.1089885717425695e+01 2.4230958400234169e+01 + 18 6.5771934884265013e+00 -1.4598753214559812e+01 -7.6858898006781873e+00 + 19 5.4540235029082325e+01 2.1142619067916439e+02 7.1057358369970970e+01 + 20 6.6708528716282673e+00 -1.2392272601416553e+02 6.2546545871386819e+01 + 21 -1.6666609705407143e+02 5.0056801608501580e+01 -1.1351203550116394e+02 + 22 3.1319343625822956e+01 -2.6662324063682341e+00 1.5282722081253391e+02 + 23 4.4088338782032970e+01 -3.6248640578688985e+01 -4.5807931438759610e+01 + 24 2.8719664790142112e+01 7.2185461686680000e+01 5.7351598630215889e+01 + 25 -5.5610872591149182e+01 -6.4673257000887105e+01 9.7717315948857106e+01 + 26 1.2973916394044352e+02 -7.5778756404718536e+01 -6.6518970704161163e+01 + 27 8.8164702916386332e+01 5.1469851565154613e+01 2.3429054646198193e+01 + 28 1.2513566503796572e+01 1.3636847850649245e+01 -9.4237710535076946e+00 + 29 -1.1778287928008122e+02 6.6008520363979073e+01 9.0942007689215728e+01 + 30 1.9895774651443908e+01 -1.1703379325605137e+02 1.5486512836678589e+01 + 31 -1.1144223051456871e+02 -4.6446802143393228e+01 -2.1365120190637104e+01 + 32 -1.1955194353501186e+01 9.5884384434641809e+00 2.7934876123981223e+01 + 33 8.7762452029606806e+01 -6.1321454451476200e+01 -7.1551836952995288e+01 + 34 1.2870204245733254e+02 8.7748454832710337e+01 6.8843559193971259e+01 + 35 1.6203316176079645e+02 2.8091514071105244e+01 -3.5725109788921301e+01 + 36 -5.1130756566408394e+01 -6.9911332800248374e+01 4.6487863327658971e+01 + 37 2.2171535358414413e+01 4.4736307132550174e+01 -6.8029263095734422e+01 + 38 -1.3241655767930430e+02 -9.8312099883057385e+01 -4.8856893029569278e+01 + 39 -1.4546426228549892e+01 7.1365335423723764e-01 -6.9702422766941021e+00 + 40 -6.3722500090376251e+00 3.6211509748499506e+00 -6.3458985069850442e+00 + 41 -1.2629253622575479e+02 -1.1405692399540031e+02 1.4218331875010282e+01 + 42 3.3358434665700187e+01 -1.2561452878299590e+02 -1.1708384236452427e+02 + 43 2.4830336012405912e+01 -3.4751800839253974e+01 1.1724278604113481e+02 + 44 4.0739838794800242e+01 -1.2075244716678061e+01 -2.3183983543542091e+01 + 45 -2.3234406593911050e+01 1.3605500661033898e+02 1.7647169504292015e+02 + 46 2.6928805859962801e+00 4.1722960257468902e+00 -3.8374276548778066e+00 + 47 -3.9484662269978024e+01 -4.3832898140787648e+01 -5.0167603663576394e+01 + 48 9.2976327582464933e+01 -8.8061956303819287e+01 -5.6621734881076151e+01 + 49 5.7430095442987628e+01 2.1766168325857529e+00 -4.3778654846221514e+01 + 50 5.0092312689801062e+01 2.7259262163626556e+01 1.0399919534071583e+02 + 51 1.8968555284562250e+01 -6.2777933487589088e+01 1.6721333807708328e+02 + 52 -1.0200522251473313e+02 1.0135184344278437e+02 -4.9665456998198394e+01 + 53 -8.9778493426390568e+01 1.0160863048539531e+02 -2.2023943337291072e+02 + 54 -3.0608459013902589e+01 -1.9047060692946193e+01 -2.5853851585912452e+01 + 55 -7.5154785044478212e-01 -9.6930202098147522e-01 1.2746916065701841e+00 + 56 -8.5202307337373000e+00 -1.4740487699669208e+01 1.0288507098119926e+01 + 57 4.7508701142140850e+01 1.6105934039988682e+02 1.0237730511392915e+02 + 58 -1.3163588317780638e+01 7.3223236334805449e+01 4.4745649920692188e+00 + 59 -6.4622043742400862e+01 9.6137126297415094e+01 1.5094617420501373e+02 + 60 3.0081992309898734e+01 1.7978124603531816e+02 -9.7551968747316934e+01 + 61 -5.1743981417993375e+01 -1.7194348937642167e+02 -1.2738608708730519e+02 + 62 5.7619427719052908e+01 5.3321960833662928e+01 -1.0989111220717433e+02 + 63 -2.5220226491307002e+01 -5.4636700274842710e+01 -5.0903166727478791e+01 + 64 -8.8046883187957562e+01 -3.0751522257501687e+01 3.1298488797042353e+01 +run_vdwl: -1263.7812226206759 +run_coul: -241.77324614099936 run_stress: ! |- - -3.6248584076016164e+02 -5.3649833911871724e+02 -3.2705252376426523e+02 -1.8742714543193361e+02 -7.3103141718023124e+01 2.8639002855016633e+02 + -1.0732796522501428e+03 -1.0969076752471606e+03 -8.9678333828990594e+02 -6.2188877646006847e+02 8.0972532865788025e+01 -3.3552588986946586e+02 run_forces: ! |2 - 1 -6.0534645145648003e-01 2.0490125142856343e+01 1.6648208023093289e+01 - 2 -1.2749046366870745e+02 -6.4504381248900700e+01 -3.3716375596974380e+01 - 3 -1.6342204335899717e+02 -1.3396664396482173e+01 4.5692267509451177e+01 - 4 -7.8870068093839381e+00 1.2972936781684837e+02 -1.6419656645734710e+02 - 5 4.8918187767250529e+01 1.3823473902089916e+00 1.9051901498667373e+01 - 6 -3.2217559408292800e+01 -1.0434654692224890e+02 -2.9320508669124575e+01 - 7 5.4685482542934963e+01 -4.0913834522837853e+01 -5.8349766019648300e+01 - 8 -3.4367642772956280e+01 -5.4585186892759367e+01 3.9155531771540218e+01 - 9 1.0601014501546494e+02 2.4500001511422795e+01 -8.2915025009415800e+01 - 10 8.3462678605079503e+00 5.5855282366135333e+00 1.5830465964187832e+01 - 11 8.7783011742612149e-01 -5.8988623148460874e+01 -3.9893180667775169e+01 - 12 4.4192563652665477e+01 1.4903480456696022e+02 -1.6218838252950351e+02 - 13 -1.4907026911859381e+02 -1.1996190268755961e+02 1.0916115686191783e+02 - 14 -1.6820374642303830e+00 -2.4232555426634963e+01 -2.4809946417719761e+01 - 15 2.8901602741068682e+01 9.0133191694045664e+01 5.2278573470177072e+00 - 16 1.1506733821329195e+02 2.8309093992724236e+01 6.7468417805747620e+01 - 17 4.4257255431684463e+01 4.2407333214416951e+01 7.2793631733387386e+01 - 18 -7.8977034468957488e+00 -1.3669789133291792e+02 6.1120146993309191e+01 - 19 1.0685009056217766e+02 2.0723181938553230e+02 4.4132300789748633e+01 - 20 -4.9540522923054496e+01 -8.1654094590184428e+01 -2.8997875362041071e+01 - 21 -1.3290069759452277e+02 3.7557478358730158e+01 -1.0101938510036251e+02 - 22 1.3266930310569251e+02 -1.1782738996724052e+02 5.4033869597187142e+01 - 23 5.1411828172687052e+01 -2.3873134320726876e+01 -4.7714567146505658e+01 - 24 3.2394909823512677e+01 8.7142324555442215e+01 6.6890162049549701e+01 - 25 -7.6341432355343244e+01 1.4702522316559507e+02 -6.9632724851295876e+01 - 26 1.3052765150969583e+02 -7.6696182913969395e+01 -6.8145924300379818e+01 - 27 6.2311958892509331e+01 5.0102763422779617e+01 3.3488178292027470e+01 - 28 8.1186295261640566e+00 -3.8527514615597682e+00 -1.5914974194595397e+01 - 29 -1.1706684265874600e+02 7.1117366064210685e+01 1.0440174413169855e+02 - 30 2.6655592601243921e+01 -1.1286357159794112e+02 1.8650222025318016e+01 - 31 -1.0847645947858814e+02 1.0999773345124531e+02 -5.5645268409936840e+01 - 32 -1.4602083482733319e+01 4.2817529781102081e+01 3.8850947830915153e+01 - 33 -2.9520660987903561e+01 -7.8703219223782552e+00 4.0687094597635955e+01 - 34 9.4330984288340304e+01 5.1581021253231995e+01 4.9658562842576037e+00 - 35 1.3877954225794704e+02 1.2981672960908002e+01 -3.9286026004795474e+01 - 36 -5.4281832355709049e+01 -8.6096754308296994e+01 6.3568799091657759e+01 - 37 4.8504198102471200e+01 7.1092541583554180e+01 -6.4171160261393979e+01 - 38 -1.2066758000224574e+02 -2.3920136882520853e+02 1.0640567006320937e+02 - 39 4.7490452022853722e+00 1.1165646897952268e+01 9.5262863232580543e+01 - 40 -4.2085934927746331e+00 2.8924027673385053e+00 -3.8864906267852453e+00 - 41 -1.2581102584993123e+02 -1.1458697139063914e+02 1.5623382059204921e+01 - 42 4.3307172659951547e+01 -1.1323548884377668e+02 -1.2149392171689064e+02 - 43 -6.1577481628398711e+00 -1.1290908173680807e+01 1.3011636386659001e+02 - 44 2.3305673881682942e+01 -7.2442029045404066e+00 -2.1410705920606127e+01 - 45 -2.2859046973467493e+01 1.3728979914298196e+02 1.7762645521906552e+02 - 46 4.5770763692126557e+01 -6.7545012643732250e+01 3.7524584079778663e+01 - 47 -3.2703157129860266e+01 -5.3003288712663696e+01 -5.4679718667335798e+01 - 48 2.0332172363044410e+02 -3.0317799427585521e+02 -1.7385460171636424e+02 - 49 -6.8095898817475813e+01 3.9170071697073382e+01 3.5938054139215069e+01 - 50 8.9649805163244558e+00 1.4184638942162550e+02 1.5861520011389007e+02 - 51 3.5572336572326343e+01 -3.2566551596255863e+01 1.4766618079532589e+02 - 52 -1.0584159720006831e+02 1.0312313779927695e+02 -5.0608741149756575e+01 - 53 -3.4011002586413966e+01 9.4955869394378155e+01 -2.0787133718905216e+02 - 54 3.1066412932871927e+01 -5.5563772173201052e+01 4.7456671973726081e+01 - 55 8.0175294108441150e+01 -1.2981874507023045e+02 5.6596138094613501e+01 - 56 -1.2384377111863076e+01 -2.8594542597333827e+01 -5.6640252472693300e+00 - 57 4.5292282475583974e+01 1.5919550837365520e+02 9.9972384981534574e+01 - 58 -2.8755603512163074e+01 6.0635111477784655e+01 -2.3805133344801074e+01 - 59 -2.2258338293365904e+02 1.3033438858598447e+02 1.4065563522798971e+02 - 60 -2.7053145071164007e+01 1.4141214632431618e+02 -1.2765956262388919e+02 - 61 -6.3875966560680567e+01 -1.6334004987975155e+02 -1.2898051535560722e+02 - 62 6.9338762467687147e+01 6.4181751436246046e+01 -9.4056261135312837e+01 - 63 1.1091695804223893e+02 -1.8954098180429035e+01 -7.9745012228597403e+01 - 64 -3.2140386259794864e+00 6.3292061355858090e-02 8.3553398760433684e+00 + 1 1.6545750410702723e+01 1.8861113401191805e+01 2.0994442903393846e+01 + 2 1.4110691180572175e+01 1.1561877963040637e+01 1.7393314544206305e+01 + 3 -1.6239301919906148e+02 7.3855000559847417e-01 3.1263225921497554e+01 + 4 -3.7147761185012214e+01 -4.1363750259083417e+01 9.7487511470707933e+00 + 5 8.4660121700500824e+01 1.1715898459427024e+01 -2.0690999101366469e+01 + 6 -6.7208079580142027e+01 -1.0878376489699417e+02 -6.7607282230465229e+00 + 7 5.5854561275701982e+01 -3.6423302592954123e+01 -5.9874535235164593e+01 + 8 7.5560183321470589e+01 3.7222860155773837e+01 -9.1364389866389061e+01 + 9 9.1114303832477532e+01 -8.0412585383406352e+00 -5.4842997886173436e+01 + 10 -5.0523230232091221e+00 2.0265114816391392e+01 3.8889234902462817e+01 + 11 2.2682084500174753e+00 -5.5300243188777230e+01 -3.3360687241514825e+01 + 12 -8.6527339565082087e+01 -6.9393955565083047e+01 7.0609176004266146e+01 + 13 6.5585323581384628e+01 3.4682825963120656e+01 -1.0088331890447535e+02 + 14 -3.6401983626224585e+00 -2.4434080310911735e+01 -2.4466299526168708e+01 + 15 -1.8835207169463239e+01 4.6725346047120468e+01 4.0642930096915499e+01 + 16 -3.5136833503612950e+00 1.9613471715481918e+01 2.1984172223983645e+01 + 17 3.0824498024156689e+01 5.1089866020486014e+01 2.4231024241397481e+01 + 18 6.5773821318963961e+00 -1.4598596987699596e+01 -7.6857506630241250e+00 + 19 5.4541406204381246e+01 2.1142618537301604e+02 7.1058174448787113e+01 + 20 6.6709902774729155e+00 -1.2392213884396607e+02 6.2546547527587968e+01 + 21 -1.6666622250066479e+02 5.0056313338937251e+01 -1.1351131816115038e+02 + 22 3.1321048691145066e+01 -2.6681645705183374e+00 1.5282695458202130e+02 + 23 4.4087430948134049e+01 -3.6249322023306590e+01 -4.5808853307740513e+01 + 24 2.8717522909333930e+01 7.2188487280775249e+01 5.7355323040480336e+01 + 25 -5.5610436653498105e+01 -6.4673047871720584e+01 9.7716804832152064e+01 + 26 1.2973924726955281e+02 -7.5779384583476443e+01 -6.6518000341450062e+01 + 27 8.8164274681988317e+01 5.1471828342380469e+01 2.3431269313907997e+01 + 28 1.2512427045148057e+01 1.3635647303149140e+01 -9.4236984785940923e+00 + 29 -1.1778204623771865e+02 6.6009611690159204e+01 9.0940682905069323e+01 + 30 1.9895674901179447e+01 -1.1703564889382272e+02 1.5487039408491238e+01 + 31 -1.1144317981145872e+02 -4.6447411753392025e+01 -2.1365901029536250e+01 + 32 -1.1956794481866662e+01 9.5915378370243225e+00 2.7941597377830124e+01 + 33 8.7762239116691802e+01 -6.1321651470311387e+01 -7.1551859613730457e+01 + 34 1.2870236947336866e+02 8.7747701115996051e+01 6.8843794503397135e+01 + 35 1.6203342004649303e+02 2.8091864263469084e+01 -3.5725640342886898e+01 + 36 -5.1129449444708399e+01 -6.9908957427379235e+01 4.6486707406834640e+01 + 37 2.2170233973697332e+01 4.4733230591592772e+01 -6.8025862410549607e+01 + 38 -1.3241705466224587e+02 -9.8311479029891444e+01 -4.8857095261564282e+01 + 39 -1.4546300180687089e+01 7.1364471389283324e-01 -6.9702724557850768e+00 + 40 -6.3724517405160075e+00 3.6210884893313926e+00 -6.3459482443210664e+00 + 41 -1.2629277180832160e+02 -1.1405812491188213e+02 1.4219145936240416e+01 + 42 3.3357518078041473e+01 -1.2561592086832152e+02 -1.1708313715896094e+02 + 43 2.4829915780145324e+01 -3.4751034438977314e+01 1.1724361875496233e+02 + 44 4.0737069875366871e+01 -1.2073429330880259e+01 -2.3182761440721762e+01 + 45 -2.3232685552250352e+01 1.3605750083199675e+02 1.7647096959432437e+02 + 46 2.6929261237120703e+00 4.1722813851353369e+00 -3.8373960275274004e+00 + 47 -3.9484993497373381e+01 -4.3833195666847651e+01 -5.0168111751763171e+01 + 48 9.2977986489867959e+01 -8.8063607405444969e+01 -5.6623455211101849e+01 + 49 5.7430372042316414e+01 2.1767674533857706e+00 -4.3778322457790196e+01 + 50 5.0090465125354598e+01 2.7259400687445599e+01 1.0399865192218491e+02 + 51 1.8972114009805686e+01 -6.2782389243897654e+01 1.6721827819210549e+02 + 52 -1.0200749905127171e+02 1.0135374142436632e+02 -4.9665839984636015e+01 + 53 -8.9781321286262951e+01 1.0161209980372010e+02 -2.2024444602788429e+02 + 54 -3.0607738454604608e+01 -1.9046344689624316e+01 -2.5853149278625938e+01 + 55 -7.5157878891494301e-01 -9.6931695447022925e-01 1.2746760307000604e+00 + 56 -8.5202678203603881e+00 -1.4739444281661580e+01 1.0288582198851518e+01 + 57 4.7508643680718777e+01 1.6105788487418164e+02 1.0237672411441389e+02 + 58 -1.3162790733545656e+01 7.3223345786153246e+01 4.4754768042828861e+00 + 59 -6.4623071331623692e+01 9.6138716327963948e+01 1.5094756474900402e+02 + 60 3.0082706223767062e+01 1.7978436266695135e+02 -9.7551180236422582e+01 + 61 -5.1743454564557908e+01 -1.7194144525253105e+02 -1.2738576727184436e+02 + 62 5.7618418018677232e+01 5.3320495190538324e+01 -1.0989178092048547e+02 + 63 -2.5220918836608899e+01 -5.4636462465362712e+01 -5.0902802955232808e+01 + 64 -8.8046806021226445e+01 -3.0753787001664563e+01 3.1297451388805559e+01 ... From 7bed85ef19cab0e9433a44e20d1b86b363044687 Mon Sep 17 00:00:00 2001 From: Steve Plimpton Date: Mon, 11 Oct 2021 15:00:20 -0600 Subject: [PATCH 148/372] add debug statements --- src/MC/fix_mol_swap.cpp | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/src/MC/fix_mol_swap.cpp b/src/MC/fix_mol_swap.cpp index 9a7bbc5f79..a8871ac269 100644 --- a/src/MC/fix_mol_swap.cpp +++ b/src/MC/fix_mol_swap.cpp @@ -203,20 +203,34 @@ int FixMolSwap::attempt_swap() tagint molID = minmol + static_cast (random->uniform() * (maxmol-minmol+1)); - if (molID < maxmol) molID = maxmol; + if (molID > maxmol) molID = maxmol; + + //printf(" Attempt %ld molID %d\n",update->ntimestep,molID); int *mask = atom->mask; int *type = atom->type; tagint *molecule = atom->molecule; int nlocal = atom->nlocal; + // DEBUG + int origitype = 0; + int origjtype = 0; + for (int i = 0; i < nlocal; i++) { if (molecule[i] != molID) continue; if (!(mask[i] & groupbit)) continue; - if (type[i] == itype) type[i] = jtype; - else if (type[i] == jtype) type[i] = itype; + if (type[i] == itype) { + origitype++; + type[i] = jtype; + } else if (type[i] == jtype) { + origjtype++; + type[i] = itype; + } } + //printf(" ijtype %d %d orig %d %d count %d\n", + // itype,jtype,origitype,origjtype,origitype+origjtype); + // if unequal_cutoffs, call comm->borders() and rebuild neighbor list // else communicate ghost atoms // call to comm->exchange() is a no-op but clears ghost atoms @@ -236,10 +250,13 @@ int FixMolSwap::attempt_swap() double energy_after = energy_full(); + //printf(" eng before: %g, eng after %g\n",energy_before,energy_after); + // swap accepted if (random->uniform() < exp(beta*(energy_before - energy_after))) { energy_stored = energy_after; + //printf(" accept\n"); return 1; // swap not accepted @@ -248,6 +265,7 @@ int FixMolSwap::attempt_swap() // since will be done on next cycle or in Verlet when this fix is done } else { + //printf(" reject\n"); for (int i = 0; i < nlocal; i++) { if (molecule[i] != molID) continue; if (!(mask[i] & groupbit)) continue; From cb77555fa6edfe7fdc7518e8fb60ae143600c11d Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Mon, 11 Oct 2021 17:23:57 -0400 Subject: [PATCH 149/372] update title in reference to accelerator section --- doc/src/Speed.rst | 2 +- doc/src/accel_styles.rst | 4 ++-- doc/src/angle_charmm.rst | 4 ++-- doc/src/atom_style.rst | 4 ++-- doc/src/fix_setforce.rst | 4 ++-- doc/src/improper_harmonic.rst | 4 ++-- doc/src/kspace_style.rst | 4 ++-- doc/src/package.rst | 2 +- doc/src/pair_agni.rst | 4 ++-- doc/src/pair_hybrid.rst | 4 ++-- doc/src/pair_sw.rst | 4 ++-- doc/src/region.rst | 4 ++-- doc/src/run_style.rst | 4 ++-- 13 files changed, 24 insertions(+), 24 deletions(-) diff --git a/doc/src/Speed.rst b/doc/src/Speed.rst index 02eae1f3fa..dfd5f4bf3e 100644 --- a/doc/src/Speed.rst +++ b/doc/src/Speed.rst @@ -14,7 +14,7 @@ Intel Xeon Phi co-processors. The `Benchmark page `_ of the LAMMPS website gives performance results for the various accelerator -packages discussed on the :doc:`Speed packages ` doc +packages discussed on the :doc:`Accelerator packages ` page, for several of the standard LAMMPS benchmark problems, as a function of problem size and number of compute nodes, on different hardware platforms. diff --git a/doc/src/accel_styles.rst b/doc/src/accel_styles.rst index 27a798d731..228953335c 100644 --- a/doc/src/accel_styles.rst +++ b/doc/src/accel_styles.rst @@ -1,7 +1,7 @@ Styles with a *gpu*, *intel*, *kk*, *omp*, or *opt* suffix are functionally the same as the corresponding style without the suffix. They have been optimized to run faster, depending on your available -hardware, as discussed on the :doc:`Speed packages ` doc +hardware, as discussed on the :doc:`Accelerator packages ` page. The accelerated styles take the same arguments and should produce the same results, except for round-off and precision issues. @@ -13,5 +13,5 @@ You can specify the accelerated styles explicitly in your input script by including their suffix, or you can use the :doc:`-suffix command-line switch ` when you invoke LAMMPS, or you can use the :doc:`suffix ` command in your input script. -See the :doc:`Speed packages ` page for more +See the :doc:`Accelerator packages ` page for more instructions on how to use the accelerated styles effectively. diff --git a/doc/src/angle_charmm.rst b/doc/src/angle_charmm.rst index 0da31e54e7..28c20bde5e 100644 --- a/doc/src/angle_charmm.rst +++ b/doc/src/angle_charmm.rst @@ -59,7 +59,7 @@ radian\^2. Styles with a *gpu*, *intel*, *kk*, *omp*, or *opt* suffix are functionally the same as the corresponding style without the suffix. They have been optimized to run faster, depending on your available -hardware, as discussed on the :doc:`Speed packages ` doc +hardware, as discussed on the :doc:`Accelerator packages ` page. The accelerated styles take the same arguments and should produce the same results, except for round-off and precision issues. @@ -71,7 +71,7 @@ You can specify the accelerated styles explicitly in your input script by including their suffix, or you can use the :doc:`-suffix command-line switch ` when you invoke LAMMPS, or you can use the :doc:`suffix ` command in your input script. -See :doc:`Speed packages ` page for more +See :doc:`Accelerator packages ` page for more instructions on how to use the accelerated styles effectively. ---------- diff --git a/doc/src/atom_style.rst b/doc/src/atom_style.rst index bade8c2f79..08e3dc745e 100644 --- a/doc/src/atom_style.rst +++ b/doc/src/atom_style.rst @@ -322,7 +322,7 @@ styles; see the :doc:`Modify ` doc page. 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 on -the :doc:`Speed packages ` doc page. The accelerated +the :doc:`Accelerator packages ` page. The accelerated styles take the same arguments and should produce the same results, except for round-off and precision issues. @@ -339,7 +339,7 @@ by including their suffix, or you can use the :doc:`-suffix command-line switch ` when you invoke LAMMPS, or you can use the :doc:`suffix ` command in your input script. -See the :doc:`Speed packages ` page for more +See the :doc:`Accelerator packages ` page for more instructions on how to use the accelerated styles effectively. Restrictions diff --git a/doc/src/fix_setforce.rst b/doc/src/fix_setforce.rst index fd1eb70c4a..d344aa153b 100644 --- a/doc/src/fix_setforce.rst +++ b/doc/src/fix_setforce.rst @@ -92,7 +92,7 @@ precession vectors instead of the forces. Styles with a *gpu*, *intel*, *kk*, *omp*, or *opt* suffix are functionally the same as the corresponding style without the suffix. They have been optimized to run faster, depending on your available -hardware, as discussed on the :doc:`Speed packages ` doc +hardware, as discussed on the :doc:`Accelerator packages ` page. The accelerated styles take the same arguments and should produce the same results, except for round-off and precision issues. @@ -107,7 +107,7 @@ You can specify the accelerated styles explicitly in your input script by including their suffix, or you can use the :doc:`-suffix command-line switch ` when you invoke LAMMPS, or you can use the :doc:`suffix ` command in your input script. -See the :doc:`Speed packages ` page for more +See the :doc:`Accelerator packages ` page for more instructions on how to use the accelerated styles effectively. ---------- diff --git a/doc/src/improper_harmonic.rst b/doc/src/improper_harmonic.rst index 42cd3b75c5..e40c4e559b 100644 --- a/doc/src/improper_harmonic.rst +++ b/doc/src/improper_harmonic.rst @@ -67,7 +67,7 @@ radian\^2. Styles with a *gpu*, *intel*, *kk*, *omp*, or *opt* suffix are functionally the same as the corresponding style without the suffix. They have been optimized to run faster, depending on your available -hardware, as discussed on the :doc:`Speed packages ` doc +hardware, as discussed on the :doc:`Accelerator packages ` page. The accelerated styles take the same arguments and should produce the same results, except for round-off and precision issues. @@ -81,7 +81,7 @@ by including their suffix, or you can use the :doc:`-suffix command-line switch ` when you invoke LAMMPS, or you can use the :doc:`suffix ` command in your input script. -See the :doc:`Speed packages ` page for more +See the :doc:`Accelerator packages ` page for more instructions on how to use the accelerated styles effectively. ---------- diff --git a/doc/src/kspace_style.rst b/doc/src/kspace_style.rst index be854581ed..6c0e95ffaf 100644 --- a/doc/src/kspace_style.rst +++ b/doc/src/kspace_style.rst @@ -417,7 +417,7 @@ relative RMS error. Styles with a *gpu*, *intel*, *kk*, *omp*, or *opt* suffix are functionally the same as the corresponding style without the suffix. They have been optimized to run faster, depending on your available -hardware, as discussed on the :doc:`Speed packages ` doc +hardware, as discussed on the :doc:`Accelerator packages ` page. The accelerated styles take the same arguments and should produce the same results, except for round-off and precision issues. @@ -439,7 +439,7 @@ These accelerated styles are part of the GPU, INTEL, KOKKOS, OPENMP, and OPT packages respectively. They are only enabled if LAMMPS was built with those packages. See the :doc:`Build package ` page for more info. -See the :doc:`Speed packages ` page for more +See the :doc:`Accelerator packages ` page for more instructions on how to use the accelerated styles effectively. ---------- diff --git a/doc/src/package.rst b/doc/src/package.rst index 0fc71b48f9..2cf772ea5a 100644 --- a/doc/src/package.rst +++ b/doc/src/package.rst @@ -166,7 +166,7 @@ intel", or "package omp" command with default settings. set, either to default values or to specified settings. I.e. settings from previous invocations do not persist across multiple invocations. -See the :doc:`Speed packages ` page for more details +See the :doc:`Accelerator packages ` page for more details about using the various accelerator packages for speeding up LAMMPS simulations. diff --git a/doc/src/pair_agni.rst b/doc/src/pair_agni.rst index 8e91e57b72..ed0ae686ee 100644 --- a/doc/src/pair_agni.rst +++ b/doc/src/pair_agni.rst @@ -69,7 +69,7 @@ and input files are provided in the examples/PACKAGES/agni directory. Styles with *omp* suffix is functionally the same as the corresponding style without the suffix. They have been optimized to run faster, -depending on your available hardware, as discussed on the :doc:`Speed packages ` doc page. The accelerated style takes +depending on your available hardware, as discussed on the :doc:`Accelerator packages ` page. The accelerated style takes the same arguments and should produce the same results, except for round-off and precision issues. @@ -80,7 +80,7 @@ You can specify the accelerated style explicitly in your input script by including their suffix, or you can use the :doc:`-suffix command-line switch ` when you invoke LAMMPS, or you can use the :doc:`suffix ` command in your input script. -See the :doc:`Speed packages ` page for more +See the :doc:`Accelerator packages ` page for more instructions on how to use the accelerated styles effectively. ---------- diff --git a/doc/src/pair_hybrid.rst b/doc/src/pair_hybrid.rst index 9c3cd6622a..c5a7c8afe3 100644 --- a/doc/src/pair_hybrid.rst +++ b/doc/src/pair_hybrid.rst @@ -386,7 +386,7 @@ coefficients to 0.0. Styles with a *gpu*, *intel*, *kk*, *omp*, or *opt* suffix are functionally the same as the corresponding style without the suffix. They have been optimized to run faster, depending on your available -hardware, as discussed on the :doc:`Speed packages ` doc +hardware, as discussed on the :doc:`Accelerator packages ` page. Pair style *hybrid/scaled* does (currently) not support the *gpu*, *omp*, *kk*, or *intel* suffix. @@ -405,7 +405,7 @@ You can specify the accelerated styles explicitly in your input script by including their suffix, or you can use the :doc:`-suffix command-line switch ` when you invoke LAMMPS, or you can use the :doc:`suffix ` command in your input script. -See the :doc:`Speed packages ` page for more +See the :doc:`Accelerator packages ` page for more instructions on how to use the accelerated styles effectively. ---------- diff --git a/doc/src/pair_sw.rst b/doc/src/pair_sw.rst index f207b25863..15d402f028 100644 --- a/doc/src/pair_sw.rst +++ b/doc/src/pair_sw.rst @@ -162,7 +162,7 @@ taken from the ij and ik pairs (:math:`\sigma`, *a*, :math:`\gamma`) Styles with a *gpu*, *intel*, *kk*, *omp*, or *opt* suffix are functionally the same as the corresponding style without the suffix. They have been optimized to run faster, depending on your available -hardware, as discussed on the :doc:`Speed packages ` doc +hardware, as discussed on the :doc:`Accelerator packages ` page. The accelerated styles take the same arguments and should produce the same results, except for round-off and precision issues. @@ -179,7 +179,7 @@ additional 5 to 10 percent performance improvement when the Stillinger-Weber parameters p and q are set to 4 and 0 respectively. These parameters are common for modeling silicon and water. -See the :doc:`Speed packages ` page for more +See the :doc:`Accelerator packages ` page for more instructions on how to use the accelerated styles effectively. ---------- diff --git a/doc/src/region.rst b/doc/src/region.rst index d891a69410..932c8e8fb1 100644 --- a/doc/src/region.rst +++ b/doc/src/region.rst @@ -374,7 +374,7 @@ sub-regions can be defined with the *open* keyword. Styles with a *gpu*, *intel*, *kk*, *omp*, or *opt* suffix are functionally the same as the corresponding style without the suffix. They have been optimized to run faster, depending on your available -hardware, as discussed on the :doc:`Speed packages ` doc +hardware, as discussed on the :doc:`Accelerator packages ` page. The accelerated styles take the same arguments and should produce the same results, except for round-off and precision issues. @@ -389,7 +389,7 @@ You can specify the accelerated styles explicitly in your input script by including their suffix, or you can use the :doc:`-suffix command-line switch ` when you invoke LAMMPS, or you can use the :doc:`suffix ` command in your input script. -See the :doc:`Speed packages ` page for more +See the :doc:`Accelerator packages ` page for more instructions on how to use the accelerated styles effectively. ---------- diff --git a/doc/src/run_style.rst b/doc/src/run_style.rst index bcfa3d7b54..61ee8fad85 100644 --- a/doc/src/run_style.rst +++ b/doc/src/run_style.rst @@ -125,7 +125,7 @@ screen.0 by default; see the :doc:`-plog and -pscreen command-line switches ` page for performance +See the :doc:`Accelerator packages ` page for performance details of the speed-up offered by the *verlet/split* style. One important performance consideration is the assignment of logical processors in the 2 partitions to the physical cores of a parallel @@ -298,7 +298,7 @@ can use the :doc:`-suffix command-line switch ` when you invoke LAMMPS, or you can use the :doc:`suffix ` command in your input script. -See the :doc:`Speed packages ` page for more +See the :doc:`Accelerator packages ` page for more instructions on how to use the accelerated styles effectively. ---------- From eedd9532587e2ee38bba4cf91c68cf07b8c19fdf Mon Sep 17 00:00:00 2001 From: Steve Plimpton Date: Mon, 11 Oct 2021 16:20:19 -0600 Subject: [PATCH 150/372] remove debug logic --- src/MC/fix_mol_swap.cpp | 22 ++-------------------- 1 file changed, 2 insertions(+), 20 deletions(-) diff --git a/src/MC/fix_mol_swap.cpp b/src/MC/fix_mol_swap.cpp index a8871ac269..842a76593a 100644 --- a/src/MC/fix_mol_swap.cpp +++ b/src/MC/fix_mol_swap.cpp @@ -205,32 +205,18 @@ int FixMolSwap::attempt_swap() minmol + static_cast (random->uniform() * (maxmol-minmol+1)); if (molID > maxmol) molID = maxmol; - //printf(" Attempt %ld molID %d\n",update->ntimestep,molID); - int *mask = atom->mask; int *type = atom->type; tagint *molecule = atom->molecule; int nlocal = atom->nlocal; - // DEBUG - int origitype = 0; - int origjtype = 0; - for (int i = 0; i < nlocal; i++) { if (molecule[i] != molID) continue; if (!(mask[i] & groupbit)) continue; - if (type[i] == itype) { - origitype++; - type[i] = jtype; - } else if (type[i] == jtype) { - origjtype++; - type[i] = itype; - } + if (type[i] == itype) type[i] = jtype; + else if (type[i] == jtype) type[i] = itype; } - //printf(" ijtype %d %d orig %d %d count %d\n", - // itype,jtype,origitype,origjtype,origitype+origjtype); - // if unequal_cutoffs, call comm->borders() and rebuild neighbor list // else communicate ghost atoms // call to comm->exchange() is a no-op but clears ghost atoms @@ -250,13 +236,10 @@ int FixMolSwap::attempt_swap() double energy_after = energy_full(); - //printf(" eng before: %g, eng after %g\n",energy_before,energy_after); - // swap accepted if (random->uniform() < exp(beta*(energy_before - energy_after))) { energy_stored = energy_after; - //printf(" accept\n"); return 1; // swap not accepted @@ -265,7 +248,6 @@ int FixMolSwap::attempt_swap() // since will be done on next cycle or in Verlet when this fix is done } else { - //printf(" reject\n"); for (int i = 0; i < nlocal; i++) { if (molecule[i] != molID) continue; if (!(mask[i] & groupbit)) continue; From 27c9ba465b90d2715f8c810f348b5a188af33135 Mon Sep 17 00:00:00 2001 From: Steve Plimpton Date: Mon, 11 Oct 2021 16:49:59 -0600 Subject: [PATCH 151/372] avoid duplication of Accelerator package info in additional doc pages --- doc/src/angle_charmm.rst | 18 +--------------- doc/src/atom_style.rst | 23 ++------------------- doc/src/fix_setforce.rst | 23 +++++---------------- doc/src/improper_harmonic.rst | 20 +----------------- doc/src/kspace_style.rst | 39 ++++++++++++++--------------------- doc/src/pair_agni.rst | 16 +------------- doc/src/pair_hybrid.rst | 33 ++++++++++------------------- doc/src/pair_sw.rst | 26 ++++++----------------- doc/src/region.rst | 23 +++++---------------- doc/src/run_style.rst | 20 ++++++++++-------- 10 files changed, 59 insertions(+), 182 deletions(-) diff --git a/doc/src/angle_charmm.rst b/doc/src/angle_charmm.rst index 28c20bde5e..425ed7e4f1 100644 --- a/doc/src/angle_charmm.rst +++ b/doc/src/angle_charmm.rst @@ -56,23 +56,7 @@ radian\^2. ---------- -Styles with a *gpu*, *intel*, *kk*, *omp*, or *opt* suffix are -functionally the same as the corresponding style without the suffix. -They have been optimized to run faster, depending on your available -hardware, as discussed on the :doc:`Accelerator packages ` -page. The accelerated styles take the same arguments and should -produce the same results, except for round-off and precision issues. - -These accelerated styles are part of the GPU, INTEL, KOKKOS, -OPENMP and OPT packages, respectively. They are only enabled if -LAMMPS was built with those packages. See the :doc:`Build package ` page for more info. - -You can specify the accelerated styles explicitly in your input script -by including their suffix, or you can use the :doc:`-suffix command-line switch ` when you invoke LAMMPS, or you can use the -:doc:`suffix ` command in your input script. - -See :doc:`Accelerator packages ` page for more -instructions on how to use the accelerated styles effectively. +.. include:: accel_styles.rst ---------- diff --git a/doc/src/atom_style.rst b/doc/src/atom_style.rst index 08e3dc745e..3a525b27f5 100644 --- a/doc/src/atom_style.rst +++ b/doc/src/atom_style.rst @@ -319,28 +319,9 @@ styles; see the :doc:`Modify ` doc page. ---------- -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 on -the :doc:`Accelerator packages ` page. The accelerated -styles take the same arguments and should produce the same results, -except for round-off and precision issues. +.. include:: accel_styles.rst -Note that other acceleration packages in LAMMPS, specifically the GPU, -INTEL, OPENMP, and OPT packages do not use accelerated atom -styles. - -The accelerated styles are part of the KOKKOS package. They are only -enabled if LAMMPS was built with those packages. See the :doc:`Build -package ` page for more info. - -You can specify the accelerated styles explicitly in your input script -by including their suffix, or you can use the :doc:`-suffix command-line -switch ` when you invoke LAMMPS, or you can use the -:doc:`suffix ` command in your input script. - -See the :doc:`Accelerator packages ` page for more -instructions on how to use the accelerated styles effectively. +---------- Restrictions """""""""""" diff --git a/doc/src/fix_setforce.rst b/doc/src/fix_setforce.rst index d344aa153b..f899b63aa5 100644 --- a/doc/src/fix_setforce.rst +++ b/doc/src/fix_setforce.rst @@ -89,26 +89,13 @@ precession vectors instead of the forces. ---------- -Styles with a *gpu*, *intel*, *kk*, *omp*, or *opt* suffix are -functionally the same as the corresponding style without the suffix. -They have been optimized to run faster, depending on your available -hardware, as discussed on the :doc:`Accelerator packages ` -page. The accelerated styles take the same arguments and should -produce the same results, except for round-off and precision issues. +.. include:: accel_styles.rst -The region keyword is also supported by Kokkos, but a Kokkos-enabled -region must be used. See the region :doc:`region ` command for -more information. +.. note:: -These accelerated styles are part of the r Kokkos package. They are -only enabled if LAMMPS was built with that package. See the :doc:`Build package ` page for more info. - -You can specify the accelerated styles explicitly in your input script -by including their suffix, or you can use the :doc:`-suffix command-line switch ` when you invoke LAMMPS, or you can use the -:doc:`suffix ` command in your input script. - -See the :doc:`Accelerator packages ` page for more -instructions on how to use the accelerated styles effectively. + The region keyword is supported by Kokkos, but a Kokkos-enabled + region must be used. See the region :doc:`region ` command for + more information. ---------- diff --git a/doc/src/improper_harmonic.rst b/doc/src/improper_harmonic.rst index e40c4e559b..706b8af1de 100644 --- a/doc/src/improper_harmonic.rst +++ b/doc/src/improper_harmonic.rst @@ -64,25 +64,7 @@ radian\^2. ---------- -Styles with a *gpu*, *intel*, *kk*, *omp*, or *opt* suffix are -functionally the same as the corresponding style without the suffix. -They have been optimized to run faster, depending on your available -hardware, as discussed on the :doc:`Accelerator packages ` -page. The accelerated styles take the same arguments and should -produce the same results, except for round-off and precision issues. - -These accelerated styles are part of the GPU, INTEL, KOKKOS, -OPENMP and OPT packages, respectively. They are only enabled if -LAMMPS was built with those packages. See the :doc:`Build package -` page for more info. - -You can specify the accelerated styles explicitly in your input script -by including their suffix, or you can use the :doc:`-suffix -command-line switch ` when you invoke LAMMPS, or you can -use the :doc:`suffix ` command in your input script. - -See the :doc:`Accelerator packages ` page for more -instructions on how to use the accelerated styles effectively. +.. include:: accel_styles.rst ---------- diff --git a/doc/src/kspace_style.rst b/doc/src/kspace_style.rst index 6c0e95ffaf..0d3028ecd4 100644 --- a/doc/src/kspace_style.rst +++ b/doc/src/kspace_style.rst @@ -414,33 +414,26 @@ relative RMS error. ---------- -Styles with a *gpu*, *intel*, *kk*, *omp*, or *opt* suffix are -functionally the same as the corresponding style without the suffix. -They have been optimized to run faster, depending on your available -hardware, as discussed on the :doc:`Accelerator packages ` -page. The accelerated styles take the same arguments and should -produce the same results, except for round-off and precision issues. +.. include:: accel_styles.rst -More specifically, the *pppm/gpu* style performs charge assignment and -force interpolation calculations on the GPU. These processes are -performed either in single or double precision, depending on whether -the -DFFT_SINGLE setting was specified in your low-level Makefile, as -discussed above. The FFTs themselves are still calculated on the CPU. -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. +.. note:: -The *pppm/kk* style performs charge assignment and force interpolation -calculations, along with the FFTs themselves, on the GPU or (optionally) threaded -on the CPU when using OpenMP and FFTW3. + For the GPU package, the *pppm/gpu* style performs charge assignment + and force interpolation calculations on the GPU. These processes + are performed either in single or double precision, depending on + whether the -DFFT_SINGLE setting was specified in your low-level + Makefile, as discussed above. The FFTs themselves are still + calculated on the CPU. 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 GPU, INTEL, KOKKOS, -OPENMP, and OPT packages respectively. They are only enabled if -LAMMPS was built with those packages. See the :doc:`Build package ` page for more info. +.. note:: -See the :doc:`Accelerator packages ` page for more -instructions on how to use the accelerated styles effectively. + For the KOKKOS package, the *pppm/kk* style performs charge + assignment and force interpolation calculations, along with the FFTs + themselves, on the GPU or (optionally) threaded on the CPU when + using OpenMP and FFTW3. ---------- diff --git a/doc/src/pair_agni.rst b/doc/src/pair_agni.rst index ed0ae686ee..ae23306195 100644 --- a/doc/src/pair_agni.rst +++ b/doc/src/pair_agni.rst @@ -67,21 +67,7 @@ and input files are provided in the examples/PACKAGES/agni directory. ---------- -Styles with *omp* suffix is functionally the same as the corresponding -style without the suffix. They have been optimized to run faster, -depending on your available hardware, as discussed on the :doc:`Accelerator packages ` page. The accelerated style takes -the same arguments and should produce the same results, except for -round-off and precision issues. - -The accelerated style is part of the OPENMP. They are only enabled -if LAMMPS was built with those packages. See the :doc:`Build package ` page for more info. - -You can specify the accelerated style explicitly in your input script -by including their suffix, or you can use the :doc:`-suffix command-line switch ` when you invoke LAMMPS, or you can use the -:doc:`suffix ` command in your input script. - -See the :doc:`Accelerator packages ` page for more -instructions on how to use the accelerated styles effectively. +.. include:: accel_styles.rst ---------- diff --git a/doc/src/pair_hybrid.rst b/doc/src/pair_hybrid.rst index c5a7c8afe3..541cdc1911 100644 --- a/doc/src/pair_hybrid.rst +++ b/doc/src/pair_hybrid.rst @@ -383,30 +383,19 @@ coefficients to 0.0. ---------- -Styles with a *gpu*, *intel*, *kk*, *omp*, or *opt* suffix are -functionally the same as the corresponding style without the suffix. -They have been optimized to run faster, depending on your available -hardware, as discussed on the :doc:`Accelerator packages ` -page. Pair style *hybrid/scaled* does (currently) not support the -*gpu*, *omp*, *kk*, or *intel* suffix. +.. include:: accel_styles.rst -Since the *hybrid*, *hybrid/overlay*, *hybrid/scaled* 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. +.. note:: -The individual accelerated sub-styles are part of the GPU, KOKKOS, -INTEL, OPENMP, and OPT packages, respectively. They are only -enabled if LAMMPS was built with those packages. See the :doc:`Build -package ` page for more info. - -You can specify the accelerated styles explicitly in your input script -by including their suffix, or you can use the :doc:`-suffix command-line switch ` when you invoke LAMMPS, or you can use the -:doc:`suffix ` command in your input script. - -See the :doc:`Accelerator packages ` page for more -instructions on how to use the accelerated styles effectively. + Since the *hybrid*, *hybrid/overlay*, *hybrid/scaled* 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 GPU, KOKKOS, + INTEL, OPENMP, and OPT packages, respectively. They are only + enabled if LAMMPS was built with those packages. See the + :doc:`Build package ` page for more info. ---------- diff --git a/doc/src/pair_sw.rst b/doc/src/pair_sw.rst index 15d402f028..1b2a4a4b1d 100644 --- a/doc/src/pair_sw.rst +++ b/doc/src/pair_sw.rst @@ -159,28 +159,14 @@ taken from the ij and ik pairs (:math:`\sigma`, *a*, :math:`\gamma`) ---------- -Styles with a *gpu*, *intel*, *kk*, *omp*, or *opt* suffix are -functionally the same as the corresponding style without the suffix. -They have been optimized to run faster, depending on your available -hardware, as discussed on the :doc:`Accelerator packages ` -page. The accelerated styles take the same arguments and should -produce the same results, except for round-off and precision issues. +.. include:: accel_styles.rst -These accelerated styles are part of the GPU, INTEL, KOKKOS, -OPENMP and OPT packages, respectively. They are only enabled if -LAMMPS was built with those packages. See the :doc:`Build package ` page for more info. +.. note:: -You can specify the accelerated styles explicitly in your input script -by including their suffix, or you can use the :doc:`-suffix command-line switch ` when you invoke LAMMPS, or you can use the -:doc:`suffix ` command in your input script. - -When using the INTEL package with this style, there is an -additional 5 to 10 percent performance improvement when the -Stillinger-Weber parameters p and q are set to 4 and 0 respectively. -These parameters are common for modeling silicon and water. - -See the :doc:`Accelerator packages ` page for more -instructions on how to use the accelerated styles effectively. + When using the INTEL package with this style, there is an additional + 5 to 10 percent performance improvement when the Stillinger-Weber + parameters p and q are set to 4 and 0 respectively. These + parameters are common for modeling silicon and water. ---------- diff --git a/doc/src/region.rst b/doc/src/region.rst index 932c8e8fb1..da3e67c004 100644 --- a/doc/src/region.rst +++ b/doc/src/region.rst @@ -371,26 +371,13 @@ sub-regions can be defined with the *open* keyword. ---------- -Styles with a *gpu*, *intel*, *kk*, *omp*, or *opt* suffix are -functionally the same as the corresponding style without the suffix. -They have been optimized to run faster, depending on your available -hardware, as discussed on the :doc:`Accelerator packages ` -page. The accelerated styles take the same arguments and should -produce the same results, except for round-off and precision issues. +.. include:: accel_styles.rst -The code using the region (such as a fix or compute) must also be supported -by Kokkos or no acceleration will occur. Currently, only *block* style -regions are supported by Kokkos. +.. note:: -These accelerated styles are part of the Kokkos package. They are -only enabled if LAMMPS was built with that package. See the :doc:`Build package ` page for more info. - -You can specify the accelerated styles explicitly in your input script -by including their suffix, or you can use the :doc:`-suffix command-line switch ` when you invoke LAMMPS, or you can use the -:doc:`suffix ` command in your input script. - -See the :doc:`Accelerator packages ` page for more -instructions on how to use the accelerated styles effectively. + Currently, only *block* style regions are supported by Kokkos. The + code using the region (such as a fix or compute) must also be + supported by Kokkos or no acceleration will occur. ---------- diff --git a/doc/src/run_style.rst b/doc/src/run_style.rst index 61ee8fad85..b4d1c22113 100644 --- a/doc/src/run_style.rst +++ b/doc/src/run_style.rst @@ -125,12 +125,13 @@ screen.0 by default; see the :doc:`-plog and -pscreen command-line switches ` page for performance -details of the speed-up offered by the *verlet/split* style. One -important performance consideration is the assignment of logical -processors in the 2 partitions to the physical cores of a parallel -machine. The :doc:`processors ` command has options to -support this, and strategies are discussed in :doc:`Section 5 ` of the manual. +See the :doc:`Accelerator packages ` page for +performance details of the speed-up offered by the *verlet/split* +style. One important performance consideration is the assignment of +logical processors in the 2 partitions to the physical cores of a +parallel machine. The :doc:`processors ` command has +options to support this, and strategies are discussed in :doc:`Section +5 ` of the manual. ---------- @@ -295,8 +296,8 @@ except for round-off and precision issues. You can specify *respa/omp* explicitly in your input script, or you can use the :doc:`-suffix command-line switch ` when you -invoke LAMMPS, or you can use the :doc:`suffix ` command in your -input script. +invoke LAMMPS, or you can use the :doc:`suffix ` command in +your input script. See the :doc:`Accelerator packages ` page for more instructions on how to use the accelerated styles effectively. @@ -308,7 +309,8 @@ Restrictions The *verlet/split* style can only be used if LAMMPS was built with the REPLICA package. Correspondingly the *respa/omp* style is available -only if the OPENMP package was included. See the :doc:`Build package ` page for more info. +only if the OPENMP package was included. See the :doc:`Build package +` page for more info. Whenever using rRESPA, the user should experiment with trade-offs in speed and accuracy for their system, and verify that they are From 96a45224dee86578b23e78597d446e38cbb0bd9f Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Mon, 11 Oct 2021 21:10:14 -0400 Subject: [PATCH 152/372] whitespace --- doc/src/kspace_style.rst | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/doc/src/kspace_style.rst b/doc/src/kspace_style.rst index 0d3028ecd4..1dec62bb43 100644 --- a/doc/src/kspace_style.rst +++ b/doc/src/kspace_style.rst @@ -416,7 +416,7 @@ relative RMS error. .. include:: accel_styles.rst -.. note:: +.. note:: For the GPU package, the *pppm/gpu* style performs charge assignment and force interpolation calculations on the GPU. These processes @@ -428,7 +428,7 @@ relative RMS error. concurrently on the GPU while other calculations for non-bonded and bonded force calculation are performed on the CPU. -.. note:: +.. note:: For the KOKKOS package, the *pppm/kk* style performs charge assignment and force interpolation calculations, along with the FFTs From 2651e4650fdb3a5e7325ad748fc5adcce3259d60 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Mon, 11 Oct 2021 23:23:24 -0400 Subject: [PATCH 153/372] use the new name of the main branch --- .github/workflows/codeql-analysis.yml | 2 +- .github/workflows/compile-msvc.yml | 2 +- .github/workflows/unittest-macos.yml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml index 064ba6c652..f9503e0e1f 100644 --- a/.github/workflows/codeql-analysis.yml +++ b/.github/workflows/codeql-analysis.yml @@ -3,7 +3,7 @@ name: "CodeQL Code Analysis" on: push: - branches: [master] + branches: [develop] jobs: analyze: diff --git a/.github/workflows/compile-msvc.yml b/.github/workflows/compile-msvc.yml index 307dc81fe6..e8cfcd4788 100644 --- a/.github/workflows/compile-msvc.yml +++ b/.github/workflows/compile-msvc.yml @@ -3,7 +3,7 @@ name: "Native Windows Compilation" on: push: - branches: [master] + branches: [develop] jobs: build: diff --git a/.github/workflows/unittest-macos.yml b/.github/workflows/unittest-macos.yml index 88e28513e8..6e2f9bd800 100644 --- a/.github/workflows/unittest-macos.yml +++ b/.github/workflows/unittest-macos.yml @@ -3,7 +3,7 @@ name: "Unittest for MacOS" on: push: - branches: [master] + branches: [develop] jobs: build: From 93d6e6dec99e5410121672cb015f02254e39ff47 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Tue, 12 Oct 2021 11:46:37 -0400 Subject: [PATCH 154/372] update for new way of using googletest --- unittest/formats/CMakeLists.txt | 2 +- unittest/utils/CMakeLists.txt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/unittest/formats/CMakeLists.txt b/unittest/formats/CMakeLists.txt index 6be712edd6..9978857c1e 100644 --- a/unittest/formats/CMakeLists.txt +++ b/unittest/formats/CMakeLists.txt @@ -8,7 +8,7 @@ target_link_libraries(test_image_flags PRIVATE lammps gmock) add_test(NAME ImageFlags COMMAND test_image_flags WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}) add_executable(test_input_convert test_input_convert.cpp) -target_link_libraries(test_input_convert PRIVATE lammps GTest::GMockMain GTest::GMock GTest::GTest) +target_link_libraries(test_input_convert PRIVATE lammps gmock_main) add_test(NAME InputConvert COMMAND test_input_convert WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}) add_executable(test_molecule_file test_molecule_file.cpp) diff --git a/unittest/utils/CMakeLists.txt b/unittest/utils/CMakeLists.txt index 047f0cee57..8aa671cba6 100644 --- a/unittest/utils/CMakeLists.txt +++ b/unittest/utils/CMakeLists.txt @@ -15,7 +15,7 @@ target_link_libraries(test_utils PRIVATE lammps gmock_main) add_test(Utils test_utils) add_executable(test_platform test_platform.cpp) -target_link_libraries(test_platform PRIVATE lammps GTest::GMockMain GTest::GMock GTest::GTest) +target_link_libraries(test_platform PRIVATE lammps gmock_main) add_test(Platform test_platform) set_tests_properties(Utils Platform PROPERTIES From 0a98ff3c38cf9f80ea652348c308c54edb5de370 Mon Sep 17 00:00:00 2001 From: Steve Plimpton Date: Tue, 12 Oct 2021 09:56:51 -0600 Subject: [PATCH 155/372] add more features to mol/swap, sync with atom/swap --- src/MC/fix_atom_swap.cpp | 119 ++++++++++++++++------------ src/MC/fix_atom_swap.h | 2 +- src/MC/fix_mol_swap.cpp | 165 ++++++++++++++++++++++++++++++++------- src/MC/fix_mol_swap.h | 21 +++-- 4 files changed, 221 insertions(+), 86 deletions(-) diff --git a/src/MC/fix_atom_swap.cpp b/src/MC/fix_atom_swap.cpp index 610f1f099e..b3420e423e 100644 --- a/src/MC/fix_atom_swap.cpp +++ b/src/MC/fix_atom_swap.cpp @@ -144,7 +144,7 @@ void FixAtomSwap::options(int narg, char **arg) if (narg < 0) error->all(FLERR,"Illegal fix atom/swap command"); regionflag = 0; - conserve_ke_flag = 1; + ke_flag = 1; semi_grand_flag = 0; nswaptypes = 0; nmutypes = 0; @@ -162,7 +162,7 @@ void FixAtomSwap::options(int narg, char **arg) iarg += 2; } else if (strcmp(arg[iarg],"ke") == 0) { if (iarg+2 > narg) error->all(FLERR,"Illegal fix atom/swap command"); - conserve_ke_flag = utils::logical(FLERR,arg[iarg+1],false,lmp); + ke_flag = utils::logical(FLERR,arg[iarg+1],false,lmp); iarg += 2; } else if (strcmp(arg[iarg],"semi-grand") == 0) { if (iarg+2 > narg) error->all(FLERR,"Illegal fix atom/swap command"); @@ -303,6 +303,8 @@ void FixAtomSwap::pre_exchange() if (next_reneighbor != update->ntimestep) return; + // insure current system is ready to compute energy + if (domain->triclinic) domain->x2lamda(atom->nlocal); domain->pbc(); comm->exchange(); @@ -311,8 +313,13 @@ void FixAtomSwap::pre_exchange() if (modify->n_pre_neighbor) modify->pre_neighbor(); neighbor->build(1); + // energy_stored = energy of current state + // will be updated after accepted swaps + energy_stored = energy_full(); + // attempt Ncycle atom swaps + int nsuccess = 0; if (semi_grand_flag) { update_semi_grand_atoms_list(); @@ -322,23 +329,30 @@ void FixAtomSwap::pre_exchange() for (int i = 0; i < ncycles; i++) nsuccess += attempt_swap(); } + // udpate MC stats + nswap_attempts += ncycles; nswap_successes += nsuccess; - energy_full(); next_reneighbor = update->ntimestep + nevery; } /* ---------------------------------------------------------------------- -Note: atom charges are assumed equal and so are not updated + attempt a semd-grand swap of a single atom + compare before/after energy and accept/reject the swap + NOTE: atom charges are assumed equal and so are not updated ------------------------------------------------------------------------- */ int FixAtomSwap::attempt_semi_grand() { if (nswap == 0) return 0; + // pre-swap energy + double energy_before = energy_stored; + // pick a random atom and perform swap + int itype,jtype,jswaptype; int i = pick_semi_grand_atom(); if (i >= 0) { @@ -352,9 +366,12 @@ int FixAtomSwap::attempt_semi_grand() atom->type[i] = jtype; } + // if unequal_cutoffs, call comm->borders() and rebuild neighbor list + // else communicate ghost atoms + // call to comm->exchange() is a no-op but clears ghost atoms + if (unequal_cutoffs) { if (domain->triclinic) domain->x2lamda(atom->nlocal); - domain->pbc(); comm->exchange(); comm->borders(); if (domain->triclinic) domain->lamda2x(atom->nlocal+atom->nghost); @@ -364,6 +381,8 @@ int FixAtomSwap::attempt_semi_grand() comm->forward_comm_fix(this); } + // post-swap energy + if (force->kspace) force->kspace->qsum_qsq(); double energy_after = energy_full(); @@ -376,10 +395,12 @@ int FixAtomSwap::attempt_semi_grand() int success_all = 0; MPI_Allreduce(&success,&success_all,1,MPI_INT,MPI_MAX,world); + // swap accepted, return 1 + if (success_all) { update_semi_grand_atoms_list(); energy_stored = energy_after; - if (conserve_ke_flag) { + if (ke_flag) { if (i >= 0) { atom->v[i][0] *= sqrt_mass_ratio[itype][jtype]; atom->v[i][1] *= sqrt_mass_ratio[itype][jtype]; @@ -387,38 +408,35 @@ int FixAtomSwap::attempt_semi_grand() } } return 1; - } else { - if (i >= 0) { - atom->type[i] = itype; - } - if (force->kspace) force->kspace->qsum_qsq(); - energy_stored = energy_before; - - if (unequal_cutoffs) { - if (domain->triclinic) domain->x2lamda(atom->nlocal); - domain->pbc(); - comm->exchange(); - comm->borders(); - if (domain->triclinic) domain->lamda2x(atom->nlocal+atom->nghost); - if (modify->n_pre_neighbor) modify->pre_neighbor(); - neighbor->build(1); - } else { - comm->forward_comm_fix(this); - } } + + // swap not accepted, return 0 + // restore the swapped atom + // do not need to re-call comm->borders() and rebuild neighbor list + // since will be done on next cycle or in Verlet when this fix finishes + + if (i >= 0) atom->type[i] = itype; + if (force->kspace) force->kspace->qsum_qsq(); + return 0; } - /* ---------------------------------------------------------------------- + attempt a swap of a pair of atoms + compare before/after energy and accept/reject the swap ------------------------------------------------------------------------- */ int FixAtomSwap::attempt_swap() { if ((niswap == 0) || (njswap == 0)) return 0; + // pre-swap energy + double energy_before = energy_stored; + // pick a random pair of atoms + // swap their properties + int i = pick_i_swap_atom(); int j = pick_j_swap_atom(); int itype = type_list[0]; @@ -433,6 +451,10 @@ int FixAtomSwap::attempt_swap() if (atom->q_flag) atom->q[j] = qtype[0]; } + // if unequal_cutoffs, call comm->borders() and rebuild neighbor list + // else communicate ghost atoms + // call to comm->exchange() is a no-op but clears ghost atoms + if (unequal_cutoffs) { if (domain->triclinic) domain->x2lamda(atom->nlocal); domain->pbc(); @@ -445,13 +467,17 @@ int FixAtomSwap::attempt_swap() comm->forward_comm_fix(this); } + // post-swap energy + double energy_after = energy_full(); + // swap accepted, return 1 + // if ke_flag, rescale atom velocities + if (random_equal->uniform() < exp(beta*(energy_before - energy_after))) { update_swap_atoms_list(); - energy_stored = energy_after; - if (conserve_ke_flag) { + if (ke_flag) { if (i >= 0) { atom->v[i][0] *= sqrt_mass_ratio[itype][jtype]; atom->v[i][1] *= sqrt_mass_ratio[itype][jtype]; @@ -463,30 +489,24 @@ int FixAtomSwap::attempt_swap() atom->v[j][2] *= sqrt_mass_ratio[jtype][itype]; } } + energy_stored = energy_after; return 1; - } else { - if (i >= 0) { - atom->type[i] = type_list[0]; - if (atom->q_flag) atom->q[i] = qtype[0]; - } - if (j >= 0) { - atom->type[j] = type_list[1]; - if (atom->q_flag) atom->q[j] = qtype[1]; - } - energy_stored = energy_before; - - if (unequal_cutoffs) { - if (domain->triclinic) domain->x2lamda(atom->nlocal); - domain->pbc(); - comm->exchange(); - comm->borders(); - if (domain->triclinic) domain->lamda2x(atom->nlocal+atom->nghost); - if (modify->n_pre_neighbor) modify->pre_neighbor(); - neighbor->build(1); - } else { - comm->forward_comm_fix(this); - } } + + // swap not accepted, return 0 + // restore the swapped itype & jtype atoms + // do not need to re-call comm->borders() and rebuild neighbor list + // since will be done on next cycle or in Verlet when this fix finishes + + if (i >= 0) { + atom->type[i] = type_list[0]; + if (atom->q_flag) atom->q[i] = qtype[0]; + } + if (j >= 0) { + atom->type[j] = type_list[1]; + if (atom->q_flag) atom->q[j] = qtype[1]; + } + return 0; } @@ -499,7 +519,6 @@ double FixAtomSwap::energy_full() int eflag = 1; int vflag = 0; - if (modify->n_pre_neighbor) modify->pre_neighbor(); if (modify->n_pre_force) modify->pre_force(vflag); if (force->pair) force->pair->compute(eflag,vflag); diff --git a/src/MC/fix_atom_swap.h b/src/MC/fix_atom_swap.h index 65d811e2b9..2511fe6544 100644 --- a/src/MC/fix_atom_swap.h +++ b/src/MC/fix_atom_swap.h @@ -40,7 +40,7 @@ class FixAtomSwap : public Fix { private: int nevery, seed; - int conserve_ke_flag; // yes = conserve ke, no = do not conserve ke + int ke_flag; // yes = conserve ke, no = do not conserve ke int semi_grand_flag; // yes = semi-grand canonical, no = constant composition int ncycles; int niswap, njswap; // # of i,j swap atoms on all procs diff --git a/src/MC/fix_mol_swap.cpp b/src/MC/fix_mol_swap.cpp index 842a76593a..cd4d9d3cb8 100644 --- a/src/MC/fix_mol_swap.cpp +++ b/src/MC/fix_mol_swap.cpp @@ -35,12 +35,14 @@ using namespace LAMMPS_NS; using namespace FixConst; +#define BIG 1.0e20 + /* ---------------------------------------------------------------------- */ FixMolSwap::FixMolSwap(LAMMPS *lmp, int narg, char **arg) : Fix(lmp, narg, arg) { - if (narg != 9) error->all(FLERR,"Illegal fix mol/swap command"); + if (narg < 9) error->all(FLERR,"Illegal fix mol/swap command"); vector_flag = 1; size_vector = 2; @@ -58,13 +60,32 @@ FixMolSwap::FixMolSwap(LAMMPS *lmp, int narg, char **arg) : seed = utils::inumeric(FLERR,arg[7],false,lmp); double temperature = utils::numeric(FLERR,arg[8],false,lmp); + // optional args + + ke_flag = 1; + + int iarg = 9; + while (iarg < narg) { + if (strcmp(arg[iarg],"ke") == 0) { + if (iarg+2 > narg) error->all(FLERR,"Illegal fix mol/swap command"); + ke_flag = utils::logical(FLERR,arg[iarg+1],false,lmp); + iarg += 2; + } else error->all(FLERR,"Illegal fix mol/swap command"); + } + + // error check + if (nevery <= 0) error->all(FLERR,"Illegal fix mol/swap command"); if (ncycles < 0) error->all(FLERR,"Illegal fix mol/swap command"); + if (itype == jtype) error->all(FLERR,"Illegal fix mol/swap command"); if (itype <= 0 || itype > atom->ntypes || jtype <= 0 || jtype > atom->ntypes) error->all(FLERR,"Fix mol/swap atom types are invalid"); if (seed <= 0) error->all(FLERR,"Illegal fix mol/swap command"); if (temperature <= 0.0) error->all(FLERR,"Illegal fix mol/swap command"); + if (ke_flag && atom->rmass) + error->all(FLERR,"Cannot conserve kinetic energy with fix mol/swap " + "unless per-type masses"); beta = 1.0/(force->boltz*temperature); @@ -79,12 +100,17 @@ FixMolSwap::FixMolSwap(LAMMPS *lmp, int narg, char **arg) : // zero out counters - nswap_attempts = 0.0; - nswap_successes = 0.0; + nswap_attempt = 0.0; + nswap_accept = 0.0; + + // qflag = 1 if charges are defined + + if (atom->q_flag) qflag = 1; + else qflag = 0; // set comm size needed by this Fix - if (atom->q_flag) comm_forward = 2; + if (qflag) comm_forward = 2; else comm_forward = 1; } @@ -141,6 +167,54 @@ void FixMolSwap::init() MPI_Allreduce(&minmol_me,&minmol,1,MPI_LMP_TAGINT,MPI_MIN,world); MPI_Allreduce(&maxmol_me,&maxmol,1,MPI_LMP_TAGINT,MPI_MAX,world); + // if ke_flag, check if itype/jtype masses are different + // if yes, pre-calcuate velocity scale factors that keep KE constant + // if no, turn ke_flag off + + if (ke_flag) { + double *mass = atom->mass; + if (mass[itype] != mass[jtype]) { + i2j_vscale = sqrt(mass[itype]/mass[jtype]); + j2i_vscale = sqrt(mass[jtype]/mass[itype]); + } else ke_flag = 0; + } + + // if qflag, check if all charges for itype are identical, ditto for jtype + // if not, cannot swap charges, issue warning + + if (qflag) { + double *q = atom->q; + + double iqone,jqone; + iqone = jqone = -BIG; + + for (int i = 0; i < nlocal; i++) { + if (molecule[i] == 0) continue; + if (!(mask[i] & groupbit)) continue; + if (type[i] == itype) iqone = q[i]; + if (type[i] == jtype) jqone = q[i]; + } + + MPI_Allreduce(&iqone,&iq,1,MPI_DOUBLE,MPI_MAX,world); + MPI_Allreduce(&jqone,&jq,1,MPI_DOUBLE,MPI_MAX,world); + + int flag = 0; + + for (int i = 0; i < nlocal; i++) { + if (molecule[i] == 0) continue; + if (!(mask[i] & groupbit)) continue; + if (type[i] == itype && q[i] != iq) flag = 1; + if (type[i] == jtype && q[i] != jq) flag = 1; + } + + int flagall; + MPI_Allreduce(&flag,&flagall,1,MPI_INT,MPI_MAX,world); + if (flagall) qflag = 0; + + if (!qflag && comm->me == 0) + error->warning(FLERR,"Cannot swap charges in fix mol/swap"); + } + // check if all cutoffs involving itype and jtype are the same // if not, reneighboring will be needed after swaps @@ -152,7 +226,7 @@ void FixMolSwap::init() } /* ---------------------------------------------------------------------- - perform Ncycle Monte Carlo swaps + perform ncycle Monte Carlo swaps ------------------------------------------------------------------------- */ void FixMolSwap::pre_exchange() @@ -178,11 +252,13 @@ void FixMolSwap::pre_exchange() // attempt Ncycle molecule swaps - int nsuccess = 0; - for (int m = 0; m < ncycles; m++) nsuccess += attempt_swap(); + int naccept = 0; + for (int m = 0; m < ncycles; m++) naccept += attempt_swap(); - nswap_attempts += ncycles; - nswap_successes += nsuccess; + // udpate MC stats + + nswap_attempt += ncycles; + nswap_accept += naccept; next_reneighbor = update->ntimestep + nevery; } @@ -199,13 +275,15 @@ int FixMolSwap::attempt_swap() double energy_before = energy_stored; // pick a random molecule - // swap all of its eligible itype & jtype atoms + // swap properties of all its eligible itype & jtype atoms tagint molID = minmol + static_cast (random->uniform() * (maxmol-minmol+1)); if (molID > maxmol) molID = maxmol; int *mask = atom->mask; + double **v = atom->v; + double *q = atom->q; int *type = atom->type; tagint *molecule = atom->molecule; int nlocal = atom->nlocal; @@ -213,8 +291,23 @@ int FixMolSwap::attempt_swap() for (int i = 0; i < nlocal; i++) { if (molecule[i] != molID) continue; if (!(mask[i] & groupbit)) continue; - if (type[i] == itype) type[i] = jtype; - else if (type[i] == jtype) type[i] = itype; + if (type[i] == itype) { + type[i] = jtype; + if (qflag) q[i] = jq; + if (ke_flag) { + v[i][0] *= i2j_vscale; + v[i][1] *= i2j_vscale; + v[i][2] *= i2j_vscale; + } + } else if (type[i] == jtype) { + type[i] = itype; + if (qflag) q[i] = iq; + if (ke_flag) { + v[i][0] *= j2i_vscale; + v[i][1] *= j2i_vscale; + v[i][2] *= j2i_vscale; + } + } } // if unequal_cutoffs, call comm->borders() and rebuild neighbor list @@ -236,23 +329,37 @@ int FixMolSwap::attempt_swap() double energy_after = energy_full(); - // swap accepted + // swap accepted, return 1 if (random->uniform() < exp(beta*(energy_before - energy_after))) { energy_stored = energy_after; return 1; + } - // swap not accepted + // swap not accepted, return 0 // restore the swapped itype & jtype atoms // do not need to re-call comm->borders() and rebuild neighbor list - // since will be done on next cycle or in Verlet when this fix is done + // since will be done on next cycle or in Verlet when this fix finishes - } else { - for (int i = 0; i < nlocal; i++) { - if (molecule[i] != molID) continue; - if (!(mask[i] & groupbit)) continue; - if (type[i] == itype) type[i] = jtype; - else if (type[i] == jtype) type[i] = itype; + for (int i = 0; i < nlocal; i++) { + if (molecule[i] != molID) continue; + if (!(mask[i] & groupbit)) continue; + if (type[i] == itype) { + type[i] = jtype; + if (qflag) q[i] = jq; + if (ke_flag) { + v[i][0] *= i2j_vscale; + v[i][1] *= i2j_vscale; + v[i][2] *= i2j_vscale; + } + } else if (type[i] == jtype) { + type[i] = itype; + if (qflag) q[i] = iq; + if (ke_flag) { + v[i][0] *= j2i_vscale; + v[i][1] *= j2i_vscale; + v[i][2] *= j2i_vscale; + } } } @@ -300,7 +407,7 @@ int FixMolSwap::pack_forward_comm(int n, int *list, double *buf, int /*pbc_flag* m = 0; - if (atom->q_flag) { + if (qflag) { for (i = 0; i < n; i++) { j = list[i]; buf[m++] = type[j]; @@ -328,7 +435,7 @@ void FixMolSwap::unpack_forward_comm(int n, int first, double *buf) m = 0; last = first + n; - if (atom->q_flag) { + if (qflag) { for (i = first; i < last; i++) { type[i] = static_cast (buf[m++]); q[i] = buf[m++]; @@ -345,8 +452,8 @@ void FixMolSwap::unpack_forward_comm(int n, int first, double *buf) double FixMolSwap::compute_vector(int n) { - if (n == 0) return nswap_attempts; - if (n == 1) return nswap_successes; + if (n == 0) return nswap_attempt; + if (n == 1) return nswap_accept; return 0.0; } @@ -360,8 +467,8 @@ void FixMolSwap::write_restart(FILE *fp) double list[6]; list[n++] = random->state(); list[n++] = ubuf(next_reneighbor).d; - list[n++] = nswap_attempts; - list[n++] = nswap_successes; + list[n++] = nswap_attempt; + list[n++] = nswap_accept; list[n++] = ubuf(update->ntimestep).d; if (comm->me == 0) { @@ -385,8 +492,8 @@ void FixMolSwap::restart(char *buf) next_reneighbor = (bigint) ubuf(list[n++]).i; - nswap_attempts = static_cast(list[n++]); - nswap_successes = static_cast(list[n++]); + nswap_attempt = static_cast(list[n++]); + nswap_accept = static_cast(list[n++]); bigint ntimestep_restart = (bigint) ubuf(list[n++]).i; if (ntimestep_restart != update->ntimestep) diff --git a/src/MC/fix_mol_swap.h b/src/MC/fix_mol_swap.h index c84ed815c4..6c91d27b91 100644 --- a/src/MC/fix_mol_swap.h +++ b/src/MC/fix_mol_swap.h @@ -42,12 +42,21 @@ class FixMolSwap : public Fix { int itype, jtype; double temperature; - bool unequal_cutoffs; - tagint minmol,maxmol; - double nswap_attempts; - double nswap_successes; - double beta; - double energy_stored; + int ke_flag; // 1 if kinetic energy is also swapped + double i2j_vscale; // scale factors for velocity to keep KE constant + double j2i_vscale; + + int qflag; // 1 if charge is also swapped + double iq,jq; // charge values for all itype,jtype atoms + + bool unequal_cutoffs; // 1 if itype and jtype have any different cutoffs + tagint minmol,maxmol; // range of mol IDs selected for swaps + + double nswap_attempt; // cummulative stats on MC attempts and accepts + double nswap_accept; + + double beta; // 1/kT + double energy_stored; // energy of current state as swaps are accepted class RanPark *random; class Compute *c_pe; From a1ff9e35b7dec15fcb552da099c289f6070c5bca Mon Sep 17 00:00:00 2001 From: Richard Berger Date: Tue, 12 Oct 2021 12:15:19 -0400 Subject: [PATCH 156/372] Avoid file name collisions in dump unit tests --- unittest/formats/test_dump_atom.cpp | 132 +++++++++++++++----------- unittest/formats/test_dump_custom.cpp | 43 ++++++--- 2 files changed, 106 insertions(+), 69 deletions(-) diff --git a/unittest/formats/test_dump_atom.cpp b/unittest/formats/test_dump_atom.cpp index 8a3dab44a4..bc43c40de2 100644 --- a/unittest/formats/test_dump_atom.cpp +++ b/unittest/formats/test_dump_atom.cpp @@ -39,6 +39,21 @@ public: END_HIDE_OUTPUT(); } + std::string dump_filename(std::string ident) + { + return fmt::format("dump_{}_{}.melt", dump_style, ident); + } + + std::string text_dump_filename(std::string ident) + { + return fmt::format("dump_{}_text_{}.melt", dump_style, ident); + } + + std::string binary_dump_filename(std::string ident) + { + return fmt::format("dump_{}_binary_{}.melt.bin", dump_style, ident); + } + void generate_dump(std::string dump_file, std::string dump_modify_options, int ntimesteps) { BEGIN_HIDE_OUTPUT(); @@ -87,7 +102,7 @@ public: TEST_F(DumpAtomTest, run0) { - auto dump_file = "dump_run0.melt"; + auto dump_file = dump_filename("run0"); generate_dump(dump_file, "scale yes image no", 0); ASSERT_FILE_EXISTS(dump_file); @@ -103,7 +118,7 @@ TEST_F(DumpAtomTest, run0) TEST_F(DumpAtomTest, format_line_run0) { - auto dump_file = "dump_format_line_run0.melt"; + auto dump_file = dump_filename("format_line_run0"); generate_dump(dump_file, "format line \"%d %d %20.15g %g %g\" scale yes image no", 0); ASSERT_FILE_EXISTS(dump_file); @@ -119,7 +134,7 @@ TEST_F(DumpAtomTest, format_line_run0) TEST_F(DumpAtomTest, no_scale_run0) { - auto dump_file = "dump_no_scale_run0.melt"; + auto dump_file = dump_filename("no_scale_run0"); generate_dump(dump_file, "scale off", 0); ASSERT_FILE_EXISTS(dump_file); @@ -134,7 +149,7 @@ TEST_F(DumpAtomTest, no_scale_run0) TEST_F(DumpAtomTest, no_buffer_no_scale_run0) { - auto dump_file = "dump_no_buffer_no_scale_run0.melt"; + auto dump_file = dump_filename("no_buffer_no_scale_run0"); generate_dump(dump_file, "buffer false scale false", 0); ASSERT_FILE_EXISTS(dump_file); @@ -149,7 +164,7 @@ TEST_F(DumpAtomTest, no_buffer_no_scale_run0) TEST_F(DumpAtomTest, no_buffer_with_scale_run0) { - auto dump_file = "dump_no_buffer_with_scale_run0.melt"; + auto dump_file = dump_filename("no_buffer_with_scale_run0"); generate_dump(dump_file, "buffer 0 scale 1", 0); ASSERT_FILE_EXISTS(dump_file); @@ -164,7 +179,7 @@ TEST_F(DumpAtomTest, no_buffer_with_scale_run0) TEST_F(DumpAtomTest, with_image_run0) { - auto dump_file = "dump_with_image_run0.melt"; + auto dump_file = dump_filename("with_image_run0"); generate_dump(dump_file, "scale no image on", 0); ASSERT_FILE_EXISTS(dump_file); @@ -177,7 +192,7 @@ TEST_F(DumpAtomTest, with_image_run0) TEST_F(DumpAtomTest, with_units_run0) { - auto dump_file = "dump_with_units_run0.melt"; + auto dump_file = dump_filename("with_units_run0"); generate_dump(dump_file, "scale false units 1", 0); ASSERT_FILE_EXISTS(dump_file); @@ -192,7 +207,7 @@ TEST_F(DumpAtomTest, with_units_run0) TEST_F(DumpAtomTest, with_time_run0) { - auto dump_file = "dump_with_time_run0.melt"; + auto dump_file = dump_filename("with_time_run0"); generate_dump(dump_file, "scale off time true", 0); ASSERT_FILE_EXISTS(dump_file); @@ -206,7 +221,7 @@ TEST_F(DumpAtomTest, with_time_run0) TEST_F(DumpAtomTest, with_units_run1) { - auto dump_file = "dump_with_units_run1.melt"; + auto dump_file = dump_filename("with_units_run1"); generate_dump(dump_file, "scale 0 units on", 1); ASSERT_FILE_EXISTS(dump_file); @@ -221,7 +236,7 @@ TEST_F(DumpAtomTest, with_units_run1) TEST_F(DumpAtomTest, no_buffer_with_scale_and_image_run0) { - auto dump_file = "dump_no_buffer_with_scale_and_image_run0.melt"; + auto dump_file = dump_filename("no_buffer_with_scale_and_image_run0"); generate_dump(dump_file, "buffer 0 scale 1 image true", 0); ASSERT_FILE_EXISTS(dump_file); @@ -235,7 +250,7 @@ TEST_F(DumpAtomTest, no_buffer_with_scale_and_image_run0) } TEST_F(DumpAtomTest, triclinic_run0) { - auto dump_file = "dump_triclinic_run0.melt"; + auto dump_file = dump_filename("triclinic_run0"); enable_triclinic(); generate_dump(dump_file, "", 0); @@ -251,7 +266,7 @@ TEST_F(DumpAtomTest, triclinic_run0) TEST_F(DumpAtomTest, triclinic_with_units_run0) { - auto dump_file = "dump_triclinic_with_units_run0.melt"; + auto dump_file = dump_filename("triclinic_with_units_run0"); enable_triclinic(); generate_dump(dump_file, "units on", 0); @@ -269,7 +284,7 @@ TEST_F(DumpAtomTest, triclinic_with_units_run0) TEST_F(DumpAtomTest, triclinic_with_time_run0) { - auto dump_file = "dump_triclinic_with_time_run0.melt"; + auto dump_file = dump_filename("triclinic_with_time_run0"); enable_triclinic(); generate_dump(dump_file, "time on", 0); @@ -286,7 +301,7 @@ TEST_F(DumpAtomTest, triclinic_with_time_run0) TEST_F(DumpAtomTest, triclinic_with_image_run0) { - auto dump_file = "dump_triclinic_with_image_run0.melt"; + auto dump_file = dump_filename("triclinic_with_image_run0"); enable_triclinic(); generate_dump(dump_file, "image yes", 0); @@ -308,8 +323,8 @@ TEST_F(DumpAtomTest, binary_run0) { if (!BINARY2TXT_BINARY) GTEST_SKIP(); - auto text_file = "dump_text_run0.melt"; - auto binary_file = "dump_binary_run0.melt.bin"; + auto text_file = text_dump_filename("run0"); + auto binary_file = binary_dump_filename("run0"); generate_text_and_binary_dump(text_file, binary_file, "", 0); @@ -329,8 +344,8 @@ TEST_F(DumpAtomTest, binary_with_units_run0) { if (!BINARY2TXT_BINARY) GTEST_SKIP(); - auto text_file = "dump_text_with_units_run0.melt"; - auto binary_file = "dump_binary_with_units_run0.melt.bin"; + auto text_file = text_dump_filename("with_units_run0"); + auto binary_file = binary_dump_filename("with_units_run0"); generate_text_and_binary_dump(text_file, binary_file, "scale no units yes", 0); @@ -350,8 +365,8 @@ TEST_F(DumpAtomTest, binary_with_time_run0) { if (!BINARY2TXT_BINARY) GTEST_SKIP(); - auto text_file = "dump_text_with_time_run0.melt"; - auto binary_file = "dump_binary_with_time_run0.melt.bin"; + auto text_file = text_dump_filename("with_time_run0"); + auto binary_file = binary_dump_filename("with_time_run0"); generate_text_and_binary_dump(text_file, binary_file, "scale no time yes", 0); @@ -371,8 +386,8 @@ TEST_F(DumpAtomTest, binary_triclinic_run0) { if (!BINARY2TXT_BINARY) GTEST_SKIP(); - auto text_file = "dump_text_tri_run0.melt"; - auto binary_file = "dump_binary_tri_run0.melt.bin"; + auto text_file = text_dump_filename("tri_run0"); + auto binary_file = binary_dump_filename("tri_run0"); enable_triclinic(); generate_text_and_binary_dump(text_file, binary_file, "", 0); @@ -393,8 +408,8 @@ TEST_F(DumpAtomTest, binary_triclinic_with_units_run0) { if (!BINARY2TXT_BINARY) GTEST_SKIP(); - auto text_file = "dump_text_tri_with_units_run0.melt"; - auto binary_file = "dump_binary_tri_with_units_run0.melt.bin"; + auto text_file = text_dump_filename("tri_with_units_run0"); + auto binary_file = binary_dump_filename("tri_with_units_run0"); enable_triclinic(); generate_text_and_binary_dump(text_file, binary_file, "scale no units yes", 0); @@ -415,8 +430,8 @@ TEST_F(DumpAtomTest, binary_triclinic_with_time_run0) { if (!BINARY2TXT_BINARY) GTEST_SKIP(); - auto text_file = "dump_text_tri_with_time_run0.melt"; - auto binary_file = "dump_binary_tri_with_time_run0.melt.bin"; + auto text_file = text_dump_filename("tri_with_time_run0"); + auto binary_file = binary_dump_filename("tri_with_time_run0"); enable_triclinic(); generate_text_and_binary_dump(text_file, binary_file, "scale no time yes", 0); @@ -437,8 +452,8 @@ TEST_F(DumpAtomTest, binary_triclinic_with_image_run0) { if (!BINARY2TXT_BINARY) GTEST_SKIP(); - auto text_file = "dump_text_tri_with_image_run0.melt"; - auto binary_file = "dump_binary_tri_with_image_run0.melt.bin"; + auto text_file = text_dump_filename("tri_with_image_run0"); + auto binary_file = binary_dump_filename("tri_with_image_run0"); enable_triclinic(); generate_text_and_binary_dump(text_file, binary_file, "image yes", 0); @@ -457,7 +472,7 @@ TEST_F(DumpAtomTest, binary_triclinic_with_image_run0) TEST_F(DumpAtomTest, run1plus1) { - auto dump_file = "dump_run1plus1.melt"; + auto dump_file = dump_filename("run1plus1"); generate_dump(dump_file, "", 1); ASSERT_FILE_EXISTS(dump_file); @@ -470,7 +485,7 @@ TEST_F(DumpAtomTest, run1plus1) TEST_F(DumpAtomTest, run2) { - auto dump_file = "dump_run2.melt"; + auto dump_file = dump_filename("run2"); generate_dump(dump_file, "", 2); ASSERT_FILE_EXISTS(dump_file); @@ -480,7 +495,7 @@ TEST_F(DumpAtomTest, run2) TEST_F(DumpAtomTest, rerun) { - auto dump_file = "dump_rerun.melt"; + auto dump_file = dump_filename("rerun"); HIDE_OUTPUT([&] { command("fix 1 all nve"); }); @@ -508,38 +523,43 @@ TEST_F(DumpAtomTest, rerun) TEST_F(DumpAtomTest, multi_file_run1) { - auto dump_file = "dump_run1_*.melt"; + auto dump_file = dump_filename("run1_*"); generate_dump(dump_file, "", 1); - ASSERT_FILE_EXISTS("dump_run1_0.melt"); - ASSERT_FILE_EXISTS("dump_run1_1.melt"); - ASSERT_EQ(count_lines("dump_run1_0.melt"), 41); - ASSERT_EQ(count_lines("dump_run1_1.melt"), 41); - delete_file("dump_run1_0.melt"); - delete_file("dump_run1_1.melt"); + auto run1_0 = dump_filename("run1_0"); + auto run1_1 = dump_filename("run1_1"); + ASSERT_FILE_EXISTS(run1_0); + ASSERT_FILE_EXISTS(run1_1); + ASSERT_EQ(count_lines(run1_0), 41); + ASSERT_EQ(count_lines(run1_1), 41); + delete_file(run1_0); + delete_file(run1_1); } TEST_F(DumpAtomTest, per_processor_file_run1) { - auto dump_file = "dump_run1_p%.melt"; + auto dump_file = dump_filename("run1_p%"); generate_dump(dump_file, "", 1); - ASSERT_FILE_EXISTS("dump_run1_p0.melt"); - ASSERT_EQ(count_lines("dump_run1_p0.melt"), 82); - delete_file("dump_run1_p0.melt"); + auto run1_p0 = dump_filename("run1_p0"); + ASSERT_FILE_EXISTS(run1_p0); + ASSERT_EQ(count_lines(run1_p0), 82); + delete_file(run1_p0); } TEST_F(DumpAtomTest, per_processor_multi_file_run1) { - auto dump_file = "dump_run1_p%_*.melt"; + auto dump_file = dump_filename("run1_p%_*"); generate_dump(dump_file, "", 1); - ASSERT_FILE_EXISTS("dump_run1_p0_0.melt"); - ASSERT_FILE_EXISTS("dump_run1_p0_1.melt"); - ASSERT_EQ(count_lines("dump_run1_p0_0.melt"), 41); - ASSERT_EQ(count_lines("dump_run1_p0_1.melt"), 41); - delete_file("dump_run1_p0_0.melt"); - delete_file("dump_run1_p0_1.melt"); + auto run1_p0_0 = dump_filename("run1_p0_0"); + auto run1_p0_1 = dump_filename("run1_p0_1"); + ASSERT_FILE_EXISTS(run1_p0_0); + ASSERT_FILE_EXISTS(run1_p0_1); + ASSERT_EQ(count_lines(run1_p0_0), 41); + ASSERT_EQ(count_lines(run1_p0_1), 41); + delete_file(run1_p0_0); + delete_file(run1_p0_1); } TEST_F(DumpAtomTest, dump_modify_scale_invalid) @@ -573,16 +593,17 @@ TEST_F(DumpAtomTest, dump_modify_invalid) TEST_F(DumpAtomTest, write_dump) { - auto reference = "dump_ref_run0.melt"; - auto dump_file = "write_dump_atom_run0.melt"; + auto reference = dump_filename("run0_ref"); + auto dump_file = fmt::format("write_{}", dump_filename("run*")); BEGIN_HIDE_OUTPUT(); command(fmt::format("dump id all atom 1 {}", reference)); command("dump_modify id scale no units yes"); command("run 0"); - command("write_dump all atom write_dump_atom_run*.melt modify scale no units yes"); + command(fmt::format("write_dump all atom {} modify scale no units yes", dump_file)); END_HIDE_OUTPUT(); + dump_file = fmt::format("write_{}", dump_filename("run0")); ASSERT_FILE_EXISTS(reference); ASSERT_FILE_EXISTS(dump_file); @@ -595,16 +616,17 @@ TEST_F(DumpAtomTest, binary_write_dump) { if (!BINARY2TXT_BINARY) GTEST_SKIP(); - auto reference = "dump_run0.melt.bin"; - auto dump_file = "write_dump_atom_run0_p0.melt.bin"; + auto reference = binary_dump_filename("write_run0_ref"); + auto dump_file = fmt::format("write_{}", binary_dump_filename("write_dump_atom_run*_p%")); BEGIN_HIDE_OUTPUT(); command(fmt::format("dump id all atom 1 {}", reference)); command("dump_modify id scale no units yes"); command("run 0"); - command("write_dump all atom write_dump_atom_run*_p%.melt.bin modify scale no units yes"); + command(fmt::format("write_dump all atom {} modify scale no units yes", dump_file)); END_HIDE_OUTPUT(); + dump_file = fmt::format("write_{}", binary_dump_filename("write_dump_atom_run0_p0")); ASSERT_FILE_EXISTS(reference); ASSERT_FILE_EXISTS(dump_file); diff --git a/unittest/formats/test_dump_custom.cpp b/unittest/formats/test_dump_custom.cpp index 90876dcb2d..5d4132108d 100644 --- a/unittest/formats/test_dump_custom.cpp +++ b/unittest/formats/test_dump_custom.cpp @@ -37,6 +37,21 @@ public: END_HIDE_OUTPUT(); } + std::string dump_filename(std::string ident) + { + return fmt::format("dump_{}_{}.melt", dump_style, ident); + } + + std::string text_dump_filename(std::string ident) + { + return fmt::format("dump_{}_text_{}.melt", dump_style, ident); + } + + std::string binary_dump_filename(std::string ident) + { + return fmt::format("dump_{}_binary_{}.melt.bin", dump_style, ident); + } + void generate_dump(std::string dump_file, std::string fields, std::string dump_modify_options, int ntimesteps) { @@ -87,7 +102,7 @@ public: TEST_F(DumpCustomTest, run1) { - auto dump_file = "dump_custom_run1.melt"; + auto dump_file = dump_filename("run1"); auto fields = "id type proc procp1 mass x y z ix iy iz xs ys zs xu yu zu xsu ysu zsu vx vy vz fx fy fz"; @@ -105,7 +120,7 @@ TEST_F(DumpCustomTest, run1) TEST_F(DumpCustomTest, thresh_run0) { - auto dump_file = "dump_custom_thresh_run0.melt"; + auto dump_file = dump_filename("thresh_run0"); auto fields = "id type x y z"; generate_dump(dump_file, fields, "units yes thresh x < 1 thresh y < 1 thresh z < 1", 0); @@ -126,7 +141,7 @@ TEST_F(DumpCustomTest, compute_run0) command("compute comp all property/atom x y z"); END_HIDE_OUTPUT(); - auto dump_file = "dump_custom_compute_run0.melt"; + auto dump_file = dump_filename("compute_run0"); auto fields = "id type x y z c_comp[1] c_comp[2] c_comp[3]"; generate_dump(dump_file, fields, "units yes", 0); @@ -149,7 +164,7 @@ TEST_F(DumpCustomTest, fix_run0) command("fix numdiff all numdiff 1 0.0001"); END_HIDE_OUTPUT(); - auto dump_file = "dump_custom_compute_run0.melt"; + auto dump_file = dump_filename("fix_run0"); auto fields = "id x y z f_numdiff[1] f_numdiff[2] f_numdiff[3]"; generate_dump(dump_file, fields, "units yes", 0); @@ -171,7 +186,7 @@ TEST_F(DumpCustomTest, custom_run0) command("compute 1 all property/atom i_flag1 d_flag2"); END_HIDE_OUTPUT(); - auto dump_file = "dump_custom_custom_run0.melt"; + auto dump_file = dump_filename("custom_run0"); auto fields = "id x y z i_flag1 d_flag2"; generate_dump(dump_file, fields, "units yes", 0); @@ -190,8 +205,8 @@ TEST_F(DumpCustomTest, binary_run1) { if (!BINARY2TXT_BINARY) GTEST_SKIP(); - auto text_file = "dump_custom_text_run1.melt"; - auto binary_file = "dump_custom_binary_run1.melt.bin"; + auto text_file = text_dump_filename("run1"); + auto binary_file = binary_dump_filename("run1"); auto fields = "id type proc x y z ix iy iz xs ys zs xu yu zu xsu ysu zsu vx vy vz fx fy fz"; generate_text_and_binary_dump(text_file, binary_file, fields, "units yes", 1); @@ -210,7 +225,7 @@ TEST_F(DumpCustomTest, binary_run1) TEST_F(DumpCustomTest, triclinic_run1) { - auto dump_file = "dump_custom_tri_run1.melt"; + auto dump_file = dump_filename("tri_run1"); auto fields = "id type proc x y z ix iy iz xs ys zs xu yu zu xsu ysu zsu vx vy vz fx fy fz"; enable_triclinic(); @@ -231,8 +246,8 @@ TEST_F(DumpCustomTest, binary_triclinic_run1) { if (!BINARY2TXT_BINARY) GTEST_SKIP(); - auto text_file = "dump_custom_tri_text_run1.melt"; - auto binary_file = "dump_custom_tri_binary_run1.melt.bin"; + auto text_file = text_dump_filename("tri_run1"); + auto binary_file = binary_dump_filename("tri_run1"); auto fields = "id type proc x y z xs ys zs xsu ysu zsu vx vy vz fx fy fz"; enable_triclinic(); @@ -258,7 +273,7 @@ TEST_F(DumpCustomTest, with_variable_run1) command("variable p atom (c_1%10)+1"); END_HIDE_OUTPUT(); - auto dump_file = "dump_custom_with_variable_run1.melt"; + auto dump_file = dump_filename("with_variable_run1"); auto fields = "id type x y z v_p"; generate_dump(dump_file, fields, "units yes", 1); @@ -275,7 +290,7 @@ TEST_F(DumpCustomTest, with_variable_run1) TEST_F(DumpCustomTest, run1plus1) { - auto dump_file = "dump_custom_run1plus1.melt"; + auto dump_file = dump_filename("run1plus1"); auto fields = "id type x y z"; generate_dump(dump_file, fields, "units yes", 1); @@ -292,7 +307,7 @@ TEST_F(DumpCustomTest, run1plus1) TEST_F(DumpCustomTest, run2) { - auto dump_file = "dump_custom_run2.melt"; + auto dump_file = dump_filename("run2"); auto fields = "id type x y z"; generate_dump(dump_file, fields, "", 2); @@ -303,7 +318,7 @@ TEST_F(DumpCustomTest, run2) TEST_F(DumpCustomTest, rerun) { - auto dump_file = "dump_rerun.melt"; + auto dump_file = dump_filename("rerun"); auto fields = "id type xs ys zs"; HIDE_OUTPUT([&] { From 77d830bf3a5a7553019f73708a26b40384c9effe Mon Sep 17 00:00:00 2001 From: Yury Lysogorskiy Date: Tue, 12 Oct 2021 18:15:31 +0200 Subject: [PATCH 157/372] update YAML-CPP library target name to yaml-cpp-pace --- cmake/Modules/Packages/ML-PACE.cmake | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/cmake/Modules/Packages/ML-PACE.cmake b/cmake/Modules/Packages/ML-PACE.cmake index 998ef22191..f7ec16d370 100644 --- a/cmake/Modules/Packages/ML-PACE.cmake +++ b/cmake/Modules/Packages/ML-PACE.cmake @@ -1,18 +1,18 @@ -set(PACELIB_URL "https://github.com/ICAMS/lammps-user-pace/archive/refs/tags/v.2021.9.28.tar.gz" CACHE STRING "URL for PACE evaluator library sources") -set(PACELIB_MD5 "f98363bb98adc7295ea63974738c2a1b" CACHE STRING "MD5 checksum of PACE evaluator library tarball") -mark_as_advanced(PACELIB_URL) -mark_as_advanced(PACELIB_MD5) +#set(PACELIB_URL "https://github.com/ICAMS/lammps-user-pace/archive/refs/tags/v.2021.9.28.tar.gz" CACHE STRING "URL for PACE evaluator library sources") +#set(PACELIB_MD5 "f98363bb98adc7295ea63974738c2a1b" CACHE STRING "MD5 checksum of PACE evaluator library tarball") +#mark_as_advanced(PACELIB_URL) +#mark_as_advanced(PACELIB_MD5) # download library sources to build folder -file(DOWNLOAD ${PACELIB_URL} ${CMAKE_BINARY_DIR}/libpace.tar.gz SHOW_PROGRESS EXPECTED_HASH MD5=${PACELIB_MD5}) +#file(DOWNLOAD ${PACELIB_URL} ${CMAKE_BINARY_DIR}/libpace.tar.gz SHOW_PROGRESS EXPECTED_HASH MD5=${PACELIB_MD5}) # uncompress downloaded sources -execute_process( - COMMAND ${CMAKE_COMMAND} -E remove_directory lammps-user-pace* - COMMAND ${CMAKE_COMMAND} -E tar xzf libpace.tar.gz - WORKING_DIRECTORY ${CMAKE_BINARY_DIR} -) +#execute_process( +# COMMAND ${CMAKE_COMMAND} -E remove_directory lammps-user-pace* +# COMMAND ${CMAKE_COMMAND} -E tar xzf libpace.tar.gz +# WORKING_DIRECTORY ${CMAKE_BINARY_DIR} +#) file(GLOB lib-pace ${CMAKE_BINARY_DIR}/lammps-user-pace-*) add_subdirectory(${lib-pace}/yaml-cpp build-yaml-cpp) @@ -27,5 +27,5 @@ set_target_properties(pace PROPERTIES CXX_EXTENSIONS ON OUTPUT_NAME lammps_pace$ target_include_directories(pace PUBLIC ${PACE_EVALUATOR_INCLUDE_DIR} ${YAML_CPP_INCLUDE_DIR}) target_link_libraries(lammps PRIVATE pace) -target_link_libraries(lammps PRIVATE yaml-cpp) +target_link_libraries(lammps PRIVATE yaml-cpp-pace) From 113c53a5dae34b20d52bf30e96ade548b1d41d6d Mon Sep 17 00:00:00 2001 From: Steve Plimpton Date: Tue, 12 Oct 2021 11:45:50 -0600 Subject: [PATCH 158/372] doc page for new fix mol/swap --- doc/src/fix_atom_swap.rst | 97 +++++++++++----------- doc/src/fix_mol_swap.rst | 170 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 220 insertions(+), 47 deletions(-) create mode 100644 doc/src/fix_mol_swap.rst diff --git a/doc/src/fix_atom_swap.rst b/doc/src/fix_atom_swap.rst index eb56572db7..ece922452d 100644 --- a/doc/src/fix_atom_swap.rst +++ b/doc/src/fix_atom_swap.rst @@ -73,32 +73,32 @@ is the same after the swap as it was before the swap, even though the atom masses have changed. The *semi-grand* keyword can be set to *yes* to switch to the -semi-grand canonical ensemble as discussed in :ref:`(Sadigh) `. This -means that the total number of each particle type does not need to be -conserved. The default is *no*, which means that the only kind of swap -allowed exchanges an atom of one type with an atom of a different -given type. In other words, the relative mole fractions of the swapped -atoms remains constant. Whereas in the semi-grand canonical ensemble, -the composition of the system can change. Note that when using -*semi-grand*, atoms in the fix group whose type is not listed -in the *types* keyword are ineligible for attempted -conversion. An attempt is made to switch -the selected atom (if eligible) to one of the other listed types -with equal probability. Acceptance of each attempt depends upon the Metropolis criterion. +semi-grand canonical ensemble as discussed in :ref:`(Sadigh) +`. This means that the total number of each particle type does +not need to be conserved. The default is *no*, which means that the +only kind of swap allowed exchanges an atom of one type with an atom +of a different given type. In other words, the relative mole fractions +of the swapped atoms remains constant. Whereas in the semi-grand +canonical ensemble, the composition of the system can change. Note +that when using *semi-grand*, atoms in the fix group whose type is not +listed in the *types* keyword are ineligible for attempted +conversion. An attempt is made to switch the selected atom (if +eligible) to one of the other listed types with equal +probability. Acceptance of each attempt depends upon the Metropolis +criterion. -The *mu* keyword allows users to specify chemical -potentials. This is required and allowed only when using *semi-grand*\ . -All chemical potentials are absolute, so there is one for -each swap type listed following the *types* keyword. -In semi-grand canonical ensemble simulations the chemical composition -of the system is controlled by the difference in these values. So -shifting all values by a constant amount will have no effect -on the simulation. +The *mu* keyword allows users to specify chemical potentials. This is +required and allowed only when using *semi-grand*\ . All chemical +potentials are absolute, so there is one for each swap type listed +following the *types* keyword. In semi-grand canonical ensemble +simulations the chemical composition of the system is controlled by +the difference in these values. So shifting all values by a constant +amount will have no effect on the simulation. This command may optionally use the *region* keyword to define swap volume. The specified region must have been previously defined with a -:doc:`region ` command. It must be defined with side = *in*\ . -Swap attempts occur only between atoms that are both within the +:doc:`region ` command. It must be defined with side = *in*\ +. Swap attempts occur only between atoms that are both within the specified region. Swaps are not otherwise attempted. You should ensure you do not swap atoms belonging to a molecule, or @@ -109,15 +109,15 @@ swapping. If not using *semi-grand* this fix checks to ensure all atoms of the given types have the same atomic charge. LAMMPS does not enforce this -in general, but it is needed for this fix to simplify the -swapping procedure. Successful swaps will swap the atom type and charge -of the swapped atoms. Conversely, when using *semi-grand*, it is assumed that all the atom -types involved in switches have the same charge. Otherwise, charge -would not be conserved. As a consequence, no checks on atomic charges are -performed, and successful switches update the atom type but not the -atom charge. While it is possible to use *semi-grand* with groups of -atoms that have different charges, these charges will not be changed when the -atom types change. +in general, but it is needed for this fix to simplify the swapping +procedure. Successful swaps will swap the atom type and charge of the +swapped atoms. Conversely, when using *semi-grand*, it is assumed that +all the atom types involved in switches have the same +charge. Otherwise, charge would not be conserved. As a consequence, no +checks on atomic charges are performed, and successful switches update +the atom type but not the atom charge. While it is possible to use +*semi-grand* with groups of atoms that have different charges, these +charges will not be changed when the atom types change. Since this fix computes total potential energies before and after proposed swaps, so even complicated potential energy calculations are @@ -133,23 +133,24 @@ OK, including the following: Some fixes have an associated potential energy. Examples of such fixes include: :doc:`efield `, :doc:`gravity `, :doc:`addforce `, :doc:`langevin `, -:doc:`restrain `, :doc:`temp/berendsen `, -:doc:`temp/rescale `, and :doc:`wall fixes `. -For that energy to be included in the total potential energy of the -system (the quantity used when performing GCMC moves), -you MUST enable the :doc:`fix_modify ` *energy* option for -that fix. The doc pages for individual :doc:`fix ` commands -specify if this should be done. +:doc:`restrain `, :doc:`temp/berendsen +`, :doc:`temp/rescale `, and +:doc:`wall fixes `. For that energy to be included in the +total potential energy of the system (the quantity used when +performing GCMC moves), you MUST enable the :doc:`fix_modify +` *energy* option for that fix. The doc pages for +individual :doc:`fix ` commands specify if this should be done. Restart, fix_modify, output, run start/stop, minimize info """"""""""""""""""""""""""""""""""""""""""""""""""""""""""" -This fix writes the state of the fix to :doc:`binary restart files `. This includes information about the random -number generator seed, the next timestep for MC exchanges, the number -of exchange attempts and successes etc. See -the :doc:`read_restart ` command for info on how to -re-specify a fix in an input script that reads a restart file, so that -the operation of the fix continues in an uninterrupted fashion. +This fix writes the state of the fix to :doc:`binary restart files +`. This includes information about the random number +generator seed, the next timestep for MC exchanges, the number of +exchange attempts and successes etc. See the :doc:`read_restart +` command for info on how to re-specify a fix in an +input script that reads a restart file, so that the operation of the +fix continues in an uninterrupted fashion. .. note:: @@ -165,12 +166,13 @@ by various :doc:`output commands `. The vector values are the following global cumulative quantities: * 1 = swap attempts -* 2 = swap successes +* 2 = swap accepts The vector values calculated by this fix are "extensive". No parameter of this fix can be used with the *start/stop* keywords of -the :doc:`run ` command. This fix is not invoked during :doc:`energy minimization `. +the :doc:`run ` command. This fix is not invoked during +:doc:`energy minimization `. Restrictions """""""""""" @@ -184,7 +186,8 @@ Related commands :doc:`fix nvt `, :doc:`neighbor `, :doc:`fix deposit `, :doc:`fix evaporate `, -:doc:`delete_atoms `, :doc:`fix gcmc ` +:doc:`delete_atoms `, :doc:`fix gcmc `, +:doc:`fix mol/swap ` Default """"""" diff --git a/doc/src/fix_mol_swap.rst b/doc/src/fix_mol_swap.rst new file mode 100644 index 0000000000..099230b385 --- /dev/null +++ b/doc/src/fix_mol_swap.rst @@ -0,0 +1,170 @@ +.. index:: fix mol/swap + +fix mol/swap command +===================== + +Syntax +"""""" + +.. parsed-literal:: + + fix ID group-ID mol/swap N X Itype Jtype seed T keyword value ... + +* ID, group-ID are documented in :doc:`fix ` command +* atom/swap = style name of this fix command +* N = invoke this fix every N steps +* X = number of swaps to attempt every N steps +* Itype,Jtype = two atom types to swap with each othher +* seed = random # seed (positive integer) +* T = scaling temperature of the MC swaps (temperature units) +* zero or more keyword/value pairs may be appended to args +* keyword = *ke* + + .. parsed-literal:: + + *ke* value = *no* or *yes* + *no* = no conservation of kinetic energy after atom swaps + *yes* = kinetic energy is conserved after atom swaps + +Examples +"""""""" + +.. code-block:: LAMMPS + + fix 2 all mol/swap 100 1 2 3 29494 300.0 ke no + fix mySwap fluid mol/swap 500 10 1 2 482798 1.0 + +Description +""""""""""" + +This fix performs Monte Carlo swaps of two specified atom types within +a randomly selected molecule. Two possible use cases are as follows. + +First, consider a mixture of some molecules with atoms of Itype and +other moleclules with atoms of Jtype. The fix will select a random +molecule and attempt to swap all the Itype atoms to Jtype for the +first kind of molecule, or all the Jtype atoms to Itype for the second +kind. Because the swap will only take place if it is energetically +favorable, the fix can be used to determine the miscibility of 2 +different kinds of molecules much more quickly than just dynamics +would do it. + +Second, consider diblock copolymers with two types of monomers Itype +and Jtype. The fix will select a random molecule and attempt to do a +Itype <--> Jtype swap of all those monomers within the molecule. Thus +the fix can be used to find the energetically favorable fractions of +two flavors of diblock copolymers. + +Intra-molecular swaps of atom types are attemped every N timesteps. On +that timestep, X swaps are attempted. For each attempt a single +molecule ID is randomly selected. The range of possible molecule IDs +from loID to hiID is pre-computed before each run begins. The +loID/hiID is set for the molecule with the smallest/largest ID which +has any Itype or Jtype atoms in it. Note that if you define a system +with many molecule IDs between loID and hiID which have no Itype or +Jtype atoms, then the fix will be inefficient at performing swaps. +Also note that if atoms with molecule ID = 0 exist, they are not +considered molecules by this fix; they are assumed to be solvent atoms +or molecules. + +Candidate atoms for swapping must also be in the fix group. Atoms +within the selected molecule which are not Itype or Jtype are ignored. + +When an atom is swapped from Itype to Jtype (or vice versa), if +charges are defined, the charge values for Itype versus Jtype atoms +are also swapped. This requires that all Itype atoms in the system +have the same charge value. Likewise all Jtype atoms in the system +must have the same charge value. If this is not the case, LAMMPS +issues a warning that it cannot swap charge values. + +If the *ke* keyword is set to yes, which is the default, and the +masses of Itype and Jtype atoms are different, then when a swap +occurs, the velocity of the swapped atom is rescaled by the sqrt of +the mass ratio, so as to conserve the kinetic energy of the atom. + +---------- + +The potential energy of the entire system is computed before and after +each swap is performed within a single molecule. The specified +temperature T is used in the Metropolis criterion to accept or reject +the attempted swap. If the swap is rejected all swapped values are +reversed. + +The potential energy calculations can include systems and models with +the following features: + +* manybody pair styles, including EAM +* hybrid pair styles +* long-range electrostatics (kspace) +* triclinic systems +* potential energy contributions from other fixes + +For the last bullet point, fixes can have an associated potential +energy. Examples of such fixes include: :doc:`efield `, +:doc:`gravity `, :doc:`addforce `, +:doc:`langevin `, :doc:`restrain `, +:doc:`temp/berendsen `, :doc:`temp/rescale +`, and :doc:`wall fixes `. For that +energy to be included in the total potential energy of the system (the +quantity used for the swap accept/reject decision), you MUST enable +the :doc:`fix_modify ` *energy* option for that fix. The +doc pages for individual :doc:`fix ` commands specify if this +should be done. + +.. note:: + + One comment on computational efficiency. If the cutoff lengths + defined for the pair style are different for Itype versus Jtype + atoms (for any of their interactions with any other atom type), then + a new neighbor list needs to be generated for every attempted swap. + This is potentially expensive if N is small or X is large. + +Restart, fix_modify, output, run start/stop, minimize info +""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" + +This fix writes the state of the fix to :doc:`binary restart files +`. This includes information about the random number +generator seed, the next timestep for MC exchanges, the number of +exchange attempts and successes etc. See the :doc:`read_restart +` command for info on how to re-specify a fix in an +input script that reads a restart file, so that the operation of the +fix continues in an uninterrupted fashion. + +.. note:: + + For this to work correctly, the timestep must **not** be changed + after reading the restart with :doc:`reset_timestep `. + The fix will try to detect it and stop with an error. + +None of the :doc:`fix_modify ` options are relevant to this +fix. + +This fix computes a global vector of length 2, which can be accessed +by various :doc:`output commands `. The vector values are +the following global cumulative quantities: + +* 1 = swap attempts +* 2 = swap accepts + +The vector values calculated by this fix are "extensive". + +No parameter of this fix can be used with the *start/stop* keywords of +the :doc:`run ` command. This fix is not invoked during +:doc:`energy minimization `. + +Restrictions +"""""""""""" + +This fix is part of the MC package. It is only enabled if LAMMPS was +built with that package. See the :doc:`Build package ` +doc page for more info. + +Related commands +"""""""""""""""" + +:doc:`fix atom/swap `, :doc:`fix gcmc ` + +Default +""""""" + +The option default is ke = yes. From c22dae8d2ca3099a6d6ae8d3a7c5b131d062860d Mon Sep 17 00:00:00 2001 From: Steve Plimpton Date: Tue, 12 Oct 2021 11:48:26 -0600 Subject: [PATCH 159/372] add a new fix --- doc/src/Commands_fix.rst | 1 + doc/src/fix.rst | 1 + 2 files changed, 2 insertions(+) diff --git a/doc/src/Commands_fix.rst b/doc/src/Commands_fix.rst index effccd55bf..9d996f6c51 100644 --- a/doc/src/Commands_fix.rst +++ b/doc/src/Commands_fix.rst @@ -103,6 +103,7 @@ OPT. * :doc:`manifoldforce ` * :doc:`mdi/engine ` * :doc:`meso/move ` + * :doc:`mol/swap ` * :doc:`momentum (k) ` * :doc:`momentum/chunk ` * :doc:`move ` diff --git a/doc/src/fix.rst b/doc/src/fix.rst index c45ae6a801..c5295c77d7 100644 --- a/doc/src/fix.rst +++ b/doc/src/fix.rst @@ -246,6 +246,7 @@ accelerated styles exist. * :doc:`manifoldforce ` - restrain atoms to a manifold during minimization * :doc:`mdi/engine ` - connect LAMMPS to external programs via the MolSSI Driver Interface (MDI) * :doc:`meso/move ` - move mesoscopic SPH/SDPD particles in a prescribed fashion +* :doc:`mol/swap ` - Monte Carlo atom type swapping with a molecule * :doc:`momentum ` - zero the linear and/or angular momentum of a group of atoms * :doc:`momentum/chunk ` - zero the linear and/or angular momentum of a chunk of atoms * :doc:`move ` - move atoms in a prescribed fashion From a8f42bd5340ef3445950a25a82d3ab077a646db7 Mon Sep 17 00:00:00 2001 From: Steve Plimpton Date: Tue, 12 Oct 2021 11:50:04 -0600 Subject: [PATCH 160/372] tweak to atom/swap doc page --- doc/src/fix_atom_swap.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/src/fix_atom_swap.rst b/doc/src/fix_atom_swap.rst index ece922452d..6d8c2cab57 100644 --- a/doc/src/fix_atom_swap.rst +++ b/doc/src/fix_atom_swap.rst @@ -102,7 +102,7 @@ volume. The specified region must have been previously defined with a specified region. Swaps are not otherwise attempted. You should ensure you do not swap atoms belonging to a molecule, or -LAMMPS will soon generate an error when it tries to find those atoms. +LAMMPS will soon generatean error when it tries to find those atoms. LAMMPS will warn you if any of the atoms eligible for swapping have a non-zero molecule ID, but does not check for this at the time of swapping. From 1002763df3fafece19dcc6d2be29c949da67e2bf Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Tue, 12 Oct 2021 21:17:00 -0400 Subject: [PATCH 161/372] remove default class members except for the assignment copy constructor --- src/pointers.h | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/src/pointers.h b/src/pointers.h index 55033aae3e..44820d06eb 100644 --- a/src/pointers.h +++ b/src/pointers.h @@ -23,14 +23,16 @@ #define LMP_POINTERS_H #include "lmptype.h" // IWYU pragma: export + #include // IWYU pragma: export #include // IWYU pragme: export #include // IWYU pragma: export #include // IWYU pragma: export -#include "lammps.h" // IWYU pragma: export -#include "utils.h" // IWYU pragma: export + #include "fmt/format.h" // IWYU pragma: export +#include "lammps.h" // IWYU pragma: export #include "platform.h" // IWYU pragma: export +#include "utils.h" // IWYU pragma: export namespace LAMMPS_NS { @@ -91,6 +93,14 @@ class Pointers { python(ptr->python) {} virtual ~Pointers() {} + // remove default members execept for the copy constructor + + Pointers() = delete; + Pointers(const Pointers &) = default; + Pointers(Pointers &&) = delete; + Pointers & operator=(const Pointers&) = delete; + Pointers & operator=(Pointers&&) = delete; + protected: LAMMPS *lmp; Memory *&memory; From 7b6a3c4307f3835f38b0c0235fff45156f374786 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Tue, 12 Oct 2021 21:17:46 -0400 Subject: [PATCH 162/372] remove redundant void arguments --- lib/poems/SystemProcessor.h | 10 +++++----- lib/poems/poemstree.h | 14 ++++++------- lib/poems/poemstreenode.cpp | 8 ++++---- src/DPD-REACT/fix_rx.h | 4 ++-- src/DPD-REACT/pair_exp6_rx.cpp | 2 +- src/EFF/compute_temp_deform_eff.h | 2 +- src/EFF/compute_temp_region_eff.h | 2 +- src/LATBOLTZ/fix_lb_fluid.cpp | 24 +++++++++++------------ src/LATBOLTZ/fix_lb_fluid.h | 26 ++++++++++++------------- src/LATBOLTZ/fix_lb_pc.cpp | 2 +- src/LATBOLTZ/fix_lb_pc.h | 2 +- src/LATBOLTZ/fix_lb_rigid_pc_sphere.cpp | 2 +- src/MACHDYN/pair_smd_tlsph.h | 4 ++-- src/MANYBODY/pair_edip.cpp | 2 +- src/MANYBODY/pair_edip.h | 10 +++++----- src/MANYBODY/pair_edip_multi.cpp | 4 ++-- src/MANYBODY/pair_edip_multi.h | 4 ++-- src/MANYBODY/pair_tersoff_table.h | 8 ++++---- src/MOLFILE/molfile_interface.cpp | 4 ++-- src/OPENMP/pair_tersoff_table_omp.cpp | 4 ++-- src/OPENMP/pair_tersoff_table_omp.h | 4 ++-- src/min_hftn.cpp | 2 +- src/min_hftn.h | 10 +++++----- 23 files changed, 77 insertions(+), 77 deletions(-) diff --git a/lib/poems/SystemProcessor.h b/lib/poems/SystemProcessor.h index f009794f66..faa8c01d62 100644 --- a/lib/poems/SystemProcessor.h +++ b/lib/poems/SystemProcessor.h @@ -49,9 +49,9 @@ private: POEMSChain * AddNewChain(POEMSNode * currentNode); bool setLinkVisited(POEMSNode * firstNode, POEMSNode * secondNode); public: - SystemProcessor(void); + SystemProcessor(); - ~SystemProcessor(void) { + ~SystemProcessor() { headsOfSystems.DeleteValues(); for(int i = 0; i < ringsInSystem.GetNumElements(); i++) { @@ -66,7 +66,7 @@ public: int getNumberOfHeadChains(); }; -SystemProcessor::SystemProcessor(void){ +SystemProcessor::SystemProcessor(){ // register callback for deleting auxiliary data from tree nodes. nodes.SetDeleteAuxData(&POEMSNodeDelete_cb); } @@ -271,14 +271,14 @@ bool SystemProcessor::setLinkVisited(POEMSNode * firstNode, POEMSNode * secondNo return true; //return true to indicate that this is the first time the link has been visited } -List * SystemProcessor::getSystemData(void) //Gets the list of POEMSChains that comprise the system. Might eventually only +List * SystemProcessor::getSystemData() //Gets the list of POEMSChains that comprise the system. Might eventually only //return chains linked to the reference plane, but currently returns every chain //in the system. { return &headsOfSystems; } -int SystemProcessor::getNumberOfHeadChains(void) //This function isnt implemented yet, and might be taken out entirely; this was a holdover +int SystemProcessor::getNumberOfHeadChains() //This function isnt implemented yet, and might be taken out entirely; this was a holdover //from when I intended to return an array of chain pointers, rather than a list of chains //It will probably be deleted once I finish figuring out exactly what needs to be returned { diff --git a/lib/poems/poemstree.h b/lib/poems/poemstree.h index cb9499cfd4..52eaac6af1 100644 --- a/lib/poems/poemstree.h +++ b/lib/poems/poemstree.h @@ -64,8 +64,8 @@ protected: public: // constructor, destructor - Tree(void); - ~Tree(void) + Tree(); + ~Tree() { ClearTree(root); }; @@ -85,16 +85,16 @@ public: void Insert(const int& item, const int& data, void * AuxData = nullptr); void Delete(const int& item); void AVLInsert(TreeNode* &tree, TreeNode* newNode, int &reviseBalanceFactor); - void ClearList(void); + void ClearList(); // tree specific methods void Update(const int& item); - TreeNode *GetRoot(void) const; + TreeNode *GetRoot() const; }; // constructor -Tree::Tree(void) +Tree::Tree() { root = 0; current = 0; @@ -105,7 +105,7 @@ Tree::Tree(void) // return root pointer -TreeNode *Tree::GetRoot(void) const +TreeNode *Tree::GetRoot() const { return root; } @@ -603,7 +603,7 @@ void Tree::ClearTree(TreeNode * &t) } // delete all nodes in list -void Tree::ClearList(void) +void Tree::ClearList() { delete root; delete current; diff --git a/lib/poems/poemstreenode.cpp b/lib/poems/poemstreenode.cpp index d1fd965752..48bd80f283 100644 --- a/lib/poems/poemstreenode.cpp +++ b/lib/poems/poemstreenode.cpp @@ -27,23 +27,23 @@ TreeNode::TreeNode (const int & item, TreeNode *lptr,TreeNode *rptr, // return left -TreeNode* TreeNode::Left(void) +TreeNode* TreeNode::Left() { return left; } // return right -TreeNode* TreeNode::Right(void) +TreeNode* TreeNode::Right() { return right; } -int TreeNode::GetBalanceFactor(void) +int TreeNode::GetBalanceFactor() { return balanceFactor; } -int TreeNode::GetData(void) +int TreeNode::GetData() { return data; } diff --git a/src/DPD-REACT/fix_rx.h b/src/DPD-REACT/fix_rx.h index 1d65c4c09e..bd3122e81d 100644 --- a/src/DPD-REACT/fix_rx.h +++ b/src/DPD-REACT/fix_rx.h @@ -97,7 +97,7 @@ class FixRX : public Fix { // Sparse stoichiometric matrix storage format and methods. bool useSparseKinetics; //SparseKinetics sparseKinetics; - void initSparse(void); + void initSparse(); int rhs_sparse(double, const double *, double *, void *) const; int sparseKinetics_maxReactants; //mask; int nlocal = atom->nlocal; @@ -1255,7 +1255,7 @@ require more frequent neighborlist rebuilds"); // read in a fluid restart file. This is only used to restart the // fluid portion of a LAMMPS simulation. //========================================================================== -void FixLbFluid::read_restartfile(void) +void FixLbFluid::read_restartfile() { MPI_Status status; MPI_Datatype realtype; @@ -1295,7 +1295,7 @@ void FixLbFluid::read_restartfile(void) //========================================================================== // write a fluid restart file. //========================================================================== -void FixLbFluid::write_restartfile(void) +void FixLbFluid::write_restartfile() { MPI_File fh; @@ -1343,7 +1343,7 @@ void FixLbFluid::write_restartfile(void) // This assumes that all the simulation parameters have been given in // terms of distance, time and mass units. //========================================================================== -void FixLbFluid::rescale(void) +void FixLbFluid::rescale() { vwtp = vwtp*dt_lb/dx_lb; vwbt = vwbt*dt_lb/dx_lb; @@ -1419,7 +1419,7 @@ satisfy the Courant condition.\n"); // Set the lattice-Boltzmann velocity vectors and weights for the D3Q15 // model. Initialize the fluid velocity and density. //========================================================================== -void FixLbFluid::initializeLB15(void) +void FixLbFluid::initializeLB15() { int i,j,k,m; @@ -1586,7 +1586,7 @@ void FixLbFluid::initializeLB15(void) // Set the lattice-Boltzmann velocity vectors and weights for the D3Q19 // model. Initialize the fluid velocity and density. //========================================================================== -void FixLbFluid::initializeLB19(void) +void FixLbFluid::initializeLB19() { int i,j,k,m; @@ -1823,7 +1823,7 @@ void FixLbFluid::initializeLB19(void) // Initialize the equilibrium distribution functions // (this just uses the initial fluid parameters, and assumes no forces). //========================================================================== -void FixLbFluid::initialize_feq(void) +void FixLbFluid::initialize_feq() { int i,j,k,p; MPI_Request requests[8]; @@ -2311,7 +2311,7 @@ void FixLbFluid::equilibriumdist19(int xstart, int xend, int ystart, int yend, i // Calculate the fluid density and velocity over the entire simulation // domain. //========================================================================== -void FixLbFluid::parametercalc_full(void) +void FixLbFluid::parametercalc_full() { MPI_Request requests[4]; MPI_Request requests2[12]; @@ -2529,7 +2529,7 @@ void FixLbFluid::update_periodic(int xstart, int xend, int ystart, int yend, int //========================================================================== // Print the fluid properties to the screen. //========================================================================== -void FixLbFluid::streamout(void) +void FixLbFluid::streamout() { int i,j,k; int istart,jstart,kstart; @@ -2651,7 +2651,7 @@ void FixLbFluid::streamout(void) // Update the distribution functions over the entire simulation domain for // the D3Q15 model. //========================================================================== -void FixLbFluid::update_full15(void) +void FixLbFluid::update_full15() { MPI_Request req_send15,req_recv15; @@ -3008,7 +3008,7 @@ void FixLbFluid::update_full15(void) // Update the distribution functions over the entire simulation domain for // the D3Q19 model. //========================================================================== -void FixLbFluid::update_full19(void) +void FixLbFluid::update_full19() { MPI_Request req_send15,req_recv15; diff --git a/src/LATBOLTZ/fix_lb_fluid.h b/src/LATBOLTZ/fix_lb_fluid.h index 0842acbe64..98d3e2c792 100644 --- a/src/LATBOLTZ/fix_lb_fluid.h +++ b/src/LATBOLTZ/fix_lb_fluid.h @@ -139,26 +139,26 @@ class FixLbFluid : public Fix { int printfluid; int fixviscouslb; - void rescale(void); - void (FixLbFluid::*initializeLB)(void); - void initializeLB15(void); - void initializeLB19(void); - void initialize_feq(void); + void rescale(); + void (FixLbFluid::*initializeLB)(); + void initializeLB15(); + void initializeLB19(); + void initialize_feq(); void (FixLbFluid::*equilibriumdist)(int, int, int, int, int, int); void equilibriumdist15(int, int, int, int, int, int); void equilibriumdist19(int, int, int, int, int, int); void parametercalc_part(int, int, int, int, int, int); - void parametercalc_full(void); + void parametercalc_full(); void update_periodic(int, int, int, int, int, int); - void (FixLbFluid::*update_full)(void); - void update_full15(void); - void update_full19(void); - void streamout(void); - void read_restartfile(void); - void write_restartfile(void); + void (FixLbFluid::*update_full)(); + void update_full15(); + void update_full19(); + void streamout(); + void read_restartfile(); + void write_restartfile(); void peskin_interpolation(int); void trilinear_interpolation(int); - void calc_fluidforce(void); + void calc_fluidforce(); }; } // namespace LAMMPS_NS #endif diff --git a/src/LATBOLTZ/fix_lb_pc.cpp b/src/LATBOLTZ/fix_lb_pc.cpp index bae0987b21..352803b670 100644 --- a/src/LATBOLTZ/fix_lb_pc.cpp +++ b/src/LATBOLTZ/fix_lb_pc.cpp @@ -338,7 +338,7 @@ int FixLbPC::unpack_exchange(int nlocal, double *buf) } /* ---------------------------------------------------------------------- */ - void FixLbPC::compute_up(void) + void FixLbPC::compute_up() { int *mask = atom->mask; int nlocal = atom->nlocal; diff --git a/src/LATBOLTZ/fix_lb_pc.h b/src/LATBOLTZ/fix_lb_pc.h index e2e47d915f..d218f22ebd 100644 --- a/src/LATBOLTZ/fix_lb_pc.h +++ b/src/LATBOLTZ/fix_lb_pc.h @@ -50,7 +50,7 @@ class FixLbPC : public Fix { double **up; double **up_old; - void compute_up(void); + void compute_up(); class FixLbFluid *fix_lb_fluid; }; diff --git a/src/LATBOLTZ/fix_lb_rigid_pc_sphere.cpp b/src/LATBOLTZ/fix_lb_rigid_pc_sphere.cpp index 304d5bbf0f..d9dfc7b264 100644 --- a/src/LATBOLTZ/fix_lb_rigid_pc_sphere.cpp +++ b/src/LATBOLTZ/fix_lb_rigid_pc_sphere.cpp @@ -1536,7 +1536,7 @@ double FixLbRigidPCSphere::compute_array(int i, int j) } /* ---------------------------------------------------------------------- */ - void FixLbRigidPCSphere::compute_up(void) + void FixLbRigidPCSphere::compute_up() { int *mask = atom->mask; int nlocal = atom->nlocal; diff --git a/src/MACHDYN/pair_smd_tlsph.h b/src/MACHDYN/pair_smd_tlsph.h index 86e2bbe52b..0950430ca0 100644 --- a/src/MACHDYN/pair_smd_tlsph.h +++ b/src/MACHDYN/pair_smd_tlsph.h @@ -49,8 +49,8 @@ class PairTlsph : public Pair { void write_restart_settings(FILE *) {} void read_restart_settings(FILE *) {} virtual double memory_usage(); - void compute_shape_matrix(void); - void material_model(void); + void compute_shape_matrix(); + void material_model(); void *extract(const char *, int &); int pack_forward_comm(int, int *, double *, int, int *); void unpack_forward_comm(int, int, double *); diff --git a/src/MANYBODY/pair_edip.cpp b/src/MANYBODY/pair_edip.cpp index 0efa509cb3..51b38037ab 100644 --- a/src/MANYBODY/pair_edip.cpp +++ b/src/MANYBODY/pair_edip.cpp @@ -463,7 +463,7 @@ void PairEDIP::compute(int eflag, int vflag) /* ---------------------------------------------------------------------- */ -void PairEDIP::allocateGrids(void) +void PairEDIP::allocateGrids() { int numGridPointsOneCutoffFunction; int numGridPointsNotOneCutoffFunction; diff --git a/src/MANYBODY/pair_edip.h b/src/MANYBODY/pair_edip.h index 8ee3a74dd8..5812768d55 100644 --- a/src/MANYBODY/pair_edip.h +++ b/src/MANYBODY/pair_edip.h @@ -90,11 +90,11 @@ class PairEDIP : public Pair { Param *params; // parameter set for an I-J-K interaction void allocate(); - void allocatePreLoops(void); - void deallocatePreLoops(void); - void allocateGrids(void); - void deallocateGrids(void); - void initGrids(void); + void allocatePreLoops(); + void deallocatePreLoops(); + void allocateGrids(); + void deallocateGrids(); + void initGrids(); void read_file(char *); void setup_params(); diff --git a/src/MANYBODY/pair_edip_multi.cpp b/src/MANYBODY/pair_edip_multi.cpp index 47cc5a90fa..3cabec4505 100644 --- a/src/MANYBODY/pair_edip_multi.cpp +++ b/src/MANYBODY/pair_edip_multi.cpp @@ -486,7 +486,7 @@ void PairEDIPMulti::edip_fcut3(double r, Param *param, double &f, double &fdr) pre-calculated structures ------------------------------------------------------------------------- */ -void PairEDIPMulti::allocatePreLoops(void) +void PairEDIPMulti::allocatePreLoops() { int nthreads = comm->nthreads; @@ -497,7 +497,7 @@ void PairEDIPMulti::allocatePreLoops(void) deallocate preLoops ------------------------------------------------------------------------- */ -void PairEDIPMulti::deallocatePreLoops(void) +void PairEDIPMulti::deallocatePreLoops() { memory->destroy(preForceCoord); } diff --git a/src/MANYBODY/pair_edip_multi.h b/src/MANYBODY/pair_edip_multi.h index 44921ebdba..3ee7347a56 100644 --- a/src/MANYBODY/pair_edip_multi.h +++ b/src/MANYBODY/pair_edip_multi.h @@ -57,8 +57,8 @@ class PairEDIPMulti : public Pair { Param *params; // parameter set for an I-J-K interaction void allocate(); - void allocatePreLoops(void); - void deallocatePreLoops(void); + void allocatePreLoops(); + void deallocatePreLoops(); void read_file(char *); void setup(); diff --git a/src/MANYBODY/pair_tersoff_table.h b/src/MANYBODY/pair_tersoff_table.h index 662fd532b7..ab345d8af2 100644 --- a/src/MANYBODY/pair_tersoff_table.h +++ b/src/MANYBODY/pair_tersoff_table.h @@ -69,8 +69,8 @@ class PairTersoffTable : public Pair { double **preGtetaFunction, **preGtetaFunctionDerived; double *preCutoffFunction, *preCutoffFunctionDerived; - virtual void allocatePreLoops(void); - virtual void deallocatePreLoops(void); + virtual void allocatePreLoops(); + virtual void deallocatePreLoops(); // grids @@ -79,8 +79,8 @@ class PairTersoffTable : public Pair { double **gtetaFunction, **gtetaFunctionDerived; double **betaZetaPower, **betaZetaPowerDerived; - void allocateGrids(void); - void deallocateGrids(void); + void allocateGrids(); + void deallocateGrids(); }; } // namespace LAMMPS_NS diff --git a/src/MOLFILE/molfile_interface.cpp b/src/MOLFILE/molfile_interface.cpp index 808bc16ab4..9ce3822082 100644 --- a/src/MOLFILE/molfile_interface.cpp +++ b/src/MOLFILE/molfile_interface.cpp @@ -35,9 +35,9 @@ #define DEBUG 0 extern "C" { - typedef int (*initfunc)(void); + typedef int (*initfunc)(); typedef int (*regfunc)(void *, vmdplugin_register_cb); - typedef int (*finifunc)(void); + typedef int (*finifunc)(); typedef struct { void *p; diff --git a/src/OPENMP/pair_tersoff_table_omp.cpp b/src/OPENMP/pair_tersoff_table_omp.cpp index 5367a3d043..94f9e72c3d 100644 --- a/src/OPENMP/pair_tersoff_table_omp.cpp +++ b/src/OPENMP/pair_tersoff_table_omp.cpp @@ -502,7 +502,7 @@ void PairTersoffTableOMP::eval(int iifrom, int iito, ThrData * const thr) } // loop on I } -void PairTersoffTableOMP::deallocatePreLoops(void) +void PairTersoffTableOMP::deallocatePreLoops() { memory->destroy(thrGtetaFunction); memory->destroy(thrGtetaFunctionDerived); @@ -510,7 +510,7 @@ void PairTersoffTableOMP::deallocatePreLoops(void) memory->destroy(thrCutoffFunctionDerived); } -void PairTersoffTableOMP::allocatePreLoops(void) +void PairTersoffTableOMP::allocatePreLoops() { const int nthreads = comm->nthreads; memory->create(thrGtetaFunction,nthreads,leadingDimensionInteractionList,leadingDimensionInteractionList,"tersofftable:thrGtetaFunction"); diff --git a/src/OPENMP/pair_tersoff_table_omp.h b/src/OPENMP/pair_tersoff_table_omp.h index ce5260f77f..c686087f11 100644 --- a/src/OPENMP/pair_tersoff_table_omp.h +++ b/src/OPENMP/pair_tersoff_table_omp.h @@ -37,8 +37,8 @@ class PairTersoffTableOMP : public PairTersoffTable, public ThrOMP { double ***thrGtetaFunction, ***thrGtetaFunctionDerived; double **thrCutoffFunction, **thrCutoffFunctionDerived; - void allocatePreLoops(void); - void deallocatePreLoops(void); + void allocatePreLoops(); + void deallocatePreLoops(); private: template void eval(int ifrom, int ito, ThrData *const thr); diff --git a/src/min_hftn.cpp b/src/min_hftn.cpp index e743f1e1da..6786379cd7 100644 --- a/src/min_hftn.cpp +++ b/src/min_hftn.cpp @@ -95,7 +95,7 @@ MinHFTN::MinHFTN(LAMMPS *lmp) : Min(lmp) Destructor ------------------------------------------------------------------------- */ -MinHFTN::~MinHFTN (void) +MinHFTN::~MinHFTN() { for (int i = 1; i < NUM_HFTN_ATOM_BASED_VECTORS; i++) if (_daExtraGlobal[i] != nullptr) diff --git a/src/min_hftn.h b/src/min_hftn.h index 3512d24220..4b909c3112 100644 --- a/src/min_hftn.h +++ b/src/min_hftn.h @@ -27,7 +27,7 @@ namespace LAMMPS_NS { class MinHFTN : public Min { public: MinHFTN(LAMMPS *); - ~MinHFTN(void); + ~MinHFTN(); void init(); void setup_style(); void reset_vectors(); @@ -64,7 +64,7 @@ class MinHFTN : public Min { const double dEnergyAtXin, const double dForce2AtXin, double &dEnergyAtXout, double &dForce2AtXout, int &nStepType, double &dStepLength2, double &dStepLengthInf); - double calc_xinf_using_mpi_(void) const; + double calc_xinf_using_mpi_() const; double calc_dot_prod_using_mpi_(const int nIx1, const int nIx2) const; double calc_grad_dot_v_using_mpi_(const int nIx) const; void calc_dhd_dd_using_mpi_(double &dDHD, double &dDD) const; @@ -72,19 +72,19 @@ class MinHFTN : public Min { void calc_plengths_using_mpi_(double &dStepLength2, double &dStepLengthInf) const; bool step_exceeds_TR_(const double dTrustRadius, const double dPP, const double dPD, const double dDD, double &dTau) const; - bool step_exceeds_DMAX_(void) const; + bool step_exceeds_DMAX_() const; void adjust_step_to_tau_(const double tau); double compute_to_tr_(const double dPP, const double dPD, const double dDD, const double dTrustRadius, const bool bConsiderBothRoots, const double dDHD, const double dPdotHD, const double dGradDotD) const; void evaluate_dir_der_(const bool bUseForwardDiffs, const int nIxDir, const int nIxResult, const bool bEvaluateAtX, double &dNewEnergy); - void open_hftn_print_file_(void); + void open_hftn_print_file_(); void hftn_print_line_(const bool bIsStepAccepted, const int nIteration, const int nTotalEvals, const double dEnergy, const double dForce2, const int nStepType, const double dTrustRadius, const double dStepLength2, const double dActualRed, const double dPredictedRed) const; - void close_hftn_print_file_(void); + void close_hftn_print_file_(); }; } // namespace LAMMPS_NS From dd6f49a753ea4c5849616f5330dab33aa00fd0ae Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Tue, 12 Oct 2021 21:29:33 -0400 Subject: [PATCH 163/372] use 'noexcept' instead of the deprecated 'throw()' --- src/exceptions.h | 4 ++-- src/file_writer.h | 4 ++-- src/text_file_reader.h | 4 ++-- src/tokenizer.h | 4 ++-- 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/src/exceptions.h b/src/exceptions.h index 1df6c5d1a3..1c9d8c8daf 100644 --- a/src/exceptions.h +++ b/src/exceptions.h @@ -26,9 +26,9 @@ class LAMMPSException : public std::exception { LAMMPSException(const std::string &msg) : message(msg) {} - ~LAMMPSException() throw() {} + ~LAMMPSException() noexcept {} - virtual const char *what() const throw() { return message.c_str(); } + virtual const char *what() const noexcept { return message.c_str(); } }; class LAMMPSAbortException : public LAMMPSException { diff --git a/src/file_writer.h b/src/file_writer.h index 473975d7fe..42e636d16f 100644 --- a/src/file_writer.h +++ b/src/file_writer.h @@ -39,9 +39,9 @@ class FileWriterException : public std::exception { public: FileWriterException(const std::string &msg) : message(msg) {} - ~FileWriterException() throw() {} + ~FileWriterException() noexcept {} - virtual const char *what() const throw() { return message.c_str(); } + virtual const char *what() const noexcept { return message.c_str(); } }; } // namespace LAMMPS_NS diff --git a/src/text_file_reader.h b/src/text_file_reader.h index 98657a937e..826f470299 100644 --- a/src/text_file_reader.h +++ b/src/text_file_reader.h @@ -52,9 +52,9 @@ class FileReaderException : public std::exception { public: FileReaderException(const std::string &msg) : message(msg) {} - ~FileReaderException() throw() {} + ~FileReaderException() noexcept {} - virtual const char *what() const throw() { return message.c_str(); } + virtual const char *what() const noexcept { return message.c_str(); } }; class EOFException : public FileReaderException { diff --git a/src/tokenizer.h b/src/tokenizer.h index 7f45a512dd..ad4f0d3536 100644 --- a/src/tokenizer.h +++ b/src/tokenizer.h @@ -62,11 +62,11 @@ class TokenizerException : public std::exception { * \param token String of the token/word that caused the error */ TokenizerException(const std::string &msg, const std::string &token); - ~TokenizerException() throw() {} + ~TokenizerException() noexcept {} /** Retrieve message describing the thrown exception * \return string with error message */ - virtual const char *what() const throw() { return message.c_str(); } + virtual const char *what() const noexcept { return message.c_str(); } }; class InvalidIntegerException : public TokenizerException { From 88631372ecd6554555495e4efa1b77ee95413926 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Tue, 12 Oct 2021 21:47:02 -0400 Subject: [PATCH 164/372] use nullptr instead of NULL or 0 where applicable --- lib/awpmd/ivutils/include/vector_3.h | 4 +- lib/poems/body.cpp | 2 +- lib/poems/colmatmap.cpp | 8 +- lib/poems/colmatrix.cpp | 10 +- lib/poems/joint.cpp | 8 +- lib/poems/matrix.cpp | 16 +- lib/poems/matrixfun.cpp | 2 +- lib/poems/onbody.cpp | 6 +- lib/poems/onsolver.cpp | 4 +- lib/poems/poemslist.h | 6 +- lib/poems/poemsobject.cpp | 2 +- lib/poems/poemstree.h | 4 +- lib/poems/point.cpp | 2 +- lib/poems/rowmatrix.cpp | 10 +- lib/poems/system.cpp | 4 +- src/EXTRA-DUMP/xdr_compat.cpp | 2 +- src/EXTRA-FIX/fix_ttm.cpp | 2 +- src/KIM/pair_kim.cpp | 12 +- src/MGPT/mgpt_readpot.cpp | 2 +- src/MGPT/mgpt_readpot.h | 2 +- src/MGPT/pair_mgpt.cpp | 32 +-- src/MGPT/pair_mgpt.h | 26 +- src/ML-IAP/mliap_model_python.cpp | 2 +- src/ML-IAP/mliap_model_python.h | 2 +- src/ML-RANN/rann_fingerprint_bond.cpp | 12 +- src/ML-RANN/rann_fingerprint_bondscreened.cpp | 12 +- .../rann_fingerprint_bondscreenedspin.cpp | 12 +- src/ML-RANN/rann_fingerprint_bondspin.cpp | 12 +- src/ML-RANN/rann_fingerprint_radial.cpp | 14 +- .../rann_fingerprint_radialscreened.cpp | 14 +- .../rann_fingerprint_radialscreenedspin.cpp | 14 +- src/ML-RANN/rann_fingerprint_radialspin.cpp | 14 +- src/MOLECULE/dihedral_table.cpp | 2 +- src/MOLFILE/molfile_interface.h | 2 +- src/OPENMP/pair_buck_long_coul_long_omp.cpp | 8 +- src/OPENMP/pair_lj_long_coul_long_omp.cpp | 8 +- src/OPENMP/thr_data.cpp | 243 +++++++++--------- src/OPT/pair_eam_opt.cpp | 4 +- src/OPT/pair_lj_charmm_coul_long_opt.cpp | 2 +- src/OPT/pair_lj_cut_opt.cpp | 2 +- src/OPT/pair_morse_opt.cpp | 2 +- src/OPT/pair_ufm_opt.cpp | 2 +- src/PTM/ptm_index.cpp | 2 +- src/utils.cpp | 14 +- 44 files changed, 283 insertions(+), 282 deletions(-) diff --git a/lib/awpmd/ivutils/include/vector_3.h b/lib/awpmd/ivutils/include/vector_3.h index 5711d3bf35..6beef2bcd6 100644 --- a/lib/awpmd/ivutils/include/vector_3.h +++ b/lib/awpmd/ivutils/include/vector_3.h @@ -487,7 +487,7 @@ vec_type dist_av(Vector_3 *va1,Vector_3 *va2,int n); /*e optionally gives the indexes for maximal and minimal difference va2 can be nullptr, then the norm of va1 is used */ -vec_type diff_av(Vector_3 *va1,Vector_3 *va2,int n, int *minind=0, int *maxind=0); +vec_type diff_av(Vector_3 *va1,Vector_3 *va2,int n, int *minind=nullptr, int *maxind=nullptr); //e finds suitable perpendicular to a vector Vector_3 FindPerp(const Vector_3 &vAB); @@ -507,7 +507,7 @@ Vector_3 GetIScopei(const Vector_3 *varr,int *indarr,int n,Vector_3* box_min,Vec // neue Funktionen //e clears vector array with optional integer index -void clear_vecarri(int n,Vector_3 *vec, int *ind=0); +void clear_vecarri(int n,Vector_3 *vec, int *ind=nullptr); //e reflects the vector ini+dir*t+0.5*force*t^2 to be inside a box limited by 0 and box sizes //e changes dir according to the final state diff --git a/lib/poems/body.cpp b/lib/poems/body.cpp index 1fc31243c8..510154ac75 100644 --- a/lib/poems/body.cpp +++ b/lib/poems/body.cpp @@ -132,6 +132,6 @@ Body* NewBody(int type){ case PARTICLE : // A Particle return new Particle; default : // error - return 0; + return nullptr; } } diff --git a/lib/poems/colmatmap.cpp b/lib/poems/colmatmap.cpp index 69ec4ec1b0..e075f1d297 100644 --- a/lib/poems/colmatmap.cpp +++ b/lib/poems/colmatmap.cpp @@ -24,7 +24,7 @@ using namespace std; ColMatMap::ColMatMap(){ numrows = 0; - elements = 0; + elements = nullptr; } ColMatMap::~ColMatMap(){ @@ -33,7 +33,7 @@ ColMatMap::~ColMatMap(){ ColMatMap::ColMatMap(const ColMatMap& A){ // copy constructor numrows = 0; - elements = 0; + elements = nullptr; Dim(A.numrows); for(int i=0;iDim(m,n); } diff --git a/lib/poems/matrixfun.cpp b/lib/poems/matrixfun.cpp index 9c20d7cac9..b57710aa7a 100644 --- a/lib/poems/matrixfun.cpp +++ b/lib/poems/matrixfun.cpp @@ -36,7 +36,7 @@ VirtualMatrix* NewMatrix(int type){ case MAT4X4 : return new Mat4x4; case VECT3 : return new Vect3; case VECT4 : return new Vect4; - default : return 0; // error! + default : return nullptr; // error! } } diff --git a/lib/poems/onbody.cpp b/lib/poems/onbody.cpp index a9f260a329..84dd0b9ea3 100644 --- a/lib/poems/onbody.cpp +++ b/lib/poems/onbody.cpp @@ -30,9 +30,9 @@ using namespace std; OnBody::OnBody(){ - system_body = 0; - system_joint = 0; - parent = 0; + system_body = nullptr; + system_joint = nullptr; + parent = nullptr; // these terms have zeros which are NEVER overwritten sI.Zeros(); diff --git a/lib/poems/onsolver.cpp b/lib/poems/onsolver.cpp index 8149ad694b..24758a7aa8 100644 --- a/lib/poems/onsolver.cpp +++ b/lib/poems/onsolver.cpp @@ -28,8 +28,8 @@ using namespace std; OnSolver::OnSolver(){ numbodies = 0; - bodyarray = 0; - q=0;u=0; qdot=0; udot=0; qdotdot=0; + bodyarray = nullptr; + q=nullptr;u=nullptr; qdot=nullptr; udot=nullptr; qdotdot=nullptr; type = ONSOLVER; } diff --git a/lib/poems/poemslist.h b/lib/poems/poemslist.h index 39a3af2b51..a56c953349 100644 --- a/lib/poems/poemslist.h +++ b/lib/poems/poemslist.h @@ -65,7 +65,7 @@ template ListElement::ListElement(){ } template ListElement::ListElement(T* v){ - next = prev = 0; + next = prev = nullptr; value = v; } @@ -77,7 +77,7 @@ template ListElement::~ListElement(){ // template List::List(){ - head = tail = 0; + head = tail = nullptr; numelements = 0; } @@ -181,7 +181,7 @@ template S** List::CreateArray(){ S** array = new S* [numelements]; ListElement* ele = head; - for(int i=0;ele != 0;i++){ + for(int i=0;ele != nullptr;i++){ array[i] = ele->value; ele = ele->next; } diff --git a/lib/poems/poemsobject.cpp b/lib/poems/poemsobject.cpp index 5f221f1242..0732179415 100644 --- a/lib/poems/poemsobject.cpp +++ b/lib/poems/poemsobject.cpp @@ -20,7 +20,7 @@ #include POEMSObject::POEMSObject(){ - name = 0; + name = nullptr; ChangeName((const char*)"unnamed"); ID = -1; } diff --git a/lib/poems/poemstree.h b/lib/poems/poemstree.h index 52eaac6af1..6ff7c5ccde 100644 --- a/lib/poems/poemstree.h +++ b/lib/poems/poemstree.h @@ -96,8 +96,8 @@ public: // constructor Tree::Tree() { - root = 0; - current = 0; + root = nullptr; + current = nullptr; size = 0; DeleteAuxData = nullptr; } diff --git a/lib/poems/point.cpp b/lib/poems/point.cpp index 66bf8d0373..680c30598e 100644 --- a/lib/poems/point.cpp +++ b/lib/poems/point.cpp @@ -39,6 +39,6 @@ Point* NewPoint(int type){ case FIXEDPOINT : // A Fixed Point return new FixedPoint(); default : // error - return 0; + return nullptr; } } diff --git a/lib/poems/rowmatrix.cpp b/lib/poems/rowmatrix.cpp index 41e24911aa..dcd00ce7cb 100644 --- a/lib/poems/rowmatrix.cpp +++ b/lib/poems/rowmatrix.cpp @@ -24,7 +24,7 @@ using namespace std; RowMatrix::RowMatrix(){ numcols = 0; - elements = 0; + elements = nullptr; } RowMatrix::~RowMatrix(){ @@ -33,7 +33,7 @@ RowMatrix::~RowMatrix(){ RowMatrix::RowMatrix(const RowMatrix& A){ // copy constructor numcols = 0; - elements = 0; + elements = nullptr; Dim(A.numcols); for(int i=0;i* b_ele = bodies.GetHeadElement(); - while(b_ele !=0){ + while(b_ele !=nullptr){ out << i << ' '; body = b_ele->value; @@ -200,7 +200,7 @@ void System::WriteOut(ostream& out){ i = 0; Joint* joint; ListElement* j_ele = joints.GetHeadElement(); - while(j_ele !=0){ + while(j_ele !=nullptr){ out << i << ' '; joint = j_ele->value; diff --git a/src/EXTRA-DUMP/xdr_compat.cpp b/src/EXTRA-DUMP/xdr_compat.cpp index 04807a60cc..f2302f3ce7 100644 --- a/src/EXTRA-DUMP/xdr_compat.cpp +++ b/src/EXTRA-DUMP/xdr_compat.cpp @@ -604,7 +604,7 @@ xdrstdio_create (XDR *xdrs, FILE *file, enum xdr_op op) xdrs->x_ops = (struct xdr_ops *) &xdrstdio_ops; xdrs->x_private = (char *) file; xdrs->x_handy = 0; - xdrs->x_base = 0; + xdrs->x_base = nullptr; } /* diff --git a/src/EXTRA-FIX/fix_ttm.cpp b/src/EXTRA-FIX/fix_ttm.cpp index abcbd2ba1e..13fbd4aff4 100644 --- a/src/EXTRA-FIX/fix_ttm.cpp +++ b/src/EXTRA-FIX/fix_ttm.cpp @@ -77,7 +77,7 @@ FixTTM::FixTTM(LAMMPS *lmp, int narg, char **arg) : nzgrid = utils::inumeric(FLERR,arg[12],false,lmp); tinit = 0.0; - infile = outfile = NULL; + infile = outfile = nullptr; int iarg = 13; while (iarg < narg) { diff --git a/src/KIM/pair_kim.cpp b/src/KIM/pair_kim.cpp index be52d98183..49aea4eeb6 100644 --- a/src/KIM/pair_kim.cpp +++ b/src/KIM/pair_kim.cpp @@ -148,7 +148,7 @@ PairKIM::PairKIM(LAMMPS *lmp) : PairKIM::~PairKIM() { // clean up kim_modelname - if (kim_modelname != 0) delete [] kim_modelname; + if (kim_modelname != nullptr) delete [] kim_modelname; // clean up lammps atom species number to unique particle names mapping if (lmps_unique_elements) @@ -169,7 +169,7 @@ PairKIM::~PairKIM() // clean up lmps_stripped_neigh_ptr if (lmps_stripped_neigh_ptr) { delete [] lmps_stripped_neigh_ptr; - lmps_stripped_neigh_ptr = 0; + lmps_stripped_neigh_ptr = nullptr; } // clean up allocated memory for standard Pair class usage @@ -184,7 +184,7 @@ PairKIM::~PairKIM() // clean up neighborlist pointers if (neighborLists) { delete [] neighborLists; - neighborLists = 0; + neighborLists = nullptr; } // clean up KIM interface (if necessary) @@ -330,9 +330,9 @@ void PairKIM::settings(int narg, char **arg) set_lmps_flags(); // set KIM Model name - if (kim_modelname != 0) { + if (kim_modelname != nullptr) { delete [] kim_modelname; - kim_modelname = 0; + kim_modelname = nullptr; } kim_modelname = utils::strdup(arg[0]); @@ -385,7 +385,7 @@ void PairKIM::coeff(int narg, char **arg) delete [] lmps_unique_elements; } lmps_unique_elements = new char*[atom->ntypes]; - for (i = 0; i < atom->ntypes; i++) lmps_unique_elements[i] = 0; + for (i = 0; i < atom->ntypes; i++) lmps_unique_elements[i] = nullptr; // Assume all species arguments are valid // errors will be detected by below diff --git a/src/MGPT/mgpt_readpot.cpp b/src/MGPT/mgpt_readpot.cpp index 75ea1202aa..df62bf735d 100644 --- a/src/MGPT/mgpt_readpot.cpp +++ b/src/MGPT/mgpt_readpot.cpp @@ -166,7 +166,7 @@ void potdata::readpot(const char *parmin_file,const char *potin_file,const doubl int ipotx,modex; double pnx; double vol0; - double *vatab,*vbtab,*vctab,*vdtab,*vetab,*p1tab,*altab,*vpairtab = 0; + double *vatab,*vbtab,*vctab,*vdtab,*vetab,*p1tab,*altab,*vpairtab = nullptr; double *r0rwstab,*evol0tab; double (*C)[4]; double *y,*dy; diff --git a/src/MGPT/mgpt_readpot.h b/src/MGPT/mgpt_readpot.h index d860146959..89b59aa243 100644 --- a/src/MGPT/mgpt_readpot.h +++ b/src/MGPT/mgpt_readpot.h @@ -320,7 +320,7 @@ struct potdata2 { tdeppot.devol0 = maketempspline(ntemp,potlist,&(potlist[0].devol0)); - tdeppot.ddl[0] = 0; + tdeppot.ddl[0] = nullptr; for(int k = 1; k<=4; k++) tdeppot.ddl[k] = maketempspline(ntemp,potlist,&(potlist[0].ddl[k])); diff --git a/src/MGPT/pair_mgpt.cpp b/src/MGPT/pair_mgpt.cpp index fb956cabaf..2bea1273c6 100644 --- a/src/MGPT/pair_mgpt.cpp +++ b/src/MGPT/pair_mgpt.cpp @@ -222,8 +222,8 @@ PairMGPT::triplet_data *PairMGPT::get_triplet(const double xx[][3],int i,int j,i double t0,t1; - bond_data *bij = 0,*bik = 0; - triplet_data *tptr = 0; + bond_data *bij = nullptr,*bik = nullptr; + triplet_data *tptr = nullptr; t0 = gettime(); if (recompute == 0) { @@ -231,7 +231,7 @@ PairMGPT::triplet_data *PairMGPT::get_triplet(const double xx[][3],int i,int j,i bik = bhash->Lookup(Doublet(i,k)); } - if (bij == 0) { + if (bij == nullptr) { if (recompute == 0) bij = bhash->Insert(Doublet(i,j)); else @@ -242,7 +242,7 @@ PairMGPT::triplet_data *PairMGPT::get_triplet(const double xx[][3],int i,int j,i make_bond(xx,j,i,bij); } - if (bik == 0) { + if (bik == nullptr) { if (recompute == 0) bik = bhash->Insert(Doublet(i,k)); else @@ -256,7 +256,7 @@ PairMGPT::triplet_data *PairMGPT::get_triplet(const double xx[][3],int i,int j,i t_make_b += t1-t0; t0 = gettime(); - if (bij != 0 && bij != 0) { + if (bij != nullptr && bij != nullptr) { tptr = twork; make_triplet(bij,bik,tptr); *dvir_ij_p = bij->fl_deriv_sum; @@ -933,7 +933,7 @@ void PairMGPT::compute_x(const int *nnei,const int * const *nlist, const int ski = (k < i) ? 1 : -1; - T12 = T23 = T31 = 0; + T12 = T23 = T31 = nullptr; mj = first[j]; /* @@ -1042,7 +1042,7 @@ void PairMGPT::compute_x(const int *nnei,const int * const *nlist, accumulate_forces_3(w3); } - if (T12 != 0) { + if (T12 != nullptr) { //printf("T12 i,j,k = %d,%d,%d\n",i,j,k); mcount++; if (three_body_energies && evflag) { @@ -1098,7 +1098,7 @@ void PairMGPT::compute_x(const int *nnei,const int * const *nlist, accumulate_forces_3(w3); } - if (T23 != 0) { + if (T23 != nullptr) { //printf("T23 i,j,k = %d,%d,%d\n",i,j,k); mcount++; if (three_body_energies && evflag) { @@ -1154,7 +1154,7 @@ void PairMGPT::compute_x(const int *nnei,const int * const *nlist, } - if (T31 != 0) { + if (T31 != nullptr) { //printf("T31 i,j,k = %d,%d,%d\n",i,j,k); mcount++; if (three_body_energies && evflag) { @@ -1327,15 +1327,15 @@ void PairMGPT::compute_x(const int *nnei,const int * const *nlist, tr1 = tr2 = tr3 = 0.0; dvir_im = dvir_jm = dvir_km = 0.0; - T45 = T56 = T64 = 0; - if (T12 != 0 && c_km && c_im) + T45 = T56 = T64 = nullptr; + if (T12 != nullptr && c_km && c_im) T45 = get_triplet(xx,m,i,k,&bond_hash,&T45work,&dvir_im,&dvir_km); - if (T23 != 0 && c_im && c_jm) + if (T23 != nullptr && c_im && c_jm) T56 = get_triplet(xx,m,i,j,&bond_hash,&T56work,&dvir_im,&dvir_jm); - if (T31 != 0 && c_jm && c_km) + if (T31 != nullptr && c_jm && c_km) T64 = get_triplet(xx,m,j,k,&bond_hash,&T64work,&dvir_jm,&dvir_km); - if (T12 != 0 && T45 != 0) { + if (T12 != nullptr && T45 != nullptr) { if (four_body_energies && evflag) { tr1 = transtrace(T12->H1H2,T45->H1H2); double dvir = ( (dvir_ij + dvir_jk + dvir_im + dvir_km)*splinepot.ve + @@ -1364,7 +1364,7 @@ void PairMGPT::compute_x(const int *nnei,const int * const *nlist, accumulate_forces_4(w4); } - if (T23 != 0 && T56 != 0) { + if (T23 != nullptr && T56 != nullptr) { if (four_body_energies && evflag) { tr2 = transtrace(T23->H1H2,T56->H1H2); double dvir = ( (dvir_ki + dvir_jk + dvir_im + dvir_jm)*splinepot.ve + @@ -1394,7 +1394,7 @@ void PairMGPT::compute_x(const int *nnei,const int * const *nlist, } - if (T31 != 0 && T64 != 0) { + if (T31 != nullptr && T64 != nullptr) { if (four_body_energies && evflag) { tr3 = transtrace(T31->H1H2,T64->H1H2); double dvir = ( (dvir_ki + dvir_ij + dvir_jm + dvir_km)*splinepot.ve + diff --git a/src/MGPT/pair_mgpt.h b/src/MGPT/pair_mgpt.h index 106c2cc8f0..ed73ed1f35 100644 --- a/src/MGPT/pair_mgpt.h +++ b/src/MGPT/pair_mgpt.h @@ -146,7 +146,7 @@ public: table = new Link *[size]; for(int i = 0; inext; delete p; p = q; @@ -188,9 +188,9 @@ public: return &table[idx]->data; } else { /* This is for threading... and incomplete */ typedef Link *LinkPtr; - LinkPtr ptr = table[idx],last = 0,dataptr = new Link(key,0); + LinkPtr ptr = table[idx],last = nullptr,dataptr = new Link(key,nullptr); - while(ptr != 0) { + while(ptr != nullptr) { last = ptr; ptr = ptr->next; } @@ -241,7 +241,7 @@ public: p = table[idx]; - while(p != 0 && !(p->key == key)) { + while(p != nullptr && !(p->key == key)) { p = p->next; count = count + 1; } @@ -251,9 +251,9 @@ public: nsearch = nsearch + 1; nstep = nstep + count; - if(p != 0) p->hits++; + if(p != nullptr) p->hits++; - return (p == 0) ? 0 : &p->data; + return (p == nullptr) ? nullptr : &p->data; } }; @@ -469,8 +469,8 @@ public: return 0; } double get_weight(const int triclinic, - const double a[3] = 0,const double b[3] = 0, - const double c[3] = 0,const double d[3] = 0) { + const double a[3] = nullptr,const double b[3] = nullptr, + const double c[3] = nullptr,const double d[3] = nullptr) { const double *s0 = triclinic ? domain->sublo_lamda : domain->sublo, *s1 = triclinic ? domain->subhi_lamda : domain->subhi; @@ -479,10 +479,10 @@ public: for(int p = 0; p<3; p++) { double cog = 0.0,q,w,n = 0.0; - if(a != 0) { cog = cog + a[p]; n = n + 1; } - if(b != 0) { cog = cog + b[p]; n = n + 1; } - if(c != 0) { cog = cog + c[p]; n = n + 1; } - if(d != 0) { cog = cog + d[p]; n = n + 1; } + if(a != nullptr) { cog = cog + a[p]; n = n + 1; } + if(b != nullptr) { cog = cog + b[p]; n = n + 1; } + if(c != nullptr) { cog = cog + c[p]; n = n + 1; } + if(d != nullptr) { cog = cog + d[p]; n = n + 1; } cog = cog * (1.0/n); if(cog < 0.5*(s0[p]+s1[p])) q = cog - s0[p]; diff --git a/src/ML-IAP/mliap_model_python.cpp b/src/ML-IAP/mliap_model_python.cpp index b89d17f289..878d234c69 100644 --- a/src/ML-IAP/mliap_model_python.cpp +++ b/src/ML-IAP/mliap_model_python.cpp @@ -62,7 +62,7 @@ MLIAPModelPython::MLIAPModelPython(LAMMPS *lmp, char *coefffilename) : // if LAMMPS_POTENTIALS environment variable is set, add it to PYTHONPATH as well const char *potentials_path = getenv("LAMMPS_POTENTIALS"); - if (potentials_path != NULL) { PyList_Append(py_path, PY_STRING_FROM_STRING(potentials_path)); } + if (potentials_path != nullptr) { PyList_Append(py_path, PY_STRING_FROM_STRING(potentials_path)); } PyGILState_Release(gstate); if (coefffilename) read_coeffs(coefffilename); diff --git a/src/ML-IAP/mliap_model_python.h b/src/ML-IAP/mliap_model_python.h index 8410b4dc4a..4243c67332 100644 --- a/src/ML-IAP/mliap_model_python.h +++ b/src/ML-IAP/mliap_model_python.h @@ -20,7 +20,7 @@ namespace LAMMPS_NS { class MLIAPModelPython : public MLIAPModel { public: - MLIAPModelPython(LAMMPS *, char * = NULL); + MLIAPModelPython(LAMMPS *, char * = nullptr); ~MLIAPModelPython(); virtual int get_nparams(); virtual int get_gamma_nnz(class MLIAPData *); diff --git a/src/ML-RANN/rann_fingerprint_bond.cpp b/src/ML-RANN/rann_fingerprint_bond.cpp index dd2a309415..48c73757e7 100644 --- a/src/ML-RANN/rann_fingerprint_bond.cpp +++ b/src/ML-RANN/rann_fingerprint_bond.cpp @@ -77,26 +77,26 @@ bool Fingerprint_bond::parse_values(std::string constant,std::vectorerrorf(FLERR,"Undefined value for bond power"); if (re!=0.0 && rc!=0.0 && alpha_k[0]!=-1 && dr!=0.0 && mlength!=0 && kmax!=0)return true; diff --git a/src/ML-RANN/rann_fingerprint_bondscreened.cpp b/src/ML-RANN/rann_fingerprint_bondscreened.cpp index 0e9d562f6e..6f65ca6454 100644 --- a/src/ML-RANN/rann_fingerprint_bondscreened.cpp +++ b/src/ML-RANN/rann_fingerprint_bondscreened.cpp @@ -78,26 +78,26 @@ bool Fingerprint_bondscreened::parse_values(std::string constant,std::vectorerrorf(FLERR,"Undefined value for bond power"); if (re!=0.0 && rc!=0.0 && alpha_k[0]!=-1 && dr!=0.0 && mlength!=0 && kmax!=0)return true; diff --git a/src/ML-RANN/rann_fingerprint_bondscreenedspin.cpp b/src/ML-RANN/rann_fingerprint_bondscreenedspin.cpp index 5fb81dc5b1..1dcf8872d2 100644 --- a/src/ML-RANN/rann_fingerprint_bondscreenedspin.cpp +++ b/src/ML-RANN/rann_fingerprint_bondscreenedspin.cpp @@ -79,26 +79,26 @@ bool Fingerprint_bondscreenedspin::parse_values(std::string constant,std::vector int nwords,l; nwords=line1.size(); if (constant.compare("re")==0) { - re = strtod(line1[0].c_str(),NULL); + re = strtod(line1[0].c_str(),nullptr); } else if (constant.compare("rc")==0) { - rc = strtod(line1[0].c_str(),NULL); + rc = strtod(line1[0].c_str(),nullptr); } else if (constant.compare("alphak")==0) { delete[] alpha_k; alpha_k = new double[nwords]; for (l=0;lerrorf(FLERR,"Undefined value for bond power"); if (re!=0.0 && rc!=0.0 && alpha_k[0]!=-1 && dr!=0.0 && mlength!=0 && kmax!=0)return true; diff --git a/src/ML-RANN/rann_fingerprint_bondspin.cpp b/src/ML-RANN/rann_fingerprint_bondspin.cpp index 77749fa3c7..76c4c016ac 100644 --- a/src/ML-RANN/rann_fingerprint_bondspin.cpp +++ b/src/ML-RANN/rann_fingerprint_bondspin.cpp @@ -78,26 +78,26 @@ bool Fingerprint_bondspin::parse_values(std::string constant,std::vectorerrorf(FLERR,"Undefined value for bond power"); if (re!=0.0 && rc!=0.0 && alpha_k[0]!=-1 && dr!=0.0 && mlength!=0 && kmax!=0)return true; diff --git a/src/ML-RANN/rann_fingerprint_radial.cpp b/src/ML-RANN/rann_fingerprint_radial.cpp index 29eeb07a65..f5b381f1f1 100644 --- a/src/ML-RANN/rann_fingerprint_radial.cpp +++ b/src/ML-RANN/rann_fingerprint_radial.cpp @@ -67,30 +67,30 @@ bool Fingerprint_radial::parse_values(std::string constant,std::vectorerrorf(FLERR,"Undefined value for radial power"); //code will run with default o=0 if o is never specified. All other values must be defined in potential file. - if (re!=0 && rc!=0 && alpha!=0 && dr!=0 && nmax!=0)return true; + if (re!=0 && rc!=0 && alpha!=nullptr && dr!=0 && nmax!=0)return true; return false; } diff --git a/src/ML-RANN/rann_fingerprint_radialscreened.cpp b/src/ML-RANN/rann_fingerprint_radialscreened.cpp index 9ac98d183c..b8af308389 100644 --- a/src/ML-RANN/rann_fingerprint_radialscreened.cpp +++ b/src/ML-RANN/rann_fingerprint_radialscreened.cpp @@ -68,30 +68,30 @@ bool Fingerprint_radialscreened::parse_values(std::string constant,std::vectorerrorf(FLERR,"Undefined value for radial power"); //code will run with default o=0 if o is never specified. All other values must be defined in potential file. - if (re!=0 && rc!=0 && alpha!=0 && dr!=0 && nmax!=0)return true; + if (re!=0 && rc!=0 && alpha!=nullptr && dr!=0 && nmax!=0)return true; return false; } diff --git a/src/ML-RANN/rann_fingerprint_radialscreenedspin.cpp b/src/ML-RANN/rann_fingerprint_radialscreenedspin.cpp index 3caeaa84da..de28610c8b 100644 --- a/src/ML-RANN/rann_fingerprint_radialscreenedspin.cpp +++ b/src/ML-RANN/rann_fingerprint_radialscreenedspin.cpp @@ -69,30 +69,30 @@ bool Fingerprint_radialscreenedspin::parse_values(std::string constant,std::vect int l; int nwords=line1.size(); if (constant.compare("re")==0) { - re = strtod(line1[0].c_str(),NULL); + re = strtod(line1[0].c_str(),nullptr); } else if (constant.compare("rc")==0) { - rc = strtod(line1[0].c_str(),NULL); + rc = strtod(line1[0].c_str(),nullptr); } else if (constant.compare("alpha")==0) { delete[] alpha; alpha = new double[nwords]; for (l=0;lerrorf(FLERR,"Undefined value for radial power"); //code will run with default o=0 if o is never specified. All other values must be defined in potential file. - if (re!=0 && rc!=0 && alpha!=0 && dr!=0 && nmax!=0)return true; + if (re!=0 && rc!=0 && alpha!=nullptr && dr!=0 && nmax!=0)return true; return false; } diff --git a/src/ML-RANN/rann_fingerprint_radialspin.cpp b/src/ML-RANN/rann_fingerprint_radialspin.cpp index b48fad80d0..e7a4ef449e 100644 --- a/src/ML-RANN/rann_fingerprint_radialspin.cpp +++ b/src/ML-RANN/rann_fingerprint_radialspin.cpp @@ -68,30 +68,30 @@ bool Fingerprint_radialspin::parse_values(std::string constant,std::vectorerrorf(FLERR,"Undefined value for radial power"); //code will run with default o=0 if o is never specified. All other values must be defined in potential file. - if (re!=0 && rc!=0 && alpha!=0 && dr!=0 && nmax!=0)return true; + if (re!=0 && rc!=0 && alpha!=nullptr && dr!=0 && nmax!=0)return true; return false; } diff --git a/src/MOLECULE/dihedral_table.cpp b/src/MOLECULE/dihedral_table.cpp index c701c4564f..a91324dd98 100644 --- a/src/MOLECULE/dihedral_table.cpp +++ b/src/MOLECULE/dihedral_table.cpp @@ -86,7 +86,7 @@ static int solve_cyc_tridiag( const double diag[], size_t d_stride, double * c = (double *) malloc (N * sizeof (double)); double * z = (double *) malloc (N * sizeof (double)); - if (delta == 0 || gamma == 0 || alpha == 0 || c == 0 || z == 0) { + if (delta == nullptr || gamma == nullptr || alpha == nullptr || c == nullptr || z == nullptr) { if (warn) fprintf(stderr,"Internal Cyclic Spline Error: failed to allocate working space\n"); diff --git a/src/MOLFILE/molfile_interface.h b/src/MOLFILE/molfile_interface.h index 4be74d5cbe..151618286b 100644 --- a/src/MOLFILE/molfile_interface.h +++ b/src/MOLFILE/molfile_interface.h @@ -113,7 +113,7 @@ class MolfileInterface { // inquire on interface status // true if file stream is active. - bool is_open() const { return (_ptr != 0); }; + bool is_open() const { return (_ptr != nullptr); }; // true if file format requires or provides atom properties bool has_props() const { return (_mode & (M_RSTRUCT | M_WSTRUCT)) != 0; }; // true if file format can read or write velocities diff --git a/src/OPENMP/pair_buck_long_coul_long_omp.cpp b/src/OPENMP/pair_buck_long_coul_long_omp.cpp index 4fd746b9a4..372c993a8d 100644 --- a/src/OPENMP/pair_buck_long_coul_long_omp.cpp +++ b/src/OPENMP/pair_buck_long_coul_long_omp.cpp @@ -332,7 +332,7 @@ void PairBuckLongCoulLongOMP::compute_inner() loop_setup_thr(ifrom, ito, tid, inum, nthreads); ThrData *thr = fix->get_thr(tid); thr->timer(Timer::START); - ev_setup_thr(0, 0, nall, 0, 0, nullptr, thr); + ev_setup_thr(0, 0, nall, nullptr, nullptr, nullptr, thr); eval_inner(ifrom, ito, thr); thr->timer(Timer::PAIR); @@ -357,7 +357,7 @@ void PairBuckLongCoulLongOMP::compute_middle() loop_setup_thr(ifrom, ito, tid, inum, nthreads); ThrData *thr = fix->get_thr(tid); thr->timer(Timer::START); - ev_setup_thr(0, 0, nall, 0, 0, nullptr, thr); + ev_setup_thr(0, 0, nall, nullptr, nullptr, nullptr, thr); eval_middle(ifrom, ito, thr); thr->timer(Timer::PAIR); @@ -810,7 +810,7 @@ void PairBuckLongCoulLongOMP::eval_inner(int iifrom, int iito, ThrData * const t const double qqrd2e = force->qqrd2e; const double *x0 = x[0]; - double *f0 = f[0], *fi = 0; + double *f0 = f[0], *fi = nullptr; int *ilist = list->ilist_inner; @@ -903,7 +903,7 @@ void PairBuckLongCoulLongOMP::eval_middle(int iifrom, int iito, ThrData * const const double qqrd2e = force->qqrd2e; const double *x0 = x[0]; - double *f0 = f[0], *fi = 0; + double *f0 = f[0], *fi = nullptr; int *ilist = list->ilist_middle; diff --git a/src/OPENMP/pair_lj_long_coul_long_omp.cpp b/src/OPENMP/pair_lj_long_coul_long_omp.cpp index a2758c545c..e0707a87e0 100644 --- a/src/OPENMP/pair_lj_long_coul_long_omp.cpp +++ b/src/OPENMP/pair_lj_long_coul_long_omp.cpp @@ -331,7 +331,7 @@ void PairLJLongCoulLongOMP::compute_inner() loop_setup_thr(ifrom, ito, tid, inum, nthreads); ThrData *thr = fix->get_thr(tid); thr->timer(Timer::START); - ev_setup_thr(0, 0, nall, 0, 0, nullptr, thr); + ev_setup_thr(0, 0, nall, nullptr, nullptr, nullptr, thr); eval_inner(ifrom, ito, thr); thr->timer(Timer::PAIR); @@ -356,7 +356,7 @@ void PairLJLongCoulLongOMP::compute_middle() loop_setup_thr(ifrom, ito, tid, inum, nthreads); ThrData *thr = fix->get_thr(tid); thr->timer(Timer::START); - ev_setup_thr(0, 0, nall, 0, 0, nullptr, thr); + ev_setup_thr(0, 0, nall, nullptr, nullptr, nullptr, thr); eval_middle(ifrom, ito, thr); thr->timer(Timer::PAIR); @@ -805,7 +805,7 @@ void PairLJLongCoulLongOMP::eval_inner(int iifrom, int iito, ThrData * const thr const double qqrd2e = force->qqrd2e; const double *x0 = x[0]; - double *f0 = f[0], *fi = 0; + double *f0 = f[0], *fi = nullptr; int *ilist = list->ilist_inner; @@ -896,7 +896,7 @@ void PairLJLongCoulLongOMP::eval_middle(int iifrom, int iito, ThrData * const th const double qqrd2e = force->qqrd2e; const double *x0 = x[0]; - double *f0 = f[0], *fi = 0; + double *f0 = f[0], *fi = nullptr; int *ilist = list->ilist_middle; diff --git a/src/OPENMP/thr_data.cpp b/src/OPENMP/thr_data.cpp index 5ff0263eea..f85b2b685f 100644 --- a/src/OPENMP/thr_data.cpp +++ b/src/OPENMP/thr_data.cpp @@ -1,4 +1,3 @@ -// clang-format off /* ------------------------------------------------------------------------- LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator https://www.lammps.org/, Sandia National Laboratories @@ -17,8 +16,8 @@ per-thread data management for LAMMPS ------------------------------------------------------------------------- */ -#include #include +#include #include "thr_data.h" @@ -29,21 +28,20 @@ using namespace LAMMPS_NS; /* ---------------------------------------------------------------------- */ -ThrData::ThrData(int tid, Timer *t) - : _f(0),_torque(0),_erforce(0),_de(0),_drho(0),_mu(0),_lambda(0),_rhoB(0), - _D_values(0),_rho(0),_fp(0),_rho1d(0),_drho1d(0),_rho1d_6(0),_drho1d_6(0), - _tid(tid), _timer(t) +ThrData::ThrData(int tid, Timer *t) : + _f(nullptr), _torque(nullptr), _erforce(nullptr), _de(nullptr), _drho(nullptr), _mu(nullptr), + _lambda(nullptr), _rhoB(nullptr), _D_values(nullptr), _rho(nullptr), _fp(nullptr), + _rho1d(nullptr), _drho1d(nullptr), _rho1d_6(nullptr), _drho1d_6(nullptr), _tid(tid), _timer(t) { _timer_active = 0; } - /* ---------------------------------------------------------------------- */ void ThrData::check_tid(int tid) { if (tid != _tid) - fprintf(stderr,"WARNING: external and internal tid mismatch %d != %d\n",tid,_tid); + fprintf(stderr, "WARNING: external and internal tid mismatch %d != %d\n", tid, _tid); } /* ---------------------------------------------------------------------- */ @@ -53,9 +51,7 @@ void ThrData::_stamp(enum Timer::ttype flag) // do nothing until it gets set to 0 in ::setup() if (_timer_active < 0) return; - if (flag == Timer::START) { - _timer_active = 1; - } + if (flag == Timer::START) { _timer_active = 1; } if (_timer_active) _timer->stamp(flag); } @@ -72,44 +68,49 @@ double ThrData::get_time(enum Timer::ttype flag) /* ---------------------------------------------------------------------- */ -void ThrData::init_force(int nall, double **f, double **torque, - double *erforce, double *de, double *drho) +void ThrData::init_force(int nall, double **f, double **torque, double *erforce, double *de, + double *drho) { - eng_vdwl=eng_coul=eng_bond=eng_angle=eng_dihed=eng_imprp=eng_kspce=0.0; - memset(virial_pair,0,6*sizeof(double)); - memset(virial_bond,0,6*sizeof(double)); - memset(virial_angle,0,6*sizeof(double)); - memset(virial_dihed,0,6*sizeof(double)); - memset(virial_imprp,0,6*sizeof(double)); - memset(virial_kspce,0,6*sizeof(double)); + eng_vdwl = eng_coul = eng_bond = eng_angle = eng_dihed = eng_imprp = eng_kspce = 0.0; + memset(virial_pair, 0, 6 * sizeof(double)); + memset(virial_bond, 0, 6 * sizeof(double)); + memset(virial_angle, 0, 6 * sizeof(double)); + memset(virial_dihed, 0, 6 * sizeof(double)); + memset(virial_imprp, 0, 6 * sizeof(double)); + memset(virial_kspce, 0, 6 * sizeof(double)); - eatom_pair=eatom_bond=eatom_angle=eatom_dihed=eatom_imprp=eatom_kspce=nullptr; - vatom_pair=vatom_bond=vatom_angle=vatom_dihed=vatom_imprp=vatom_kspce=nullptr; + eatom_pair = eatom_bond = eatom_angle = eatom_dihed = eatom_imprp = eatom_kspce = nullptr; + vatom_pair = vatom_bond = vatom_angle = vatom_dihed = vatom_imprp = vatom_kspce = nullptr; if (nall >= 0 && f) { - _f = f + _tid*nall; - memset(&(_f[0][0]),0,nall*3*sizeof(double)); - } else _f = nullptr; + _f = f + _tid * nall; + memset(&(_f[0][0]), 0, nall * 3 * sizeof(double)); + } else + _f = nullptr; if (nall >= 0 && torque) { - _torque = torque + _tid*nall; - memset(&(_torque[0][0]),0,nall*3*sizeof(double)); - } else _torque = nullptr; + _torque = torque + _tid * nall; + memset(&(_torque[0][0]), 0, nall * 3 * sizeof(double)); + } else + _torque = nullptr; if (nall >= 0 && erforce) { - _erforce = erforce + _tid*nall; - memset(&(_erforce[0]),0,nall*sizeof(double)); - } else _erforce = nullptr; + _erforce = erforce + _tid * nall; + memset(&(_erforce[0]), 0, nall * sizeof(double)); + } else + _erforce = nullptr; if (nall >= 0 && de) { - _de = de + _tid*nall; - memset(&(_de[0]),0,nall*sizeof(double)); - } else _de = nullptr; + _de = de + _tid * nall; + memset(&(_de[0]), 0, nall * sizeof(double)); + } else + _de = nullptr; if (nall >= 0 && drho) { - _drho = drho + _tid*nall; - memset(&(_drho[0]),0,nall*sizeof(double)); - } else _drho = nullptr; + _drho = drho + _tid * nall; + memset(&(_drho[0]), 0, nall * sizeof(double)); + } else + _drho = nullptr; } /* ---------------------------------------------------------------------- @@ -119,8 +120,8 @@ void ThrData::init_force(int nall, double **f, double **torque, void ThrData::init_eam(int nall, double *rho) { if (nall >= 0 && rho) { - _rho = rho + _tid*nall; - memset(_rho, 0, nall*sizeof(double)); + _rho = rho + _tid * nall; + memset(_rho, 0, nall * sizeof(double)); } } @@ -131,10 +132,10 @@ void ThrData::init_adp(int nall, double *rho, double **mu, double **lambda) init_eam(nall, rho); if (nall >= 0 && mu && lambda) { - _mu = mu + _tid*nall; - _lambda = lambda + _tid*nall; - memset(&(_mu[0][0]), 0, nall*3*sizeof(double)); - memset(&(_lambda[0][0]), 0, nall*6*sizeof(double)); + _mu = mu + _tid * nall; + _lambda = lambda + _tid * nall; + memset(&(_mu[0][0]), 0, nall * 3 * sizeof(double)); + memset(&(_lambda[0][0]), 0, nall * 6 * sizeof(double)); } } @@ -145,8 +146,8 @@ void ThrData::init_eim(int nall, double *rho, double *fp) init_eam(nall, rho); if (nall >= 0 && fp) { - _fp = fp + _tid*nall; - memset(_fp,0,nall*sizeof(double)); + _fp = fp + _tid * nall; + memset(_fp, 0, nall * sizeof(double)); } } @@ -166,18 +167,18 @@ void ThrData::init_pppm(int order, Memory *memory) if (order > 0) { rho1d = static_cast(_rho1d); drho1d = static_cast(_drho1d); - if (rho1d) memory->destroy2d_offset(rho1d,-order/2); - if (drho1d) memory->destroy2d_offset(drho1d,-order/2); - memory->create2d_offset(rho1d,3,-order/2,order/2,"thr_data:rho1d"); - memory->create2d_offset(drho1d,3,-order/2,order/2,"thr_data:drho1d"); + if (rho1d) memory->destroy2d_offset(rho1d, -order / 2); + if (drho1d) memory->destroy2d_offset(drho1d, -order / 2); + memory->create2d_offset(rho1d, 3, -order / 2, order / 2, "thr_data:rho1d"); + memory->create2d_offset(drho1d, 3, -order / 2, order / 2, "thr_data:drho1d"); _rho1d = static_cast(rho1d); _drho1d = static_cast(drho1d); } else { order = -order; rho1d = static_cast(_rho1d); drho1d = static_cast(_drho1d); - if (rho1d) memory->destroy2d_offset(rho1d,-order/2); - if (drho1d) memory->destroy2d_offset(drho1d,-order/2); + if (rho1d) memory->destroy2d_offset(rho1d, -order / 2); + if (drho1d) memory->destroy2d_offset(drho1d, -order / 2); _rho1d = nullptr; _drho1d = nullptr; } @@ -199,18 +200,18 @@ void ThrData::init_pppm_disp(int order_6, Memory *memory) if (order_6 > 0) { rho1d_6 = static_cast(_rho1d_6); drho1d_6 = static_cast(_drho1d_6); - if (rho1d_6) memory->destroy2d_offset(rho1d_6,-order_6/2); - if (drho1d_6) memory->destroy2d_offset(drho1d_6,-order_6/2); - memory->create2d_offset(rho1d_6,3,-order_6/2,order_6/2,"thr_data:rho1d_6"); - memory->create2d_offset(drho1d_6,3,-order_6/2,order_6/2,"thr_data:drho1d_6"); + if (rho1d_6) memory->destroy2d_offset(rho1d_6, -order_6 / 2); + if (drho1d_6) memory->destroy2d_offset(drho1d_6, -order_6 / 2); + memory->create2d_offset(rho1d_6, 3, -order_6 / 2, order_6 / 2, "thr_data:rho1d_6"); + memory->create2d_offset(drho1d_6, 3, -order_6 / 2, order_6 / 2, "thr_data:drho1d_6"); _rho1d_6 = static_cast(rho1d_6); _drho1d_6 = static_cast(drho1d_6); } else { order_6 = -order_6; rho1d_6 = static_cast(_rho1d_6); drho1d_6 = static_cast(_drho1d_6); - if (rho1d_6) memory->destroy2d_offset(rho1d_6,-order_6/2); - if (drho1d_6) memory->destroy2d_offset(drho1d_6,-order_6/2); + if (rho1d_6) memory->destroy2d_offset(rho1d_6, -order_6 / 2); + if (drho1d_6) memory->destroy2d_offset(drho1d_6, -order_6 / 2); } } @@ -227,35 +228,35 @@ void ThrData::virial_fdotr_compute(double **x, int nlocal, int nghost, int nfirs if (nfirst < 0) { int nall = nlocal + nghost; for (int i = 0; i < nall; i++) { - virial_pair[0] += _f[i][0]*x[i][0]; - virial_pair[1] += _f[i][1]*x[i][1]; - virial_pair[2] += _f[i][2]*x[i][2]; - virial_pair[3] += _f[i][1]*x[i][0]; - virial_pair[4] += _f[i][2]*x[i][0]; - virial_pair[5] += _f[i][2]*x[i][1]; + virial_pair[0] += _f[i][0] * x[i][0]; + virial_pair[1] += _f[i][1] * x[i][1]; + virial_pair[2] += _f[i][2] * x[i][2]; + virial_pair[3] += _f[i][1] * x[i][0]; + virial_pair[4] += _f[i][2] * x[i][0]; + virial_pair[5] += _f[i][2] * x[i][1]; } - // neighbor includegroup flag is set - // sum over force on initial nfirst particles and ghosts + // neighbor includegroup flag is set + // sum over force on initial nfirst particles and ghosts } else { int nall = nfirst; for (int i = 0; i < nall; i++) { - virial_pair[0] += _f[i][0]*x[i][0]; - virial_pair[1] += _f[i][1]*x[i][1]; - virial_pair[2] += _f[i][2]*x[i][2]; - virial_pair[3] += _f[i][1]*x[i][0]; - virial_pair[4] += _f[i][2]*x[i][0]; - virial_pair[5] += _f[i][2]*x[i][1]; + virial_pair[0] += _f[i][0] * x[i][0]; + virial_pair[1] += _f[i][1] * x[i][1]; + virial_pair[2] += _f[i][2] * x[i][2]; + virial_pair[3] += _f[i][1] * x[i][0]; + virial_pair[4] += _f[i][2] * x[i][0]; + virial_pair[5] += _f[i][2] * x[i][1]; } nall = nlocal + nghost; for (int i = nlocal; i < nall; i++) { - virial_pair[0] += _f[i][0]*x[i][0]; - virial_pair[1] += _f[i][1]*x[i][1]; - virial_pair[2] += _f[i][2]*x[i][2]; - virial_pair[3] += _f[i][1]*x[i][0]; - virial_pair[4] += _f[i][2]*x[i][0]; - virial_pair[5] += _f[i][2]*x[i][1]; + virial_pair[0] += _f[i][0] * x[i][0]; + virial_pair[1] += _f[i][1] * x[i][1]; + virial_pair[2] += _f[i][2] * x[i][2]; + virial_pair[3] += _f[i][1] * x[i][0]; + virial_pair[4] += _f[i][2] * x[i][0]; + virial_pair[5] += _f[i][2] * x[i][1]; } } } @@ -264,9 +265,9 @@ void ThrData::virial_fdotr_compute(double **x, int nlocal, int nghost, int nfirs double ThrData::memory_usage() { - double bytes = (7 + 6*6) * sizeof(double); - bytes += (double)2 * sizeof(double*); - bytes += (double)4 * sizeof(int); + double bytes = (7 + 6 * 6) * sizeof(double); + bytes += (double) 2 * sizeof(double *); + bytes += (double) 4 * sizeof(int); return bytes; } @@ -287,10 +288,10 @@ void LAMMPS_NS::data_reduce_thr(double *dall, int nall, int nthreads, int ndim, if (nthreads == 1) return; #pragma omp barrier { - const int nvals = ndim*nall; - const int idelta = nvals/nthreads + 1; - const int ifrom = tid*idelta; - const int ito = ((ifrom + idelta) > nvals) ? nvals : (ifrom + idelta); + const int nvals = ndim * nall; + const int idelta = nvals / nthreads + 1; + const int ifrom = tid * idelta; + const int ito = ((ifrom + idelta) > nvals) ? nvals : (ifrom + idelta); #if defined(USER_OMP_NO_UNROLL) if (ifrom < nvals) { @@ -298,8 +299,8 @@ void LAMMPS_NS::data_reduce_thr(double *dall, int nall, int nthreads, int ndim, for (m = ifrom; m < ito; ++m) { for (int n = 1; n < nthreads; ++n) { - dall[m] += dall[n*nvals + m]; - dall[n*nvals + m] = 0.0; + dall[m] += dall[n * nvals + m]; + dall[n * nvals + m] = 0.0; } } } @@ -313,47 +314,47 @@ void LAMMPS_NS::data_reduce_thr(double *dall, int nall, int nthreads, int ndim, // contiguous values in the array at a time // -- modify this code based on the size of the cache line double t0, t1, t2, t3, t4, t5, t6, t7; - for (m = ifrom; m < (ito-7); m+=8) { - t0 = dall[m ]; - t1 = dall[m+1]; - t2 = dall[m+2]; - t3 = dall[m+3]; - t4 = dall[m+4]; - t5 = dall[m+5]; - t6 = dall[m+6]; - t7 = dall[m+7]; + for (m = ifrom; m < (ito - 7); m += 8) { + t0 = dall[m]; + t1 = dall[m + 1]; + t2 = dall[m + 2]; + t3 = dall[m + 3]; + t4 = dall[m + 4]; + t5 = dall[m + 5]; + t6 = dall[m + 6]; + t7 = dall[m + 7]; for (int n = 1; n < nthreads; ++n) { - t0 += dall[n*nvals + m ]; - t1 += dall[n*nvals + m+1]; - t2 += dall[n*nvals + m+2]; - t3 += dall[n*nvals + m+3]; - t4 += dall[n*nvals + m+4]; - t5 += dall[n*nvals + m+5]; - t6 += dall[n*nvals + m+6]; - t7 += dall[n*nvals + m+7]; - dall[n*nvals + m ] = 0.0; - dall[n*nvals + m+1] = 0.0; - dall[n*nvals + m+2] = 0.0; - dall[n*nvals + m+3] = 0.0; - dall[n*nvals + m+4] = 0.0; - dall[n*nvals + m+5] = 0.0; - dall[n*nvals + m+6] = 0.0; - dall[n*nvals + m+7] = 0.0; + t0 += dall[n * nvals + m]; + t1 += dall[n * nvals + m + 1]; + t2 += dall[n * nvals + m + 2]; + t3 += dall[n * nvals + m + 3]; + t4 += dall[n * nvals + m + 4]; + t5 += dall[n * nvals + m + 5]; + t6 += dall[n * nvals + m + 6]; + t7 += dall[n * nvals + m + 7]; + dall[n * nvals + m] = 0.0; + dall[n * nvals + m + 1] = 0.0; + dall[n * nvals + m + 2] = 0.0; + dall[n * nvals + m + 3] = 0.0; + dall[n * nvals + m + 4] = 0.0; + dall[n * nvals + m + 5] = 0.0; + dall[n * nvals + m + 6] = 0.0; + dall[n * nvals + m + 7] = 0.0; } - dall[m ] = t0; - dall[m+1] = t1; - dall[m+2] = t2; - dall[m+3] = t3; - dall[m+4] = t4; - dall[m+5] = t5; - dall[m+6] = t6; - dall[m+7] = t7; + dall[m] = t0; + dall[m + 1] = t1; + dall[m + 2] = t2; + dall[m + 3] = t3; + dall[m + 4] = t4; + dall[m + 5] = t5; + dall[m + 6] = t6; + dall[m + 7] = t7; } // do the last < 8 values for (; m < ito; m++) { for (int n = 1; n < nthreads; ++n) { - dall[m] += dall[n*nvals + m]; - dall[n*nvals + m] = 0.0; + dall[m] += dall[n * nvals + m]; + dall[n * nvals + m] = 0.0; } } } diff --git a/src/OPT/pair_eam_opt.cpp b/src/OPT/pair_eam_opt.cpp index 08af3e7d18..998b14a5e7 100644 --- a/src/OPT/pair_eam_opt.cpp +++ b/src/OPT/pair_eam_opt.cpp @@ -349,8 +349,8 @@ void PairEAMOpt::eval() ff[i].z += tmpfz; } - free(fast_alpha); fast_alpha = 0; - free(fast_gamma); fast_gamma = 0; + free(fast_alpha); fast_alpha = nullptr; + free(fast_gamma); fast_gamma = nullptr; if (vflag_fdotr) virial_fdotr_compute(); } diff --git a/src/OPT/pair_lj_charmm_coul_long_opt.cpp b/src/OPT/pair_lj_charmm_coul_long_opt.cpp index 7b6bec5b94..186172035c 100644 --- a/src/OPT/pair_lj_charmm_coul_long_opt.cpp +++ b/src/OPT/pair_lj_charmm_coul_long_opt.cpp @@ -333,7 +333,7 @@ void PairLJCharmmCoulLongOpt::eval() ff[i].z += tmpfz; } - free(fast_alpha); fast_alpha = 0; + free(fast_alpha); fast_alpha = nullptr; if (vflag_fdotr) virial_fdotr_compute(); } diff --git a/src/OPT/pair_lj_cut_opt.cpp b/src/OPT/pair_lj_cut_opt.cpp index e0ab42b779..f272e6fc78 100644 --- a/src/OPT/pair_lj_cut_opt.cpp +++ b/src/OPT/pair_lj_cut_opt.cpp @@ -195,7 +195,7 @@ void PairLJCutOpt::eval() ff[i].z += tmpfz; } - free(fast_alpha); fast_alpha = 0; + free(fast_alpha); fast_alpha = nullptr; if (vflag_fdotr) virial_fdotr_compute(); } diff --git a/src/OPT/pair_morse_opt.cpp b/src/OPT/pair_morse_opt.cpp index 80414b40c8..04aace0d43 100644 --- a/src/OPT/pair_morse_opt.cpp +++ b/src/OPT/pair_morse_opt.cpp @@ -192,7 +192,7 @@ void PairMorseOpt::eval() ff[i].z += tmpfz; } - free(fast_alpha); fast_alpha = 0; + free(fast_alpha); fast_alpha = nullptr; if (vflag_fdotr) virial_fdotr_compute(); } diff --git a/src/OPT/pair_ufm_opt.cpp b/src/OPT/pair_ufm_opt.cpp index 3008d0af22..3502dfda6c 100644 --- a/src/OPT/pair_ufm_opt.cpp +++ b/src/OPT/pair_ufm_opt.cpp @@ -191,7 +191,7 @@ void PairUFMOpt::eval() ff[i].z += tmpfz; } - free(fast_alpha); fast_alpha = 0; + free(fast_alpha); fast_alpha = nullptr; if (vflag_fdotr) virial_fdotr_compute(); } diff --git a/src/PTM/ptm_index.cpp b/src/PTM/ptm_index.cpp index a0798b9e88..aff81af2e3 100644 --- a/src/PTM/ptm_index.cpp +++ b/src/PTM/ptm_index.cpp @@ -23,7 +23,7 @@ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLI #include #include #include -#include +#include static double calculate_interatomic_distance(int type, double scale) { assert(type >= 1 && type <= 8); diff --git a/src/utils.cpp b/src/utils.cpp index 035b68d660..dab56da8d3 100644 --- a/src/utils.cpp +++ b/src/utils.cpp @@ -1481,7 +1481,7 @@ static int ismetachar(char c); int re_matchp(const char *text, re_t pattern, int *matchlen) { *matchlen = 0; - if (pattern != 0) { + if (pattern != nullptr) { if (pattern[0].type == RX_BEGIN) { return ((matchpattern(&pattern[1], text, matchlen)) ? 0 : -1); } else { @@ -1595,7 +1595,7 @@ re_t re_compile(re_ctx_t context, const char *pattern) i += 1; /* Increment i to avoid including '^' in the char-buffer */ if (pattern[i + 1] == 0) /* incomplete pattern, missing non-zero char after '^' */ { - return 0; + return nullptr; } } else { re_compiled[j].type = RX_CHAR_CLASS; @@ -1605,20 +1605,20 @@ re_t re_compile(re_ctx_t context, const char *pattern) while ((pattern[++i] != ']') && (pattern[i] != '\0')) { /* Missing ] */ if (pattern[i] == '\\') { - if (ccl_bufidx >= MAX_CHAR_CLASS_LEN - 1) { return 0; } + if (ccl_bufidx >= MAX_CHAR_CLASS_LEN - 1) { return nullptr; } if (pattern[i + 1] == 0) /* incomplete pattern, missing non-zero char after '\\' */ { - return 0; + return nullptr; } ccl_buf[ccl_bufidx++] = pattern[i++]; } else if (ccl_bufidx >= MAX_CHAR_CLASS_LEN) { - return 0; + return nullptr; } ccl_buf[ccl_bufidx++] = pattern[i]; } if (ccl_bufidx >= MAX_CHAR_CLASS_LEN) { /* Catches cases such as [00000000000000000000000000000000000000][ */ - return 0; + return nullptr; } /* Null-terminate string end */ ccl_buf[ccl_bufidx++] = 0; @@ -1633,7 +1633,7 @@ re_t re_compile(re_ctx_t context, const char *pattern) } /* no buffer-out-of-bounds access on invalid patterns - * see https://github.com/kokke/tiny-regex-c/commit/1a279e04014b70b0695fba559a7c05d55e6ee90b */ - if (pattern[i] == 0) { return 0; } + if (pattern[i] == 0) { return nullptr; } i += 1; j += 1; From 643a7a1acbd49280df5f0a83d51de311717d5a5c Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Tue, 12 Oct 2021 22:39:30 -0400 Subject: [PATCH 165/372] replace std::random_shuffle() with std::shuffle() to be compatible with C++17 and beyond --- src/REACTION/fix_bond_react.cpp | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/REACTION/fix_bond_react.cpp b/src/REACTION/fix_bond_react.cpp index 69c9c87ddf..bddeb330e4 100644 --- a/src/REACTION/fix_bond_react.cpp +++ b/src/REACTION/fix_bond_react.cpp @@ -49,6 +49,7 @@ Contributing Author: Jacob Gissinger (jacob.r.gissinger@gmail.com) #include #include +#include using namespace LAMMPS_NS; using namespace FixConst; @@ -1380,6 +1381,10 @@ void FixBondReact::superimpose_algorithm() if (!rxnflag) return; + // C++11 and later compatible version of Park pRNG + std::random_device rnd; + std::minstd_rand park_rng(rnd()); + // check if we overstepped our reaction limit for (int i = 0; i < nreacts; i++) { if (reaction_count_total[i] > max_rxn[i]) { @@ -1400,7 +1405,7 @@ void FixBondReact::superimpose_algorithm() for (int j = 0; j < nprocs; j++) for (int k = 0; k < local_rxncounts[j]; k++) rxn_by_proc[itemp++] = j; - std::random_shuffle(&rxn_by_proc[0],&rxn_by_proc[delta_rxn]); + std::shuffle(&rxn_by_proc[0],&rxn_by_proc[delta_rxn], park_rng); for (int j = 0; j < nprocs; j++) all_localskips[j] = 0; nghostlyskips[i] = 0; From 165708adeb487966281048127645595fa110d0e8 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Tue, 12 Oct 2021 22:52:50 -0400 Subject: [PATCH 166/372] use nullptr in unittest tree --- unittest/cplusplus/test_lammps_class.cpp | 17 +++++++++-------- unittest/force-styles/test_main.cpp | 2 +- unittest/force-styles/yaml_writer.cpp | 12 ++++++------ 3 files changed, 16 insertions(+), 15 deletions(-) diff --git a/unittest/cplusplus/test_lammps_class.cpp b/unittest/cplusplus/test_lammps_class.cpp index fa7f6b30a9..663c7358d9 100644 --- a/unittest/cplusplus/test_lammps_class.cpp +++ b/unittest/cplusplus/test_lammps_class.cpp @@ -108,21 +108,22 @@ TEST_F(LAMMPS_plain, TestStyles) const char *found; const char *atom_styles[] = {"atomic", "body", "charge", "ellipsoid", "hybrid", - "line", "sphere", "tri", NULL}; - for (int i = 0; atom_styles[i] != NULL; ++i) { + "line", "sphere", "tri", nullptr}; + for (int i = 0; atom_styles[i] != nullptr; ++i) { found = lmp->match_style("atom", atom_styles[i]); - EXPECT_STREQ(found, NULL); + EXPECT_STREQ(found, nullptr); } - const char *molecule_atom_styles[] = {"angle", "bond", "full", "molecular", "template", NULL}; - for (int i = 0; molecule_atom_styles[i] != NULL; ++i) { + const char *molecule_atom_styles[] = {"angle", "bond", "full", + "molecular", "template", nullptr}; + for (int i = 0; molecule_atom_styles[i] != nullptr; ++i) { found = lmp->match_style("atom", molecule_atom_styles[i]); EXPECT_STREQ(found, "MOLECULE"); } const char *kokkos_atom_styles[] = {"angle/kk", "bond/kk", "full/kk", - "molecular/kk", "hybrid/kk", NULL}; - for (int i = 0; kokkos_atom_styles[i] != NULL; ++i) { + "molecular/kk", "hybrid/kk", nullptr}; + for (int i = 0; kokkos_atom_styles[i] != nullptr; ++i) { found = lmp->match_style("atom", kokkos_atom_styles[i]); EXPECT_STREQ(found, "KOKKOS"); } @@ -149,7 +150,7 @@ TEST_F(LAMMPS_plain, TestStyles) found = lmp->match_style("atom", "sph"); EXPECT_STREQ(found, "SPH"); found = lmp->match_style("atom", "i_don't_exist"); - EXPECT_STREQ(found, NULL); + EXPECT_STREQ(found, nullptr); } // test fixture for OpenMP with 2 threads diff --git a/unittest/force-styles/test_main.cpp b/unittest/force-styles/test_main.cpp index 5b2663a6cf..1ad0b79455 100644 --- a/unittest/force-styles/test_main.cpp +++ b/unittest/force-styles/test_main.cpp @@ -47,7 +47,7 @@ void write_yaml_header(YamlWriter *writer, TestConfig *cfg, const char *version) writer->emit("lammps_version", version); // date_generated - std::time_t now = time(NULL); + std::time_t now = time(nullptr); std::string block = trim(ctime(&now)); writer->emit("date_generated", block); diff --git a/unittest/force-styles/yaml_writer.cpp b/unittest/force-styles/yaml_writer.cpp index feaa3d52eb..b1165ff821 100644 --- a/unittest/force-styles/yaml_writer.cpp +++ b/unittest/force-styles/yaml_writer.cpp @@ -31,9 +31,9 @@ YamlWriter::YamlWriter(const char *outfile) yaml_stream_start_event_initialize(&event, YAML_UTF8_ENCODING); yaml_emitter_emit(&emitter, &event); - yaml_document_start_event_initialize(&event, NULL, NULL, NULL, 0); + yaml_document_start_event_initialize(&event, nullptr, nullptr, nullptr, 0); yaml_emitter_emit(&emitter, &event); - yaml_mapping_start_event_initialize(&event, NULL, (yaml_char_t *)YAML_MAP_TAG, 1, + yaml_mapping_start_event_initialize(&event, nullptr, (yaml_char_t *)YAML_MAP_TAG, 1, YAML_ANY_MAPPING_STYLE); yaml_emitter_emit(&emitter, &event); } @@ -67,11 +67,11 @@ void YamlWriter::emit(const std::string &key, const int value) void YamlWriter::emit(const std::string &key, const std::string &value) { - yaml_scalar_event_initialize(&event, NULL, (yaml_char_t *)YAML_STR_TAG, + yaml_scalar_event_initialize(&event, nullptr, (yaml_char_t *)YAML_STR_TAG, (yaml_char_t *)key.c_str(), key.size(), 1, 0, YAML_PLAIN_SCALAR_STYLE); yaml_emitter_emit(&emitter, &event); - yaml_scalar_event_initialize(&event, NULL, (yaml_char_t *)YAML_STR_TAG, + yaml_scalar_event_initialize(&event, nullptr, (yaml_char_t *)YAML_STR_TAG, (yaml_char_t *)value.c_str(), value.size(), 1, 0, YAML_PLAIN_SCALAR_STYLE); yaml_emitter_emit(&emitter, &event); @@ -79,11 +79,11 @@ void YamlWriter::emit(const std::string &key, const std::string &value) void YamlWriter::emit_block(const std::string &key, const std::string &value) { - yaml_scalar_event_initialize(&event, NULL, (yaml_char_t *)YAML_STR_TAG, + yaml_scalar_event_initialize(&event, nullptr, (yaml_char_t *)YAML_STR_TAG, (yaml_char_t *)key.c_str(), key.size(), 1, 0, YAML_PLAIN_SCALAR_STYLE); yaml_emitter_emit(&emitter, &event); - yaml_scalar_event_initialize(&event, NULL, (yaml_char_t *)YAML_STR_TAG, + yaml_scalar_event_initialize(&event, nullptr, (yaml_char_t *)YAML_STR_TAG, (yaml_char_t *)value.c_str(), value.size(), 1, 0, YAML_LITERAL_SCALAR_STYLE); yaml_emitter_emit(&emitter, &event); From 1f9ce77c85eb1b3bd1d4bb1eae85939abda074e9 Mon Sep 17 00:00:00 2001 From: srmnitc Date: Wed, 13 Oct 2021 16:34:33 +0200 Subject: [PATCH 167/372] Use only itype for scale variable in both forces and energy --- src/ML-PACE/pair_pace.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/ML-PACE/pair_pace.cpp b/src/ML-PACE/pair_pace.cpp index f0d6547083..21f35876a7 100644 --- a/src/ML-PACE/pair_pace.cpp +++ b/src/ML-PACE/pair_pace.cpp @@ -209,9 +209,9 @@ void PairPACE::compute(int eflag, int vflag) { dely = x[j][1] - ytmp; delz = x[j][2] - ztmp; - fij[0] = scale[itype][jtype]*aceimpl->ace->neighbours_forces(jj, 0); - fij[1] = scale[itype][jtype]*aceimpl->ace->neighbours_forces(jj, 1); - fij[2] = scale[itype][jtype]*aceimpl->ace->neighbours_forces(jj, 2); + fij[0] = scale[itype][itype]*aceimpl->ace->neighbours_forces(jj, 0); + fij[1] = scale[itype][itype]*aceimpl->ace->neighbours_forces(jj, 1); + fij[2] = scale[itype][itype]*aceimpl->ace->neighbours_forces(jj, 2); f[i][0] += fij[0]; f[i][1] += fij[1]; @@ -230,7 +230,7 @@ void PairPACE::compute(int eflag, int vflag) { // tally energy contribution if (eflag) { // evdwl = energy of atom I - evdwl = scale[1][1]*aceimpl->ace->e_atom; + evdwl = scale[itype][itype]*aceimpl->ace->e_atom; ev_tally_full(i, 2.0 * evdwl, 0.0, 0.0, 0.0, 0.0, 0.0); } } From 552d960b39037a2e8949c7a3f509dc25e767678f Mon Sep 17 00:00:00 2001 From: Stan Moore Date: Wed, 13 Oct 2021 10:43:26 -0600 Subject: [PATCH 168/372] Fix double space --- src/REAXFF/fix_qeq_reaxff.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/REAXFF/fix_qeq_reaxff.cpp b/src/REAXFF/fix_qeq_reaxff.cpp index 3d4c6a8815..07cc525a28 100644 --- a/src/REAXFF/fix_qeq_reaxff.cpp +++ b/src/REAXFF/fix_qeq_reaxff.cpp @@ -401,7 +401,7 @@ void FixQEqReaxFF::init() ((fabs(efield->ey) > SMALL) && domain->yperiodic) || ((fabs(efield->ez) > SMALL) && domain->zperiodic)) error->all(FLERR,"Must not have electric field component in direction of periodic " - " boundary when using charge equilibration with ReaxFF."); + "boundary when using charge equilibration with ReaxFF."); } // we need a half neighbor list w/ Newton off and ghost neighbors From 67673a6055308f1b39929afae94942d413f6298d Mon Sep 17 00:00:00 2001 From: Stan Moore Date: Wed, 13 Oct 2021 12:30:19 -0600 Subject: [PATCH 169/372] Fix negative sign in chi_field --- src/REAXFF/fix_qeq_reaxff.cpp | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/REAXFF/fix_qeq_reaxff.cpp b/src/REAXFF/fix_qeq_reaxff.cpp index 07cc525a28..551687f5e9 100644 --- a/src/REAXFF/fix_qeq_reaxff.cpp +++ b/src/REAXFF/fix_qeq_reaxff.cpp @@ -1092,6 +1092,8 @@ void FixQEqReaxFF::get_chi_field() const int *mask = atom->mask; const imageint *image = atom->image; + // efield energy is in real units of kcal/mol/angstrom, need to convert to eV + const double factor = 1.0/force->qe2f; const int nlocal = atom->nlocal; @@ -1103,7 +1105,8 @@ void FixQEqReaxFF::get_chi_field() region->prematch(); } - // we currently only constant efield. Also atom selection is for the group of fix efield. + // currently only support constant efield + // atom selection is for the group of fix efield if (efield->varflag == FixEfield::CONSTANT) { double unwrap[3]; @@ -1119,7 +1122,7 @@ void FixQEqReaxFF::get_chi_field() if (mask[i] & efgroupbit) { if (region && !region->match(x[i][0],x[i][1],x[i][2])) continue; domain->unmap(x[i],image[i],unwrap); - chi_field[i] = factor*(fx*unwrap[0] + fy*unwrap[1] + fz*unwrap[2]); + chi_field[i] = -factor*(fx*unwrap[0] + fy*unwrap[1] + fz*unwrap[2]); } } } From 727a028a6f6c2f089eaae74d8d83e73f611669f1 Mon Sep 17 00:00:00 2001 From: Stan Moore Date: Wed, 13 Oct 2021 13:08:08 -0600 Subject: [PATCH 170/372] Add inputs with field --- examples/reaxff/water/in.water.acks2 | 2 +- examples/reaxff/water/in.water.acks2.field | 30 ++++++++++++++++++++++ examples/reaxff/water/in.water.qeq.field | 30 ++++++++++++++++++++++ 3 files changed, 61 insertions(+), 1 deletion(-) create mode 100644 examples/reaxff/water/in.water.acks2.field create mode 100644 examples/reaxff/water/in.water.qeq.field diff --git a/examples/reaxff/water/in.water.acks2 b/examples/reaxff/water/in.water.acks2 index 4111a8c64a..03a486a41b 100644 --- a/examples/reaxff/water/in.water.acks2 +++ b/examples/reaxff/water/in.water.acks2 @@ -19,7 +19,7 @@ neigh_modify every 1 delay 0 check yes velocity all create 300.0 4928459 rot yes dist gaussian -fix 1 all acks2/reaxff 1 0.0 10.0 1.0e-6 reaxff maxiter 400 +fix 1 all acks2/reaxff 1 0.0 10.0 1.0e-6 reaxff maxiter 1000 fix 2 all nvt temp 300 300 50.0 timestep 0.5 diff --git a/examples/reaxff/water/in.water.acks2.field b/examples/reaxff/water/in.water.acks2.field new file mode 100644 index 0000000000..e50515b2c3 --- /dev/null +++ b/examples/reaxff/water/in.water.acks2.field @@ -0,0 +1,30 @@ +# ACKS2 Water, CITE: Achtyl et al., Nat. Comm., 6 6539 (2015) + +boundary p p s +units real +atom_style charge + +read_data data.water + +variable x index 1 +variable y index 1 +variable z index 1 + +replicate $x $y $z + +pair_style reaxff NULL safezone 3.0 mincap 150 +pair_coeff * * acks2_ff.water O H +neighbor 0.5 bin +neigh_modify every 1 delay 0 check yes + +velocity all create 300.0 4928459 rot yes dist gaussian + +fix 1 all acks2/reaxff 1 0.0 10.0 1.0e-6 reaxff maxiter 1000 +fix 2 all nvt temp 300 300 50.0 +fix 3 all efield 0.0 0.0 1.0 + +timestep 0.5 +thermo 10 +thermo_style custom step temp press density vol + +run 20 diff --git a/examples/reaxff/water/in.water.qeq.field b/examples/reaxff/water/in.water.qeq.field new file mode 100644 index 0000000000..462a572b8c --- /dev/null +++ b/examples/reaxff/water/in.water.qeq.field @@ -0,0 +1,30 @@ +# QEq Water, CITE: Achtyl et al., Nat. Comm., 6 6539 (2015) + +boundary p p s +units real +atom_style charge + +read_data data.water + +variable x index 1 +variable y index 1 +variable z index 1 + +replicate $x $y $z + +pair_style reaxff NULL safezone 3.0 mincap 150 +pair_coeff * * qeq_ff.water O H +neighbor 0.5 bin +neigh_modify every 1 delay 0 check yes + +velocity all create 300.0 4928459 rot yes dist gaussian + +fix 1 all qeq/reaxff 1 0.0 10.0 1.0e-6 reaxff maxiter 400 +fix 2 all nvt temp 300 300 50.0 +fix 3 all efield 0.0 0.0 1.0 + +timestep 0.5 +thermo 10 +thermo_style custom step temp press density vol + +run 20 From 5f7e56e1c20472a0f1d44c8372e06fd64a870223 Mon Sep 17 00:00:00 2001 From: Michael Howard Date: Wed, 13 Oct 2021 14:51:58 -0500 Subject: [PATCH 171/372] Fix Brownian noise scale factor --- src/BROWNIAN/fix_brownian.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/BROWNIAN/fix_brownian.cpp b/src/BROWNIAN/fix_brownian.cpp index 4994b304e1..d4bdefca8b 100644 --- a/src/BROWNIAN/fix_brownian.cpp +++ b/src/BROWNIAN/fix_brownian.cpp @@ -45,7 +45,7 @@ void FixBrownian::init() { FixBrownianBase::init(); g1 /= gamma_t; - g2 *= sqrt(gamma_t); + g2 /= sqrt(gamma_t); } /* ---------------------------------------------------------------------- */ From 74219585f38b1bf35511cb1d5066af8d3a511bff Mon Sep 17 00:00:00 2001 From: Stan Gerald Moore Date: Wed, 13 Oct 2021 14:03:50 -0600 Subject: [PATCH 172/372] Update log files --- examples/reaxff/water/in.water.acks2.field | 1 + examples/reaxff/water/in.water.qeq.field | 1 + ...log.13Oct21.reaxff.water-acks2-field.g++.1 | 129 ++++++++++++++++++ ...log.13Oct21.reaxff.water-acks2-field.g++.4 | 129 ++++++++++++++++++ ...1 => log.13Oct21.reaxff.water-acks2.g++.1} | 78 +++++++++-- ...4 => log.13Oct21.reaxff.water-acks2.g++.4} | 86 +++++++++--- .../log.13Oct21.reaxff.water-qeq-field.g++.1 | 128 +++++++++++++++++ .../log.13Oct21.reaxff.water-qeq-field.g++.4 | 128 +++++++++++++++++ ...+.1 => log.13Oct21.reaxff.water-qeq.g++.1} | 77 +++++++++-- ...+.4 => log.13Oct21.reaxff.water-qeq.g++.4} | 81 ++++++++--- 10 files changed, 772 insertions(+), 66 deletions(-) create mode 100644 examples/reaxff/water/log.13Oct21.reaxff.water-acks2-field.g++.1 create mode 100644 examples/reaxff/water/log.13Oct21.reaxff.water-acks2-field.g++.4 rename examples/reaxff/water/{log.20Sep21.reaxff.water-acks2.g++.1 => log.13Oct21.reaxff.water-acks2.g++.1} (53%) rename examples/reaxff/water/{log.20Sep21.reaxff.water-acks2.g++.4 => log.13Oct21.reaxff.water-acks2.g++.4} (50%) create mode 100644 examples/reaxff/water/log.13Oct21.reaxff.water-qeq-field.g++.1 create mode 100644 examples/reaxff/water/log.13Oct21.reaxff.water-qeq-field.g++.4 rename examples/reaxff/water/{log.20Sep21.reaxff.water-qeq.g++.1 => log.13Oct21.reaxff.water-qeq.g++.1} (54%) rename examples/reaxff/water/{log.20Sep21.reaxff.water-qeq.g++.4 => log.13Oct21.reaxff.water-qeq.g++.4} (52%) diff --git a/examples/reaxff/water/in.water.acks2.field b/examples/reaxff/water/in.water.acks2.field index e50515b2c3..6450d026f1 100644 --- a/examples/reaxff/water/in.water.acks2.field +++ b/examples/reaxff/water/in.water.acks2.field @@ -22,6 +22,7 @@ velocity all create 300.0 4928459 rot yes dist gaussian fix 1 all acks2/reaxff 1 0.0 10.0 1.0e-6 reaxff maxiter 1000 fix 2 all nvt temp 300 300 50.0 fix 3 all efield 0.0 0.0 1.0 +fix 4 all wall/reflect zlo EDGE zhi EDGE timestep 0.5 thermo 10 diff --git a/examples/reaxff/water/in.water.qeq.field b/examples/reaxff/water/in.water.qeq.field index 462a572b8c..3a08e14083 100644 --- a/examples/reaxff/water/in.water.qeq.field +++ b/examples/reaxff/water/in.water.qeq.field @@ -22,6 +22,7 @@ velocity all create 300.0 4928459 rot yes dist gaussian fix 1 all qeq/reaxff 1 0.0 10.0 1.0e-6 reaxff maxiter 400 fix 2 all nvt temp 300 300 50.0 fix 3 all efield 0.0 0.0 1.0 +fix 4 all wall/reflect zlo EDGE zhi EDGE timestep 0.5 thermo 10 diff --git a/examples/reaxff/water/log.13Oct21.reaxff.water-acks2-field.g++.1 b/examples/reaxff/water/log.13Oct21.reaxff.water-acks2-field.g++.1 new file mode 100644 index 0000000000..fe4cfdbfd9 --- /dev/null +++ b/examples/reaxff/water/log.13Oct21.reaxff.water-acks2-field.g++.1 @@ -0,0 +1,129 @@ +LAMMPS (29 Sep 2021) +# ACKS2 Water, CITE: Achtyl et al., Nat. Comm., 6 6539 (2015) + +boundary p p s +units real +atom_style charge + +read_data data.water +Reading data file ... + orthogonal box = (0.0000000 0.0000000 0.0000000) to (31.043046 31.043046 31.043046) + 1 by 1 by 1 MPI processor grid + reading atoms ... +WARNING: Non-zero imageflag(s) in z direction for non-periodic boundary reset to zero (../atom.cpp:1208) +WARNING: Non-zero imageflag(s) in z direction for non-periodic boundary reset to zero (../atom.cpp:1208) +WARNING: Non-zero imageflag(s) in z direction for non-periodic boundary reset to zero (../atom.cpp:1208) + 3000 atoms + read_data CPU = 0.010 seconds + +variable x index 1 +variable y index 1 +variable z index 1 + +replicate $x $y $z +replicate 1 $y $z +replicate 1 1 $z +replicate 1 1 1 +Replicating atoms ... + orthogonal box = (0.0000000 0.0000000 0.0012889577) to (31.043046 31.043046 31.045309) + 1 by 1 by 1 MPI processor grid + 3000 atoms + replicate CPU = 0.001 seconds + +pair_style reaxff NULL safezone 3.0 mincap 150 +pair_coeff * * acks2_ff.water O H +Reading potential file acks2_ff.water with DATE: 2021-09-21 +WARNING: Changed valency_val to valency_boc for X (../reaxff_ffield.cpp:296) +neighbor 0.5 bin +neigh_modify every 1 delay 0 check yes + +velocity all create 300.0 4928459 rot yes dist gaussian + +fix 1 all acks2/reaxff 1 0.0 10.0 1.0e-6 reaxff maxiter 1000 +fix 2 all nvt temp 300 300 50.0 +fix 3 all efield 0.0 0.0 1.0 +fix 4 all wall/reflect zlo EDGE zhi EDGE + +timestep 0.5 +thermo 10 +thermo_style custom step temp press density vol + +run 20 + +CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE + +Your simulation uses code contributions which should be cited: + +- pair reaxff command: + +@Article{Aktulga12, + author = {H. M. Aktulga, J. C. Fogarty, S. A. Pandit, A. Y. Grama}, + title = {Parallel reactive molecular dynamics: Numerical methods and algorithmic techniques}, + journal = {Parallel Computing}, + year = 2012, + volume = 38, + pages = {245--259} +} + +- fix acks2/reaxff command: + +@Article{O'Hearn2020, + author = {K. A. O'Hearn, A. Alperen, and H. M. Aktulga}, + title = {Fast Solvers for Charge Distribution Models on Shared Memory Platforms}, + journal = {SIAM J. Sci. Comput.}, + year = 2020, + volume = 42, + pages = {1--22} +} + +CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE + +Neighbor list info ... + update every 1 steps, delay 0 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 10.5 + ghost atom cutoff = 10.5 + binsize = 5.25, bins = 6 6 6 + 2 neighbor lists, perpetual/occasional/extra = 2 0 0 + (1) pair reaxff, perpetual + attributes: half, newton off, ghost + pair build: half/bin/newtoff/ghost + stencil: full/ghost/bin/3d + bin: standard + (2) fix acks2/reaxff, perpetual, copy from (1) + attributes: half, newton off, ghost + pair build: copy + stencil: none + bin: none +Per MPI rank memory allocation (min/avg/max) = 361.2 | 361.2 | 361.2 Mbytes +Step Temp Press Density Volume + 0 300 -20762.954 0.99996859 29916.212 + 10 396.27588 -18423.747 1.0000143 29914.844 + 20 518.59361 -10010.691 1.0000209 29914.647 +Loop time of 29.8896 on 1 procs for 20 steps with 3000 atoms + +Performance: 0.029 ns/day, 830.268 hours/ns, 0.669 timesteps/s +100.0% CPU use with 1 MPI tasks x no OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 11.611 | 11.611 | 11.611 | 0.0 | 38.85 +Neigh | 0.6729 | 0.6729 | 0.6729 | 0.0 | 2.25 +Comm | 0.0020791 | 0.0020791 | 0.0020791 | 0.0 | 0.01 +Output | 0.00015777 | 0.00015777 | 0.00015777 | 0.0 | 0.00 +Modify | 17.602 | 17.602 | 17.602 | 0.0 | 58.89 +Other | | 0.001149 | | | 0.00 + +Nlocal: 3000.00 ave 3000 max 3000 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Nghost: 5438.00 ave 5438 max 5438 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Neighs: 787357.0 ave 787357 max 787357 min +Histogram: 1 0 0 0 0 0 0 0 0 0 + +Total # of neighbors = 787357 +Ave neighs/atom = 262.45233 +Neighbor list builds = 7 +Dangerous builds = 0 +Total wall time: 0:00:32 diff --git a/examples/reaxff/water/log.13Oct21.reaxff.water-acks2-field.g++.4 b/examples/reaxff/water/log.13Oct21.reaxff.water-acks2-field.g++.4 new file mode 100644 index 0000000000..f69b274c02 --- /dev/null +++ b/examples/reaxff/water/log.13Oct21.reaxff.water-acks2-field.g++.4 @@ -0,0 +1,129 @@ +LAMMPS (29 Sep 2021) +# ACKS2 Water, CITE: Achtyl et al., Nat. Comm., 6 6539 (2015) + +boundary p p s +units real +atom_style charge + +read_data data.water +Reading data file ... + orthogonal box = (0.0000000 0.0000000 0.0000000) to (31.043046 31.043046 31.043046) + 1 by 2 by 2 MPI processor grid + reading atoms ... +WARNING: Non-zero imageflag(s) in z direction for non-periodic boundary reset to zero (../atom.cpp:1208) +WARNING: Non-zero imageflag(s) in z direction for non-periodic boundary reset to zero (../atom.cpp:1208) +WARNING: Non-zero imageflag(s) in z direction for non-periodic boundary reset to zero (../atom.cpp:1208) + 3000 atoms + read_data CPU = 0.011 seconds + +variable x index 1 +variable y index 1 +variable z index 1 + +replicate $x $y $z +replicate 1 $y $z +replicate 1 1 $z +replicate 1 1 1 +Replicating atoms ... + orthogonal box = (0.0000000 0.0000000 0.0012889577) to (31.043046 31.043046 31.045309) + 2 by 1 by 2 MPI processor grid + 3000 atoms + replicate CPU = 0.001 seconds + +pair_style reaxff NULL safezone 3.0 mincap 150 +pair_coeff * * acks2_ff.water O H +Reading potential file acks2_ff.water with DATE: 2021-09-21 +WARNING: Changed valency_val to valency_boc for X (../reaxff_ffield.cpp:296) +neighbor 0.5 bin +neigh_modify every 1 delay 0 check yes + +velocity all create 300.0 4928459 rot yes dist gaussian + +fix 1 all acks2/reaxff 1 0.0 10.0 1.0e-6 reaxff maxiter 1000 +fix 2 all nvt temp 300 300 50.0 +fix 3 all efield 0.0 0.0 1.0 +fix 4 all wall/reflect zlo EDGE zhi EDGE + +timestep 0.5 +thermo 10 +thermo_style custom step temp press density vol + +run 20 + +CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE + +Your simulation uses code contributions which should be cited: + +- pair reaxff command: + +@Article{Aktulga12, + author = {H. M. Aktulga, J. C. Fogarty, S. A. Pandit, A. Y. Grama}, + title = {Parallel reactive molecular dynamics: Numerical methods and algorithmic techniques}, + journal = {Parallel Computing}, + year = 2012, + volume = 38, + pages = {245--259} +} + +- fix acks2/reaxff command: + +@Article{O'Hearn2020, + author = {K. A. O'Hearn, A. Alperen, and H. M. Aktulga}, + title = {Fast Solvers for Charge Distribution Models on Shared Memory Platforms}, + journal = {SIAM J. Sci. Comput.}, + year = 2020, + volume = 42, + pages = {1--22} +} + +CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE + +Neighbor list info ... + update every 1 steps, delay 0 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 10.5 + ghost atom cutoff = 10.5 + binsize = 5.25, bins = 6 6 6 + 2 neighbor lists, perpetual/occasional/extra = 2 0 0 + (1) pair reaxff, perpetual + attributes: half, newton off, ghost + pair build: half/bin/newtoff/ghost + stencil: full/ghost/bin/3d + bin: standard + (2) fix acks2/reaxff, perpetual, copy from (1) + attributes: half, newton off, ghost + pair build: copy + stencil: none + bin: none +Per MPI rank memory allocation (min/avg/max) = 198.5 | 199.3 | 199.9 Mbytes +Step Temp Press Density Volume + 0 300 -20761.724 0.99996859 29916.212 + 10 396.27588 -18420.441 1.0000144 29914.843 + 20 518.59146 -10012.622 1.0000207 29914.652 +Loop time of 11.3556 on 4 procs for 20 steps with 3000 atoms + +Performance: 0.076 ns/day, 315.433 hours/ns, 1.761 timesteps/s +94.3% CPU use with 4 MPI tasks x no OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 3.7511 | 3.8123 | 3.9245 | 3.4 | 33.57 +Neigh | 0.36492 | 0.3767 | 0.39023 | 1.5 | 3.32 +Comm | 0.12022 | 0.23202 | 0.29307 | 13.8 | 2.04 +Output | 8.0451e-05 | 0.00017452 | 0.00045489 | 0.0 | 0.00 +Modify | 6.9172 | 6.9312 | 6.9431 | 0.4 | 61.04 +Other | | 0.003189 | | | 0.03 + +Nlocal: 750.000 ave 758 max 737 min +Histogram: 1 0 0 0 0 0 1 0 1 1 +Nghost: 4219.50 ave 4233 max 4198 min +Histogram: 1 0 0 0 1 0 0 0 0 2 +Neighs: 230733.0 ave 233431 max 225531 min +Histogram: 1 0 0 0 0 0 0 0 2 1 + +Total # of neighbors = 922931 +Ave neighs/atom = 307.64367 +Neighbor list builds = 7 +Dangerous builds = 0 +Total wall time: 0:00:12 diff --git a/examples/reaxff/water/log.20Sep21.reaxff.water-acks2.g++.1 b/examples/reaxff/water/log.13Oct21.reaxff.water-acks2.g++.1 similarity index 53% rename from examples/reaxff/water/log.20Sep21.reaxff.water-acks2.g++.1 rename to examples/reaxff/water/log.13Oct21.reaxff.water-acks2.g++.1 index b49c72c383..4bf0a5b789 100644 --- a/examples/reaxff/water/log.20Sep21.reaxff.water-acks2.g++.1 +++ b/examples/reaxff/water/log.13Oct21.reaxff.water-acks2.g++.1 @@ -1,23 +1,75 @@ -LAMMPS (31 Aug 2021) +LAMMPS (29 Sep 2021) +# ACKS2 Water, CITE: Achtyl et al., Nat. Comm., 6 6539 (2015) + +boundary p p p +units real +atom_style charge + +read_data data.water Reading data file ... orthogonal box = (0.0000000 0.0000000 0.0000000) to (31.043046 31.043046 31.043046) 1 by 1 by 1 MPI processor grid reading atoms ... 3000 atoms read_data CPU = 0.010 seconds + +variable x index 1 +variable y index 1 +variable z index 1 + +replicate $x $y $z +replicate 1 $y $z +replicate 1 1 $z +replicate 1 1 1 Replicating atoms ... orthogonal box = (0.0000000 0.0000000 0.0000000) to (31.043046 31.043046 31.043046) 1 by 1 by 1 MPI processor grid 3000 atoms replicate CPU = 0.001 seconds -WARNING: Changed valency_val to valency_boc for X (../reaxff_ffield.cpp:295) + +pair_style reaxff NULL safezone 3.0 mincap 150 +pair_coeff * * acks2_ff.water O H +Reading potential file acks2_ff.water with DATE: 2021-09-21 +WARNING: Changed valency_val to valency_boc for X (../reaxff_ffield.cpp:296) +neighbor 0.5 bin +neigh_modify every 1 delay 0 check yes + +velocity all create 300.0 4928459 rot yes dist gaussian + +fix 1 all acks2/reaxff 1 0.0 10.0 1.0e-6 reaxff maxiter 1000 +fix 2 all nvt temp 300 300 50.0 + +timestep 0.5 +thermo 10 +thermo_style custom step temp press density vol + +run 20 CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE Your simulation uses code contributions which should be cited: + - pair reaxff command: + +@Article{Aktulga12, + author = {H. M. Aktulga, J. C. Fogarty, S. A. Pandit, A. Y. Grama}, + title = {Parallel reactive molecular dynamics: Numerical methods and algorithmic techniques}, + journal = {Parallel Computing}, + year = 2012, + volume = 38, + pages = {245--259} +} + - fix acks2/reaxff command: -The log file lists these citations in BibTeX format. + +@Article{O'Hearn2020, + author = {K. A. O'Hearn, A. Alperen, and H. M. Aktulga}, + title = {Fast Solvers for Charge Distribution Models on Shared Memory Platforms}, + journal = {SIAM J. Sci. Comput.}, + year = 2020, + volume = 42, + pages = {1--22} +} CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE @@ -38,29 +90,25 @@ Neighbor list info ... pair build: copy stencil: none bin: none -Setting up Verlet run ... - Unit style : real - Current step : 0 - Time step : 0.5 Per MPI rank memory allocation (min/avg/max) = 574.5 | 574.5 | 574.5 Mbytes Step Temp Press Density Volume 0 300 1572.3474 1 29915.273 10 300.61522 8252.7686 1 29915.273 20 294.7387 2502.6624 1 29915.273 -Loop time of 25.3632 on 1 procs for 20 steps with 3000 atoms +Loop time of 25.9579 on 1 procs for 20 steps with 3000 atoms -Performance: 0.034 ns/day, 704.533 hours/ns, 0.789 timesteps/s +Performance: 0.033 ns/day, 721.052 hours/ns, 0.770 timesteps/s 100.0% CPU use with 1 MPI tasks x no OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 13.789 | 13.789 | 13.789 | 0.0 | 54.37 -Neigh | 0.33364 | 0.33364 | 0.33364 | 0.0 | 1.32 -Comm | 0.002672 | 0.002672 | 0.002672 | 0.0 | 0.01 -Output | 0.00013542 | 0.00013542 | 0.00013542 | 0.0 | 0.00 -Modify | 11.237 | 11.237 | 11.237 | 0.0 | 44.30 -Other | | 0.000942 | | | 0.00 +Pair | 14.081 | 14.081 | 14.081 | 0.0 | 54.24 +Neigh | 0.34284 | 0.34284 | 0.34284 | 0.0 | 1.32 +Comm | 0.0027799 | 0.0027799 | 0.0027799 | 0.0 | 0.01 +Output | 0.00012876 | 0.00012876 | 0.00012876 | 0.0 | 0.00 +Modify | 11.53 | 11.53 | 11.53 | 0.0 | 44.42 +Other | | 0.001007 | | | 0.00 Nlocal: 3000.00 ave 3000 max 3000 min Histogram: 1 0 0 0 0 0 0 0 0 0 diff --git a/examples/reaxff/water/log.20Sep21.reaxff.water-acks2.g++.4 b/examples/reaxff/water/log.13Oct21.reaxff.water-acks2.g++.4 similarity index 50% rename from examples/reaxff/water/log.20Sep21.reaxff.water-acks2.g++.4 rename to examples/reaxff/water/log.13Oct21.reaxff.water-acks2.g++.4 index c6117887de..4124e7f82f 100644 --- a/examples/reaxff/water/log.20Sep21.reaxff.water-acks2.g++.4 +++ b/examples/reaxff/water/log.13Oct21.reaxff.water-acks2.g++.4 @@ -1,23 +1,75 @@ -LAMMPS (31 Aug 2021) +LAMMPS (29 Sep 2021) +# ACKS2 Water, CITE: Achtyl et al., Nat. Comm., 6 6539 (2015) + +boundary p p p +units real +atom_style charge + +read_data data.water Reading data file ... orthogonal box = (0.0000000 0.0000000 0.0000000) to (31.043046 31.043046 31.043046) 1 by 2 by 2 MPI processor grid reading atoms ... 3000 atoms - read_data CPU = 0.010 seconds + read_data CPU = 0.013 seconds + +variable x index 1 +variable y index 1 +variable z index 1 + +replicate $x $y $z +replicate 1 $y $z +replicate 1 1 $z +replicate 1 1 1 Replicating atoms ... orthogonal box = (0.0000000 0.0000000 0.0000000) to (31.043046 31.043046 31.043046) 1 by 2 by 2 MPI processor grid 3000 atoms - replicate CPU = 0.001 seconds -WARNING: Changed valency_val to valency_boc for X (../reaxff_ffield.cpp:295) + replicate CPU = 0.002 seconds + +pair_style reaxff NULL safezone 3.0 mincap 150 +pair_coeff * * acks2_ff.water O H +Reading potential file acks2_ff.water with DATE: 2021-09-21 +WARNING: Changed valency_val to valency_boc for X (../reaxff_ffield.cpp:296) +neighbor 0.5 bin +neigh_modify every 1 delay 0 check yes + +velocity all create 300.0 4928459 rot yes dist gaussian + +fix 1 all acks2/reaxff 1 0.0 10.0 1.0e-6 reaxff maxiter 1000 +fix 2 all nvt temp 300 300 50.0 + +timestep 0.5 +thermo 10 +thermo_style custom step temp press density vol + +run 20 CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE Your simulation uses code contributions which should be cited: + - pair reaxff command: + +@Article{Aktulga12, + author = {H. M. Aktulga, J. C. Fogarty, S. A. Pandit, A. Y. Grama}, + title = {Parallel reactive molecular dynamics: Numerical methods and algorithmic techniques}, + journal = {Parallel Computing}, + year = 2012, + volume = 38, + pages = {245--259} +} + - fix acks2/reaxff command: -The log file lists these citations in BibTeX format. + +@Article{O'Hearn2020, + author = {K. A. O'Hearn, A. Alperen, and H. M. Aktulga}, + title = {Fast Solvers for Charge Distribution Models on Shared Memory Platforms}, + journal = {SIAM J. Sci. Comput.}, + year = 2020, + volume = 42, + pages = {1--22} +} CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE @@ -38,29 +90,25 @@ Neighbor list info ... pair build: copy stencil: none bin: none -Setting up Verlet run ... - Unit style : real - Current step : 0 - Time step : 0.5 Per MPI rank memory allocation (min/avg/max) = 271.9 | 273.6 | 275.1 Mbytes Step Temp Press Density Volume 0 300 1572.3807 1 29915.273 10 300.6152 8252.4834 1 29915.273 20 294.73868 2502.5661 1 29915.273 -Loop time of 8.86017 on 4 procs for 20 steps with 3000 atoms +Loop time of 11.1133 on 4 procs for 20 steps with 3000 atoms -Performance: 0.098 ns/day, 246.116 hours/ns, 2.257 timesteps/s -98.8% CPU use with 4 MPI tasks x no OpenMP threads +Performance: 0.078 ns/day, 308.702 hours/ns, 1.800 timesteps/s +92.7% CPU use with 4 MPI tasks x no OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 4.4245 | 4.5176 | 4.5927 | 3.2 | 50.99 -Neigh | 0.15776 | 0.15897 | 0.16001 | 0.2 | 1.79 -Comm | 0.06196 | 0.13722 | 0.23035 | 18.5 | 1.55 -Output | 7.534e-05 | 0.00010848 | 0.00019836 | 0.0 | 0.00 -Modify | 4.0442 | 4.0453 | 4.0465 | 0.0 | 45.66 -Other | | 0.0009994 | | | 0.01 +Pair | 4.3609 | 4.7715 | 5.4812 | 19.5 | 42.94 +Neigh | 0.15797 | 0.17176 | 0.19405 | 3.5 | 1.55 +Comm | 0.21014 | 0.922 | 1.3353 | 44.6 | 8.30 +Output | 8.815e-05 | 0.0002 | 0.00030501 | 0.0 | 0.00 +Modify | 5.2267 | 5.2468 | 5.2584 | 0.5 | 47.21 +Other | | 0.001074 | | | 0.01 Nlocal: 750.000 ave 760 max 735 min Histogram: 1 0 0 0 1 0 0 0 0 2 @@ -73,4 +121,4 @@ Total # of neighbors = 1108026 Ave neighs/atom = 369.34200 Neighbor list builds = 2 Dangerous builds = 0 -Total wall time: 0:00:09 +Total wall time: 0:00:12 diff --git a/examples/reaxff/water/log.13Oct21.reaxff.water-qeq-field.g++.1 b/examples/reaxff/water/log.13Oct21.reaxff.water-qeq-field.g++.1 new file mode 100644 index 0000000000..74f49665b9 --- /dev/null +++ b/examples/reaxff/water/log.13Oct21.reaxff.water-qeq-field.g++.1 @@ -0,0 +1,128 @@ +LAMMPS (29 Sep 2021) +# QEq Water, CITE: Achtyl et al., Nat. Comm., 6 6539 (2015) + +boundary p p s +units real +atom_style charge + +read_data data.water +Reading data file ... + orthogonal box = (0.0000000 0.0000000 0.0000000) to (31.043046 31.043046 31.043046) + 1 by 1 by 1 MPI processor grid + reading atoms ... +WARNING: Non-zero imageflag(s) in z direction for non-periodic boundary reset to zero (../atom.cpp:1208) +WARNING: Non-zero imageflag(s) in z direction for non-periodic boundary reset to zero (../atom.cpp:1208) +WARNING: Non-zero imageflag(s) in z direction for non-periodic boundary reset to zero (../atom.cpp:1208) + 3000 atoms + read_data CPU = 0.010 seconds + +variable x index 1 +variable y index 1 +variable z index 1 + +replicate $x $y $z +replicate 1 $y $z +replicate 1 1 $z +replicate 1 1 1 +Replicating atoms ... + orthogonal box = (0.0000000 0.0000000 0.0012889577) to (31.043046 31.043046 31.045309) + 1 by 1 by 1 MPI processor grid + 3000 atoms + replicate CPU = 0.001 seconds + +pair_style reaxff NULL safezone 3.0 mincap 150 +pair_coeff * * qeq_ff.water O H +WARNING: Changed valency_val to valency_boc for X (../reaxff_ffield.cpp:296) +neighbor 0.5 bin +neigh_modify every 1 delay 0 check yes + +velocity all create 300.0 4928459 rot yes dist gaussian + +fix 1 all qeq/reaxff 1 0.0 10.0 1.0e-6 reaxff maxiter 400 +fix 2 all nvt temp 300 300 50.0 +fix 3 all efield 0.0 0.0 1.0 +fix 4 all wall/reflect zlo EDGE zhi EDGE + +timestep 0.5 +thermo 10 +thermo_style custom step temp press density vol + +run 20 + +CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE + +Your simulation uses code contributions which should be cited: + +- pair reaxff command: + +@Article{Aktulga12, + author = {H. M. Aktulga, J. C. Fogarty, S. A. Pandit, A. Y. Grama}, + title = {Parallel reactive molecular dynamics: Numerical methods and algorithmic techniques}, + journal = {Parallel Computing}, + year = 2012, + volume = 38, + pages = {245--259} +} + +- fix qeq/reaxff command: + +@Article{Aktulga12, + author = {H. M. Aktulga, J. C. Fogarty, S. A. Pandit, A. Y. Grama}, + title = {Parallel reactive molecular dynamics: Numerical methods and algorithmic techniques}, + journal = {Parallel Computing}, + year = 2012, + volume = 38, + pages = {245--259} +} + +CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE + +Neighbor list info ... + update every 1 steps, delay 0 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 10.5 + ghost atom cutoff = 10.5 + binsize = 5.25, bins = 6 6 6 + 2 neighbor lists, perpetual/occasional/extra = 2 0 0 + (1) pair reaxff, perpetual + attributes: half, newton off, ghost + pair build: half/bin/newtoff/ghost + stencil: full/ghost/bin/3d + bin: standard + (2) fix qeq/reaxff, perpetual, copy from (1) + attributes: half, newton off, ghost + pair build: copy + stencil: none + bin: none +Per MPI rank memory allocation (min/avg/max) = 332.3 | 332.3 | 332.3 Mbytes +Step Temp Press Density Volume + 0 300 25015.837 0.99996859 29916.212 + 10 348.83356 31131.298 0.99964273 29925.965 + 20 414.67243 27564.999 0.99979791 29921.32 +Loop time of 15.4107 on 1 procs for 20 steps with 3000 atoms + +Performance: 0.056 ns/day, 428.074 hours/ns, 1.298 timesteps/s +100.0% CPU use with 1 MPI tasks x no OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 11.413 | 11.413 | 11.413 | 0.0 | 74.06 +Neigh | 0.57486 | 0.57486 | 0.57486 | 0.0 | 3.73 +Comm | 0.0019709 | 0.0019709 | 0.0019709 | 0.0 | 0.01 +Output | 0.00013211 | 0.00013211 | 0.00013211 | 0.0 | 0.00 +Modify | 3.4192 | 3.4192 | 3.4192 | 0.0 | 22.19 +Other | | 0.001104 | | | 0.01 + +Nlocal: 3000.00 ave 3000 max 3000 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Nghost: 5439.00 ave 5439 max 5439 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Neighs: 786591.0 ave 786591 max 786591 min +Histogram: 1 0 0 0 0 0 0 0 0 0 + +Total # of neighbors = 786591 +Ave neighs/atom = 262.19700 +Neighbor list builds = 6 +Dangerous builds = 0 +Total wall time: 0:00:16 diff --git a/examples/reaxff/water/log.13Oct21.reaxff.water-qeq-field.g++.4 b/examples/reaxff/water/log.13Oct21.reaxff.water-qeq-field.g++.4 new file mode 100644 index 0000000000..4f56281aaa --- /dev/null +++ b/examples/reaxff/water/log.13Oct21.reaxff.water-qeq-field.g++.4 @@ -0,0 +1,128 @@ +LAMMPS (29 Sep 2021) +# QEq Water, CITE: Achtyl et al., Nat. Comm., 6 6539 (2015) + +boundary p p s +units real +atom_style charge + +read_data data.water +Reading data file ... + orthogonal box = (0.0000000 0.0000000 0.0000000) to (31.043046 31.043046 31.043046) + 1 by 2 by 2 MPI processor grid + reading atoms ... +WARNING: Non-zero imageflag(s) in z direction for non-periodic boundary reset to zero (../atom.cpp:1208) +WARNING: Non-zero imageflag(s) in z direction for non-periodic boundary reset to zero (../atom.cpp:1208) +WARNING: Non-zero imageflag(s) in z direction for non-periodic boundary reset to zero (../atom.cpp:1208) + 3000 atoms + read_data CPU = 0.017 seconds + +variable x index 1 +variable y index 1 +variable z index 1 + +replicate $x $y $z +replicate 1 $y $z +replicate 1 1 $z +replicate 1 1 1 +Replicating atoms ... + orthogonal box = (0.0000000 0.0000000 0.0012889577) to (31.043046 31.043046 31.045309) + 2 by 1 by 2 MPI processor grid + 3000 atoms + replicate CPU = 0.002 seconds + +pair_style reaxff NULL safezone 3.0 mincap 150 +pair_coeff * * qeq_ff.water O H +WARNING: Changed valency_val to valency_boc for X (../reaxff_ffield.cpp:296) +neighbor 0.5 bin +neigh_modify every 1 delay 0 check yes + +velocity all create 300.0 4928459 rot yes dist gaussian + +fix 1 all qeq/reaxff 1 0.0 10.0 1.0e-6 reaxff maxiter 400 +fix 2 all nvt temp 300 300 50.0 +fix 3 all efield 0.0 0.0 1.0 +fix 4 all wall/reflect zlo EDGE zhi EDGE + +timestep 0.5 +thermo 10 +thermo_style custom step temp press density vol + +run 20 + +CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE + +Your simulation uses code contributions which should be cited: + +- pair reaxff command: + +@Article{Aktulga12, + author = {H. M. Aktulga, J. C. Fogarty, S. A. Pandit, A. Y. Grama}, + title = {Parallel reactive molecular dynamics: Numerical methods and algorithmic techniques}, + journal = {Parallel Computing}, + year = 2012, + volume = 38, + pages = {245--259} +} + +- fix qeq/reaxff command: + +@Article{Aktulga12, + author = {H. M. Aktulga, J. C. Fogarty, S. A. Pandit, A. Y. Grama}, + title = {Parallel reactive molecular dynamics: Numerical methods and algorithmic techniques}, + journal = {Parallel Computing}, + year = 2012, + volume = 38, + pages = {245--259} +} + +CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE + +Neighbor list info ... + update every 1 steps, delay 0 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 10.5 + ghost atom cutoff = 10.5 + binsize = 5.25, bins = 6 6 6 + 2 neighbor lists, perpetual/occasional/extra = 2 0 0 + (1) pair reaxff, perpetual + attributes: half, newton off, ghost + pair build: half/bin/newtoff/ghost + stencil: full/ghost/bin/3d + bin: standard + (2) fix qeq/reaxff, perpetual, copy from (1) + attributes: half, newton off, ghost + pair build: copy + stencil: none + bin: none +Per MPI rank memory allocation (min/avg/max) = 188.9 | 189.5 | 190.1 Mbytes +Step Temp Press Density Volume + 0 300 25015.837 0.99996859 29916.212 + 10 348.83356 31131.298 0.99964273 29925.965 + 20 414.67243 27564.999 0.99979791 29921.32 +Loop time of 5.71549 on 4 procs for 20 steps with 3000 atoms + +Performance: 0.151 ns/day, 158.764 hours/ns, 3.499 timesteps/s +94.1% CPU use with 4 MPI tasks x no OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 3.6678 | 3.8126 | 4.1402 | 9.8 | 66.71 +Neigh | 0.31449 | 0.34639 | 0.38898 | 5.5 | 6.06 +Comm | 0.032125 | 0.35935 | 0.50408 | 31.9 | 6.29 +Output | 7.643e-05 | 0.00015959 | 0.00039876 | 0.0 | 0.00 +Modify | 1.1534 | 1.1959 | 1.2283 | 3.0 | 20.92 +Other | | 0.001099 | | | 0.02 + +Nlocal: 750.000 ave 757 max 738 min +Histogram: 1 0 0 0 0 1 0 0 0 2 +Nghost: 4219.00 ave 4232 max 4198 min +Histogram: 1 0 0 0 0 1 0 0 1 1 +Neighs: 230549.0 ave 233374 max 225849 min +Histogram: 1 0 0 0 0 0 1 0 1 1 + +Total # of neighbors = 922196 +Ave neighs/atom = 307.39867 +Neighbor list builds = 6 +Dangerous builds = 0 +Total wall time: 0:00:06 diff --git a/examples/reaxff/water/log.20Sep21.reaxff.water-qeq.g++.1 b/examples/reaxff/water/log.13Oct21.reaxff.water-qeq.g++.1 similarity index 54% rename from examples/reaxff/water/log.20Sep21.reaxff.water-qeq.g++.1 rename to examples/reaxff/water/log.13Oct21.reaxff.water-qeq.g++.1 index 35f7774f0e..9c991e2ff8 100644 --- a/examples/reaxff/water/log.20Sep21.reaxff.water-qeq.g++.1 +++ b/examples/reaxff/water/log.13Oct21.reaxff.water-qeq.g++.1 @@ -1,23 +1,74 @@ -LAMMPS (31 Aug 2021) +LAMMPS (29 Sep 2021) +# QEq Water, CITE: Achtyl et al., Nat. Comm., 6 6539 (2015) + +boundary p p p +units real +atom_style charge + +read_data data.water Reading data file ... orthogonal box = (0.0000000 0.0000000 0.0000000) to (31.043046 31.043046 31.043046) 1 by 1 by 1 MPI processor grid reading atoms ... 3000 atoms read_data CPU = 0.010 seconds + +variable x index 1 +variable y index 1 +variable z index 1 + +replicate $x $y $z +replicate 1 $y $z +replicate 1 1 $z +replicate 1 1 1 Replicating atoms ... orthogonal box = (0.0000000 0.0000000 0.0000000) to (31.043046 31.043046 31.043046) 1 by 1 by 1 MPI processor grid 3000 atoms replicate CPU = 0.001 seconds -WARNING: Changed valency_val to valency_boc for X (../reaxff_ffield.cpp:295) + +pair_style reaxff NULL safezone 3.0 mincap 150 +pair_coeff * * qeq_ff.water O H +WARNING: Changed valency_val to valency_boc for X (../reaxff_ffield.cpp:296) +neighbor 0.5 bin +neigh_modify every 1 delay 0 check yes + +velocity all create 300.0 4928459 rot yes dist gaussian + +fix 1 all qeq/reaxff 1 0.0 10.0 1.0e-6 reaxff maxiter 400 +fix 2 all nvt temp 300 300 50.0 + +timestep 0.5 +thermo 10 +thermo_style custom step temp press density vol + +run 20 CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE Your simulation uses code contributions which should be cited: + - pair reaxff command: + +@Article{Aktulga12, + author = {H. M. Aktulga, J. C. Fogarty, S. A. Pandit, A. Y. Grama}, + title = {Parallel reactive molecular dynamics: Numerical methods and algorithmic techniques}, + journal = {Parallel Computing}, + year = 2012, + volume = 38, + pages = {245--259} +} + - fix qeq/reaxff command: -The log file lists these citations in BibTeX format. + +@Article{Aktulga12, + author = {H. M. Aktulga, J. C. Fogarty, S. A. Pandit, A. Y. Grama}, + title = {Parallel reactive molecular dynamics: Numerical methods and algorithmic techniques}, + journal = {Parallel Computing}, + year = 2012, + volume = 38, + pages = {245--259} +} CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE @@ -38,29 +89,25 @@ Neighbor list info ... pair build: copy stencil: none bin: none -Setting up Verlet run ... - Unit style : real - Current step : 0 - Time step : 0.5 Per MPI rank memory allocation (min/avg/max) = 539.2 | 539.2 | 539.2 Mbytes Step Temp Press Density Volume 0 300 780.33989 1 29915.273 10 301.29205 5433.7415 1 29915.273 20 297.90652 1572.6111 1 29915.273 -Loop time of 17.1814 on 1 procs for 20 steps with 3000 atoms +Loop time of 17.5765 on 1 procs for 20 steps with 3000 atoms -Performance: 0.050 ns/day, 477.262 hours/ns, 1.164 timesteps/s +Performance: 0.049 ns/day, 488.237 hours/ns, 1.138 timesteps/s 100.0% CPU use with 1 MPI tasks x no OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 13.501 | 13.501 | 13.501 | 0.0 | 78.58 -Neigh | 0.33379 | 0.33379 | 0.33379 | 0.0 | 1.94 -Comm | 0.0026753 | 0.0026753 | 0.0026753 | 0.0 | 0.02 -Output | 0.00013304 | 0.00013304 | 0.00013304 | 0.0 | 0.00 -Modify | 3.3425 | 3.3425 | 3.3425 | 0.0 | 19.45 -Other | | 0.0009654 | | | 0.01 +Pair | 13.806 | 13.806 | 13.806 | 0.0 | 78.55 +Neigh | 0.34211 | 0.34211 | 0.34211 | 0.0 | 1.95 +Comm | 0.0028155 | 0.0028155 | 0.0028155 | 0.0 | 0.02 +Output | 0.00012279 | 0.00012279 | 0.00012279 | 0.0 | 0.00 +Modify | 3.4248 | 3.4248 | 3.4248 | 0.0 | 19.49 +Other | | 0.001008 | | | 0.01 Nlocal: 3000.00 ave 3000 max 3000 min Histogram: 1 0 0 0 0 0 0 0 0 0 diff --git a/examples/reaxff/water/log.20Sep21.reaxff.water-qeq.g++.4 b/examples/reaxff/water/log.13Oct21.reaxff.water-qeq.g++.4 similarity index 52% rename from examples/reaxff/water/log.20Sep21.reaxff.water-qeq.g++.4 rename to examples/reaxff/water/log.13Oct21.reaxff.water-qeq.g++.4 index dd78298db2..152842f516 100644 --- a/examples/reaxff/water/log.20Sep21.reaxff.water-qeq.g++.4 +++ b/examples/reaxff/water/log.13Oct21.reaxff.water-qeq.g++.4 @@ -1,23 +1,74 @@ -LAMMPS (31 Aug 2021) +LAMMPS (29 Sep 2021) +# QEq Water, CITE: Achtyl et al., Nat. Comm., 6 6539 (2015) + +boundary p p p +units real +atom_style charge + +read_data data.water Reading data file ... orthogonal box = (0.0000000 0.0000000 0.0000000) to (31.043046 31.043046 31.043046) 1 by 2 by 2 MPI processor grid reading atoms ... 3000 atoms read_data CPU = 0.010 seconds + +variable x index 1 +variable y index 1 +variable z index 1 + +replicate $x $y $z +replicate 1 $y $z +replicate 1 1 $z +replicate 1 1 1 Replicating atoms ... orthogonal box = (0.0000000 0.0000000 0.0000000) to (31.043046 31.043046 31.043046) 1 by 2 by 2 MPI processor grid 3000 atoms replicate CPU = 0.001 seconds -WARNING: Changed valency_val to valency_boc for X (../reaxff_ffield.cpp:295) + +pair_style reaxff NULL safezone 3.0 mincap 150 +pair_coeff * * qeq_ff.water O H +WARNING: Changed valency_val to valency_boc for X (../reaxff_ffield.cpp:296) +neighbor 0.5 bin +neigh_modify every 1 delay 0 check yes + +velocity all create 300.0 4928459 rot yes dist gaussian + +fix 1 all qeq/reaxff 1 0.0 10.0 1.0e-6 reaxff maxiter 400 +fix 2 all nvt temp 300 300 50.0 + +timestep 0.5 +thermo 10 +thermo_style custom step temp press density vol + +run 20 CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE Your simulation uses code contributions which should be cited: + - pair reaxff command: + +@Article{Aktulga12, + author = {H. M. Aktulga, J. C. Fogarty, S. A. Pandit, A. Y. Grama}, + title = {Parallel reactive molecular dynamics: Numerical methods and algorithmic techniques}, + journal = {Parallel Computing}, + year = 2012, + volume = 38, + pages = {245--259} +} + - fix qeq/reaxff command: -The log file lists these citations in BibTeX format. + +@Article{Aktulga12, + author = {H. M. Aktulga, J. C. Fogarty, S. A. Pandit, A. Y. Grama}, + title = {Parallel reactive molecular dynamics: Numerical methods and algorithmic techniques}, + journal = {Parallel Computing}, + year = 2012, + volume = 38, + pages = {245--259} +} CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE @@ -38,29 +89,25 @@ Neighbor list info ... pair build: copy stencil: none bin: none -Setting up Verlet run ... - Unit style : real - Current step : 0 - Time step : 0.5 Per MPI rank memory allocation (min/avg/max) = 260.5 | 262.2 | 263.6 Mbytes Step Temp Press Density Volume 0 300 780.34006 1 29915.273 10 301.29205 5433.7414 1 29915.273 20 297.90652 1572.6111 1 29915.273 -Loop time of 9.57716 on 4 procs for 20 steps with 3000 atoms +Loop time of 6.79573 on 4 procs for 20 steps with 3000 atoms -Performance: 0.090 ns/day, 266.032 hours/ns, 2.088 timesteps/s -82.6% CPU use with 4 MPI tasks x no OpenMP threads +Performance: 0.127 ns/day, 188.770 hours/ns, 2.943 timesteps/s +93.0% CPU use with 4 MPI tasks x no OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 4.8491 | 5.0977 | 5.5111 | 11.0 | 53.23 -Neigh | 0.19318 | 0.20407 | 0.22812 | 3.1 | 2.13 -Comm | 0.91123 | 1.3208 | 1.5758 | 21.5 | 13.79 -Output | 8.1778e-05 | 0.00012696 | 0.00025511 | 0.0 | 0.00 -Modify | 2.8506 | 2.8668 | 2.8843 | 0.8 | 29.93 -Other | | 0.08761 | | | 0.91 +Pair | 4.4827 | 4.6649 | 4.866 | 6.6 | 68.64 +Neigh | 0.16329 | 0.17253 | 0.18074 | 1.6 | 2.54 +Comm | 0.44871 | 0.64804 | 0.82827 | 17.5 | 9.54 +Output | 9.9269e-05 | 0.00013061 | 0.00022048 | 0.0 | 0.00 +Modify | 1.3028 | 1.3091 | 1.3201 | 0.6 | 19.26 +Other | | 0.001043 | | | 0.02 Nlocal: 750.000 ave 759 max 735 min Histogram: 1 0 0 0 0 1 0 0 0 2 @@ -73,4 +120,4 @@ Total # of neighbors = 1108032 Ave neighs/atom = 369.34400 Neighbor list builds = 2 Dangerous builds = 0 -Total wall time: 0:00:10 +Total wall time: 0:00:07 From f206eab3380eaa1e7e6e061e7025dc145a3ab5e7 Mon Sep 17 00:00:00 2001 From: Steve Plimpton Date: Wed, 13 Oct 2021 15:02:33 -0600 Subject: [PATCH 173/372] mv examples/gcmc to mc, add 2 scripts for fix mol/swap --- examples/README | 2 +- examples/{gcmc => mc}/CO2.txt | 0 examples/{gcmc => mc}/H2O.txt | 0 examples/mc/data.bead | 11733 ++++++++++++++++ examples/{gcmc => mc}/data.spce | 0 examples/{gcmc => mc}/data.widom.lj | 0 examples/{gcmc => mc}/in.gcmc.co2 | 0 examples/{gcmc => mc}/in.gcmc.h2o | 0 examples/{gcmc => mc}/in.gcmc.lj | 0 examples/mc/in.mixed | 44 + examples/mc/in.pure | 44 + examples/{gcmc => mc}/in.widom.lj | 0 examples/{gcmc => mc}/in.widom.spce | 0 examples/mc/log.13Oct21.mixed.g++.4 | 164 + examples/mc/log.13Oct21.pure.g++.4 | 164 + .../{gcmc => mc}/log.27Nov18.gcmc.h2o.g++.1 | 0 .../{gcmc => mc}/log.27Nov18.gcmc.lj.g++.1 | 0 .../{gcmc => mc}/log.27Nov18.gcmc.lj.g++.4 | 0 .../{gcmc => mc}/log.30Jun20.widom.lj.g++.1 | 0 .../{gcmc => mc}/log.30Jun20.widom.lj.g++.4 | 0 .../{gcmc => mc}/log.30Jun20.widom.spce.g++.1 | 0 .../{gcmc => mc}/log.31Mar21.gcmc.co2.g++.1 | 0 22 files changed, 12150 insertions(+), 1 deletion(-) rename examples/{gcmc => mc}/CO2.txt (100%) rename examples/{gcmc => mc}/H2O.txt (100%) create mode 100755 examples/mc/data.bead rename examples/{gcmc => mc}/data.spce (100%) rename examples/{gcmc => mc}/data.widom.lj (100%) rename examples/{gcmc => mc}/in.gcmc.co2 (100%) rename examples/{gcmc => mc}/in.gcmc.h2o (100%) rename examples/{gcmc => mc}/in.gcmc.lj (100%) create mode 100755 examples/mc/in.mixed create mode 100755 examples/mc/in.pure rename examples/{gcmc => mc}/in.widom.lj (100%) rename examples/{gcmc => mc}/in.widom.spce (100%) create mode 100644 examples/mc/log.13Oct21.mixed.g++.4 create mode 100644 examples/mc/log.13Oct21.pure.g++.4 rename examples/{gcmc => mc}/log.27Nov18.gcmc.h2o.g++.1 (100%) rename examples/{gcmc => mc}/log.27Nov18.gcmc.lj.g++.1 (100%) rename examples/{gcmc => mc}/log.27Nov18.gcmc.lj.g++.4 (100%) rename examples/{gcmc => mc}/log.30Jun20.widom.lj.g++.1 (100%) rename examples/{gcmc => mc}/log.30Jun20.widom.lj.g++.4 (100%) rename examples/{gcmc => mc}/log.30Jun20.widom.spce.g++.1 (100%) rename examples/{gcmc => mc}/log.31Mar21.gcmc.co2.g++.1 (100%) diff --git a/examples/README b/examples/README index 76ddf77498..50d3d52e65 100644 --- a/examples/README +++ b/examples/README @@ -75,7 +75,6 @@ eim: NaCl using the EIM potential ellipse: ellipsoidal particles in spherical solvent, 2d system flow: Couette and Poiseuille flow in a 2d channel friction: frictional contact of spherical asperities between 2d surfaces -gcmc: Grand Canonical MC with fix gcmc, Widom insertion with fix widom gjf: use of fix langevin Gronbech-Jensen/Farago option granregion: use of fix wall/region/gran as boundary on granular particles hugoniostat: Hugoniostat shock dynamics @@ -83,6 +82,7 @@ hyper: global and local hyperdynamics of diffusion on Pt surface indent: spherical indenter into a 2d solid kim: use of potentials in Knowledge Base for Interatomic Models (KIM) latte: use of LATTE density-functional tight-binding quantum code +mc: MC package models: GCMC, Widom, fix mol/swap meam: MEAM test for SiC and shear (same as shear examples) melt: rapid melt of 3d LJ system message: client/server coupling of 2 codes diff --git a/examples/gcmc/CO2.txt b/examples/mc/CO2.txt similarity index 100% rename from examples/gcmc/CO2.txt rename to examples/mc/CO2.txt diff --git a/examples/gcmc/H2O.txt b/examples/mc/H2O.txt similarity index 100% rename from examples/gcmc/H2O.txt rename to examples/mc/H2O.txt diff --git a/examples/mc/data.bead b/examples/mc/data.bead new file mode 100755 index 0000000000..56b30fa3f6 --- /dev/null +++ b/examples/mc/data.bead @@ -0,0 +1,11733 @@ +LAMMPS Description + + 4000 atoms + 3900 bonds + 3800 angles + 0 dihedrals + 0 impropers + + 2 atom types + 1 bond types + 1 angle types + + -8.21157000000000 8.21157000000000 xlo xhi + -8.21157000000000 8.21157000000000 ylo yhi + -8.21157000000000 8.21157000000000 zlo zhi + +Masses + + 1 1.0 + 2 1.0 + +Bond Coeffs + + 1 30.0 1.5 1.0 1.0 + +Atoms + + 1 1 1 -2.9103 -2.6338 -5.5800 0 0 0 + 2 1 1 -3.3673 -2.5540 -6.4677 0 0 0 + 3 1 1 -3.7032 -1.7756 -6.9465 0 0 0 + 4 1 1 -3.7288 -1.6133 -5.9116 0 0 0 + 5 1 1 -3.9173 -2.4798 -5.4545 0 0 0 + 6 1 1 -4.2082 -2.9678 -4.6977 0 0 0 + 7 1 1 -5.0665 -3.3630 -4.3797 0 0 0 + 8 1 1 -5.6059 -2.8334 -3.7675 0 0 0 + 9 1 1 -4.7453 -2.5468 -3.5426 0 0 0 + 10 1 1 -3.9543 -2.2812 -3.1107 0 0 0 + 11 1 1 -3.1586 -2.0408 -3.4687 0 0 0 + 12 1 1 -2.6736 -1.3359 -3.1965 0 0 0 + 13 1 1 -2.1194 -0.7114 -2.8051 0 0 0 + 14 1 1 -2.2847 -1.1385 -1.9611 0 0 0 + 15 1 1 -1.7850 -1.5842 -1.3712 0 0 0 + 16 1 1 -1.4364 -1.6803 -0.5220 0 0 0 + 17 1 1 -1.3507 -1.5469 0.4084 0 0 0 + 18 1 1 -1.7319 -1.6032 1.3034 0 0 0 + 19 1 1 -2.4172 -1.4765 1.9525 0 0 0 + 20 1 1 -3.2394 -1.0263 1.7041 0 0 0 + 21 1 1 -3.0859 -0.2908 2.3477 0 0 0 + 22 1 1 -3.7945 -0.0892 1.7353 0 0 0 + 23 1 1 -4.2861 -0.8912 1.4840 0 0 0 + 24 1 1 -4.5074 -0.2849 0.7346 0 0 0 + 25 1 1 -5.0793 0.0734 0.0605 0 0 0 + 26 1 1 -5.6653 0.4743 -0.5270 0 0 0 + 27 1 1 -6.5731 0.3491 -0.8646 0 0 0 + 28 1 1 -7.4484 -0.0013 -0.9089 0 0 0 + 29 1 1 -7.9598 -0.1126 -0.1493 0 0 0 + 30 1 1 7.6748 0.2203 0.3118 -1 0 0 + 31 1 1 6.7844 0.6283 0.2314 -1 0 0 + 32 1 1 6.1059 1.3011 0.3738 -1 0 0 + 33 1 1 5.2569 1.4695 0.8677 -1 0 0 + 34 1 1 4.6223 0.7851 0.9307 -1 0 0 + 35 1 1 4.8526 -0.1101 0.7663 -1 0 0 + 36 1 1 4.8830 -0.7657 0.1001 -1 0 0 + 37 1 1 4.5724 -1.2504 -0.6660 -1 0 0 + 38 1 1 4.0212 -2.0601 -0.9810 -1 0 0 + 39 1 1 3.8614 -2.7681 -1.7166 -1 0 0 + 40 1 1 3.7867 -3.3077 -0.8664 -1 0 0 + 41 2 2 3.4551 -1.0865 -3.8797 0 0 0 + 42 2 2 3.4634 -0.2905 -4.4171 0 0 0 + 43 2 2 3.3450 0.3311 -5.1842 0 0 0 + 44 2 2 3.1350 0.5569 -6.1197 0 0 0 + 45 2 2 3.0083 1.0587 -7.0003 0 0 0 + 46 2 2 3.2088 0.7640 -7.9587 0 0 0 + 47 2 2 3.1971 0.6936 7.5232 0 0 -1 + 48 2 2 2.5881 0.5624 6.8757 0 0 -1 + 49 2 2 1.6330 0.5113 7.0591 0 0 -1 + 50 2 2 1.5102 -0.0762 7.7949 0 0 -1 + 51 2 2 1.1030 0.0542 -7.6565 0 0 0 + 52 2 2 0.9357 0.6439 -6.9262 0 0 0 + 53 2 2 1.4333 1.4139 -7.0550 0 0 0 + 54 2 2 2.1274 1.7216 -7.5156 0 0 0 + 55 2 2 2.6898 1.5840 8.0474 0 0 -1 + 56 2 2 2.9524 2.2160 7.3232 0 0 -1 + 57 2 2 3.4174 3.0386 7.0594 0 0 -1 + 58 2 2 3.6172 3.4920 6.2838 0 0 -1 + 59 2 2 3.4249 4.0656 5.5761 0 0 -1 + 60 2 2 3.6243 4.8742 5.0226 0 0 -1 + 61 2 2 3.2361 5.7505 5.1372 0 0 -1 + 62 2 2 3.7763 6.2672 4.5804 0 0 -1 + 63 2 2 4.6843 6.4442 4.4298 0 0 -1 + 64 2 2 5.4346 7.0470 4.5256 0 0 -1 + 65 2 2 5.8473 7.9466 4.4979 0 0 -1 + 66 2 2 5.0667 8.0371 3.9286 0 0 -1 + 67 2 2 4.4694 7.3492 3.7072 0 0 -1 + 68 2 2 3.7871 7.9939 3.8058 0 0 -1 + 69 2 2 3.2044 -8.0376 3.1640 0 1 -1 + 70 2 2 3.8676 -7.3417 3.1638 0 1 -1 + 71 2 2 3.1740 -7.0258 3.8617 0 1 -1 + 72 2 2 2.6229 -6.8235 4.5657 0 1 -1 + 73 2 2 1.8737 -6.2882 4.9562 0 1 -1 + 74 2 2 1.0941 -5.7874 5.2434 0 1 -1 + 75 2 2 0.6263 -5.6822 4.2904 0 1 -1 + 76 2 2 1.5630 -5.4597 4.1946 0 1 -1 + 77 2 2 1.7525 -4.5454 4.3691 0 1 -1 + 78 2 2 2.3296 -4.0096 3.8006 0 1 -1 + 79 2 2 2.8806 -3.3547 4.2242 0 1 -1 + 80 2 2 3.1860 -2.7136 3.5227 0 1 -1 + 81 3 1 -4.5548 5.7485 6.0216 0 0 0 + 82 3 1 -4.1555 6.5480 5.6687 0 0 0 + 83 3 1 -4.0973 6.9142 4.8681 0 0 0 + 84 3 1 -4.9105 7.0901 4.3756 0 0 0 + 85 3 1 -4.4207 6.3159 4.0682 0 0 0 + 86 3 1 -4.7397 5.4672 3.9007 0 0 0 + 87 3 1 -4.6912 4.8125 3.1822 0 0 0 + 88 3 1 -4.1776 3.9883 3.1806 0 0 0 + 89 3 1 -4.1307 4.1924 2.2221 0 0 0 + 90 3 1 -4.8933 3.6825 1.8270 0 0 0 + 91 3 1 -4.8665 2.8420 1.4647 0 0 0 + 92 3 1 -5.3054 2.5407 2.3089 0 0 0 + 93 3 1 -4.6398 1.9524 1.9588 0 0 0 + 94 3 1 -4.7860 1.9788 2.9090 0 0 0 + 95 3 1 -4.1572 1.3286 3.4270 0 0 0 + 96 3 1 -4.1322 0.5902 3.9949 0 0 0 + 97 3 1 -3.8486 0.7777 4.9030 0 0 0 + 98 3 1 -3.1679 0.6448 5.6278 0 0 0 + 99 3 1 -3.7431 1.4402 5.6819 0 0 0 + 100 3 1 -3.9513 1.7463 6.5838 0 0 0 + 101 3 1 -4.4751 2.4318 6.9534 0 0 0 + 102 3 1 -4.7871 1.5760 7.4224 0 0 0 + 103 3 1 -5.0796 0.8459 7.9811 0 0 0 + 104 3 1 -4.7904 0.5863 -7.6006 0 0 1 + 105 3 1 -4.5790 -0.1461 -7.0952 0 0 1 + 106 3 1 -4.8318 -1.0000 -7.4320 0 0 1 + 107 3 1 -5.2877 -1.7175 -7.9583 0 0 1 + 108 3 1 -5.1173 -1.8660 7.5130 0 0 0 + 109 3 1 -4.7000 -1.3583 6.7775 0 0 0 + 110 3 1 -5.5551 -0.9660 6.6824 0 0 0 + 111 3 1 -6.3552 -0.4859 6.4167 0 0 0 + 112 3 1 -7.2893 -0.2325 6.3530 0 0 0 + 113 3 1 -8.1166 -0.0576 6.7017 0 0 0 + 114 3 1 7.9537 -0.8068 7.1081 -1 0 0 + 115 3 1 7.8094 -1.4160 7.7817 -1 0 0 + 116 3 1 7.6663 -1.3428 -7.6974 -1 0 1 + 117 3 1 -8.0615 -1.0159 -7.1172 0 0 1 + 118 3 1 -8.0340 -0.0766 -7.0752 0 0 1 + 119 3 1 -7.7311 0.5241 -7.7389 0 0 1 + 120 3 1 -6.9535 -0.0280 -7.5954 0 0 1 + 121 4 2 -2.5059 -5.6993 -1.2716 0 0 0 + 122 4 2 -2.3664 -6.0973 -0.4090 0 0 0 + 123 4 2 -1.4970 -6.5861 -0.2642 0 0 0 + 124 4 2 -0.7174 -6.9509 0.1025 0 0 0 + 125 4 2 0.0817 -7.5289 0.0050 0 0 0 + 126 4 2 0.2275 -6.6250 0.4168 0 0 0 + 127 4 2 0.3005 -5.7404 0.8929 0 0 0 + 128 4 2 -0.1107 -6.3155 1.6182 0 0 0 + 129 4 2 -0.8772 -6.4103 1.1087 0 0 0 + 130 4 2 -0.7684 -5.4467 1.0151 0 0 0 + 131 4 2 -0.4349 -4.5241 0.9512 0 0 0 + 132 4 2 -0.1952 -4.0553 0.1461 0 0 0 + 133 4 2 -0.4295 -3.9024 -0.7809 0 0 0 + 134 4 2 -1.1228 -4.4615 -0.3919 0 0 0 + 135 4 2 -1.0690 -5.3817 -0.8239 0 0 0 + 136 4 2 -1.5786 -5.9305 -1.4779 0 0 0 + 137 4 2 -0.9972 -6.6286 -1.8603 0 0 0 + 138 4 2 -0.9811 -6.3735 -2.7604 0 0 0 + 139 4 2 -1.7257 -5.9456 -3.2078 0 0 0 + 140 4 2 -2.5744 -5.4172 -3.2036 0 0 0 + 141 4 2 -3.2106 -4.8160 -2.8782 0 0 0 + 142 4 2 -3.9261 -4.7724 -3.4799 0 0 0 + 143 4 2 -3.9331 -5.6655 -3.1279 0 0 0 + 144 4 2 -3.6121 -6.5065 -3.5012 0 0 0 + 145 4 2 -3.5359 -7.4241 -3.3480 0 0 0 + 146 4 2 -4.4247 -7.8027 -3.5339 0 0 0 + 147 4 2 -4.3956 -8.1393 -4.4395 0 0 0 + 148 4 2 -4.5835 -7.7408 -5.2598 0 0 0 + 149 4 2 -3.6430 -8.0019 -5.3640 0 0 0 + 150 4 2 -3.1537 -7.8070 -4.5653 0 0 0 + 151 4 2 -2.5874 -7.4266 -3.8996 0 0 0 + 152 4 2 -2.1033 -6.5176 -4.0259 0 0 0 + 153 4 2 -2.2477 -5.6546 -4.1995 0 0 0 + 154 4 2 -2.0494 -4.6562 -4.0474 0 0 0 + 155 4 2 -1.5988 -4.1080 -4.6447 0 0 0 + 156 4 2 -1.4496 -3.3936 -5.1841 0 0 0 + 157 4 2 -1.2606 -2.4357 -5.3465 0 0 0 + 158 4 2 -0.9591 -1.9438 -4.5710 0 0 0 + 159 4 2 -0.4858 -1.2616 -4.1253 0 0 0 + 160 4 2 0.4164 -1.0237 -4.1183 0 0 0 + 161 5 1 -0.1440 7.2364 -5.7227 0 0 0 + 162 5 1 0.6558 6.9783 -6.1262 0 0 0 + 163 5 1 1.1111 6.1343 -5.9811 0 0 0 + 164 5 1 1.0226 5.7997 -5.1022 0 0 0 + 165 5 1 0.3941 6.3700 -4.6712 0 0 0 + 166 5 1 1.1217 6.9317 -4.9989 0 0 0 + 167 5 1 0.7755 7.7592 -5.3428 0 0 0 + 168 5 1 0.6448 -7.7669 -5.7142 0 1 0 + 169 5 1 0.1854 -7.1895 -6.2835 0 1 0 + 170 5 1 -0.5676 -7.4706 -6.8027 0 1 0 + 171 5 1 -1.1520 -7.8542 -7.5021 0 1 0 + 172 5 1 -1.9454 -7.4317 -7.4158 0 1 0 + 173 5 1 -2.8468 -7.2151 -7.2658 0 1 0 + 174 5 1 -3.5842 -6.8908 -7.8260 0 1 0 + 175 5 1 -3.5508 -7.0063 7.6241 0 1 -1 + 176 5 1 -2.9756 -7.7201 7.8585 0 1 -1 + 177 5 1 -2.0394 -7.8230 8.1039 0 1 -1 + 178 5 1 -1.3274 -7.1897 8.1174 0 1 -1 + 179 5 1 -0.9807 -6.6449 -7.5431 0 1 0 + 180 5 1 -0.9238 -5.6903 -7.3638 0 1 0 + 181 5 1 -0.8741 -4.9265 -6.6813 0 1 0 + 182 5 1 -0.0949 -5.5199 -6.3670 0 1 0 + 183 5 1 -0.2778 -4.8656 -5.7369 0 1 0 + 184 5 1 -0.6919 -4.5164 -5.0108 0 1 0 + 185 5 1 -0.4891 -3.6504 -4.7370 0 1 0 + 186 5 1 0.3406 -3.7766 -5.2321 0 1 0 + 187 5 1 -0.3353 -3.7202 -5.9210 0 1 0 + 188 5 1 0.2085 -3.0043 -6.3445 0 1 0 + 189 5 1 0.5040 -3.2604 -7.2279 0 1 0 + 190 5 1 1.2968 -2.8872 -6.9492 0 1 0 + 191 5 1 2.1808 -2.5142 -6.8257 0 1 0 + 192 5 1 1.9266 -1.6274 -7.1142 0 1 0 + 193 5 1 2.7913 -1.2579 -6.6547 0 1 0 + 194 5 1 3.3329 -0.8061 -6.0178 0 1 0 + 195 5 1 4.0946 -0.2082 -5.7371 0 1 0 + 196 5 1 4.8297 -0.5360 -6.2362 0 1 0 + 197 5 1 5.4864 -0.1385 -6.8564 0 1 0 + 198 5 1 5.5430 -0.1071 -7.8622 0 1 0 + 199 5 1 4.7464 0.3372 -7.5507 0 1 0 + 200 5 1 4.0768 0.4963 -6.8595 0 1 0 + 201 6 2 -7.5650 1.5000 1.2413 0 0 0 + 202 6 2 -8.0473 0.8479 0.7081 0 0 0 + 203 6 2 -7.9777 0.9662 -0.2078 0 0 0 + 204 6 2 8.0672 0.6049 -1.0508 -1 0 0 + 205 6 2 7.3706 0.0109 -0.7142 -1 0 0 + 206 6 2 6.5245 0.4155 -0.8480 -1 0 0 + 207 6 2 6.3281 1.3903 -0.7213 -1 0 0 + 208 6 2 7.2457 1.3462 -0.7141 -1 0 0 + 209 6 2 8.0101 1.8416 -0.6149 -1 0 0 + 210 6 2 8.0231 2.8577 -0.6369 -1 0 0 + 211 6 2 7.4977 2.7380 0.1246 -1 0 0 + 212 6 2 6.6911 2.2612 -0.1411 -1 0 0 + 213 6 2 5.7458 2.2789 0.0148 -1 0 0 + 214 6 2 5.2222 2.6041 0.7804 -1 0 0 + 215 6 2 4.3216 2.8995 0.5944 -1 0 0 + 216 6 2 4.2944 3.6961 1.0411 -1 0 0 + 217 6 2 4.5201 3.1454 1.7328 -1 0 0 + 218 6 2 4.6989 2.8044 2.6264 -1 0 0 + 219 6 2 5.3639 2.6169 3.2121 -1 0 0 + 220 6 2 5.4309 2.2501 4.1225 -1 0 0 + 221 6 2 5.4368 2.0364 5.0152 -1 0 0 + 222 6 2 6.1506 2.3692 5.6603 -1 0 0 + 223 6 2 6.1296 1.7133 6.3910 -1 0 0 + 224 6 2 6.9172 1.1740 6.2003 -1 0 0 + 225 6 2 7.0855 1.9468 5.6814 -1 0 0 + 226 6 2 7.1305 2.6951 4.9985 -1 0 0 + 227 6 2 6.4025 3.1032 4.5315 -1 0 0 + 228 6 2 5.4882 3.3255 4.2646 -1 0 0 + 229 6 2 4.5483 3.2340 4.2192 -1 0 0 + 230 6 2 4.1767 2.3631 4.1633 -1 0 0 + 231 6 2 4.4256 2.2482 5.0824 -1 0 0 + 232 6 2 5.0453 2.8611 5.4213 -1 0 0 + 233 6 2 4.4123 2.8712 6.0804 -1 0 0 + 234 6 2 4.5083 2.6907 7.0185 -1 0 0 + 235 6 2 4.1319 2.0459 7.6273 -1 0 0 + 236 6 2 4.5832 1.2833 7.3126 -1 0 0 + 237 6 2 5.0233 0.4519 7.3297 -1 0 0 + 238 6 2 4.9562 -0.3351 7.7829 -1 0 0 + 239 6 2 4.7810 -0.8429 6.9451 -1 0 0 + 240 6 2 5.3913 -1.4885 6.4549 -1 0 0 + 241 7 1 6.9722 -5.8488 -6.6715 0 0 0 + 242 7 1 7.8812 -6.1989 -6.5964 0 0 0 + 243 7 1 -7.9971 -6.9093 -6.9504 1 0 0 + 244 7 1 -7.5043 -6.9853 -7.7710 1 0 0 + 245 7 1 -7.3887 -7.1313 7.6754 1 0 -1 + 246 7 1 -7.0229 -7.9617 7.5892 1 0 -1 + 247 7 1 -7.8696 -8.0413 8.0866 1 0 -1 + 248 7 1 8.0445 7.6146 -8.1240 0 -1 0 + 249 7 1 7.0492 7.5183 8.0777 0 -1 -1 + 250 7 1 6.4798 7.0077 7.5573 0 -1 -1 + 251 7 1 6.1121 6.2934 7.0757 0 -1 -1 + 252 7 1 6.9712 6.2966 6.5677 0 -1 -1 + 253 7 1 6.9671 6.8706 5.7955 0 -1 -1 + 254 7 1 6.2166 7.1106 5.2161 0 -1 -1 + 255 7 1 5.3877 7.3516 5.6560 0 -1 -1 + 256 7 1 4.4705 7.0498 5.7885 0 -1 -1 + 257 7 1 3.6793 6.4541 5.8203 0 -1 -1 + 258 7 1 2.9979 6.7208 6.3953 0 -1 -1 + 259 7 1 2.4461 7.2693 6.9529 0 -1 -1 + 260 7 1 1.6527 7.0183 7.4950 0 -1 -1 + 261 7 1 2.4785 6.7848 7.9499 0 -1 -1 + 262 7 1 2.5174 7.7035 7.7858 0 -1 -1 + 263 7 1 1.8603 -7.9891 7.6609 0 0 -1 + 264 7 1 1.3688 7.8734 7.0278 0 -1 -1 + 265 7 1 1.4531 7.0626 6.4638 0 -1 -1 + 266 7 1 1.8344 6.6254 5.7071 0 -1 -1 + 267 7 1 2.7215 6.8419 5.3543 0 -1 -1 + 268 7 1 2.4085 7.3839 4.6329 0 -1 -1 + 269 7 1 1.5024 7.5277 4.3413 0 -1 -1 + 270 7 1 0.7070 6.9936 4.5543 0 -1 -1 + 271 7 1 0.3946 7.8772 4.7528 0 -1 -1 + 272 7 1 -0.3419 -8.1238 5.2184 0 0 -1 + 273 7 1 -0.2883 7.3723 5.4801 0 -1 -1 + 274 7 1 -0.3893 6.4642 5.1932 0 -1 -1 + 275 7 1 -1.3141 6.4405 5.2721 0 -1 -1 + 276 7 1 -1.1979 6.7879 6.2024 0 -1 -1 + 277 7 1 -1.2658 7.0109 7.1159 0 -1 -1 + 278 7 1 -1.9462 6.8161 7.8205 0 -1 -1 + 279 7 1 -2.8224 6.4567 7.8971 0 -1 -1 + 280 7 1 -3.2919 7.0336 -7.9544 0 -1 0 + 281 8 2 5.2796 -6.5812 -5.4085 0 0 0 + 282 8 2 4.7163 -6.7833 -4.5681 0 0 0 + 283 8 2 4.4060 -5.9174 -4.2984 0 0 0 + 284 8 2 3.5099 -5.7204 -4.4373 0 0 0 + 285 8 2 2.9851 -6.1663 -5.1381 0 0 0 + 286 8 2 3.1889 -7.0146 -4.7250 0 0 0 + 287 8 2 3.8547 -7.1451 -5.3837 0 0 0 + 288 8 2 4.5242 -7.1185 -6.0551 0 0 0 + 289 8 2 5.1681 -6.6532 -6.5325 0 0 0 + 290 8 2 5.9050 -7.1959 -6.3571 0 0 0 + 291 8 2 6.3040 -7.0069 -5.5110 0 0 0 + 292 8 2 6.8515 -6.9124 -4.7697 0 0 0 + 293 8 2 7.3534 -7.7221 -4.8654 0 0 0 + 294 8 2 8.2082 -8.0084 -4.4692 0 0 0 + 295 8 2 -7.5403 -7.8024 -3.8292 1 0 0 + 296 8 2 -7.4014 -7.7313 -2.9290 1 0 0 + 297 8 2 -7.6476 7.7892 -2.8196 1 -1 0 + 298 8 2 8.0534 7.9926 -3.3742 0 -1 0 + 299 8 2 7.2509 -8.1619 -3.8214 0 0 0 + 300 8 2 6.4546 -8.1818 -4.4556 0 0 0 + 301 8 2 5.5531 -8.0801 -4.1505 0 0 0 + 302 8 2 5.2333 -7.2360 -3.8559 0 0 0 + 303 8 2 5.1755 -7.1027 -2.9131 0 0 0 + 304 8 2 4.3003 -6.7047 -2.8807 0 0 0 + 305 8 2 3.9516 -5.8846 -2.3769 0 0 0 + 306 8 2 3.9923 -5.3884 -1.6100 0 0 0 + 307 8 2 3.2342 -4.8484 -1.4445 0 0 0 + 308 8 2 4.0318 -4.2970 -1.3989 0 0 0 + 309 8 2 4.9095 -4.6881 -1.2571 0 0 0 + 310 8 2 5.5017 -5.4254 -1.2630 0 0 0 + 311 8 2 4.7428 -5.5289 -0.6837 0 0 0 + 312 8 2 3.8827 -5.1141 -0.6030 0 0 0 + 313 8 2 3.1842 -5.6936 -1.0026 0 0 0 + 314 8 2 3.9261 -6.3038 -0.7947 0 0 0 + 315 8 2 4.1325 -6.5477 0.1181 0 0 0 + 316 8 2 4.2381 -5.6449 0.2877 0 0 0 + 317 8 2 5.0593 -6.1096 0.2201 0 0 0 + 318 8 2 5.6677 -6.6746 0.6816 0 0 0 + 319 8 2 4.9862 -6.5959 1.3351 0 0 0 + 320 8 2 4.9665 -5.7010 1.4799 0 0 0 + 321 9 1 -0.0477 -5.0097 -0.6713 0 0 0 + 322 9 1 -0.4859 -5.4641 0.0181 0 0 0 + 323 9 1 -1.4214 -5.4887 0.2290 0 0 0 + 324 9 1 -2.2031 -5.9645 0.5101 0 0 0 + 325 9 1 -1.6950 -6.7547 0.7017 0 0 0 + 326 9 1 -1.5128 -7.7264 0.6779 0 0 0 + 327 9 1 -2.2943 8.1128 0.6711 0 -1 0 + 328 9 1 -2.1247 7.2537 0.9948 0 -1 0 + 329 9 1 -2.0090 7.1285 1.9188 0 -1 0 + 330 9 1 -2.7040 6.4552 2.2441 0 -1 0 + 331 9 1 -3.3591 5.8222 2.0699 0 -1 0 + 332 9 1 -4.2589 5.6786 1.8880 0 -1 0 + 333 9 1 -4.9586 5.0590 2.2008 0 -1 0 + 334 9 1 -5.7800 4.7283 2.5296 0 -1 0 + 335 9 1 -6.5251 4.3990 2.9885 0 -1 0 + 336 9 1 -6.7508 5.1313 2.3841 0 -1 0 + 337 9 1 -7.2547 5.2164 1.5653 0 -1 0 + 338 9 1 -6.6673 4.9299 0.8489 0 -1 0 + 339 9 1 -6.1782 4.5312 0.0976 0 -1 0 + 340 9 1 -6.4905 3.8038 0.5989 0 -1 0 + 341 9 1 -6.9662 3.0683 0.9096 0 -1 0 + 342 9 1 -7.8375 3.4309 0.8570 0 -1 0 + 343 9 1 8.1320 2.6404 1.1856 -1 -1 0 + 344 9 1 7.4973 3.3543 1.0767 -1 -1 0 + 345 9 1 6.7109 3.6993 0.7816 -1 -1 0 + 346 9 1 5.8361 4.0432 0.6811 -1 -1 0 + 347 9 1 5.0958 3.6472 0.2477 -1 -1 0 + 348 9 1 5.1428 3.1030 -0.6290 -1 -1 0 + 349 9 1 5.2138 3.8702 -1.1747 -1 -1 0 + 350 9 1 5.2915 4.7014 -1.5387 -1 -1 0 + 351 9 1 4.8757 5.6615 -1.4683 -1 -1 0 + 352 9 1 5.2443 5.4902 -0.5578 -1 -1 0 + 353 9 1 5.0383 5.8271 0.2975 -1 -1 0 + 354 9 1 4.5934 6.2090 1.0805 -1 -1 0 + 355 9 1 3.6988 6.0628 0.7137 -1 -1 0 + 356 9 1 3.6193 6.1897 1.6088 -1 -1 0 + 357 9 1 3.4358 6.3119 2.5794 -1 -1 0 + 358 9 1 2.6134 5.8276 2.4014 -1 -1 0 + 359 9 1 2.4782 4.8298 2.2485 -1 -1 0 + 360 9 1 1.8223 4.5893 1.5448 -1 -1 0 + 361 10 2 5.7461 -7.3903 -7.3881 0 0 0 + 362 10 2 5.7162 -6.7772 -8.0634 0 0 0 + 363 10 2 5.5090 -5.8469 7.9991 0 0 -1 + 364 10 2 4.9486 -5.6862 7.2370 0 0 -1 + 365 10 2 4.6357 -5.1502 6.5498 0 0 -1 + 366 10 2 4.4760 -4.1344 6.4437 0 0 -1 + 367 10 2 4.3972 -4.6535 5.5958 0 0 -1 + 368 10 2 4.9731 -4.9407 4.8989 0 0 -1 + 369 10 2 4.4981 -5.6377 4.4320 0 0 -1 + 370 10 2 4.1161 -6.3673 3.9374 0 0 -1 + 371 10 2 4.0949 -7.3325 4.1672 0 0 -1 + 372 10 2 3.6259 -6.9234 4.9133 0 0 -1 + 373 10 2 4.5214 -6.6310 5.0224 0 0 -1 + 374 10 2 5.2391 -6.5934 4.2920 0 0 -1 + 375 10 2 5.2455 -7.4252 3.9171 0 0 -1 + 376 10 2 5.8529 -7.9758 3.4127 0 0 -1 + 377 10 2 6.6095 7.8674 3.4886 0 -1 -1 + 378 10 2 7.0572 -7.8980 4.2005 0 0 -1 + 379 10 2 7.6610 -7.7794 3.4514 0 0 -1 + 380 10 2 -7.9207 8.1954 3.1231 1 -1 -1 + 381 10 2 -7.6302 -7.8899 2.2614 1 0 -1 + 382 10 2 -6.9896 -7.3037 1.8109 1 0 -1 + 383 10 2 -7.6860 -6.7972 2.2555 1 0 -1 + 384 10 2 -7.8960 -7.0864 3.1097 1 0 -1 + 385 10 2 -7.7775 -6.3129 3.7419 1 0 -1 + 386 10 2 -7.1576 -5.6685 4.1818 1 0 -1 + 387 10 2 -6.7994 -4.8602 4.4295 1 0 -1 + 388 10 2 -6.0057 -4.5435 4.7475 1 0 -1 + 389 10 2 -5.2609 -4.5769 4.1675 1 0 -1 + 390 10 2 -5.0571 -5.0645 3.3283 1 0 -1 + 391 10 2 -5.4671 -5.9421 3.3306 1 0 -1 + 392 10 2 -5.2633 -6.7774 2.8865 1 0 -1 + 393 10 2 -5.0660 -7.2960 2.0849 1 0 -1 + 394 10 2 -4.9879 8.1988 2.3095 1 -1 -1 + 395 10 2 -4.9648 7.2637 2.0874 1 -1 -1 + 396 10 2 -5.0343 6.3443 1.9623 1 -1 -1 + 397 10 2 -5.6366 6.7240 1.2974 1 -1 -1 + 398 10 2 -5.5589 6.7686 0.3687 1 -1 -1 + 399 10 2 -4.7381 6.2525 0.4268 1 -1 -1 + 400 10 2 -3.8238 6.2399 0.8094 1 -1 -1 + 401 11 1 4.8337 -6.9620 6.0701 0 0 0 + 402 11 1 4.9682 -7.8687 5.8710 0 0 0 + 403 11 1 5.1201 7.9035 6.5376 0 -1 0 + 404 11 1 5.8985 7.3266 6.7467 0 -1 0 + 405 11 1 6.4363 8.0277 7.1194 0 -1 0 + 406 11 1 7.1418 7.5188 6.6213 0 -1 0 + 407 11 1 6.6665 7.8088 5.8309 0 -1 0 + 408 11 1 6.3115 -7.9020 5.3080 0 0 0 + 409 11 1 5.6408 -7.2855 4.9299 0 0 0 + 410 11 1 4.8457 -7.8486 4.8295 0 0 0 + 411 11 1 4.4990 7.6371 4.6862 0 -1 0 + 412 11 1 3.6175 7.4169 4.8332 0 -1 0 + 413 11 1 3.7506 7.9127 5.6417 0 -1 0 + 414 11 1 3.7883 7.4426 6.5018 0 -1 0 + 415 11 1 4.1095 -8.1215 6.5892 0 0 0 + 416 11 1 3.8558 -7.4196 5.9769 0 0 0 + 417 11 1 3.1326 -7.2501 6.5570 0 0 0 + 418 11 1 2.8995 -8.1320 6.2067 0 0 0 + 419 11 1 2.3160 7.5976 5.8834 0 -1 0 + 420 11 1 1.4822 7.7037 5.3906 0 -1 0 + 421 11 1 0.6840 7.1953 5.6118 0 -1 0 + 422 11 1 0.5910 8.0868 5.9678 0 -1 0 + 423 11 1 -0.0709 -7.7813 6.3154 0 0 0 + 424 11 1 -0.5510 -7.4558 7.1140 0 0 0 + 425 11 1 -1.2303 -8.0777 7.4053 0 0 0 + 426 11 1 -2.0710 8.0375 7.2003 0 -1 0 + 427 11 1 -2.7494 7.4079 7.4776 0 -1 0 + 428 11 1 -3.5682 7.8395 7.6497 0 -1 0 + 429 11 1 -4.1296 -7.7807 7.7261 0 0 0 + 430 11 1 -3.7905 -7.8746 6.8338 0 0 0 + 431 11 1 -3.2207 7.8096 6.6330 0 -1 0 + 432 11 1 -3.3161 6.8891 6.2763 0 -1 0 + 433 11 1 -3.8344 6.1397 6.6664 0 -1 0 + 434 11 1 -3.4342 5.5022 6.0708 0 -1 0 + 435 11 1 -3.7669 4.8398 6.6222 0 -1 0 + 436 11 1 -4.2915 4.6582 5.9002 0 -1 0 + 437 11 1 -5.0737 4.9969 5.4288 0 -1 0 + 438 11 1 -5.5673 5.0779 4.6087 0 -1 0 + 439 11 1 -5.1845 5.9038 4.8997 0 -1 0 + 440 11 1 -4.2460 5.7952 4.9872 0 -1 0 + 441 12 2 -5.8484 6.5244 3.9637 0 0 0 + 442 12 2 -5.8487 5.5949 3.5625 0 0 0 + 443 12 2 -6.4822 4.8961 3.9423 0 0 0 + 444 12 2 -5.6401 4.5007 3.6756 0 0 0 + 445 12 2 -5.2342 3.9247 3.0098 0 0 0 + 446 12 2 -5.3675 3.4942 3.8258 0 0 0 + 447 12 2 -5.6043 3.0865 4.6483 0 0 0 + 448 12 2 -6.1308 2.3274 4.6564 0 0 0 + 449 12 2 -6.8222 2.2662 4.0488 0 0 0 + 450 12 2 -7.4447 2.0088 3.3879 0 0 0 + 451 12 2 -8.0726 1.8201 4.0400 0 0 0 + 452 12 2 7.4996 1.4924 3.7553 -1 0 0 + 453 12 2 6.9905 0.8666 3.3206 -1 0 0 + 454 12 2 6.7091 -0.0328 3.0518 -1 0 0 + 455 12 2 7.3154 -0.8154 2.8325 -1 0 0 + 456 12 2 7.5483 -0.0009 2.3035 -1 0 0 + 457 12 2 7.9145 0.8716 2.3943 -1 0 0 + 458 12 2 -7.7586 0.5406 1.8865 0 0 0 + 459 12 2 -7.0387 0.0467 2.3366 0 0 0 + 460 12 2 -6.3499 0.7028 2.6841 0 0 0 + 461 12 2 -5.7714 1.4854 2.6503 0 0 0 + 462 12 2 -6.5295 1.5130 3.2747 0 0 0 + 463 12 2 -7.1685 1.1460 3.7989 0 0 0 + 464 12 2 -7.8567 0.6498 4.2531 0 0 0 + 465 12 2 -7.9221 1.2778 4.9560 0 0 0 + 466 12 2 7.6912 1.7098 4.8771 -1 0 0 + 467 12 2 6.9543 1.1102 5.0877 -1 0 0 + 468 12 2 5.9849 1.2570 5.2015 -1 0 0 + 469 12 2 5.6691 1.0844 4.3112 -1 0 0 + 470 12 2 5.4974 0.2660 3.7942 -1 0 0 + 471 12 2 5.1024 0.1347 4.7027 -1 0 0 + 472 12 2 5.7992 0.0595 5.4303 -1 0 0 + 473 12 2 6.5115 0.0897 6.0602 -1 0 0 + 474 12 2 7.4204 0.3003 6.0354 -1 0 0 + 475 12 2 7.9608 1.1020 5.9662 -1 0 0 + 476 12 2 -8.1652 2.0120 5.7790 0 0 0 + 477 12 2 -8.0498 2.4218 6.6768 0 0 0 + 478 12 2 -7.8681 2.4292 7.6013 0 0 0 + 479 12 2 7.6795 2.1065 7.6815 -1 0 0 + 480 12 2 7.2229 1.9105 -7.8671 -1 0 1 + 481 13 1 1.0973 2.9125 6.1625 0 0 0 + 482 13 1 0.3697 3.4964 5.9423 0 0 0 + 483 13 1 -0.1709 3.1267 6.6195 0 0 0 + 484 13 1 -0.3678 2.6757 7.3771 0 0 0 + 485 13 1 -0.5737 3.2283 8.1647 0 0 0 + 486 13 1 -1.1554 3.4641 -7.5638 0 0 1 + 487 13 1 -1.3187 3.4857 -6.6652 0 0 1 + 488 13 1 -1.1266 4.4785 -6.6960 0 0 1 + 489 13 1 -0.3638 5.1346 -6.6223 0 0 1 + 490 13 1 -0.1713 6.1254 -6.7920 0 0 1 + 491 13 1 -0.8710 6.5105 -6.3009 0 0 1 + 492 13 1 -1.1518 5.5650 -6.2760 0 0 1 + 493 13 1 -1.7167 4.8934 -5.7901 0 0 1 + 494 13 1 -1.4351 4.0059 -5.7680 0 0 1 + 495 13 1 -0.7079 4.5983 -5.5108 0 0 1 + 496 13 1 -0.3839 4.2817 -4.6177 0 0 1 + 497 13 1 0.4411 4.4517 -5.0176 0 0 1 + 498 13 1 1.3933 4.1570 -5.1987 0 0 1 + 499 13 1 2.1204 3.5739 -4.8923 0 0 1 + 500 13 1 1.3976 3.1355 -4.4244 0 0 1 + 501 13 1 1.3007 3.0131 -3.4836 0 0 1 + 502 13 1 1.1550 3.6151 -2.7742 0 0 1 + 503 13 1 0.5820 4.3044 -2.4456 0 0 1 + 504 13 1 0.1725 3.5112 -2.6491 0 0 1 + 505 13 1 0.0990 3.2731 -1.7118 0 0 1 + 506 13 1 -0.4402 3.3384 -0.8844 0 0 1 + 507 13 1 -0.6404 2.7813 -0.0600 0 0 1 + 508 13 1 -1.2569 2.0987 0.1336 0 0 1 + 509 13 1 -1.7181 1.9476 1.0005 0 0 1 + 510 13 1 -1.6776 1.5301 1.9021 0 0 1 + 511 13 1 -1.4481 1.2372 2.7652 0 0 1 + 512 13 1 -2.3702 1.3284 2.6504 0 0 1 + 513 13 1 -2.1835 0.4671 2.8992 0 0 1 + 514 13 1 -2.7565 0.0045 3.4115 0 0 1 + 515 13 1 -3.0749 0.8943 3.7357 0 0 1 + 516 13 1 -2.7849 1.1853 4.6243 0 0 1 + 517 13 1 -2.7370 1.9636 4.0718 0 0 1 + 518 13 1 -3.5769 2.4239 3.9072 0 0 1 + 519 13 1 -3.3747 2.0748 3.0087 0 0 1 + 520 13 1 -3.5213 1.6890 2.1158 0 0 1 + 521 14 2 7.6114 5.8083 5.8449 0 0 0 + 522 14 2 7.8523 6.5659 5.3424 0 0 0 + 523 14 2 8.0432 7.2417 4.5713 0 0 0 + 524 14 2 8.1189 8.1157 4.4329 0 0 0 + 525 14 2 -8.1729 -7.3163 4.3630 1 1 0 + 526 14 2 7.6838 -6.5122 4.1384 0 1 0 + 527 14 2 6.8835 -5.9709 4.4301 0 1 0 + 528 14 2 7.6173 -5.3672 4.3733 0 1 0 + 529 14 2 7.7332 -4.4758 4.7062 0 1 0 + 530 14 2 7.1326 -4.4350 5.4597 0 1 0 + 531 14 2 7.6310 -4.1626 6.2104 0 1 0 + 532 14 2 7.5251 -3.3406 6.7675 0 1 0 + 533 14 2 8.1044 -3.9014 7.2624 0 1 0 + 534 14 2 -7.6445 -4.3274 6.8077 1 1 0 + 535 14 2 -7.0496 -3.9161 6.1748 1 1 0 + 536 14 2 -6.7171 -3.0766 5.8328 1 1 0 + 537 14 2 -6.2443 -2.8292 5.0518 1 1 0 + 538 14 2 -6.7010 -3.6472 4.9121 1 1 0 + 539 14 2 -7.6019 -4.0978 5.1610 1 1 0 + 540 14 2 -8.1943 -3.6980 4.4486 1 1 0 + 541 14 2 7.5932 -3.7149 3.7656 0 1 0 + 542 14 2 8.1715 -3.9696 3.0770 0 1 0 + 543 14 2 7.8639 -4.6792 2.4992 0 1 0 + 544 14 2 7.6522 -5.4994 2.0510 0 1 0 + 545 14 2 6.7114 -5.4918 1.8854 0 1 0 + 546 14 2 6.3951 -6.1809 2.5320 0 1 0 + 547 14 2 6.7093 -7.0452 2.6000 0 1 0 + 548 14 2 7.0458 -6.4701 3.2679 0 1 0 + 549 14 2 7.7904 -5.8879 3.2194 0 1 0 + 550 14 2 -7.8574 -5.4241 2.8625 1 1 0 + 551 14 2 -7.4268 -5.4038 2.0228 1 1 0 + 552 14 2 -8.0600 -4.8823 1.4668 1 1 0 + 553 14 2 8.1552 -4.3100 0.6879 0 1 0 + 554 14 2 -7.5782 -4.4439 0.0462 1 1 0 + 555 14 2 -6.8662 -4.0630 -0.5520 1 1 0 + 556 14 2 -5.9019 -4.1648 -0.7090 1 1 0 + 557 14 2 -5.0850 -4.5447 -0.4591 1 1 0 + 558 14 2 -4.7646 -4.1471 0.3220 1 1 0 + 559 14 2 -4.4375 -3.8642 1.1705 1 1 0 + 560 14 2 -4.3949 -3.0706 0.6091 1 1 0 + 561 15 1 7.5417 6.4700 -5.1128 0 0 0 + 562 15 1 7.1276 5.7514 -5.6548 0 0 0 + 563 15 1 6.6466 5.7916 -6.4477 0 0 0 + 564 15 1 6.8481 5.8052 -7.3350 0 0 0 + 565 15 1 7.6306 5.9654 -6.8514 0 0 0 + 566 15 1 7.7546 5.0419 -6.4904 0 0 0 + 567 15 1 6.9470 4.5876 -6.3646 0 0 0 + 568 15 1 7.0514 3.7873 -5.8493 0 0 0 + 569 15 1 7.6999 4.3822 -5.4678 0 0 0 + 570 15 1 7.0618 4.9397 -4.9774 0 0 0 + 571 15 1 6.1505 5.2596 -4.8627 0 0 0 + 572 15 1 6.1776 5.1439 -3.9339 0 0 0 + 573 15 1 6.1759 5.9589 -3.4691 0 0 0 + 574 15 1 5.3047 6.2266 -3.2354 0 0 0 + 575 15 1 5.1197 5.4670 -3.7374 0 0 0 + 576 15 1 4.3628 4.9571 -3.3748 0 0 0 + 577 15 1 3.7180 4.8390 -2.6665 0 0 0 + 578 15 1 3.9548 5.2224 -1.8277 0 0 0 + 579 15 1 3.1376 4.8378 -1.4028 0 0 0 + 580 15 1 3.6086 4.3042 -0.7538 0 0 0 + 581 15 1 4.5145 4.2571 -0.4370 0 0 0 + 582 15 1 5.4024 4.5369 -0.2958 0 0 0 + 583 15 1 6.3151 4.8302 -0.4557 0 0 0 + 584 15 1 6.3252 5.7055 -0.6053 0 0 0 + 585 15 1 6.4573 6.1456 -1.4466 0 0 0 + 586 15 1 6.7317 6.0993 -2.3577 0 0 0 + 587 15 1 7.0679 6.4129 -3.2264 0 0 0 + 588 15 1 7.8341 5.9446 -3.4828 0 0 0 + 589 15 1 -7.9263 6.2702 -4.1106 1 0 0 + 590 15 1 -7.7240 7.1816 -4.1457 1 0 0 + 591 15 1 -6.9079 7.6316 -3.7762 1 0 0 + 592 15 1 -6.6294 7.7307 -2.9007 1 0 0 + 593 15 1 -5.9367 7.6002 -2.2858 1 0 0 + 594 15 1 -6.2793 8.1412 -1.5785 1 0 0 + 595 15 1 -6.1123 8.0650 -0.6229 1 0 0 + 596 15 1 -5.5313 -7.9232 0.0863 1 1 0 + 597 15 1 -4.5991 -7.7417 0.0074 1 1 0 + 598 15 1 -3.8650 -7.0503 -0.0813 1 1 0 + 599 15 1 -3.4373 -7.4322 -0.8852 1 1 0 + 600 15 1 -3.4795 -6.5249 -1.1762 1 1 0 + 601 16 2 3.7736 6.8386 -2.3973 0 0 0 + 602 16 2 4.3819 7.2537 -3.0665 0 0 0 + 603 16 2 4.8131 7.0930 -3.9155 0 0 0 + 604 16 2 4.4876 7.9496 -3.9603 0 0 0 + 605 16 2 4.9795 -8.1730 -3.1972 0 1 0 + 606 16 2 5.6131 -8.0168 -2.4310 0 1 0 + 607 16 2 6.0848 -7.3507 -1.9840 0 1 0 + 608 16 2 6.3572 -6.4999 -1.6689 0 1 0 + 609 16 2 6.5143 -5.8001 -1.0237 0 1 0 + 610 16 2 6.9149 -5.1283 -0.5202 0 1 0 + 611 16 2 7.6020 -4.4646 -0.3965 0 1 0 + 612 16 2 7.8427 -3.6012 0.0056 0 1 0 + 613 16 2 8.1052 -2.7475 0.1468 0 1 0 + 614 16 2 -7.5046 -2.2773 -0.2341 1 1 0 + 615 16 2 -8.0922 -1.5595 -0.0543 1 1 0 + 616 16 2 -8.0797 -1.1284 0.8120 1 1 0 + 617 16 2 -7.9078 -0.1612 0.8338 1 1 0 + 618 16 2 -7.2564 -0.6152 0.4267 1 1 0 + 619 16 2 -6.9901 -1.4813 0.5777 1 1 0 + 620 16 2 -7.5499 -2.2351 0.8723 1 1 0 + 621 16 2 8.1379 -2.3707 1.4247 0 1 0 + 622 16 2 7.3800 -1.8112 1.2778 0 1 0 + 623 16 2 6.9180 -1.1503 1.7952 0 1 0 + 624 16 2 7.5396 -0.6083 1.2899 0 1 0 + 625 16 2 7.5787 0.3736 1.3129 0 1 0 + 626 16 2 7.5846 1.3497 1.4451 0 1 0 + 627 16 2 -8.1636 1.7607 2.0002 1 1 0 + 628 16 2 -7.4908 2.4255 1.9123 1 1 0 + 629 16 2 -7.2533 3.3477 1.9264 1 1 0 + 630 16 2 -6.8519 4.2401 1.8024 1 1 0 + 631 16 2 -5.9740 4.4386 1.4127 1 1 0 + 632 16 2 -5.1736 4.4783 0.8900 1 1 0 + 633 16 2 -5.0718 5.0711 0.0736 1 1 0 + 634 16 2 -5.3784 4.4186 -0.5794 1 1 0 + 635 16 2 -5.3691 3.6130 0.0104 1 1 0 + 636 16 2 -4.6994 3.4481 -0.6365 1 1 0 + 637 16 2 -4.2294 4.1905 -0.2483 1 1 0 + 638 16 2 -3.3558 4.1148 0.0136 1 1 0 + 639 16 2 -2.5460 4.4158 0.3900 1 1 0 + 640 16 2 -2.3109 4.3578 -0.5850 1 1 0 + 641 17 1 3.1366 5.0431 -6.0095 0 0 0 + 642 17 1 3.2755 5.3671 -6.8906 0 0 0 + 643 17 1 3.8518 5.6734 -7.5991 0 0 0 + 644 17 1 4.6874 5.9910 -7.8370 0 0 0 + 645 17 1 5.1948 5.8203 7.8380 0 0 -1 + 646 17 1 6.0855 5.5678 7.8261 0 0 -1 + 647 17 1 6.8230 6.1380 7.8826 0 0 -1 + 648 17 1 7.2785 6.6028 -7.7845 0 0 0 + 649 17 1 6.8169 6.7835 -6.9896 0 0 0 + 650 17 1 6.7870 7.6342 -7.2878 0 0 0 + 651 17 1 6.5688 -7.9511 -7.6952 0 1 0 + 652 17 1 6.6767 -7.2992 -6.9866 0 1 0 + 653 17 1 6.1454 -6.5065 -7.0267 0 1 0 + 654 17 1 6.1404 -6.1361 -6.1501 0 1 0 + 655 17 1 6.2549 -6.0296 -5.1562 0 1 0 + 656 17 1 6.7207 -5.1910 -5.3314 0 1 0 + 657 17 1 6.7689 -4.3675 -5.8303 0 1 0 + 658 17 1 7.1050 -3.5345 -6.0891 0 1 0 + 659 17 1 6.7582 -2.6598 -6.2195 0 1 0 + 660 17 1 6.2752 -2.4770 -5.3976 0 1 0 + 661 17 1 5.4318 -2.1504 -4.8697 0 1 0 + 662 17 1 4.5252 -2.1583 -4.6578 0 1 0 + 663 17 1 3.9849 -1.4480 -4.8970 0 1 0 + 664 17 1 3.1551 -1.5781 -5.3336 0 1 0 + 665 17 1 2.2662 -1.6855 -5.5881 0 1 0 + 666 17 1 1.3928 -2.0468 -5.6027 0 1 0 + 667 17 1 1.0392 -2.5586 -4.8882 0 1 0 + 668 17 1 1.2340 -1.6395 -4.6559 0 1 0 + 669 17 1 2.0306 -1.1280 -4.6919 0 1 0 + 670 17 1 1.3951 -0.9010 -5.3318 0 1 0 + 671 17 1 0.8736 -0.0538 -5.5333 0 1 0 + 672 17 1 0.4047 -0.2622 -6.3845 0 1 0 + 673 17 1 -0.0562 -0.0453 -7.2203 0 1 0 + 674 17 1 -0.4831 -0.5740 -7.8736 0 1 0 + 675 17 1 -1.4170 -0.7317 8.2068 0 1 -1 + 676 17 1 -2.2094 -1.2622 -8.0399 0 1 0 + 677 17 1 -1.9390 -2.0268 7.8343 0 1 -1 + 678 17 1 -1.6142 -2.8418 7.4471 0 1 -1 + 679 17 1 -2.4583 -3.1688 7.6052 0 1 -1 + 680 17 1 -3.3312 -3.1756 8.0978 0 1 -1 + 681 18 2 1.0749 -1.8638 -6.6368 0 0 0 + 682 18 2 1.6488 -1.0710 -6.2554 0 0 0 + 683 18 2 1.4408 -0.1686 -6.6018 0 0 0 + 684 18 2 2.0577 0.3102 -7.1758 0 0 0 + 685 18 2 1.9744 -0.6084 -7.5249 0 0 0 + 686 18 2 1.6291 -1.1046 8.1724 0 0 -1 + 687 18 2 1.4730 -1.7829 7.4979 0 0 -1 + 688 18 2 2.1546 -1.8411 6.7721 0 0 -1 + 689 18 2 2.4597 -2.0815 5.9092 0 0 -1 + 690 18 2 1.5039 -2.0241 5.7076 0 0 -1 + 691 18 2 2.0721 -1.6686 5.0198 0 0 -1 + 692 18 2 2.6427 -1.9727 4.3007 0 0 -1 + 693 18 2 2.6022 -1.7490 3.3210 0 0 -1 + 694 18 2 2.8153 -1.2290 2.5367 0 0 -1 + 695 18 2 3.5056 -1.8224 2.8570 0 0 -1 + 696 18 2 2.9039 -2.4362 2.3275 0 0 -1 + 697 18 2 2.1149 -1.8559 2.2740 0 0 -1 + 698 18 2 1.1614 -2.1236 2.3372 0 0 -1 + 699 18 2 0.5552 -2.8327 2.3627 0 0 -1 + 700 18 2 -0.1206 -3.4513 2.4262 0 0 -1 + 701 18 2 -0.6002 -4.1179 3.0006 0 0 -1 + 702 18 2 -0.2066 -4.7998 3.5217 0 0 -1 + 703 18 2 -0.3763 -5.1586 4.3607 0 0 -1 + 704 18 2 -0.7220 -5.3510 5.2358 0 0 -1 + 705 18 2 -1.3882 -5.9886 4.9018 0 0 -1 + 706 18 2 -0.8301 -6.3812 5.5243 0 0 -1 + 707 18 2 -0.6451 -6.8679 6.2632 0 0 -1 + 708 18 2 -1.0682 -6.5172 7.1211 0 0 -1 + 709 18 2 -1.9178 -6.1760 6.9377 0 0 -1 + 710 18 2 -2.8467 -6.5177 6.8205 0 0 -1 + 711 18 2 -2.8214 -7.4033 6.4533 0 0 -1 + 712 18 2 -2.5574 -8.1290 5.9328 0 0 -1 + 713 18 2 -2.0389 7.6139 6.2749 0 -1 -1 + 714 18 2 -1.1955 8.0023 6.2707 0 -1 -1 + 715 18 2 -0.4940 7.4768 6.5480 0 -1 -1 + 716 18 2 0.4453 7.1856 6.7050 0 -1 -1 + 717 18 2 -0.1902 6.7328 7.2500 0 -1 -1 + 718 18 2 -0.6221 6.1092 7.8019 0 -1 -1 + 719 18 2 -0.1261 5.5807 7.1773 0 -1 -1 + 720 18 2 -0.9684 5.9783 6.7751 0 -1 -1 + 721 19 1 -7.1773 -0.9209 -4.8594 0 0 0 + 722 19 1 -8.0110 -0.5053 -4.7943 0 0 0 + 723 19 1 7.5694 -0.7406 -4.2422 -1 0 0 + 724 19 1 6.8934 -1.2071 -3.8650 -1 0 0 + 725 19 1 6.0313 -1.2789 -3.4486 -1 0 0 + 726 19 1 5.1908 -1.0138 -3.1281 -1 0 0 + 727 19 1 4.2675 -0.8315 -2.9630 -1 0 0 + 728 19 1 3.3238 -1.0185 -2.7086 -1 0 0 + 729 19 1 2.7035 -1.5719 -2.2744 -1 0 0 + 730 19 1 2.8896 -2.4635 -2.5857 -1 0 0 + 731 19 1 2.0065 -2.7429 -2.7242 -1 0 0 + 732 19 1 1.0734 -2.4288 -2.7295 -1 0 0 + 733 19 1 1.2464 -2.8166 -1.8444 -1 0 0 + 734 19 1 0.9997 -3.3141 -1.1010 -1 0 0 + 735 19 1 0.8393 -3.2514 -0.1617 -1 0 0 + 736 19 1 1.4445 -2.6925 0.3697 -1 0 0 + 737 19 1 2.3413 -2.9780 0.3644 -1 0 0 + 738 19 1 3.1798 -3.5085 0.3274 -1 0 0 + 739 19 1 3.9689 -3.8965 -0.0130 -1 0 0 + 740 19 1 4.7067 -4.5166 -0.1942 -1 0 0 + 741 19 1 5.5657 -4.0327 -0.0381 -1 0 0 + 742 19 1 5.4435 -4.8960 0.3816 -1 0 0 + 743 19 1 6.0173 -5.4755 -0.0921 -1 0 0 + 744 19 1 6.8292 -5.9330 0.2068 -1 0 0 + 745 19 1 7.0498 -6.0208 1.0926 -1 0 0 + 746 19 1 7.3509 -6.4527 1.8805 -1 0 0 + 747 19 1 7.7355 -7.2132 2.3262 -1 0 0 + 748 19 1 -8.1196 -7.2973 1.5338 0 0 0 + 749 19 1 7.5697 -6.9682 0.9162 -1 0 0 + 750 19 1 6.6205 -6.9454 0.5950 -1 0 0 + 751 19 1 6.1341 -7.8362 0.7780 -1 0 0 + 752 19 1 5.4106 7.9902 0.7272 -1 -1 0 + 753 19 1 5.7939 8.0201 1.5886 -1 -1 0 + 754 19 1 6.4096 8.1103 2.3795 -1 -1 0 + 755 19 1 6.8595 -7.6339 1.8421 -1 0 0 + 756 19 1 6.9399 7.9194 1.2854 -1 -1 0 + 757 19 1 7.7195 -7.9513 1.1148 -1 0 0 + 758 19 1 8.1221 7.8870 1.6961 -1 -1 0 + 759 19 1 7.6128 7.8780 2.4552 -1 -1 0 + 760 19 1 7.6088 7.5013 3.3956 -1 -1 0 + 761 20 2 -4.7494 -3.6573 3.6288 0 0 0 + 762 20 2 -4.2385 -4.2837 4.0914 0 0 0 + 763 20 2 -3.9709 -4.1756 3.1396 0 0 0 + 764 20 2 -4.8327 -4.2923 2.7270 0 0 0 + 765 20 2 -5.7171 -3.9982 2.7118 0 0 0 + 766 20 2 -6.6136 -3.8618 3.2243 0 0 0 + 767 20 2 -7.3331 -4.5031 2.9399 0 0 0 + 768 20 2 -7.6397 -4.1706 2.1305 0 0 0 + 769 20 2 -8.2022 -3.4005 1.9069 0 0 0 + 770 20 2 -7.5928 -3.2488 1.2004 0 0 0 + 771 20 2 -7.4128 -3.2690 0.2635 0 0 0 + 772 20 2 -6.6116 -2.7520 0.3017 0 0 0 + 773 20 2 -6.3365 -3.1055 -0.5414 0 0 0 + 774 20 2 -7.1433 -2.9442 -1.0244 0 0 0 + 775 20 2 -7.7739 -3.5507 -0.6880 0 0 0 + 776 20 2 -7.7656 -4.4766 -0.9603 0 0 0 + 777 20 2 -7.5695 -5.3967 -1.0004 0 0 0 + 778 20 2 -8.1396 -6.1549 -0.9024 0 0 0 + 779 20 2 7.6482 -6.6181 -1.4730 -1 0 0 + 780 20 2 7.2995 -6.5792 -0.5384 -1 0 0 + 781 20 2 7.9840 -6.3045 0.0831 -1 0 0 + 782 20 2 8.1350 -5.7158 0.8352 -1 0 0 + 783 20 2 -7.3502 -5.3594 0.8513 0 0 0 + 784 20 2 -7.1612 -4.3980 1.0956 0 0 0 + 785 20 2 -6.6523 -3.8952 0.5432 0 0 0 + 786 20 2 -5.8277 -3.6044 0.3070 0 0 0 + 787 20 2 -5.1887 -3.3528 -0.3813 0 0 0 + 788 20 2 -5.5836 -2.6400 0.0960 0 0 0 + 789 20 2 -5.5610 -1.7193 0.1034 0 0 0 + 790 20 2 -4.7388 -1.2656 0.4934 0 0 0 + 791 20 2 -4.0140 -1.5555 -0.0166 0 0 0 + 792 20 2 -3.8426 -1.4465 -0.9656 0 0 0 + 793 20 2 -2.8598 -1.4028 -0.7622 0 0 0 + 794 20 2 -2.3964 -0.9771 0.0401 0 0 0 + 795 20 2 -1.7215 -0.6382 0.6724 0 0 0 + 796 20 2 -1.0742 -0.0959 0.2679 0 0 0 + 797 20 2 -0.3132 -0.5552 0.6005 0 0 0 + 798 20 2 0.5017 -0.4458 1.1317 0 0 0 + 799 20 2 0.2018 0.2068 1.7758 0 0 0 + 800 20 2 -0.5355 0.8688 2.0075 0 0 0 + 801 21 1 -6.1097 -2.4421 7.2897 0 0 0 + 802 21 1 -6.2181 -1.6433 7.8475 0 0 0 + 803 21 1 -6.5435 -1.3992 6.9769 0 0 0 + 804 21 1 -7.4150 -1.0802 7.3043 0 0 0 + 805 21 1 -7.6886 -0.7923 8.1906 0 0 0 + 806 21 1 7.9768 -0.0934 -8.1806 -1 0 1 + 807 21 1 7.0796 0.1537 8.0360 -1 0 0 + 808 21 1 7.4510 0.8061 -7.8243 -1 0 1 + 809 21 1 7.6687 0.7658 -6.9078 -1 0 1 + 810 21 1 7.3478 1.6610 -6.8480 -1 0 1 + 811 21 1 7.3239 2.6087 -6.9569 -1 0 1 + 812 21 1 8.0264 2.4696 -7.5780 -1 0 1 + 813 21 1 -7.6459 3.0322 -7.8603 0 0 1 + 814 21 1 -6.7083 2.9825 -7.8751 0 0 1 + 815 21 1 -6.1131 3.4360 -7.3597 0 0 1 + 816 21 1 -5.2314 3.3128 -6.9664 0 0 1 + 817 21 1 -5.1518 4.1997 -7.3776 0 0 1 + 818 21 1 -4.4764 4.6982 -7.7469 0 0 1 + 819 21 1 -4.3086 3.7153 -7.6514 0 0 1 + 820 21 1 -4.0253 2.7986 -7.2625 0 0 1 + 821 21 1 -3.7533 3.0747 -6.4244 0 0 1 + 822 21 1 -3.4409 3.3059 -5.4787 0 0 1 + 823 21 1 -3.4125 4.3296 -5.4664 0 0 1 + 824 21 1 -3.2568 5.2445 -5.7398 0 0 1 + 825 21 1 -2.6134 5.8485 -6.1414 0 0 1 + 826 21 1 -2.2049 5.8249 -7.0227 0 0 1 + 827 21 1 -2.0033 5.9132 -8.0090 0 0 1 + 828 21 1 -2.6667 5.1278 -8.1027 0 0 1 + 829 21 1 -3.1388 4.4598 -7.6221 0 0 1 + 830 21 1 -3.3803 3.5637 -7.3262 0 0 1 + 831 21 1 -2.8567 2.7529 -7.4185 0 0 1 + 832 21 1 -3.1902 2.0485 -7.9464 0 0 1 + 833 21 1 -2.4387 1.5751 8.1659 0 0 0 + 834 21 1 -2.0930 1.8052 7.3484 0 0 0 + 835 21 1 -2.9663 1.5314 6.9926 0 0 0 + 836 21 1 -3.3838 0.7469 6.6020 0 0 0 + 837 21 1 -4.2781 0.7544 6.9629 0 0 0 + 838 21 1 -5.2334 0.7754 6.9040 0 0 0 + 839 21 1 -4.8676 -0.1527 6.8395 0 0 0 + 840 21 1 -3.9852 -0.6770 6.8452 0 0 0 + 841 22 2 -3.2085 -2.4931 -0.9039 0 0 0 + 842 22 2 -3.4472 -2.4041 0.0272 0 0 0 + 843 22 2 -4.0621 -2.8939 -0.4868 0 0 0 + 844 22 2 -4.6887 -2.2306 -0.3350 0 0 0 + 845 22 2 -5.5047 -2.3523 -0.8761 0 0 0 + 846 22 2 -5.4354 -2.9261 -1.6563 0 0 0 + 847 22 2 -5.2248 -3.2954 -2.4821 0 0 0 + 848 22 2 -4.5797 -3.4779 -3.1631 0 0 0 + 849 22 2 -4.1390 -3.7226 -3.9615 0 0 0 + 850 22 2 -3.2377 -3.9361 -3.8555 0 0 0 + 851 22 2 -3.2809 -3.2328 -3.2184 0 0 0 + 852 22 2 -2.6552 -2.7422 -2.7343 0 0 0 + 853 22 2 -1.8722 -2.1151 -2.5433 0 0 0 + 854 22 2 -0.9399 -2.2224 -2.2986 0 0 0 + 855 22 2 -1.0352 -2.5011 -1.4032 0 0 0 + 856 22 2 -1.4981 -3.1490 -0.8708 0 0 0 + 857 22 2 -1.2504 -2.8809 0.0169 0 0 0 + 858 22 2 -1.5269 -2.6440 0.8688 0 0 0 + 859 22 2 -0.9115 -2.2273 1.4285 0 0 0 + 860 22 2 -0.0509 -1.9798 1.8366 0 0 0 + 861 22 2 0.5643 -1.2948 1.6465 0 0 0 + 862 22 2 1.3712 -0.8394 1.4632 0 0 0 + 863 22 2 1.8637 -1.0052 0.6543 0 0 0 + 864 22 2 2.4484 -1.2919 1.4043 0 0 0 + 865 22 2 3.2968 -1.6124 1.6717 0 0 0 + 866 22 2 4.1787 -1.4555 2.0959 0 0 0 + 867 22 2 5.0843 -1.1847 2.4235 0 0 0 + 868 22 2 4.5602 -0.6370 2.9217 0 0 0 + 869 22 2 4.6332 -0.1041 2.1095 0 0 0 + 870 22 2 4.7503 0.8237 1.9757 0 0 0 + 871 22 2 5.0609 1.4001 2.6860 0 0 0 + 872 22 2 4.9648 1.4723 3.6445 0 0 0 + 873 22 2 4.6345 1.4912 4.5370 0 0 0 + 874 22 2 3.9260 1.4517 5.1379 0 0 0 + 875 22 2 2.9870 1.5986 5.3666 0 0 0 + 876 22 2 2.5934 1.2919 6.1626 0 0 0 + 877 22 2 2.1377 1.4343 7.0225 0 0 0 + 878 22 2 1.7866 2.3235 7.2062 0 0 0 + 879 22 2 2.2236 3.0812 7.7115 0 0 0 + 880 22 2 2.7946 2.6417 -8.1326 0 0 1 + 881 23 1 3.2954 1.9172 3.4242 0 0 0 + 882 23 1 3.8773 1.2367 3.8654 0 0 0 + 883 23 1 4.3862 0.5056 4.0633 0 0 0 + 884 23 1 4.3586 -0.4288 4.2942 0 0 0 + 885 23 1 4.0477 -1.0479 4.8949 0 0 0 + 886 23 1 3.5717 -1.6480 5.4696 0 0 0 + 887 23 1 3.5374 -1.9475 6.4260 0 0 0 + 888 23 1 4.0125 -2.0021 7.2699 0 0 0 + 889 23 1 4.5952 -2.5972 7.8114 0 0 0 + 890 23 1 4.3282 -2.9331 -7.7620 0 0 1 + 891 23 1 3.6738 -3.0517 7.9870 0 0 0 + 892 23 1 3.0804 -2.7805 7.2723 0 0 0 + 893 23 1 2.8621 -3.1915 6.3839 0 0 0 + 894 23 1 1.9309 -3.2847 6.1196 0 0 0 + 895 23 1 1.3514 -2.8137 6.7167 0 0 0 + 896 23 1 0.6363 -2.5015 6.2135 0 0 0 + 897 23 1 0.2834 -3.3095 6.6107 0 0 0 + 898 23 1 -0.1410 -2.9882 7.4023 0 0 0 + 899 23 1 -0.8298 -3.4602 6.9400 0 0 0 + 900 23 1 -0.8688 -2.5164 6.6846 0 0 0 + 901 23 1 -1.6210 -2.9079 6.1891 0 0 0 + 902 23 1 -2.3952 -2.5130 6.7895 0 0 0 + 903 23 1 -1.8298 -1.7848 6.7828 0 0 0 + 904 23 1 -1.0791 -1.5635 7.3162 0 0 0 + 905 23 1 -0.6301 -0.6730 7.5231 0 0 0 + 906 23 1 0.1482 -0.1591 7.7549 0 0 0 + 907 23 1 0.6971 -0.7287 -8.1425 0 0 1 + 908 23 1 1.0692 -0.9660 -7.3018 0 0 1 + 909 23 1 0.2695 -1.2250 -6.8830 0 0 1 + 910 23 1 -0.5026 -0.7708 -6.4287 0 0 1 + 911 23 1 -1.1775 -0.3974 -6.9972 0 0 1 + 912 23 1 -2.1085 -0.3679 -7.3044 0 0 1 + 913 23 1 -2.8738 -0.4110 -7.8206 0 0 1 + 914 23 1 -3.7560 -0.5862 -8.2099 0 0 1 + 915 23 1 -4.2720 -1.3899 8.0432 0 0 0 + 916 23 1 -4.2607 -2.4205 8.0795 0 0 0 + 917 23 1 -4.3328 -3.3367 -8.0376 0 0 1 + 918 23 1 -4.1010 -4.2223 -7.8160 0 0 1 + 919 23 1 -3.9926 -5.0875 8.1687 0 0 0 + 920 23 1 -4.8656 -5.2191 7.9655 0 0 0 + 921 24 2 3.4569 5.1644 1.7969 0 0 0 + 922 24 2 2.7015 5.3224 1.2124 0 0 0 + 923 24 2 2.5220 6.1465 0.8003 0 0 0 + 924 24 2 1.9798 7.0320 0.7218 0 0 0 + 925 24 2 1.4861 7.3241 -0.1108 0 0 0 + 926 24 2 2.1828 7.8762 -0.5012 0 0 0 + 927 24 2 2.7604 7.6196 0.2154 0 0 0 + 928 24 2 3.4467 7.3765 0.8581 0 0 0 + 929 24 2 4.0634 8.0660 0.9766 0 0 0 + 930 24 2 4.6418 7.2839 0.7406 0 0 0 + 931 24 2 5.4900 6.9240 1.1378 0 0 0 + 932 24 2 6.3729 7.0444 1.5699 0 0 0 + 933 24 2 6.7279 7.0976 2.4293 0 0 0 + 934 24 2 7.3987 7.1421 1.7731 0 0 0 + 935 24 2 7.7215 6.2621 1.6809 0 0 0 + 936 24 2 6.8688 6.1993 2.0760 0 0 0 + 937 24 2 5.9851 5.9049 2.3566 0 0 0 + 938 24 2 5.1338 5.6813 2.8423 0 0 0 + 939 24 2 5.7331 4.8670 2.6586 0 0 0 + 940 24 2 6.3764 4.1670 2.6899 0 0 0 + 941 24 2 6.6963 3.4812 2.0639 0 0 0 + 942 24 2 6.0696 3.2200 1.3791 0 0 0 + 943 24 2 6.2166 2.3590 0.9337 0 0 0 + 944 24 2 6.5420 1.7780 1.5762 0 0 0 + 945 24 2 6.5533 0.8652 1.3070 0 0 0 + 946 24 2 6.6337 0.5087 2.1385 0 0 0 + 947 24 2 6.5352 -0.1943 1.5456 0 0 0 + 948 24 2 6.0361 -0.0451 0.7291 0 0 0 + 949 24 2 5.4614 0.4524 0.1219 0 0 0 + 950 24 2 4.6325 0.9486 -0.1585 0 0 0 + 951 24 2 3.6837 0.9598 0.1619 0 0 0 + 952 24 2 4.0374 1.7248 0.5984 0 0 0 + 953 24 2 4.5978 2.1498 -0.1666 0 0 0 + 954 24 2 4.9400 1.8583 -0.9890 0 0 0 + 955 24 2 4.6608 1.0852 -1.4993 0 0 0 + 956 24 2 5.5915 1.0782 -1.7072 0 0 0 + 957 24 2 6.5344 0.9677 -1.6802 0 0 0 + 958 24 2 7.3339 0.4246 -1.7086 0 0 0 + 959 24 2 -8.2111 0.3249 -2.0230 1 0 0 + 960 24 2 -7.5986 -0.2041 -2.4930 1 0 0 + 961 25 1 1.1018 6.5419 -1.0492 0 0 0 + 962 25 1 0.7829 6.0552 -1.7940 0 0 0 + 963 25 1 0.3232 5.2536 -1.9575 0 0 0 + 964 25 1 -0.3870 5.5549 -2.4903 0 0 0 + 965 25 1 -0.7171 4.6645 -2.7848 0 0 0 + 966 25 1 -0.9951 3.7386 -2.6912 0 0 0 + 967 25 1 -1.1320 3.3205 -1.7807 0 0 0 + 968 25 1 -2.0533 3.4871 -1.6876 0 0 0 + 969 25 1 -2.8586 2.9465 -1.6251 0 0 0 + 970 25 1 -3.2223 2.1782 -2.0798 0 0 0 + 971 25 1 -3.8274 1.5116 -2.3784 0 0 0 + 972 25 1 -3.7598 0.5583 -2.4255 0 0 0 + 973 25 1 -3.3623 1.0377 -1.6519 0 0 0 + 974 25 1 -3.7586 1.2489 -0.7809 0 0 0 + 975 25 1 -4.3868 1.8300 -0.3896 0 0 0 + 976 25 1 -4.4920 2.7031 0.0416 0 0 0 + 977 25 1 -4.5043 3.4555 0.6085 0 0 0 + 978 25 1 -3.8981 4.0194 1.0515 0 0 0 + 979 25 1 -3.6762 4.9798 1.2363 0 0 0 + 980 25 1 -4.5673 5.2820 1.0865 0 0 0 + 981 25 1 -5.4984 5.5255 1.0121 0 0 0 + 982 25 1 -5.9771 5.5160 1.8017 0 0 0 + 983 25 1 -5.9053 5.9709 2.6545 0 0 0 + 984 25 1 -5.0208 5.8803 2.9937 0 0 0 + 985 25 1 -4.0696 5.7920 3.1605 0 0 0 + 986 25 1 -3.8383 5.0120 2.6410 0 0 0 + 987 25 1 -3.1389 4.8167 2.0440 0 0 0 + 988 25 1 -2.8180 5.1639 2.8886 0 0 0 + 989 25 1 -2.2268 5.4889 2.2516 0 0 0 + 990 25 1 -1.2954 5.4721 2.1408 0 0 0 + 991 25 1 -0.9482 4.7582 1.5980 0 0 0 + 992 25 1 -1.1984 3.9123 1.2988 0 0 0 + 993 25 1 -1.3266 2.9776 1.1003 0 0 0 + 994 25 1 -1.8233 2.8863 1.9327 0 0 0 + 995 25 1 -1.8924 2.2708 2.6444 0 0 0 + 996 25 1 -1.6463 1.8803 3.5120 0 0 0 + 997 25 1 -1.7654 1.9854 4.4310 0 0 0 + 998 25 1 -0.9154 2.2400 4.7759 0 0 0 + 999 25 1 -1.5993 2.4556 5.3462 0 0 0 + 1000 25 1 -1.9865 3.2290 4.9508 0 0 0 + 1001 26 2 -5.0634 -6.2137 1.9270 0 0 0 + 1002 26 2 -5.7061 -5.6388 1.6938 0 0 0 + 1003 26 2 -6.2581 -5.1139 1.0853 0 0 0 + 1004 26 2 -5.8511 -4.9377 0.2364 0 0 0 + 1005 26 2 -6.3867 -5.5208 -0.3550 0 0 0 + 1006 26 2 -5.5644 -5.3273 -0.8939 0 0 0 + 1007 26 2 -5.1327 -5.1200 -1.6727 0 0 0 + 1008 26 2 -5.0642 -5.9199 -2.1111 0 0 0 + 1009 26 2 -4.5887 -6.4716 -2.7031 0 0 0 + 1010 26 2 -3.6666 -6.4812 -2.4646 0 0 0 + 1011 26 2 -3.1918 -7.2461 -2.0077 0 0 0 + 1012 26 2 -2.5657 -7.9829 -1.8164 0 0 0 + 1013 26 2 -2.0614 -7.3778 -2.2872 0 0 0 + 1014 26 2 -2.4025 -6.6059 -1.9828 0 0 0 + 1015 26 2 -2.4316 -6.9387 -1.1572 0 0 0 + 1016 26 2 -2.3335 -7.8270 -0.7940 0 0 0 + 1017 26 2 -2.2653 7.7260 -0.4060 0 -1 0 + 1018 26 2 -1.4756 7.2541 -0.1894 0 -1 0 + 1019 26 2 -1.1298 6.6772 0.5406 0 -1 0 + 1020 26 2 -0.1865 6.3605 0.6373 0 -1 0 + 1021 26 2 0.5970 6.6257 1.0108 0 -1 0 + 1022 26 2 1.2021 6.3431 0.3506 0 -1 0 + 1023 26 2 2.0811 6.1351 -0.0391 0 -1 0 + 1024 26 2 2.9596 6.4281 -0.1493 0 -1 0 + 1025 26 2 3.7310 6.9279 -0.3688 0 -1 0 + 1026 26 2 3.8160 7.8172 -0.7560 0 -1 0 + 1027 26 2 3.8333 -7.9805 -0.0530 0 0 0 + 1028 26 2 3.5468 -7.4195 0.6407 0 0 0 + 1029 26 2 2.6606 -7.1129 0.9165 0 0 0 + 1030 26 2 2.8879 -7.4683 1.8264 0 0 0 + 1031 26 2 2.4346 -8.0314 2.4164 0 0 0 + 1032 26 2 1.8094 7.7149 2.0826 0 -1 0 + 1033 26 2 1.1968 7.0352 1.7291 0 -1 0 + 1034 26 2 0.3058 6.9117 2.1151 0 -1 0 + 1035 26 2 -0.3572 6.5682 2.6593 0 -1 0 + 1036 26 2 -1.3245 6.4873 2.9500 0 -1 0 + 1037 26 2 -1.0696 5.6857 3.3249 0 -1 0 + 1038 26 2 -1.8464 5.1136 3.1805 0 -1 0 + 1039 26 2 -1.5472 4.5147 2.4241 0 -1 0 + 1040 26 2 -2.0982 4.6927 1.6860 0 -1 0 + 1041 27 1 3.9908 -7.8489 -3.0641 0 0 0 + 1042 27 1 4.4635 8.2026 -2.1431 0 -1 0 + 1043 27 1 4.3965 -7.7086 -1.2717 0 0 0 + 1044 27 1 4.8984 -7.0784 -1.8176 0 0 0 + 1045 27 1 5.3630 -6.2847 -2.1934 0 0 0 + 1046 27 1 5.1148 -5.3875 -2.5245 0 0 0 + 1047 27 1 5.0606 -4.4265 -2.3608 0 0 0 + 1048 27 1 5.8833 -4.1736 -2.8460 0 0 0 + 1049 27 1 6.8084 -4.4782 -3.0253 0 0 0 + 1050 27 1 6.7710 -3.7543 -3.6761 0 0 0 + 1051 27 1 7.4166 -3.4463 -4.3159 0 0 0 + 1052 27 1 8.1365 -2.8114 -4.1892 0 0 0 + 1053 27 1 -7.4485 -2.4412 -3.8705 1 0 0 + 1054 27 1 -7.8650 -2.2661 -3.0241 1 0 0 + 1055 27 1 -7.9862 -1.9107 -2.1288 1 0 0 + 1056 27 1 -8.1035 -2.4289 -1.3160 1 0 0 + 1057 27 1 -7.3805 -1.8472 -1.2148 1 0 0 + 1058 27 1 -7.1040 -1.1289 -0.5657 1 0 0 + 1059 27 1 -6.2891 -0.8397 -0.2667 1 0 0 + 1060 27 1 -5.2162 -0.8708 -0.4393 1 0 0 + 1061 27 1 -4.3102 -0.5330 -0.4233 1 0 0 + 1062 27 1 -3.9641 0.3379 -0.1698 1 0 0 + 1063 27 1 -4.4316 0.8156 0.4648 1 0 0 + 1064 27 1 -4.1943 1.6457 0.8857 1 0 0 + 1065 27 1 -3.7659 2.5310 0.9608 1 0 0 + 1066 27 1 -3.2597 3.2977 0.7121 1 0 0 + 1067 27 1 -2.5632 2.8121 0.3421 1 0 0 + 1068 27 1 -2.3296 1.9726 -0.0298 1 0 0 + 1069 27 1 -1.7906 1.1556 0.1178 1 0 0 + 1070 27 1 -0.8454 1.1195 -0.1987 1 0 0 + 1071 27 1 -0.1270 1.5614 0.2124 1 0 0 + 1072 27 1 0.8180 1.6787 -0.0749 1 0 0 + 1073 27 1 1.1447 1.3071 -0.9330 1 0 0 + 1074 27 1 1.0671 0.6894 -0.1804 1 0 0 + 1075 27 1 0.0830 0.8005 -0.4675 1 0 0 + 1076 27 1 0.2392 0.3384 0.3177 1 0 0 + 1077 27 1 0.9543 0.4816 0.9186 1 0 0 + 1078 27 1 1.8782 0.1844 1.1480 1 0 0 + 1079 27 1 2.5960 0.7765 1.2713 1 0 0 + 1080 27 1 2.9269 1.5889 0.8008 1 0 0 + 1081 28 2 -3.8490 -1.1767 -3.2348 0 0 0 + 1082 28 2 -4.1166 -0.2133 -3.1837 0 0 0 + 1083 28 2 -4.8775 0.3045 -3.4400 0 0 0 + 1084 28 2 -5.2612 0.6826 -4.1849 0 0 0 + 1085 28 2 -5.8731 1.0105 -3.4872 0 0 0 + 1086 28 2 -6.4958 0.6146 -2.8046 0 0 0 + 1087 28 2 -6.7607 0.4482 -1.9493 0 0 0 + 1088 28 2 -6.9215 1.3183 -1.8739 0 0 0 + 1089 28 2 -6.6891 2.2217 -1.5197 0 0 0 + 1090 28 2 -6.0142 1.9490 -0.9798 0 0 0 + 1091 28 2 -5.5258 2.6461 -0.5495 0 0 0 + 1092 28 2 -4.9638 2.7724 -1.3683 0 0 0 + 1093 28 2 -5.5941 2.2742 -1.8618 0 0 0 + 1094 28 2 -6.0697 2.8855 -2.5109 0 0 0 + 1095 28 2 -5.9125 3.1580 -1.6517 0 0 0 + 1096 28 2 -5.1764 3.5772 -2.0558 0 0 0 + 1097 28 2 -5.0034 2.9762 -2.7691 0 0 0 + 1098 28 2 -5.7009 3.2769 -3.4150 0 0 0 + 1099 28 2 -5.2694 4.0844 -2.9918 0 0 0 + 1100 28 2 -5.0790 4.8339 -3.5601 0 0 0 + 1101 28 2 -4.8143 5.3383 -4.2780 0 0 0 + 1102 28 2 -4.4331 6.0260 -4.7959 0 0 0 + 1103 28 2 -4.2320 5.8019 -5.7835 0 0 0 + 1104 28 2 -5.0094 6.0747 -6.2529 0 0 0 + 1105 28 2 -5.7143 5.4965 -6.0592 0 0 0 + 1106 28 2 -4.9997 5.1425 -5.5513 0 0 0 + 1107 28 2 -5.1466 4.6319 -6.3188 0 0 0 + 1108 28 2 -5.9937 4.4243 -6.7816 0 0 0 + 1109 28 2 -6.7920 3.9612 -6.4865 0 0 0 + 1110 28 2 -6.8964 4.3370 -7.3626 0 0 0 + 1111 28 2 -7.3735 4.4566 -8.1847 0 0 0 + 1112 28 2 -7.9382 5.0743 7.7925 0 0 -1 + 1113 28 2 7.8386 5.5828 -8.1771 -1 0 0 + 1114 28 2 -8.1519 5.2599 -7.4132 0 0 0 + 1115 28 2 7.7295 4.5998 -8.0016 -1 0 0 + 1116 28 2 6.7770 4.8159 -7.8443 -1 0 0 + 1117 28 2 6.0955 4.6852 -7.1503 -1 0 0 + 1118 28 2 5.3532 4.6158 -6.5932 -1 0 0 + 1119 28 2 5.0958 4.5147 -5.6120 -1 0 0 + 1120 28 2 5.4547 3.8419 -4.9972 -1 0 0 + 1121 29 1 -5.1486 7.3007 5.4456 0 0 0 + 1122 29 1 -4.6403 7.9850 4.9936 0 0 0 + 1123 29 1 -4.7137 -8.1256 4.1041 0 1 0 + 1124 29 1 -4.6847 -7.8154 3.1588 0 1 0 + 1125 29 1 -4.1071 -7.1239 2.7099 0 1 0 + 1126 29 1 -3.2223 -6.9539 2.3244 0 1 0 + 1127 29 1 -2.3491 -6.5665 2.4025 0 1 0 + 1128 29 1 -1.8498 -7.2816 2.7661 0 1 0 + 1129 29 1 -1.8680 8.1477 2.7123 0 0 0 + 1130 29 1 -2.2596 7.3367 3.1604 0 0 0 + 1131 29 1 -2.2224 6.4526 3.5404 0 0 0 + 1132 29 1 -3.1775 6.1040 3.4805 0 0 0 + 1133 29 1 -3.3528 6.2960 4.3553 0 0 0 + 1134 29 1 -3.0625 6.7003 5.2228 0 0 0 + 1135 29 1 -2.3038 6.6964 5.7775 0 0 0 + 1136 29 1 -2.2797 6.7042 6.6919 0 0 0 + 1137 29 1 -2.9156 6.0223 6.8521 0 0 0 + 1138 29 1 -2.0657 5.6636 7.2453 0 0 0 + 1139 29 1 -2.7001 4.8721 7.1580 0 0 0 + 1140 29 1 -2.6151 4.8702 6.1299 0 0 0 + 1141 29 1 -3.2198 4.1822 5.6857 0 0 0 + 1142 29 1 -3.6825 3.4038 5.8608 0 0 0 + 1143 29 1 -4.3420 3.5133 6.5277 0 0 0 + 1144 29 1 -4.2221 4.0029 7.2838 0 0 0 + 1145 29 1 -3.9146 4.7125 7.7874 0 0 0 + 1146 29 1 -3.4892 5.5313 7.7189 0 0 0 + 1147 29 1 -3.5644 5.9480 -7.8443 0 0 1 + 1148 29 1 -3.0850 6.3778 -7.1230 0 0 1 + 1149 29 1 -2.4702 7.0716 -7.1120 0 0 1 + 1150 29 1 -1.5213 6.8648 -7.2705 0 0 1 + 1151 29 1 -0.8597 7.0053 -7.9144 0 0 1 + 1152 29 1 -1.3904 7.7660 -8.1956 0 0 1 + 1153 29 1 -2.3156 7.5475 -7.9781 0 0 1 + 1154 29 1 -2.9204 8.1667 -7.6148 0 0 1 + 1155 29 1 -3.3114 7.6611 -6.9743 0 0 1 + 1156 29 1 -3.8525 6.9246 -6.6584 0 0 1 + 1157 29 1 -3.7563 7.6702 -6.0559 0 0 1 + 1158 29 1 -4.6150 8.1351 -6.2590 0 0 1 + 1159 29 1 -4.9892 -7.4085 -6.3363 0 1 1 + 1160 29 1 -4.7031 -6.4350 -6.2362 0 1 1 + 1161 30 2 6.2037 -5.1746 5.5892 0 0 0 + 1162 30 2 6.5429 -4.9419 4.6778 0 0 0 + 1163 30 2 5.9371 -5.6459 4.5179 0 0 0 + 1164 30 2 5.4005 -6.0742 5.2642 0 0 0 + 1165 30 2 4.5465 -5.6905 5.5118 0 0 0 + 1166 30 2 3.8038 -6.2953 5.8439 0 0 0 + 1167 30 2 4.2378 -6.4675 6.7363 0 0 0 + 1168 30 2 4.2979 -7.3263 7.2311 0 0 0 + 1169 30 2 3.8488 -7.6989 8.0120 0 0 0 + 1170 30 2 4.4501 8.1328 7.5921 0 -1 0 + 1171 30 2 4.9577 7.3177 7.5767 0 -1 0 + 1172 30 2 5.5664 6.7120 7.9370 0 -1 0 + 1173 30 2 6.2473 6.9510 -7.9385 0 -1 1 + 1174 30 2 5.7664 6.6731 -7.1007 0 -1 1 + 1175 30 2 5.5549 5.7133 -6.9660 0 -1 1 + 1176 30 2 5.0627 5.1502 -7.5857 0 -1 1 + 1177 30 2 5.6842 4.7440 -8.2013 0 -1 1 + 1178 30 2 5.4098 4.7881 7.2479 0 -1 0 + 1179 30 2 5.8083 4.2955 6.4793 0 -1 0 + 1180 30 2 6.4709 3.6284 6.3807 0 -1 0 + 1181 30 2 7.0358 2.8691 6.1463 0 -1 0 + 1182 30 2 7.8730 3.1525 5.7953 0 -1 0 + 1183 30 2 -8.0861 3.5599 6.4290 1 -1 0 + 1184 30 2 7.6532 3.1217 6.9540 0 -1 0 + 1185 30 2 6.8696 3.1498 7.4830 0 -1 0 + 1186 30 2 6.9731 3.8322 8.1000 0 -1 0 + 1187 30 2 6.1772 4.0232 7.6202 0 -1 0 + 1188 30 2 5.8316 3.7537 -7.8506 0 -1 1 + 1189 30 2 5.1431 3.3834 -7.2623 0 -1 1 + 1190 30 2 4.4458 2.9205 -6.7443 0 -1 1 + 1191 30 2 4.4524 2.7396 -7.7111 0 -1 1 + 1192 30 2 4.0708 3.0865 7.9049 0 -1 0 + 1193 30 2 3.5644 3.8522 7.7504 0 -1 0 + 1194 30 2 2.6546 4.3283 8.0093 0 -1 0 + 1195 30 2 2.4352 3.6908 -7.7489 0 -1 1 + 1196 30 2 3.3718 3.4888 -7.6403 0 -1 1 + 1197 30 2 3.4233 2.6064 -7.2574 0 -1 1 + 1198 30 2 3.6107 1.7419 -7.6786 0 -1 1 + 1199 30 2 4.3462 1.2557 -8.0551 0 -1 1 + 1200 30 2 5.2215 1.0136 8.1067 0 -1 0 + 1201 31 1 6.9645 -2.1279 0.2899 0 0 0 + 1202 31 1 6.6737 -3.0482 0.3111 0 0 0 + 1203 31 1 5.8055 -3.0069 -0.2323 0 0 0 + 1204 31 1 5.5733 -2.1806 -0.6214 0 0 0 + 1205 31 1 5.6014 -1.2640 -0.7286 0 0 0 + 1206 31 1 5.9677 -1.2984 0.1759 0 0 0 + 1207 31 1 6.6846 -1.1720 0.8321 0 0 0 + 1208 31 1 5.8090 -1.5939 1.0933 0 0 0 + 1209 31 1 6.0328 -1.7027 2.0571 0 0 0 + 1210 31 1 6.6576 -1.8175 2.8194 0 0 0 + 1211 31 1 6.3060 -0.9848 3.1222 0 0 0 + 1212 31 1 5.4385 -0.7572 3.4350 0 0 0 + 1213 31 1 5.7235 -0.3870 2.5707 0 0 0 + 1214 31 1 5.6881 0.5534 2.7425 0 0 0 + 1215 31 1 4.7635 0.4213 3.0722 0 0 0 + 1216 31 1 3.7997 0.3516 3.1450 0 0 0 + 1217 31 1 3.4229 0.1383 4.0167 0 0 0 + 1218 31 1 3.8350 0.2124 4.9187 0 0 0 + 1219 31 1 4.3597 -0.2031 5.5559 0 0 0 + 1220 31 1 4.7544 -0.0273 6.4099 0 0 0 + 1221 31 1 5.6014 -0.3460 6.5425 0 0 0 + 1222 31 1 6.1658 -0.8708 7.1161 0 0 0 + 1223 31 1 7.0362 -1.2038 7.0888 0 0 0 + 1224 31 1 7.1158 -0.2462 7.1343 0 0 0 + 1225 31 1 7.3348 0.6810 7.2196 0 0 0 + 1226 31 1 6.9127 1.3020 7.7609 0 0 0 + 1227 31 1 6.6332 2.2645 7.8513 0 0 0 + 1228 31 1 6.0408 1.5479 -8.1848 0 0 1 + 1229 31 1 6.2694 0.6721 -7.9425 0 0 1 + 1230 31 1 6.5885 1.2675 -7.2467 0 0 1 + 1231 31 1 5.9206 0.8217 -6.7914 0 0 1 + 1232 31 1 5.0153 0.9311 -6.5212 0 0 1 + 1233 31 1 5.2502 0.3484 -5.7773 0 0 1 + 1234 31 1 5.6892 -0.0590 -5.0202 0 0 1 + 1235 31 1 5.6411 -0.5506 -4.1300 0 0 1 + 1236 31 1 5.1458 -1.3025 -4.1178 0 0 1 + 1237 31 1 4.3339 -1.5706 -3.6755 0 0 1 + 1238 31 1 4.7302 -1.9764 -2.9440 0 0 1 + 1239 31 1 5.6665 -2.2271 -2.6694 0 0 1 + 1240 31 1 6.5701 -2.2174 -2.4471 0 0 1 + 1241 32 2 -1.0057 -0.1671 1.3998 0 0 0 + 1242 32 2 -1.5498 0.3345 1.9657 0 0 0 + 1243 32 2 -0.8554 -0.0330 2.5583 0 0 0 + 1244 32 2 -0.5081 -0.8202 2.1135 0 0 0 + 1245 32 2 -0.5847 -1.3101 1.3020 0 0 0 + 1246 32 2 -0.1893 -1.8421 0.6479 0 0 0 + 1247 32 2 -0.3544 -2.7745 0.5651 0 0 0 + 1248 32 2 -0.7974 -3.5662 0.9101 0 0 0 + 1249 32 2 -0.9835 -3.8150 1.7975 0 0 0 + 1250 32 2 -1.5854 -4.0836 2.4831 0 0 0 + 1251 32 2 -2.3670 -4.1539 3.0170 0 0 0 + 1252 32 2 -2.6095 -4.6594 3.8185 0 0 0 + 1253 32 2 -2.5514 -4.3768 4.7260 0 0 0 + 1254 32 2 -2.2184 -4.2584 5.6010 0 0 0 + 1255 32 2 -2.7977 -4.6039 6.2843 0 0 0 + 1256 32 2 -2.9090 -5.1459 7.0558 0 0 0 + 1257 32 2 -3.4740 -5.6551 6.4647 0 0 0 + 1258 32 2 -3.2911 -6.1418 5.6993 0 0 0 + 1259 32 2 -4.0943 -6.0487 5.2528 0 0 0 + 1260 32 2 -5.0004 -5.9556 5.7504 0 0 0 + 1261 32 2 -4.7716 -6.0703 6.6398 0 0 0 + 1262 32 2 -4.2387 -6.1732 7.4936 0 0 0 + 1263 32 2 -4.2089 -5.3246 7.1549 0 0 0 + 1264 32 2 -4.1066 -4.4230 6.8694 0 0 0 + 1265 32 2 -4.0089 -4.1787 5.8899 0 0 0 + 1266 32 2 -5.0317 -4.2279 5.7505 0 0 0 + 1267 32 2 -4.8803 -5.0094 6.3420 0 0 0 + 1268 32 2 -4.4470 -5.0913 5.5438 0 0 0 + 1269 32 2 -3.4780 -5.1350 5.7161 0 0 0 + 1270 32 2 -2.8777 -5.4584 5.0222 0 0 0 + 1271 32 2 -3.0603 -6.3042 4.5228 0 0 0 + 1272 32 2 -3.1522 -5.5370 4.0398 0 0 0 + 1273 32 2 -3.7026 -5.2268 3.3178 0 0 0 + 1274 32 2 -3.1461 -4.8643 2.5687 0 0 0 + 1275 32 2 -2.7494 -4.2950 1.9455 0 0 0 + 1276 32 2 -3.0330 -3.4454 1.5955 0 0 0 + 1277 32 2 -3.6749 -2.7794 1.6471 0 0 0 + 1278 32 2 -4.6316 -2.8834 1.8616 0 0 0 + 1279 32 2 -5.2643 -3.5683 1.9459 0 0 0 + 1280 32 2 -5.6267 -4.1182 1.2282 0 0 0 + 1281 33 1 -0.8549 1.4349 4.1016 0 0 0 + 1282 33 1 -0.5281 1.9079 3.3651 0 0 0 + 1283 33 1 -0.3525 2.8114 3.7131 0 0 0 + 1284 33 1 -0.5359 3.7024 3.8119 0 0 0 + 1285 33 1 0.1970 4.2054 3.4425 0 0 0 + 1286 33 1 0.1745 3.3510 2.9548 0 0 0 + 1287 33 1 0.6410 2.5180 2.9992 0 0 0 + 1288 33 1 0.0114 2.0698 2.3944 0 0 0 + 1289 33 1 -0.0226 1.8354 1.4683 0 0 0 + 1290 33 1 0.0232 2.4050 0.6590 0 0 0 + 1291 33 1 0.7487 2.6398 0.1066 0 0 0 + 1292 33 1 0.6278 2.8983 -0.8361 0 0 0 + 1293 33 1 0.0173 2.1520 -0.9211 0 0 0 + 1294 33 1 -0.7217 1.5309 -1.0521 0 0 0 + 1295 33 1 -1.2832 1.1881 -1.8383 0 0 0 + 1296 33 1 -1.7701 1.1856 -1.0511 0 0 0 + 1297 33 1 -2.3177 0.4736 -1.4861 0 0 0 + 1298 33 1 -2.8391 -0.0266 -2.1137 0 0 0 + 1299 33 1 -2.1636 0.3546 -2.6437 0 0 0 + 1300 33 1 -1.5703 0.9441 -3.1368 0 0 0 + 1301 33 1 -1.1677 1.4059 -3.8984 0 0 0 + 1302 33 1 -1.3088 0.5483 -4.3268 0 0 0 + 1303 33 1 -1.2809 -0.2706 -4.7904 0 0 0 + 1304 33 1 -2.0577 -0.8166 -5.1258 0 0 0 + 1305 33 1 -2.6436 -0.2306 -5.5314 0 0 0 + 1306 33 1 -3.6450 -0.0346 -5.3750 0 0 0 + 1307 33 1 -4.4052 0.2344 -5.8560 0 0 0 + 1308 33 1 -4.5908 -0.7171 -6.1561 0 0 0 + 1309 33 1 -5.4531 -0.8992 -5.8500 0 0 0 + 1310 33 1 -5.5945 -1.3816 -4.9813 0 0 0 + 1311 33 1 -6.3195 -1.7816 -4.5704 0 0 0 + 1312 33 1 -6.4115 -1.7611 -3.6116 0 0 0 + 1313 33 1 -5.7954 -0.9771 -3.8395 0 0 0 + 1314 33 1 -5.8349 -0.1625 -3.3734 0 0 0 + 1315 33 1 -5.9699 -0.0919 -4.3687 0 0 0 + 1316 33 1 -6.3842 -0.1231 -5.2295 0 0 0 + 1317 33 1 -7.3077 -0.0297 -5.5870 0 0 0 + 1318 33 1 -7.2186 -0.4223 -6.4912 0 0 0 + 1319 33 1 -7.0819 -1.0133 -7.2580 0 0 0 + 1320 33 1 -6.3050 -0.8821 -7.8212 0 0 0 + 1321 34 2 -2.9155 1.0394 -2.7384 0 0 0 + 1322 34 2 -2.5110 1.6287 -3.3408 0 0 0 + 1323 34 2 -1.7275 2.1461 -3.4864 0 0 0 + 1324 34 2 -1.3040 2.5515 -2.6807 0 0 0 + 1325 34 2 -0.6084 2.3460 -2.1374 0 0 0 + 1326 34 2 -0.9486 2.4371 -1.2454 0 0 0 + 1327 34 2 -1.7660 2.3099 -0.8589 0 0 0 + 1328 34 2 -1.4519 3.1673 -0.6224 0 0 0 + 1329 34 2 -2.3774 3.2153 -0.7161 0 0 0 + 1330 34 2 -3.1013 3.8097 -1.0113 0 0 0 + 1331 34 2 -3.6261 4.6856 -0.9732 0 0 0 + 1332 34 2 -2.8513 5.2603 -0.6419 0 0 0 + 1333 34 2 -1.8725 5.3495 -0.4935 0 0 0 + 1334 34 2 -0.9411 5.4275 -0.1198 0 0 0 + 1335 34 2 -0.8359 6.2241 -0.5745 0 0 0 + 1336 34 2 -1.5118 6.1127 -1.2628 0 0 0 + 1337 34 2 -1.9079 6.9521 -1.6054 0 0 0 + 1338 34 2 -2.7317 7.4121 -1.6090 0 0 0 + 1339 34 2 -3.4666 8.0289 -1.3943 0 0 0 + 1340 34 2 -4.2552 -8.0321 -1.0579 0 1 0 + 1341 34 2 -4.7029 -7.2298 -1.0757 0 1 0 + 1342 34 2 -5.6060 -7.4985 -1.1609 0 1 0 + 1343 34 2 -6.4074 -6.8425 -1.1900 0 1 0 + 1344 34 2 -7.0415 -6.5306 -1.8340 0 1 0 + 1345 34 2 -7.7161 -5.8219 -1.8713 0 1 0 + 1346 34 2 -7.9741 -5.5817 -2.7660 0 1 0 + 1347 34 2 8.0254 -6.4097 -2.4327 -1 1 0 + 1348 34 2 -7.5507 -6.6087 -2.7872 0 1 0 + 1349 34 2 -6.5867 -6.7552 -2.9808 0 1 0 + 1350 34 2 -6.3672 -7.6597 -3.2591 0 1 0 + 1351 34 2 -6.3287 -7.1039 -4.0192 0 1 0 + 1352 34 2 -5.8712 -6.2635 -3.9620 0 1 0 + 1353 34 2 -5.0462 -5.7811 -3.6667 0 1 0 + 1354 34 2 -4.9413 -5.0504 -3.0048 0 1 0 + 1355 34 2 -4.6051 -4.3177 -2.4094 0 1 0 + 1356 34 2 -3.7886 -3.7452 -2.4746 0 1 0 + 1357 34 2 -4.3120 -3.0209 -2.0915 0 1 0 + 1358 34 2 -4.7389 -2.1924 -2.4553 0 1 0 + 1359 34 2 -4.3895 -1.4591 -1.9306 0 1 0 + 1360 34 2 -4.9661 -1.5195 -1.1874 0 1 0 + 1361 35 1 -2.4598 -1.4739 -6.9290 0 0 0 + 1362 35 1 -1.5313 -1.3843 -7.2260 0 0 0 + 1363 35 1 -0.6175 -1.4965 -7.3896 0 0 0 + 1364 35 1 0.2580 -1.6403 -7.8711 0 0 0 + 1365 35 1 1.2244 -2.0090 -7.7274 0 0 0 + 1366 35 1 1.6661 -2.8717 -7.9651 0 0 0 + 1367 35 1 1.4779 -3.7683 -7.5648 0 0 0 + 1368 35 1 1.7900 -4.0787 7.9390 0 0 -1 + 1369 35 1 1.0453 -3.5577 7.6209 0 0 -1 + 1370 35 1 0.9106 -2.6415 7.7367 0 0 -1 + 1371 35 1 0.4695 -2.0376 7.1858 0 0 -1 + 1372 35 1 0.5170 -1.0914 7.2906 0 0 -1 + 1373 35 1 1.0175 -0.3672 6.9128 0 0 -1 + 1374 35 1 0.7609 -0.2629 5.9522 0 0 -1 + 1375 35 1 1.0389 -1.0314 5.4356 0 0 -1 + 1376 35 1 0.0783 -1.0234 5.6500 0 0 -1 + 1377 35 1 -0.2184 -1.3511 6.4738 0 0 -1 + 1378 35 1 0.7215 -1.4790 6.3276 0 0 -1 + 1379 35 1 1.5929 -1.0017 6.3829 0 0 -1 + 1380 35 1 2.4027 -0.9060 5.9024 0 0 -1 + 1381 35 1 3.3172 -0.9652 6.2006 0 0 -1 + 1382 35 1 4.3331 -1.0920 5.9833 0 0 -1 + 1383 35 1 5.1331 -0.9517 5.4249 0 0 -1 + 1384 35 1 5.5334 -0.7893 4.6219 0 0 -1 + 1385 35 1 4.8434 -1.3113 4.1711 0 0 -1 + 1386 35 1 3.9277 -1.5242 3.8489 0 0 -1 + 1387 35 1 3.4956 -0.7837 3.3559 0 0 -1 + 1388 35 1 2.6452 -0.5255 3.2392 0 0 -1 + 1389 35 1 2.7067 0.4274 3.1816 0 0 -1 + 1390 35 1 2.7826 1.1593 3.8184 0 0 -1 + 1391 35 1 2.9814 0.8689 4.6893 0 0 -1 + 1392 35 1 2.3349 0.3427 5.2377 0 0 -1 + 1393 35 1 2.0124 -0.4739 4.8539 0 0 -1 + 1394 35 1 1.8862 -1.1274 4.1457 0 0 -1 + 1395 35 1 1.2452 -0.5079 3.7714 0 0 -1 + 1396 35 1 0.6321 0.1662 3.5852 0 0 -1 + 1397 35 1 0.5772 1.1138 3.2520 0 0 -1 + 1398 35 1 0.0790 0.3730 2.7546 0 0 -1 + 1399 35 1 0.4436 1.0913 2.1893 0 0 -1 + 1400 35 1 1.2378 0.7045 1.8813 0 0 -1 + 1401 36 2 -0.2287 -0.3096 6.6549 0 0 0 + 1402 36 2 -0.4463 0.4412 7.1150 0 0 0 + 1403 36 2 -1.3455 0.2952 7.2860 0 0 0 + 1404 36 2 -2.2059 0.7251 7.0747 0 0 0 + 1405 36 2 -1.9118 0.2048 6.3405 0 0 0 + 1406 36 2 -1.7675 1.1329 6.2385 0 0 0 + 1407 36 2 -2.0690 2.0222 6.3552 0 0 0 + 1408 36 2 -2.3845 2.8102 6.8574 0 0 0 + 1409 36 2 -2.8743 2.6080 7.6803 0 0 0 + 1410 36 2 -3.7085 2.7763 8.0591 0 0 0 + 1411 36 2 -4.2924 2.1569 -8.0523 0 0 1 + 1412 36 2 -5.0301 1.6496 -7.7493 0 0 1 + 1413 36 2 -4.6042 1.8749 -6.9621 0 0 1 + 1414 36 2 -4.0668 1.8532 -6.1971 0 0 1 + 1415 36 2 -4.1067 1.1565 -5.5130 0 0 1 + 1416 36 2 -3.6899 1.8879 -5.0768 0 0 1 + 1417 36 2 -4.0240 2.7062 -4.7223 0 0 1 + 1418 36 2 -3.4255 3.4282 -4.3468 0 0 1 + 1419 36 2 -3.7901 4.1616 -3.8724 0 0 1 + 1420 36 2 -4.1536 3.9423 -2.9404 0 0 1 + 1421 36 2 -4.5804 4.5809 -2.4126 0 0 1 + 1422 36 2 -3.6375 4.7810 -2.2666 0 0 1 + 1423 36 2 -3.9575 5.4094 -1.5444 0 0 1 + 1424 36 2 -3.8758 6.3700 -1.9311 0 0 1 + 1425 36 2 -3.1222 6.6318 -2.5061 0 0 1 + 1426 36 2 -2.4920 7.3943 -2.6061 0 0 1 + 1427 36 2 -1.7412 7.8917 -2.2653 0 0 1 + 1428 36 2 -1.6292 7.9646 -1.3756 0 0 1 + 1429 36 2 -0.6903 7.6677 -1.2050 0 0 1 + 1430 36 2 -0.1249 -7.8869 -1.1391 0 1 1 + 1431 36 2 0.4182 -7.1237 -0.9699 0 1 1 + 1432 36 2 1.1716 -7.0720 -0.4392 0 1 1 + 1433 36 2 1.6103 -7.2367 0.4045 0 1 1 + 1434 36 2 1.8270 -7.9085 1.0989 0 1 1 + 1435 36 2 2.6136 8.0014 1.1770 0 0 1 + 1436 36 2 2.7774 7.3740 1.8692 0 0 1 + 1437 36 2 2.2071 6.5811 1.7407 0 0 1 + 1438 36 2 1.4532 5.9359 1.6168 0 0 1 + 1439 36 2 1.6383 5.3742 2.3544 0 0 1 + 1440 36 2 1.9594 5.2903 3.2556 0 0 1 + 1441 37 1 -7.6768 6.7893 -5.1347 0 0 0 + 1442 37 1 -7.4507 5.8697 -5.0645 0 0 0 + 1443 37 1 -6.7082 5.6527 -4.4692 0 0 0 + 1444 37 1 -6.7792 6.5925 -4.1762 0 0 0 + 1445 37 1 -7.2442 6.6922 -3.3589 0 0 0 + 1446 37 1 -6.9943 5.7912 -3.5018 0 0 0 + 1447 37 1 -6.4597 4.9705 -3.7014 0 0 0 + 1448 37 1 -6.2450 4.8239 -2.7791 0 0 0 + 1449 37 1 -5.7483 4.5065 -2.0209 0 0 0 + 1450 37 1 -6.4816 3.9400 -2.2302 0 0 0 + 1451 37 1 -7.3324 4.1696 -1.7704 0 0 0 + 1452 37 1 -8.0461 3.8782 -2.2938 0 0 0 + 1453 37 1 -7.2826 4.2562 -2.7937 0 0 0 + 1454 37 1 -7.6185 4.2443 -3.6484 0 0 0 + 1455 37 1 7.9385 3.7235 -3.5464 -1 0 0 + 1456 37 1 7.7962 3.1546 -2.7747 -1 0 0 + 1457 37 1 7.5695 2.3754 -2.3736 -1 0 0 + 1458 37 1 7.2425 1.8418 -1.6574 -1 0 0 + 1459 37 1 7.1399 2.5751 -1.0520 -1 0 0 + 1460 37 1 6.2552 2.8697 -1.0055 -1 0 0 + 1461 37 1 6.1935 3.7875 -1.2985 -1 0 0 + 1462 37 1 6.6611 4.5841 -1.5927 -1 0 0 + 1463 37 1 7.2392 5.3226 -1.7131 -1 0 0 + 1464 37 1 7.7636 5.7741 -2.3397 -1 0 0 + 1465 37 1 7.6579 6.7914 -2.4334 -1 0 0 + 1466 37 1 8.1295 6.8730 -3.2469 -1 0 0 + 1467 37 1 7.5012 7.2192 -3.9123 -1 0 0 + 1468 37 1 7.5035 7.5087 -4.8261 -1 0 0 + 1469 37 1 6.5772 7.5695 -5.1935 -1 0 0 + 1470 37 1 5.9562 -8.1151 -5.2916 -1 1 0 + 1471 37 1 5.6797 -7.3561 -4.8353 -1 1 0 + 1472 37 1 5.9665 -6.6248 -4.2162 -1 1 0 + 1473 37 1 5.4127 -5.7952 -4.3606 -1 1 0 + 1474 37 1 5.4153 -4.9847 -3.8510 -1 1 0 + 1475 37 1 6.0373 -5.3426 -3.1535 -1 1 0 + 1476 37 1 6.2837 -5.7448 -2.3760 -1 1 0 + 1477 37 1 6.8267 -6.5318 -2.6128 -1 1 0 + 1478 37 1 7.3521 -7.2669 -2.1803 -1 1 0 + 1479 37 1 6.9759 -7.4648 -1.3355 -1 1 0 + 1480 37 1 7.0244 8.1910 -0.8438 -1 0 0 + 1481 38 2 1.6262 -7.7338 -5.6136 0 0 0 + 1482 38 2 1.8553 7.8353 -5.2341 0 -1 0 + 1483 38 2 2.2108 7.4241 -4.3260 0 -1 0 + 1484 38 2 2.2827 7.9419 -3.5497 0 -1 0 + 1485 38 2 1.4705 -8.1156 -3.1458 0 0 0 + 1486 38 2 1.8984 -7.3442 -2.7753 0 0 0 + 1487 38 2 2.7663 -7.6211 -2.4794 0 0 0 + 1488 38 2 3.3286 8.1143 -1.9988 0 -1 0 + 1489 38 2 3.2541 7.4048 -1.3969 0 -1 0 + 1490 38 2 2.3790 7.1135 -1.4671 0 -1 0 + 1491 38 2 1.6417 6.6320 -1.9568 0 -1 0 + 1492 38 2 2.0995 5.9166 -1.6229 0 -1 0 + 1493 38 2 3.0322 6.1630 -1.8010 0 -1 0 + 1494 38 2 3.9666 6.4421 -1.5343 0 -1 0 + 1495 38 2 4.3373 7.2908 -1.6226 0 -1 0 + 1496 38 2 4.8751 7.4219 -0.8355 0 -1 0 + 1497 38 2 5.5541 7.8929 -0.3321 0 -1 0 + 1498 38 2 6.4329 8.0411 -0.0129 0 -1 0 + 1499 38 2 6.0685 7.1921 0.3235 0 -1 0 + 1500 38 2 6.1004 6.2513 0.3501 0 -1 0 + 1501 38 2 6.0469 6.1090 1.3447 0 -1 0 + 1502 38 2 5.4808 5.3455 1.5562 0 -1 0 + 1503 38 2 5.8030 5.1803 0.6617 0 -1 0 + 1504 38 2 4.9496 4.6359 0.6543 0 -1 0 + 1505 38 2 4.3362 5.2111 1.1013 0 -1 0 + 1506 38 2 4.6079 5.6144 1.9351 0 -1 0 + 1507 38 2 4.7526 6.7135 1.9995 0 -1 0 + 1508 38 2 4.8771 7.6848 1.8567 0 -1 0 + 1509 38 2 4.8462 -7.7809 1.5556 0 0 0 + 1510 38 2 4.6495 -7.3523 0.6686 0 0 0 + 1511 38 2 4.6870 -7.2032 -0.3062 0 0 0 + 1512 38 2 5.4567 -7.4937 -0.8514 0 0 0 + 1513 38 2 5.4929 -6.5491 -1.1156 0 0 0 + 1514 38 2 5.9976 -6.4239 -0.3486 0 0 0 + 1515 38 2 6.4112 -7.3022 -0.3325 0 0 0 + 1516 38 2 7.2811 -7.5930 0.0465 0 0 0 + 1517 38 2 7.8139 -7.5126 -0.7500 0 0 0 + 1518 38 2 -8.1639 -7.3838 -1.6244 1 0 0 + 1519 38 2 8.1274 -7.8838 -2.4608 0 0 0 + 1520 38 2 7.8787 -7.2076 -3.1252 0 0 0 + 1521 39 1 -3.5941 0.1628 -7.3327 0 0 0 + 1522 39 1 -3.0208 0.9217 -7.2859 0 0 0 + 1523 39 1 -2.1712 1.4990 -7.2565 0 0 0 + 1524 39 1 -1.4173 1.4127 -7.7872 0 0 0 + 1525 39 1 -1.0781 1.2784 7.7853 0 0 -1 + 1526 39 1 -1.0602 1.4272 6.8606 0 0 -1 + 1527 39 1 -0.2123 1.8170 6.7634 0 0 -1 + 1528 39 1 0.6348 2.1954 7.1088 0 0 -1 + 1529 39 1 1.0064 2.1185 7.9368 0 0 -1 + 1530 39 1 0.5113 2.9026 7.8996 0 0 -1 + 1531 39 1 0.9668 3.3192 7.2758 0 0 -1 + 1532 39 1 0.5481 4.2144 7.2406 0 0 -1 + 1533 39 1 0.2836 4.7296 6.4692 0 0 -1 + 1534 39 1 -0.2649 4.5881 5.7376 0 0 -1 + 1535 39 1 -0.5840 4.3785 4.7419 0 0 -1 + 1536 39 1 -1.5757 4.3522 4.6625 0 0 -1 + 1537 39 1 -2.4630 4.2993 5.0467 0 0 -1 + 1538 39 1 -3.3150 4.2221 4.5639 0 0 -1 + 1539 39 1 -3.1731 3.2384 4.4634 0 0 -1 + 1540 39 1 -4.0874 3.3709 4.2459 0 0 -1 + 1541 39 1 -4.4588 3.6254 5.1359 0 0 -1 + 1542 39 1 -4.7227 2.7186 5.2808 0 0 -1 + 1543 39 1 -4.0889 2.4940 6.0053 0 0 -1 + 1544 39 1 -3.5160 2.7506 6.8038 0 0 -1 + 1545 39 1 -3.2189 3.6247 6.7466 0 0 -1 + 1546 39 1 -3.2208 3.8093 7.7169 0 0 -1 + 1547 39 1 -2.2950 3.5873 7.7873 0 0 -1 + 1548 39 1 -1.7018 2.9412 8.1169 0 0 -1 + 1549 39 1 -1.7298 2.3939 -7.5165 0 0 0 + 1550 39 1 -1.8887 2.3712 -6.5574 0 0 0 + 1551 39 1 -0.9285 2.4482 -6.6955 0 0 0 + 1552 39 1 -0.0887 2.1188 -6.5766 0 0 0 + 1553 39 1 0.5940 1.4508 -6.2836 0 0 0 + 1554 39 1 1.3980 1.7025 -5.8932 0 0 0 + 1555 39 1 2.0799 1.1018 -6.2630 0 0 0 + 1556 39 1 2.7245 1.8129 -6.1154 0 0 0 + 1557 39 1 3.2605 2.5230 -6.1241 0 0 0 + 1558 39 1 2.8839 2.9913 -5.4186 0 0 0 + 1559 39 1 3.2666 3.8169 -5.0578 0 0 0 + 1560 39 1 4.1713 4.0971 -5.1054 0 0 0 + 1561 40 2 5.1484 6.5758 3.2338 0 0 0 + 1562 40 2 4.2584 6.7042 2.9981 0 0 0 + 1563 40 2 4.3077 5.9356 3.5833 0 0 0 + 1564 40 2 4.1232 5.3284 2.8474 0 0 0 + 1565 40 2 3.7241 4.4956 2.5406 0 0 0 + 1566 40 2 4.3446 4.3550 1.8082 0 0 0 + 1567 40 2 5.2719 4.2473 1.6688 0 0 0 + 1568 40 2 6.2010 4.2828 1.5943 0 0 0 + 1569 40 2 7.2855 4.3320 1.7297 0 0 0 + 1570 40 2 7.7573 5.1296 1.2643 0 0 0 + 1571 40 2 -8.1481 4.5108 1.7741 1 0 0 + 1572 40 2 -7.9213 4.7290 2.6803 1 0 0 + 1573 40 2 -7.5849 4.1041 3.3228 1 0 0 + 1574 40 2 -7.4256 4.2021 4.2907 1 0 0 + 1575 40 2 -7.0015 4.7123 5.0427 1 0 0 + 1576 40 2 -6.8654 5.2370 5.8782 1 0 0 + 1577 40 2 -6.4043 4.6291 6.4598 1 0 0 + 1578 40 2 -7.0322 4.2527 7.1547 1 0 0 + 1579 40 2 -6.9860 3.4465 7.6128 1 0 0 + 1580 40 2 -6.6749 2.5668 7.4061 1 0 0 + 1581 40 2 -5.9698 3.0349 6.9513 1 0 0 + 1582 40 2 -6.0625 3.9374 7.1919 1 0 0 + 1583 40 2 -5.1560 3.9270 7.6179 1 0 0 + 1584 40 2 -4.8100 3.0672 7.9278 1 0 0 + 1585 40 2 -5.2632 2.6453 -7.8094 1 0 1 + 1586 40 2 -5.8155 2.1841 -7.1705 1 0 1 + 1587 40 2 -5.5620 2.3413 -6.2587 1 0 1 + 1588 40 2 -6.2120 1.6834 -5.8894 1 0 1 + 1589 40 2 -6.7314 1.6288 -6.6601 1 0 1 + 1590 40 2 -7.0055 1.2188 -7.4469 1 0 1 + 1591 40 2 -7.1647 1.2247 7.8996 1 0 0 + 1592 40 2 -7.2899 0.2911 7.7167 1 0 0 + 1593 40 2 -6.6115 -0.4521 7.4703 1 0 0 + 1594 40 2 -5.7394 -0.6674 7.6212 1 0 0 + 1595 40 2 -4.8986 -0.5339 8.1020 1 0 0 + 1596 40 2 -4.2964 0.1854 7.8492 1 0 0 + 1597 40 2 -3.4032 0.0949 7.4226 1 0 0 + 1598 40 2 -3.4686 0.9380 7.8357 1 0 0 + 1599 40 2 -3.9038 1.2665 -7.7917 1 0 1 + 1600 40 2 -4.0352 1.1382 -6.8857 1 0 1 + 1601 41 1 3.8411 4.1552 -3.6346 0 0 0 + 1602 41 1 4.7759 4.3472 -4.1432 0 0 0 + 1603 41 1 5.0187 5.1409 -4.6770 0 0 0 + 1604 41 1 4.1179 5.4516 -4.4336 0 0 0 + 1605 41 1 4.1247 5.9399 -3.6672 0 0 0 + 1606 41 1 4.3542 5.8699 -2.8071 0 0 0 + 1607 41 1 5.1691 5.6010 -2.4558 0 0 0 + 1608 41 1 6.0859 5.2725 -2.5349 0 0 0 + 1609 41 1 6.9248 5.1177 -2.9484 0 0 0 + 1610 41 1 7.4177 5.0466 -3.7679 0 0 0 + 1611 41 1 7.7958 4.4573 -4.3316 0 0 0 + 1612 41 1 -7.8421 3.9724 -4.6341 1 0 0 + 1613 41 1 -6.9382 4.2623 -4.5953 1 0 0 + 1614 41 1 -6.5331 3.9012 -3.7752 1 0 0 + 1615 41 1 -6.8979 3.3452 -3.1082 1 0 0 + 1616 41 1 -7.1779 3.1319 -2.2177 1 0 0 + 1617 41 1 -6.9805 3.1886 -1.2613 1 0 0 + 1618 41 1 -6.2995 3.4873 -0.5977 1 0 0 + 1619 41 1 -6.4033 4.2817 -1.0838 1 0 0 + 1620 41 1 -6.7698 5.0292 -1.6805 1 0 0 + 1621 41 1 -7.2913 5.8024 -2.0194 1 0 0 + 1622 41 1 -7.8259 6.5583 -2.2911 1 0 0 + 1623 41 1 -8.1597 7.4314 -1.9481 1 0 0 + 1624 41 1 -8.0739 7.9459 -1.0750 1 0 0 + 1625 41 1 -7.5134 -7.7429 -0.7283 1 1 0 + 1626 41 1 -7.3144 -6.8450 -0.4019 1 1 0 + 1627 41 1 -7.4301 -6.1072 0.1407 1 1 0 + 1628 41 1 -7.6729 -6.5247 0.9492 1 1 0 + 1629 41 1 -6.6873 -6.6661 0.9960 1 1 0 + 1630 41 1 -5.9395 -6.8219 1.5682 1 1 0 + 1631 41 1 -6.0667 -7.7402 1.8955 1 1 0 + 1632 41 1 -5.7418 -7.7082 2.8010 1 1 0 + 1633 41 1 -5.7043 7.7583 3.0952 1 0 0 + 1634 41 1 -6.4336 7.1498 3.2049 1 0 0 + 1635 41 1 -6.0793 6.9050 2.3050 1 0 0 + 1636 41 1 -6.6793 6.8513 1.4136 1 0 0 + 1637 41 1 -7.1115 6.5122 2.2175 1 0 0 + 1638 41 1 -7.2253 5.9916 3.0072 1 0 0 + 1639 41 1 -6.9222 6.0662 3.9414 1 0 0 + 1640 41 1 -6.5720 5.7459 4.8019 1 0 0 + 1641 42 2 -6.1782 4.0638 -8.2021 0 0 0 + 1642 42 2 -5.9249 3.1611 7.9770 0 0 -1 + 1643 42 2 -5.4200 2.4365 7.5178 0 0 -1 + 1644 42 2 -5.9076 1.5973 7.3205 0 0 -1 + 1645 42 2 -6.4148 0.7781 7.4163 0 0 -1 + 1646 42 2 -6.4354 0.7290 6.5136 0 0 -1 + 1647 42 2 -6.5908 0.8042 5.5809 0 0 -1 + 1648 42 2 -6.9058 0.3251 4.8200 0 0 -1 + 1649 42 2 -6.4957 -0.3410 4.2257 0 0 -1 + 1650 42 2 -5.7026 -0.8078 4.0968 0 0 -1 + 1651 42 2 -5.9337 -1.8013 4.0953 0 0 -1 + 1652 42 2 -5.2746 -2.4454 4.5612 0 0 -1 + 1653 42 2 -5.0874 -2.7710 5.4128 0 0 -1 + 1654 42 2 -4.1898 -2.5215 5.5233 0 0 -1 + 1655 42 2 -4.2298 -1.8951 4.7696 0 0 -1 + 1656 42 2 -3.6780 -1.5211 4.1160 0 0 -1 + 1657 42 2 -2.7480 -1.3949 4.1502 0 0 -1 + 1658 42 2 -2.2549 -1.8633 4.8084 0 0 -1 + 1659 42 2 -2.1260 -1.4290 5.6492 0 0 -1 + 1660 42 2 -2.8489 -1.5713 6.2579 0 0 -1 + 1661 42 2 -3.3335 -2.2627 6.7226 0 0 -1 + 1662 42 2 -3.4442 -1.5306 7.3258 0 0 -1 + 1663 42 2 -3.0996 -1.6747 8.1988 0 0 -1 + 1664 42 2 -2.8324 -2.3470 -7.6406 0 0 0 + 1665 42 2 -3.6849 -2.7474 -7.4487 0 0 0 + 1666 42 2 -3.6947 -3.4975 -6.8384 0 0 0 + 1667 42 2 -4.1358 -3.4550 -5.9822 0 0 0 + 1668 42 2 -4.9124 -3.1528 -5.5058 0 0 0 + 1669 42 2 -5.0514 -2.3132 -4.9119 0 0 0 + 1670 42 2 -4.5495 -1.6767 -5.3295 0 0 0 + 1671 42 2 -3.8095 -1.0609 -5.0477 0 0 0 + 1672 42 2 -3.3034 -1.2629 -4.2402 0 0 0 + 1673 42 2 -2.8637 -1.7576 -4.9453 0 0 0 + 1674 42 2 -2.2398 -2.3973 -4.6438 0 0 0 + 1675 42 2 -2.3107 -3.3429 -4.5569 0 0 0 + 1676 42 2 -2.4033 -3.0383 -3.6760 0 0 0 + 1677 42 2 -1.9107 -2.1782 -3.5723 0 0 0 + 1678 42 2 -1.7259 -1.4351 -4.0977 0 0 0 + 1679 42 2 -2.3477 -0.6934 -4.1338 0 0 0 + 1680 42 2 -2.0362 0.1301 -3.6557 0 0 0 + 1681 43 1 3.1026 -6.6714 -0.2992 0 0 0 + 1682 43 1 3.2189 -5.9432 0.3643 0 0 0 + 1683 43 1 3.1742 -5.8345 1.3151 0 0 0 + 1684 43 1 3.6327 -5.4751 2.0459 0 0 0 + 1685 43 1 3.5935 -4.8252 2.6944 0 0 0 + 1686 43 1 4.1944 -4.5598 2.0278 0 0 0 + 1687 43 1 5.1012 -4.8248 2.0924 0 0 0 + 1688 43 1 5.5750 -5.5289 2.4934 0 0 0 + 1689 43 1 5.8044 -4.9193 3.2616 0 0 0 + 1690 43 1 6.3202 -4.2634 3.7405 0 0 0 + 1691 43 1 6.2838 -3.5447 3.0816 0 0 0 + 1692 43 1 6.8832 -4.0329 2.4180 0 0 0 + 1693 43 1 7.2778 -3.2439 2.9037 0 0 0 + 1694 43 1 8.1103 -2.8264 3.0404 0 0 0 + 1695 43 1 -7.8752 -2.0655 2.7445 1 0 0 + 1696 43 1 -7.4160 -1.2722 2.6485 1 0 0 + 1697 43 1 -6.7480 -0.7727 3.0707 1 0 0 + 1698 43 1 -6.7194 -1.2273 3.8716 1 0 0 + 1699 43 1 -6.8707 -1.7629 4.7070 1 0 0 + 1700 43 1 -6.6565 -1.6771 5.6405 1 0 0 + 1701 43 1 -6.0965 -2.2170 6.0443 1 0 0 + 1702 43 1 -5.2781 -2.4051 6.4823 1 0 0 + 1703 43 1 -5.4839 -3.2578 6.0937 1 0 0 + 1704 43 1 -6.1562 -3.8476 5.7571 1 0 0 + 1705 43 1 -6.6391 -4.5840 5.5145 1 0 0 + 1706 43 1 -6.9219 -5.4674 5.5116 1 0 0 + 1707 43 1 -6.9197 -6.3870 4.9140 1 0 0 + 1708 43 1 -7.1772 -7.1116 4.4712 1 0 0 + 1709 43 1 -7.0971 -8.0237 4.1757 1 0 0 + 1710 43 1 -7.2457 7.6612 3.6870 1 -1 0 + 1711 43 1 -7.7011 6.8851 3.4903 1 -1 0 + 1712 43 1 7.8543 6.5594 3.7122 0 -1 0 + 1713 43 1 7.3780 6.1442 2.9679 0 -1 0 + 1714 43 1 8.0285 5.6551 2.4208 0 -1 0 + 1715 43 1 -8.1937 5.6627 3.3531 1 -1 0 + 1716 43 1 -7.5210 5.1709 3.8531 1 -1 0 + 1717 43 1 8.0397 4.7652 3.9914 0 -1 0 + 1718 43 1 7.2701 4.5727 3.4944 0 -1 0 + 1719 43 1 7.5938 4.1718 2.7047 0 -1 0 + 1720 43 1 7.8961 3.4621 2.1048 0 -1 0 + 1721 44 2 -3.4106 -0.3385 0.6545 0 0 0 + 1722 44 2 -3.3033 -0.5771 -0.2436 0 0 0 + 1723 44 2 -2.9173 0.1939 -0.6531 0 0 0 + 1724 44 2 -2.7333 1.1663 -0.6597 0 0 0 + 1725 44 2 -2.6681 1.9342 -1.2542 0 0 0 + 1726 44 2 -2.3630 1.5323 -1.9970 0 0 0 + 1727 44 2 -2.0145 2.4476 -1.9823 0 0 0 + 1728 44 2 -2.4612 2.9102 -2.6775 0 0 0 + 1729 44 2 -2.1133 3.7887 -2.8123 0 0 0 + 1730 44 2 -1.6921 4.3829 -2.2615 0 0 0 + 1731 44 2 -1.5047 5.2459 -2.6238 0 0 0 + 1732 44 2 -1.4611 6.1055 -3.1176 0 0 0 + 1733 44 2 -0.7019 5.6254 -3.4643 0 0 0 + 1734 44 2 -0.5183 6.2549 -4.2573 0 0 0 + 1735 44 2 -0.6024 7.0354 -4.7796 0 0 0 + 1736 44 2 -1.5998 7.2420 -4.6736 0 0 0 + 1737 44 2 -2.4625 6.9654 -5.0470 0 0 0 + 1738 44 2 -3.0617 6.6905 -5.6933 0 0 0 + 1739 44 2 -3.8372 6.9456 -5.2416 0 0 0 + 1740 44 2 -3.6602 7.5210 -4.4843 0 0 0 + 1741 44 2 -2.9087 6.9343 -4.1540 0 0 0 + 1742 44 2 -2.1815 6.8723 -3.4733 0 0 0 + 1743 44 2 -1.3025 7.2371 -3.6346 0 0 0 + 1744 44 2 -1.6078 8.1461 -3.2640 0 0 0 + 1745 44 2 -2.4307 -8.0383 -2.9558 0 1 0 + 1746 44 2 -3.2597 8.1136 -2.5961 0 0 0 + 1747 44 2 -3.6678 7.3759 -2.1953 0 0 0 + 1748 44 2 -4.2800 7.7192 -2.8090 0 0 0 + 1749 44 2 -4.7053 7.5951 -3.6425 0 0 0 + 1750 44 2 -4.6785 7.1652 -4.5188 0 0 0 + 1751 44 2 -4.5939 7.6317 -5.3645 0 0 0 + 1752 44 2 -4.7678 7.0844 -6.1035 0 0 0 + 1753 44 2 -4.9881 7.4220 -6.9695 0 0 0 + 1754 44 2 -4.9295 6.7992 -7.6127 0 0 0 + 1755 44 2 -5.3097 6.2535 8.1851 0 0 -1 + 1756 44 2 -5.3551 6.1413 7.1931 0 0 -1 + 1757 44 2 -4.8622 6.6091 6.5319 0 0 -1 + 1758 44 2 -5.4720 6.3969 5.8442 0 0 -1 + 1759 44 2 -6.0216 6.5835 5.0839 0 0 -1 + 1760 44 2 -6.5549 7.0890 4.3884 0 0 -1 + 1761 45 1 -4.9266 -7.8814 -7.2710 0 0 0 + 1762 45 1 -5.6916 8.0536 -7.4910 0 -1 0 + 1763 45 1 -5.9097 -7.6860 -6.8862 0 0 0 + 1764 45 1 -5.5398 -6.7905 -7.1421 0 0 0 + 1765 45 1 -5.4762 -6.2472 -7.9075 0 0 0 + 1766 45 1 -4.6838 -6.8096 -7.9382 0 0 0 + 1767 45 1 -4.2626 -6.8795 -7.0993 0 0 0 + 1768 45 1 -3.5906 -6.2560 -6.8806 0 0 0 + 1769 45 1 -2.8736 -5.6540 -6.5602 0 0 0 + 1770 45 1 -2.4426 -5.0651 -5.9834 0 0 0 + 1771 45 1 -2.4310 -4.2797 -5.4547 0 0 0 + 1772 45 1 -2.8534 -4.7403 -4.7634 0 0 0 + 1773 45 1 -3.1699 -5.1456 -4.0054 0 0 0 + 1774 45 1 -3.6551 -5.7575 -4.5567 0 0 0 + 1775 45 1 -3.1436 -6.5642 -4.6055 0 0 0 + 1776 45 1 -2.3543 -6.9341 -5.0249 0 0 0 + 1777 45 1 -1.7061 -7.2961 -5.7519 0 0 0 + 1778 45 1 -1.4997 -7.9407 -6.4279 0 0 0 + 1779 45 1 -1.7414 7.8376 -7.0625 0 -1 0 + 1780 45 1 -2.0958 7.4670 -6.2460 0 -1 0 + 1781 45 1 -2.6923 7.7615 -5.6460 0 -1 0 + 1782 45 1 -2.3109 -7.9752 -5.0782 0 0 0 + 1783 45 1 -1.3784 -8.1115 -5.2780 0 0 0 + 1784 45 1 -1.2136 7.4078 -5.7285 0 -1 0 + 1785 45 1 -1.7444 6.5968 -5.8170 0 -1 0 + 1786 45 1 -1.1540 6.2498 -5.2094 0 -1 0 + 1787 45 1 -1.1303 5.3243 -4.8247 0 -1 0 + 1788 45 1 -2.0083 5.0777 -4.7558 0 -1 0 + 1789 45 1 -2.9175 4.9370 -4.6265 0 -1 0 + 1790 45 1 -3.8889 4.8350 -4.6829 0 -1 0 + 1791 45 1 -4.7565 4.4822 -4.8634 0 -1 0 + 1792 45 1 -4.2119 3.7417 -4.9971 0 -1 0 + 1793 45 1 -4.2681 3.9036 -5.9274 0 -1 0 + 1794 45 1 -4.1758 4.5775 -6.6680 0 -1 0 + 1795 45 1 -3.8599 5.4484 -6.8713 0 -1 0 + 1796 45 1 -4.8367 5.4206 -7.0781 0 -1 0 + 1797 45 1 -5.5678 5.3688 -7.6741 0 -1 0 + 1798 45 1 -5.4642 4.9165 7.9410 0 -1 -1 + 1799 45 1 -6.2927 5.0490 7.4439 0 -1 -1 + 1800 45 1 -7.0449 5.4109 6.9169 0 -1 -1 + 1801 46 2 -5.0734 7.5316 -0.3499 0 0 0 + 1802 46 2 -5.2719 7.8281 -1.2529 0 0 0 + 1803 46 2 -5.0214 -7.9469 -1.8774 0 1 0 + 1804 46 2 -4.3312 -7.6413 -2.4997 0 1 0 + 1805 46 2 -5.1972 -7.8289 -2.8721 0 1 0 + 1806 46 2 -5.4596 -8.0687 -3.7145 0 1 0 + 1807 46 2 -5.7066 7.6529 -4.2796 0 0 0 + 1808 46 2 -5.6931 6.7716 -3.9927 0 0 0 + 1809 46 2 -5.9227 5.9074 -3.7542 0 0 0 + 1810 46 2 -5.4668 5.6649 -3.0010 0 0 0 + 1811 46 2 -4.6632 5.8968 -2.4222 0 0 0 + 1812 46 2 -4.1567 5.4296 -3.0748 0 0 0 + 1813 46 2 -3.5212 5.1852 -3.6929 0 0 0 + 1814 46 2 -2.8912 5.8662 -3.9581 0 0 0 + 1815 46 2 -2.5520 5.8796 -3.1025 0 0 0 + 1816 46 2 -2.0864 6.0010 -2.2059 0 0 0 + 1817 46 2 -2.0788 5.2508 -1.6313 0 0 0 + 1818 46 2 -2.6659 4.5579 -1.6752 0 0 0 + 1819 46 2 -3.0493 3.9078 -2.1747 0 0 0 + 1820 46 2 -3.1290 3.9178 -3.1621 0 0 0 + 1821 46 2 -2.4388 3.5815 -3.7168 0 0 0 + 1822 46 2 -1.6341 3.0635 -3.8064 0 0 0 + 1823 46 2 -1.2418 3.9532 -3.8469 0 0 0 + 1824 46 2 -1.8643 4.1238 -4.5160 0 0 0 + 1825 46 2 -2.4272 4.2211 -5.3349 0 0 0 + 1826 46 2 -2.2434 3.2709 -5.3844 0 0 0 + 1827 46 2 -1.3919 2.9138 -5.7560 0 0 0 + 1828 46 2 -0.5906 2.3963 -5.6612 0 0 0 + 1829 46 2 -0.8982 1.5417 -5.9970 0 0 0 + 1830 46 2 -1.7761 1.8046 -5.6164 0 0 0 + 1831 46 2 -2.0665 1.3630 -4.7865 0 0 0 + 1832 46 2 -2.9463 1.4318 -4.3533 0 0 0 + 1833 46 2 -3.6084 0.7454 -4.5125 0 0 0 + 1834 46 2 -4.1523 0.1391 -4.0850 0 0 0 + 1835 46 2 -4.7853 -0.5558 -4.0503 0 0 0 + 1836 46 2 -4.8225 -0.2681 -5.0089 0 0 0 + 1837 46 2 -5.2194 0.6267 -5.1452 0 0 0 + 1838 46 2 -5.6539 1.3977 -4.9418 0 0 0 + 1839 46 2 -5.6221 1.8203 -4.1154 0 0 0 + 1840 46 2 -6.1786 2.3169 -3.5213 0 0 0 + 1841 47 1 4.0372 -5.4311 3.5153 0 0 0 + 1842 47 1 3.8396 -4.7442 4.1617 0 0 0 + 1843 47 1 3.5098 -4.1710 3.4376 0 0 0 + 1844 47 1 3.8390 -3.4590 2.8270 0 0 0 + 1845 47 1 4.7546 -3.3806 2.6944 0 0 0 + 1846 47 1 5.2035 -3.3399 3.5734 0 0 0 + 1847 47 1 5.4228 -3.7441 4.3328 0 0 0 + 1848 47 1 5.7688 -4.1997 5.1025 0 0 0 + 1849 47 1 5.4999 -4.4422 5.9703 0 0 0 + 1850 47 1 5.7639 -3.9384 6.7484 0 0 0 + 1851 47 1 5.7824 -3.5249 7.6170 0 0 0 + 1852 47 1 5.8787 -2.6491 8.0564 0 0 0 + 1853 47 1 5.3909 -1.9476 -7.8926 0 0 1 + 1854 47 1 5.9140 -1.2419 8.1591 0 0 0 + 1855 47 1 6.8253 -0.9041 8.1743 0 0 0 + 1856 47 1 7.3073 -0.4056 -7.5522 0 0 1 + 1857 47 1 6.8346 0.1837 -6.9397 0 0 1 + 1858 47 1 7.4189 -0.0101 -6.1767 0 0 1 + 1859 47 1 8.1319 -0.6638 -6.0268 0 0 1 + 1860 47 1 -7.9139 -1.3801 -5.5417 1 0 1 + 1861 47 1 -7.1808 -1.9357 -5.2996 1 0 1 + 1862 47 1 -6.2654 -2.0831 -5.5055 1 0 1 + 1863 47 1 -5.4899 -2.0088 -6.0590 1 0 1 + 1864 47 1 -4.7162 -1.6702 -6.5209 1 0 1 + 1865 47 1 -4.5809 -2.6158 -6.5291 1 0 1 + 1866 47 1 -4.6708 -3.5086 -6.9437 1 0 1 + 1867 47 1 -4.2819 -4.3534 -6.6539 1 0 1 + 1868 47 1 -3.5720 -4.9585 -7.0711 1 0 1 + 1869 47 1 -3.5100 -4.7696 -6.1491 1 0 1 + 1870 47 1 -2.8354 -4.1971 -6.5649 1 0 1 + 1871 47 1 -3.1075 -3.5929 -5.9117 1 0 1 + 1872 47 1 -3.4290 -3.6169 -4.8968 1 0 1 + 1873 47 1 -3.2943 -2.7736 -4.4300 1 0 1 + 1874 47 1 -3.9330 -2.1146 -4.2322 1 0 1 + 1875 47 1 -4.7399 -1.6895 -4.1317 1 0 1 + 1876 47 1 -4.9011 -1.3787 -3.2777 1 0 1 + 1877 47 1 -4.9515 -0.6124 -2.6964 1 0 1 + 1878 47 1 -4.6618 0.0720 -2.1079 1 0 1 + 1879 47 1 -4.8633 0.0536 -1.1540 1 0 1 + 1880 47 1 -3.9142 0.3294 -1.2998 1 0 1 + 1881 48 2 5.5604 -4.0450 2.5597 0 0 0 + 1882 48 2 5.9687 -4.4908 1.8495 0 0 0 + 1883 48 2 5.2428 -4.1243 1.2759 0 0 0 + 1884 48 2 4.3590 -4.3252 0.9307 0 0 0 + 1885 48 2 3.8359 -5.0487 1.0735 0 0 0 + 1886 48 2 3.2781 -4.6394 0.3692 0 0 0 + 1887 48 2 2.3503 -4.2660 0.2865 0 0 0 + 1888 48 2 1.9453 -3.6522 0.9902 0 0 0 + 1889 48 2 1.1626 -3.2826 1.2991 0 0 0 + 1890 48 2 0.5285 -2.5793 1.0078 0 0 0 + 1891 48 2 1.2812 -1.9849 1.0635 0 0 0 + 1892 48 2 0.7533 -1.3335 0.5966 0 0 0 + 1893 48 2 1.2147 -1.7298 -0.1436 0 0 0 + 1894 48 2 2.1344 -2.0638 -0.0780 0 0 0 + 1895 48 2 2.7107 -1.3587 0.2974 0 0 0 + 1896 48 2 3.2149 -0.6337 0.6668 0 0 0 + 1897 48 2 2.9941 -0.2828 1.5733 0 0 0 + 1898 48 2 3.4645 -0.3800 2.4473 0 0 0 + 1899 48 2 3.3203 0.5027 2.2683 0 0 0 + 1900 48 2 3.9305 1.2057 2.4907 0 0 0 + 1901 48 2 3.9097 2.1046 2.5775 0 0 0 + 1902 48 2 3.6335 2.9223 2.2402 0 0 0 + 1903 48 2 3.1909 3.7791 1.9131 0 0 0 + 1904 48 2 3.4556 4.3352 1.1222 0 0 0 + 1905 48 2 2.7582 4.4892 0.5075 0 0 0 + 1906 48 2 2.6728 4.3720 -0.3976 0 0 0 + 1907 48 2 2.6877 3.8905 -1.2136 0 0 0 + 1908 48 2 3.4323 3.7544 -1.7870 0 0 0 + 1909 48 2 4.3030 4.2557 -1.5666 0 0 0 + 1910 48 2 4.7522 4.5932 -2.3263 0 0 0 + 1911 48 2 5.3080 4.2348 -3.0073 0 0 0 + 1912 48 2 6.2097 4.0788 -2.8362 0 0 0 + 1913 48 2 6.5609 3.3752 -3.3798 0 0 0 + 1914 48 2 7.2197 2.8865 -3.8320 0 0 0 + 1915 48 2 7.5423 2.1580 -4.3181 0 0 0 + 1916 48 2 7.8261 1.8086 -3.4782 0 0 0 + 1917 48 2 8.0460 0.8895 -3.2968 0 0 0 + 1918 48 2 -7.5878 0.7733 -2.8593 1 0 0 + 1919 48 2 -7.1484 0.4114 -3.6581 1 0 0 + 1920 48 2 -7.6254 0.4736 -4.4389 1 0 0 + 1921 49 1 -3.2336 -3.8108 3.8502 0 0 0 + 1922 49 1 -3.6852 -3.5671 4.7024 0 0 0 + 1923 49 1 -4.6033 -3.4409 4.9636 0 0 0 + 1924 49 1 -5.5384 -3.6745 4.8493 0 0 0 + 1925 49 1 -5.8645 -3.7823 3.9552 0 0 0 + 1926 49 1 -6.0210 -4.6346 3.5206 0 0 0 + 1927 49 1 -6.0247 -5.4106 3.9748 0 0 0 + 1928 49 1 -6.4274 -6.3685 3.8191 0 0 0 + 1929 49 1 -6.4003 -7.3163 3.8117 0 0 0 + 1930 49 1 -6.9096 -7.5405 3.0281 0 0 0 + 1931 49 1 -6.3819 -6.6628 2.8463 0 0 0 + 1932 49 1 -6.5092 -5.6828 2.8083 0 0 0 + 1933 49 1 -6.0236 -4.9484 2.4346 0 0 0 + 1934 49 1 -6.5962 -4.3574 1.9415 0 0 0 + 1935 49 1 -6.5184 -3.5144 1.4515 0 0 0 + 1936 49 1 -6.8107 -2.5398 1.5534 0 0 0 + 1937 49 1 -6.6342 -1.7354 1.9324 0 0 0 + 1938 49 1 -5.6455 -1.9978 2.1662 0 0 0 + 1939 49 1 -4.7746 -1.7208 2.0526 0 0 0 + 1940 49 1 -5.3154 -0.9070 2.1239 0 0 0 + 1941 49 1 -5.3627 -1.3682 1.2361 0 0 0 + 1942 49 1 -6.0149 -2.0111 0.9432 0 0 0 + 1943 49 1 -5.6063 -2.8799 1.2338 0 0 0 + 1944 49 1 -4.8072 -2.2359 1.0783 0 0 0 + 1945 49 1 -3.9195 -1.8692 1.0119 0 0 0 + 1946 49 1 -3.0800 -1.5893 0.6752 0 0 0 + 1947 49 1 -2.3457 -2.1933 0.3433 0 0 0 + 1948 49 1 -2.1825 -2.4463 -0.6220 0 0 0 + 1949 49 1 -2.2167 -2.6163 -1.5458 0 0 0 + 1950 49 1 -1.8533 -3.3541 -2.0711 0 0 0 + 1951 49 1 -1.4946 -4.0298 -2.6181 0 0 0 + 1952 49 1 -0.5987 -4.2851 -2.8035 0 0 0 + 1953 49 1 0.2847 -4.1054 -3.0282 0 0 0 + 1954 49 1 0.9979 -4.4964 -3.4521 0 0 0 + 1955 49 1 1.8552 -4.8014 -3.7785 0 0 0 + 1956 49 1 2.2676 -4.3018 -3.0885 0 0 0 + 1957 49 1 2.7500 -4.0274 -2.3037 0 0 0 + 1958 49 1 3.0649 -3.7011 -1.4653 0 0 0 + 1959 49 1 2.9505 -3.8817 -0.5466 0 0 0 + 1960 49 1 2.6630 -4.7629 -0.5789 0 0 0 + 1961 50 2 6.1498 3.5818 -0.1900 0 0 0 + 1962 50 2 7.1252 3.6743 -0.2234 0 0 0 + 1963 50 2 7.4267 4.4367 -0.7327 0 0 0 + 1964 50 2 7.7667 4.5303 -1.5912 0 0 0 + 1965 50 2 -8.0328 4.2108 -0.9752 1 0 0 + 1966 50 2 -7.2321 4.3219 -0.5641 1 0 0 + 1967 50 2 -7.1422 5.2589 -0.0497 1 0 0 + 1968 50 2 -8.1215 5.1427 -0.3926 1 0 0 + 1969 50 2 7.4439 5.5507 -0.6975 0 0 0 + 1970 50 2 7.1692 6.4224 -0.5032 0 0 0 + 1971 50 2 7.1329 7.3099 -0.1246 0 0 0 + 1972 50 2 7.0416 6.7055 0.5897 0 0 0 + 1973 50 2 6.8991 5.7319 0.5194 0 0 0 + 1974 50 2 6.7458 4.7867 0.6418 0 0 0 + 1975 50 2 6.7706 5.2816 1.4749 0 0 0 + 1976 50 2 6.8495 5.1612 2.4625 0 0 0 + 1977 50 2 6.4027 5.6039 3.2477 0 0 0 + 1978 50 2 6.1305 6.4830 3.3082 0 0 0 + 1979 50 2 5.6979 7.3156 3.5356 0 0 0 + 1980 50 2 5.6513 7.2361 2.5520 0 0 0 + 1981 50 2 5.0943 7.9108 2.8617 0 0 0 + 1982 50 2 4.9692 -7.5279 2.8354 0 1 0 + 1983 50 2 4.7868 -6.6690 3.1331 0 1 0 + 1984 50 2 5.1637 -5.8650 3.5928 0 1 0 + 1985 50 2 6.1450 -5.8784 3.5099 0 1 0 + 1986 50 2 6.7702 -5.2378 3.1413 0 1 0 + 1987 50 2 7.6340 -4.8478 3.5021 0 1 0 + 1988 50 2 -7.9268 -4.6769 3.9261 1 1 0 + 1989 50 2 -7.2552 -3.9764 4.0372 1 1 0 + 1990 50 2 -7.5669 -3.2682 3.5791 1 1 0 + 1991 50 2 -7.2080 -3.2593 2.6200 1 1 0 + 1992 50 2 -6.2563 -2.9543 2.5772 1 1 0 + 1993 50 2 -5.3233 -2.8902 2.8246 1 1 0 + 1994 50 2 -5.9965 -2.7817 3.5260 1 1 0 + 1995 50 2 -6.7993 -3.0242 4.0466 1 1 0 + 1996 50 2 -7.4506 -2.8407 4.7783 1 1 0 + 1997 50 2 8.0735 -2.5947 4.8483 0 1 0 + 1998 50 2 7.1702 -2.8045 4.6575 0 1 0 + 1999 50 2 7.3982 -1.9054 4.4658 0 1 0 + 2000 50 2 7.2047 -1.2756 3.8127 0 1 0 + 2001 51 1 6.5959 4.4721 5.7950 0 0 0 + 2002 51 1 7.3918 3.9882 6.1496 0 0 0 + 2003 51 1 7.3064 3.7873 5.2335 0 0 0 + 2004 51 1 6.9838 4.0633 4.4184 0 0 0 + 2005 51 1 6.9447 3.5633 3.5986 0 0 0 + 2006 51 1 6.5105 2.9848 2.9563 0 0 0 + 2007 51 1 6.1751 2.4254 2.2199 0 0 0 + 2008 51 1 5.3745 2.3557 1.7621 0 0 0 + 2009 51 1 4.5722 1.8916 1.6662 0 0 0 + 2010 51 1 3.7248 2.3347 1.4155 0 0 0 + 2011 51 1 3.1478 2.9304 0.9374 0 0 0 + 2012 51 1 2.7135 2.5658 1.7775 0 0 0 + 2013 51 1 2.7670 2.3295 2.6689 0 0 0 + 2014 51 1 2.7331 1.3598 2.8318 0 0 0 + 2015 51 1 3.1265 1.4734 1.9320 0 0 0 + 2016 51 1 3.7226 1.0249 1.2964 0 0 0 + 2017 51 1 3.8092 0.1282 0.8933 0 0 0 + 2018 51 1 3.9925 -0.0037 -0.0743 0 0 0 + 2019 51 1 4.6124 -0.1137 -0.7672 0 0 0 + 2020 51 1 5.4363 -0.1729 -1.2586 0 0 0 + 2021 51 1 5.8863 -0.2894 -0.4135 0 0 0 + 2022 51 1 6.7035 -0.4568 0.0069 0 0 0 + 2023 51 1 7.3719 -1.1295 0.0896 0 0 0 + 2024 51 1 7.9196 -0.7567 -0.6327 0 0 0 + 2025 51 1 7.5853 -0.6603 -1.5456 0 0 0 + 2026 51 1 6.6351 -0.4835 -1.2277 0 0 0 + 2027 51 1 6.2306 -0.0911 -2.0135 0 0 0 + 2028 51 1 6.0064 0.6241 -2.5924 0 0 0 + 2029 51 1 6.1694 0.7581 -3.4989 0 0 0 + 2030 51 1 6.1533 0.7402 -4.4484 0 0 0 + 2031 51 1 6.0450 0.9918 -5.3503 0 0 0 + 2032 51 1 5.1089 1.2345 -5.2004 0 0 0 + 2033 51 1 4.3645 1.0404 -5.8022 0 0 0 + 2034 51 1 3.8347 1.4329 -6.5100 0 0 0 + 2035 51 1 4.5203 1.8703 -7.0584 0 0 0 + 2036 51 1 5.5106 2.1912 -6.9424 0 0 0 + 2037 51 1 6.3876 2.3141 -7.3011 0 0 0 + 2038 51 1 6.8671 2.9308 -7.8711 0 0 0 + 2039 51 1 7.6948 3.1993 8.2083 0 0 -1 + 2040 51 1 -8.0665 3.6479 7.6208 1 0 -1 + 2041 52 2 -6.3218 5.9196 -6.8361 0 0 0 + 2042 52 2 -7.0661 6.3425 -7.2014 0 0 0 + 2043 52 2 -8.0019 6.5106 -7.5397 0 0 0 + 2044 52 2 7.8491 7.1712 -7.0994 -1 0 0 + 2045 52 2 7.2996 7.6073 -6.3772 -1 0 0 + 2046 52 2 7.8475 6.7708 -6.1485 -1 0 0 + 2047 52 2 8.2080 5.9814 -5.6864 -1 0 0 + 2048 52 2 -7.7851 5.1709 -5.6758 0 0 0 + 2049 52 2 -7.3919 4.3805 -5.5660 0 0 0 + 2050 52 2 -7.9684 3.7064 -5.7851 0 0 0 + 2051 52 2 -7.8289 4.3090 -6.5553 0 0 0 + 2052 52 2 -7.3166 5.1087 -6.6768 0 0 0 + 2053 52 2 -6.9653 5.3835 -7.5774 0 0 0 + 2054 52 2 -6.6091 6.0709 -8.1128 0 0 0 + 2055 52 2 -6.3963 6.1081 7.3850 0 0 -1 + 2056 52 2 -6.1121 5.8324 6.4696 0 0 -1 + 2057 52 2 -6.6267 6.1797 5.7459 0 0 -1 + 2058 52 2 -7.1862 6.5235 5.0107 0 0 -1 + 2059 52 2 -7.8607 6.1823 4.3454 0 0 -1 + 2060 52 2 7.8495 5.6444 4.6531 -1 0 -1 + 2061 52 2 -7.7747 5.3656 5.1423 0 0 -1 + 2062 52 2 -7.6827 5.9219 6.0098 0 0 -1 + 2063 52 2 -7.4966 6.8953 5.9517 0 0 -1 + 2064 52 2 -7.3037 7.8208 6.0902 0 0 -1 + 2065 52 2 -7.0041 7.8462 5.2138 0 0 -1 + 2066 52 2 -7.5671 -7.8396 5.0985 0 1 -1 + 2067 52 2 -7.7854 -7.0411 5.6035 0 1 -1 + 2068 52 2 8.1560 -6.4474 6.1421 -1 1 -1 + 2069 52 2 7.3316 -6.8247 6.2719 -1 1 -1 + 2070 52 2 6.8172 -7.6559 6.2348 -1 1 -1 + 2071 52 2 5.8644 -7.8776 6.3821 -1 1 -1 + 2072 52 2 5.3230 -7.7134 7.1758 -1 1 -1 + 2073 52 2 4.9089 -7.3274 7.9488 -1 1 -1 + 2074 52 2 4.6323 -6.4784 7.9880 -1 1 -1 + 2075 52 2 4.8947 -6.1639 -7.5671 -1 1 0 + 2076 52 2 4.1907 -6.3863 -6.9031 -1 1 0 + 2077 52 2 3.4676 -5.8197 -7.1483 -1 1 0 + 2078 52 2 2.5256 -5.9588 -6.8814 -1 1 0 + 2079 52 2 1.8487 -6.5810 -6.9706 -1 1 0 + 2080 52 2 2.4257 -7.2818 -6.7274 -1 1 0 + 2081 53 1 6.0399 0.0531 7.6725 0 0 0 + 2082 53 1 6.2895 0.7582 7.0754 0 0 0 + 2083 53 1 5.5607 0.7053 6.4081 0 0 0 + 2084 53 1 5.0316 0.8832 5.6553 0 0 0 + 2085 53 1 4.4810 1.4781 6.1645 0 0 0 + 2086 53 1 3.6084 1.6436 6.6688 0 0 0 + 2087 53 1 3.4209 2.3803 6.0491 0 0 0 + 2088 53 1 2.4454 2.2683 6.1228 0 0 0 + 2089 53 1 1.5340 1.9413 6.1418 0 0 0 + 2090 53 1 1.6413 0.9975 6.0891 0 0 0 + 2091 53 1 1.9226 0.0716 6.1168 0 0 0 + 2092 53 1 2.1649 -0.3647 6.9722 0 0 0 + 2093 53 1 3.1023 -0.6021 7.0736 0 0 0 + 2094 53 1 3.5317 -1.0957 7.8663 0 0 0 + 2095 53 1 3.6201 -2.0343 -8.1619 0 0 1 + 2096 53 1 2.8273 -1.9970 -7.6420 0 0 1 + 2097 53 1 2.8531 -1.0523 -7.8001 0 0 1 + 2098 53 1 3.0389 -0.2164 -7.5564 0 0 1 + 2099 53 1 3.8710 -0.1421 -8.0591 0 0 1 + 2100 53 1 4.0270 -0.0314 7.3920 0 0 0 + 2101 53 1 3.7701 0.4519 6.6359 0 0 0 + 2102 53 1 3.8052 0.7536 5.7870 0 0 0 + 2103 53 1 3.2230 0.0303 5.9788 0 0 0 + 2104 53 1 3.1564 -0.5238 5.2039 0 0 0 + 2105 53 1 2.8692 -0.7976 4.3223 0 0 0 + 2106 53 1 2.2382 -0.1136 4.0026 0 0 0 + 2107 53 1 1.7958 0.6784 4.3695 0 0 0 + 2108 53 1 1.1519 0.1450 4.8929 0 0 0 + 2109 53 1 0.4266 -0.3813 4.6360 0 0 0 + 2110 53 1 -0.4061 -0.6988 4.2468 0 0 0 + 2111 53 1 -0.0058 -1.4302 3.8334 0 0 0 + 2112 53 1 0.5911 -1.5410 4.6893 0 0 0 + 2113 53 1 1.2699 -2.0964 4.3120 0 0 0 + 2114 53 1 0.7270 -2.1187 3.5096 0 0 0 + 2115 53 1 1.6488 -1.9838 3.2431 0 0 0 + 2116 53 1 2.2559 -2.7163 3.2618 0 0 0 + 2117 53 1 2.7007 -3.4317 2.7939 0 0 0 + 2118 53 1 2.8048 -3.5975 1.8750 0 0 0 + 2119 53 1 3.5644 -3.8700 1.3217 0 0 0 + 2120 53 1 4.2412 -3.3356 1.7322 0 0 0 + 2121 54 2 -5.4967 -6.7887 -3.1496 0 0 0 + 2122 54 2 -5.6553 -7.0659 -2.2235 0 0 0 + 2123 54 2 -6.5388 -7.5023 -2.1782 0 0 0 + 2124 54 2 -7.3331 -7.9765 -1.8649 0 0 0 + 2125 54 2 -7.0792 7.5261 -1.7752 0 -1 0 + 2126 54 2 -7.1890 7.4218 -0.7827 0 -1 0 + 2127 54 2 -7.3952 7.9993 -0.0534 0 -1 0 + 2128 54 2 -6.5657 7.4977 0.1345 0 -1 0 + 2129 54 2 -6.0919 6.9290 -0.4711 0 -1 0 + 2130 54 2 -6.1053 7.0787 -1.4070 0 -1 0 + 2131 54 2 -5.5535 6.5328 -2.0617 0 -1 0 + 2132 54 2 -5.2731 6.9698 -2.8570 0 -1 0 + 2133 54 2 -6.1672 6.7515 -3.1270 0 -1 0 + 2134 54 2 -6.6876 6.6306 -2.3289 0 -1 0 + 2135 54 2 -6.2963 5.7723 -2.3776 0 -1 0 + 2136 54 2 -5.6983 5.4478 -1.7132 0 -1 0 + 2137 54 2 -4.9914 5.0971 -1.1895 0 -1 0 + 2138 54 2 -4.6343 4.2439 -1.3165 0 -1 0 + 2139 54 2 -4.1607 3.5158 -1.7319 0 -1 0 + 2140 54 2 -3.5894 3.0645 -2.4924 0 -1 0 + 2141 54 2 -4.1862 2.3904 -2.8494 0 -1 0 + 2142 54 2 -4.4095 2.1480 -1.8902 0 -1 0 + 2143 54 2 -3.8580 2.4053 -1.1694 0 -1 0 + 2144 54 2 -3.6606 3.0762 -0.4099 0 -1 0 + 2145 54 2 -3.2909 2.2079 -0.3580 0 -1 0 + 2146 54 2 -3.4362 1.5261 0.3072 0 -1 0 + 2147 54 2 -2.6693 1.6183 0.8396 0 -1 0 + 2148 54 2 -2.5530 2.2385 1.6647 0 -1 0 + 2149 54 2 -2.9860 2.8821 2.2696 0 -1 0 + 2150 54 2 -3.7115 3.3306 1.7913 0 -1 0 + 2151 54 2 -4.2868 2.9103 2.4507 0 -1 0 + 2152 54 2 -4.6677 2.8595 3.3286 0 -1 0 + 2153 54 2 -4.7361 2.2940 4.1479 0 -1 0 + 2154 54 2 -4.3010 1.6996 4.7108 0 -1 0 + 2155 54 2 -3.4093 2.0473 4.8769 0 -1 0 + 2156 54 2 -2.5536 1.9107 5.2870 0 -1 0 + 2157 54 2 -2.8317 2.5723 5.8923 0 -1 0 + 2158 54 2 -2.4157 3.3812 5.8551 0 -1 0 + 2159 54 2 -2.0048 3.8186 6.6135 0 -1 0 + 2160 54 2 -1.5137 4.6294 6.6768 0 -1 0 + 2161 55 1 -6.8435 2.0003 0.9931 0 0 0 + 2162 55 1 -6.1452 1.3536 0.8446 0 0 0 + 2163 55 1 -6.4173 1.3209 -0.0248 0 0 0 + 2164 55 1 -7.0821 1.5813 -0.6587 0 0 0 + 2165 55 1 -7.6354 2.3596 -1.0498 0 0 0 + 2166 55 1 -8.0594 3.0413 -1.5808 0 0 0 + 2167 55 1 7.5855 3.5225 -1.7055 -1 0 0 + 2168 55 1 7.1910 3.8876 -2.4584 -1 0 0 + 2169 55 1 7.7465 4.5382 -2.8472 -1 0 0 + 2170 55 1 7.0301 4.2036 -3.4513 -1 0 0 + 2171 55 1 6.1879 4.1840 -3.9175 -1 0 0 + 2172 55 1 5.6147 3.4793 -3.8223 -1 0 0 + 2173 55 1 5.2727 2.8993 -4.5031 -1 0 0 + 2174 55 1 4.7554 2.3057 -4.9718 -1 0 0 + 2175 55 1 4.3694 2.2299 -5.8199 -1 0 0 + 2176 55 1 5.3035 2.0983 -5.8490 -1 0 0 + 2177 55 1 6.1635 2.0490 -6.1706 -1 0 0 + 2178 55 1 7.0336 2.3695 -5.9808 -1 0 0 + 2179 55 1 7.7683 2.2168 -5.4481 -1 0 0 + 2180 55 1 -8.0210 2.7513 -4.9386 0 0 0 + 2181 55 1 7.5821 3.3254 -4.8164 -1 0 0 + 2182 55 1 6.7741 3.8285 -4.9031 -1 0 0 + 2183 55 1 6.4751 2.9972 -4.5589 -1 0 0 + 2184 55 1 6.1180 2.5761 -3.8123 -1 0 0 + 2185 55 1 6.6221 2.3601 -3.0294 -1 0 0 + 2186 55 1 6.7528 1.6674 -3.7066 -1 0 0 + 2187 55 1 7.1072 0.9508 -4.1617 -1 0 0 + 2188 55 1 7.8127 0.2825 -4.2460 -1 0 0 + 2189 55 1 -8.1059 -0.1952 -3.5940 0 0 0 + 2190 55 1 -7.2572 -0.6030 -3.7139 0 0 0 + 2191 55 1 -7.1943 -1.1110 -2.8900 0 0 0 + 2192 55 1 -6.9775 -1.7954 -2.2904 0 0 0 + 2193 55 1 -7.2460 -2.7449 -2.2477 0 0 0 + 2194 55 1 -6.6646 -2.7821 -2.9671 0 0 0 + 2195 55 1 -5.9624 -2.1983 -2.8207 0 0 0 + 2196 55 1 -5.8399 -1.1989 -2.7590 0 0 0 + 2197 55 1 -5.7213 -1.6876 -1.8608 0 0 0 + 2198 55 1 -6.0181 -1.3452 -1.0550 0 0 0 + 2199 55 1 -6.4533 -2.0124 -0.4868 0 0 0 + 2200 55 1 -6.4762 -2.3210 -1.4117 0 0 0 + 2201 56 2 -5.3216 -7.1080 -4.2424 0 0 0 + 2202 56 2 -4.5912 -6.8177 -3.7216 0 0 0 + 2203 56 2 -4.1219 -7.0469 -4.5876 0 0 0 + 2204 56 2 -3.7854 -6.8545 -5.4560 0 0 0 + 2205 56 2 -3.8694 -7.3240 -6.2758 0 0 0 + 2206 56 2 -3.6872 -7.8414 -7.0275 0 0 0 + 2207 56 2 -4.0756 7.9423 -7.6925 0 -1 0 + 2208 56 2 -4.8929 7.7142 -8.1229 0 -1 0 + 2209 56 2 -4.8914 7.0485 7.6274 0 -1 -1 + 2210 56 2 -3.9627 6.6401 7.6699 0 -1 -1 + 2211 56 2 -4.1015 7.2163 6.9505 0 -1 -1 + 2212 56 2 -4.3014 7.4527 6.0182 0 -1 -1 + 2213 56 2 -3.5028 7.6914 5.5467 0 -1 -1 + 2214 56 2 -3.5887 -7.8275 5.7753 0 0 -1 + 2215 56 2 -3.4267 -7.1745 5.0956 0 0 -1 + 2216 56 2 -2.5833 -7.0720 5.4933 0 0 -1 + 2217 56 2 -1.8515 -6.4957 5.6805 0 0 -1 + 2218 56 2 -1.7128 -5.6030 5.8167 0 0 -1 + 2219 56 2 -0.9829 -5.4999 6.4242 0 0 -1 + 2220 56 2 -0.0820 -5.8573 6.4811 0 0 -1 + 2221 56 2 0.9359 -5.7597 6.4878 0 0 -1 + 2222 56 2 1.6328 -5.8358 7.1142 0 0 -1 + 2223 56 2 1.6403 -5.3153 7.9759 0 0 -1 + 2224 56 2 1.1835 -4.6620 -7.9571 0 0 0 + 2225 56 2 0.4553 -4.1476 -8.0218 0 0 0 + 2226 56 2 -0.1210 -4.0471 7.6714 0 0 -1 + 2227 56 2 -0.9083 -4.5218 7.6187 0 0 -1 + 2228 56 2 -1.6867 -5.0668 7.2959 0 0 -1 + 2229 56 2 -2.2829 -5.2956 8.0015 0 0 -1 + 2230 56 2 -2.9532 -5.9988 7.8229 0 0 -1 + 2231 56 2 -2.4733 -6.8674 7.7615 0 0 -1 + 2232 56 2 -1.9011 -7.3252 7.0346 0 0 -1 + 2233 56 2 -1.6852 -7.5248 6.1461 0 0 -1 + 2234 56 2 -1.2737 -7.4066 5.3438 0 0 -1 + 2235 56 2 -1.0316 -7.8405 4.4581 0 0 -1 + 2236 56 2 -0.6947 7.7746 4.0575 0 -1 -1 + 2237 56 2 -1.1071 7.5619 3.2688 0 -1 -1 + 2238 56 2 -1.6870 7.7892 4.0133 0 -1 -1 + 2239 56 2 -2.5913 7.8964 3.9601 0 -1 -1 + 2240 56 2 -3.2663 7.4427 4.3838 0 -1 -1 + 2241 57 1 5.2547 8.1233 -1.4065 0 0 0 + 2242 57 1 6.1693 8.0749 -1.4869 0 0 0 + 2243 57 1 6.5142 7.2053 -1.1024 0 0 0 + 2244 57 1 7.4645 7.2774 -1.1647 0 0 0 + 2245 57 1 8.1287 6.9918 -0.5430 0 0 0 + 2246 57 1 -7.4999 6.8668 0.0416 1 0 0 + 2247 57 1 -6.7876 6.3305 0.4423 1 0 0 + 2248 57 1 -6.0754 5.8198 0.1010 1 0 0 + 2249 57 1 -5.5031 5.8329 -0.6159 1 0 0 + 2250 57 1 -4.9005 6.2821 -1.2837 1 0 0 + 2251 57 1 -4.6238 7.0936 -1.7757 1 0 0 + 2252 57 1 -4.1680 7.0642 -0.9409 1 0 0 + 2253 57 1 -3.2546 7.0792 -0.6167 1 0 0 + 2254 57 1 -3.6930 6.3165 -0.2120 1 0 0 + 2255 57 1 -4.2409 5.6355 -0.4382 1 0 0 + 2256 57 1 -3.7354 5.0297 0.0240 1 0 0 + 2257 57 1 -3.0364 5.6489 0.3930 1 0 0 + 2258 57 1 -2.7582 5.5562 1.2685 1 0 0 + 2259 57 1 -2.7369 6.4517 1.0834 1 0 0 + 2260 57 1 -3.0767 7.2327 1.6209 1 0 0 + 2261 57 1 -3.9289 6.7677 1.9483 1 0 0 + 2262 57 1 -4.2447 6.6394 2.7979 1 0 0 + 2263 57 1 -4.8967 7.0725 3.3263 1 0 0 + 2264 57 1 -4.0957 7.2531 3.7338 1 0 0 + 2265 57 1 -3.3924 7.1978 3.1077 1 0 0 + 2266 57 1 -3.9452 7.8870 2.7138 1 0 0 + 2267 57 1 -3.7113 8.1962 3.6248 1 0 0 + 2268 57 1 -3.7387 -7.9825 4.5427 1 1 0 + 2269 57 1 -2.8779 -8.0829 4.9168 1 1 0 + 2270 57 1 -2.0678 -7.6642 4.8280 1 1 0 + 2271 57 1 -1.9264 -6.7450 4.5397 1 1 0 + 2272 57 1 -2.0661 -6.4506 3.6169 1 1 0 + 2273 57 1 -1.4494 -6.3098 2.8791 1 1 0 + 2274 57 1 -0.5023 -6.0699 2.5486 1 1 0 + 2275 57 1 -1.0171 -5.3091 2.8475 1 1 0 + 2276 57 1 -1.9147 -5.4696 3.0772 1 1 0 + 2277 57 1 -2.7772 -5.8663 2.9750 1 1 0 + 2278 57 1 -3.2040 -6.5371 3.4906 1 1 0 + 2279 57 1 -3.7403 -7.0876 4.0514 1 1 0 + 2280 57 1 -4.3629 -7.2306 4.7463 1 1 0 + 2281 58 2 -7.5649 7.6417 -7.2687 0 0 0 + 2282 58 2 -8.0207 -7.9676 -7.2845 0 1 0 + 2283 58 2 7.5376 -7.5304 -7.2777 -1 1 0 + 2284 58 2 7.9588 -7.0700 -7.9890 -1 1 0 + 2285 58 2 -7.9959 -6.3401 7.9493 0 1 -1 + 2286 58 2 -8.0600 -6.0599 7.0744 0 1 -1 + 2287 58 2 -7.2749 -6.3689 6.5648 0 1 -1 + 2288 58 2 -6.5783 -6.2897 5.9544 0 1 -1 + 2289 58 2 -5.7613 -6.8594 5.8719 0 1 -1 + 2290 58 2 -5.4292 -7.6421 6.2776 0 1 -1 + 2291 58 2 -5.7531 -7.3466 7.2774 0 1 -1 + 2292 58 2 -6.6029 -7.0950 6.8119 0 1 -1 + 2293 58 2 -7.3225 -7.6688 6.6542 0 1 -1 + 2294 58 2 -8.1530 -7.3380 6.8662 0 1 -1 + 2295 58 2 7.5508 -6.9186 7.3935 -1 1 -1 + 2296 58 2 7.5370 -5.9241 7.6298 -1 1 -1 + 2297 58 2 6.9226 -5.1515 7.6150 -1 1 -1 + 2298 58 2 6.2106 -4.5674 7.7895 -1 1 -1 + 2299 58 2 5.2620 -4.7523 7.5564 -1 1 -1 + 2300 58 2 4.3601 -4.6058 7.3941 -1 1 -1 + 2301 58 2 3.5737 -4.5187 6.8029 -1 1 -1 + 2302 58 2 3.5103 -3.7490 7.3254 -1 1 -1 + 2303 58 2 2.7005 -3.7797 7.8145 -1 1 -1 + 2304 58 2 2.6043 -4.6598 7.4662 -1 1 -1 + 2305 58 2 1.8121 -4.8023 6.9971 -1 1 -1 + 2306 58 2 0.8718 -5.0926 7.3407 -1 1 -1 + 2307 58 2 0.0144 -4.8684 6.9787 -1 1 -1 + 2308 58 2 -0.5568 -4.3166 6.3847 -1 1 -1 + 2309 58 2 -0.8860 -3.5640 5.9884 -1 1 -1 + 2310 58 2 -1.4764 -3.5603 5.2184 -1 1 -1 + 2311 58 2 -2.4084 -3.3536 5.3528 -1 1 -1 + 2312 58 2 -3.1713 -3.3477 5.8943 -1 1 -1 + 2313 58 2 -3.0367 -2.4530 5.5947 -1 1 -1 + 2314 58 2 -3.3127 -1.6277 5.2752 -1 1 -1 + 2315 58 2 -3.2279 -0.7613 4.9326 -1 1 -1 + 2316 58 2 -3.7285 -0.2662 5.6249 -1 1 -1 + 2317 58 2 -4.2660 0.4728 5.9340 -1 1 -1 + 2318 58 2 -5.0553 0.9635 5.9190 -1 1 -1 + 2319 58 2 -4.9456 1.8473 6.2292 -1 1 -1 + 2320 58 2 -5.2544 2.7973 6.2206 -1 1 -1 + 2321 59 1 0.4525 -6.6704 -4.5988 0 0 0 + 2322 59 1 1.1994 -7.0538 -5.0188 0 0 0 + 2323 59 1 2.0204 -6.7913 -4.6227 0 0 0 + 2324 59 1 2.4453 -6.0560 -4.1878 0 0 0 + 2325 59 1 2.4566 -5.1931 -4.5691 0 0 0 + 2326 59 1 1.6126 -4.8582 -4.8726 0 0 0 + 2327 59 1 1.4155 -4.0196 -5.3727 0 0 0 + 2328 59 1 1.1300 -3.1718 -5.7385 0 0 0 + 2329 59 1 1.7841 -3.6113 -6.1831 0 0 0 + 2330 59 1 2.3584 -3.6381 -7.0290 0 0 0 + 2331 59 1 2.8001 -2.9735 -7.5767 0 0 0 + 2332 59 1 3.4681 -3.0193 -6.9256 0 0 0 + 2333 59 1 3.4081 -3.9459 -6.6789 0 0 0 + 2334 59 1 3.3172 -4.7749 -7.0975 0 0 0 + 2335 59 1 2.4705 -5.1371 -7.4261 0 0 0 + 2336 59 1 2.2894 -5.9936 -7.8728 0 0 0 + 2337 59 1 1.8001 -6.4968 7.8904 0 0 -1 + 2338 59 1 1.7324 -6.9218 7.0227 0 0 -1 + 2339 59 1 1.9784 -7.7806 6.6472 0 0 -1 + 2340 59 1 1.0182 -7.6639 6.6130 0 0 -1 + 2341 59 1 0.3444 -6.9405 6.7497 0 0 -1 + 2342 59 1 0.4486 -6.5874 5.8787 0 0 -1 + 2343 59 1 1.3635 -6.7856 5.8652 0 0 -1 + 2344 59 1 2.1985 -6.3757 6.1932 0 0 -1 + 2345 59 1 2.8236 -6.4609 5.5165 0 0 -1 + 2346 59 1 2.8237 -7.4397 5.4450 0 0 -1 + 2347 59 1 3.1969 -8.0860 4.7644 0 0 -1 + 2348 59 1 2.6678 -8.1384 3.9533 0 0 -1 + 2349 59 1 1.9361 -8.2027 3.4063 0 0 -1 + 2350 59 1 1.2897 7.5923 3.0653 0 -1 -1 + 2351 59 1 0.8154 8.1844 3.6479 0 -1 -1 + 2352 59 1 0.0034 -7.7516 3.8747 0 0 -1 + 2353 59 1 -0.6529 -7.0569 4.2315 0 0 -1 + 2354 59 1 -0.2934 -6.2185 4.6381 0 0 -1 + 2355 59 1 0.2775 -6.9366 4.7662 0 0 -1 + 2356 59 1 0.7171 -7.5724 5.2524 0 0 -1 + 2357 59 1 1.5508 -7.7951 5.6909 0 0 -1 + 2358 59 1 2.1618 -8.0119 4.9060 0 0 -1 + 2359 59 1 1.7051 -7.4673 4.2848 0 0 -1 + 2360 59 1 1.4254 -6.4888 3.9510 0 0 -1 + 2361 60 2 2.7955 0.4297 -1.6605 0 0 0 + 2362 60 2 1.9639 0.2729 -2.0769 0 0 0 + 2363 60 2 2.5947 0.2968 -2.7712 0 0 0 + 2364 60 2 2.1554 -0.5975 -2.9446 0 0 0 + 2365 60 2 2.5164 -1.3920 -3.3433 0 0 0 + 2366 60 2 3.1827 -2.0723 -3.6086 0 0 0 + 2367 60 2 3.4616 -2.4987 -4.4152 0 0 0 + 2368 60 2 2.5913 -2.2443 -4.7419 0 0 0 + 2369 60 2 2.2303 -2.8480 -5.4234 0 0 0 + 2370 60 2 2.7355 -3.2399 -6.1011 0 0 0 + 2371 60 2 3.0405 -2.3785 -6.2228 0 0 0 + 2372 60 2 3.6335 -1.9241 -6.8471 0 0 0 + 2373 60 2 4.3735 -2.4670 -6.7497 0 0 0 + 2374 60 2 4.6646 -3.3746 -6.7822 0 0 0 + 2375 60 2 4.3025 -3.3634 -5.9056 0 0 0 + 2376 60 2 3.4743 -3.6701 -5.5278 0 0 0 + 2377 60 2 2.6601 -4.0877 -5.3602 0 0 0 + 2378 60 2 2.8050 -4.9267 -5.7550 0 0 0 + 2379 60 2 1.9892 -4.7606 -6.0523 0 0 0 + 2380 60 2 1.4724 -4.6371 -6.8908 0 0 0 + 2381 60 2 0.5832 -4.9853 -7.0318 0 0 0 + 2382 60 2 1.2135 -5.6699 -7.3477 0 0 0 + 2383 60 2 1.4591 -5.8067 -6.4107 0 0 0 + 2384 60 2 2.2323 -5.8149 -5.8582 0 0 0 + 2385 60 2 2.0242 -6.7650 -5.8671 0 0 0 + 2386 60 2 1.0733 -6.7229 -6.0239 0 0 0 + 2387 60 2 0.6001 -6.3096 -6.7355 0 0 0 + 2388 60 2 0.0618 -6.0349 -7.4922 0 0 0 + 2389 60 2 0.7338 -6.1719 -8.1524 0 0 0 + 2390 60 2 1.1941 -6.9485 -7.8154 0 0 0 + 2391 60 2 0.9708 -7.1914 7.6436 0 0 -1 + 2392 60 2 0.4167 -7.9064 7.4576 0 0 -1 + 2393 60 2 -0.2795 7.8048 7.6898 0 -1 -1 + 2394 60 2 0.5334 7.3882 7.9695 0 -1 -1 + 2395 60 2 1.4072 7.6778 -8.0100 0 -1 0 + 2396 60 2 2.2600 7.5315 -7.7338 0 -1 0 + 2397 60 2 3.2285 7.2740 -7.7508 0 -1 0 + 2398 60 2 3.0753 6.3277 -7.6143 0 -1 0 + 2399 60 2 2.9738 6.5962 -6.6975 0 -1 0 + 2400 60 2 3.1539 6.1506 -5.8577 0 -1 0 + 2401 61 1 -7.3109 -6.6024 -4.7452 0 0 0 + 2402 61 1 -6.3991 -6.6687 -4.9991 0 0 0 + 2403 61 1 -6.8268 -7.2868 -5.6630 0 0 0 + 2404 61 1 -7.5506 -7.5618 -5.1304 0 0 0 + 2405 61 1 -7.2776 7.9848 -4.9660 0 -1 0 + 2406 61 1 -6.4466 -8.0588 -4.6079 0 0 0 + 2407 61 1 -5.8797 -7.6496 -5.2556 0 0 0 + 2408 61 1 -5.4136 8.0768 -5.6416 0 -1 0 + 2409 61 1 -5.7420 7.7905 -6.4680 0 -1 0 + 2410 61 1 -6.4136 7.8880 -5.8350 0 -1 0 + 2411 61 1 -6.5712 7.3256 -5.0883 0 -1 0 + 2412 61 1 -6.9428 6.9905 -5.9069 0 -1 0 + 2413 61 1 -7.5767 6.6851 -6.5258 0 -1 0 + 2414 61 1 -7.1908 5.9569 -6.0666 0 -1 0 + 2415 61 1 -6.4258 6.0532 -5.4516 0 -1 0 + 2416 61 1 -6.4994 5.0988 -5.4391 0 -1 0 + 2417 61 1 -5.7852 4.4169 -5.4667 0 -1 0 + 2418 61 1 -5.1719 3.6640 -5.3378 0 -1 0 + 2419 61 1 -4.6825 2.9142 -5.5838 0 -1 0 + 2420 61 1 -4.7760 2.0719 -5.2002 0 -1 0 + 2421 61 1 -5.0094 1.6095 -5.9836 0 -1 0 + 2422 61 1 -5.5020 1.2227 -6.6792 0 -1 0 + 2423 61 1 -6.1981 0.5681 -7.0778 0 -1 0 + 2424 61 1 -5.8583 -0.1209 -6.5559 0 -1 0 + 2425 61 1 -5.7014 -1.0070 -6.8794 0 -1 0 + 2426 61 1 -5.5045 -0.2122 -7.5798 0 -1 0 + 2427 61 1 -6.0092 0.2588 8.2093 0 -1 -1 + 2428 61 1 -6.0471 1.1986 -7.9541 0 -1 0 + 2429 61 1 -6.3272 2.0719 -8.1877 0 -1 0 + 2430 61 1 -7.2598 2.1078 -7.9935 0 -1 0 + 2431 61 1 -7.3345 2.4359 -7.0709 0 -1 0 + 2432 61 1 -7.6097 3.3638 -6.8807 0 -1 0 + 2433 61 1 -8.1067 3.9877 -7.4984 0 -1 0 + 2434 61 1 7.3830 3.6960 -7.2586 -1 -1 0 + 2435 61 1 6.4752 3.7006 -6.8756 -1 -1 0 + 2436 61 1 5.9803 3.0268 -6.5238 -1 -1 0 + 2437 61 1 5.1614 3.1042 -5.9654 -1 -1 0 + 2438 61 1 4.2981 3.1511 -5.3553 -1 -1 0 + 2439 61 1 4.0045 3.0575 -4.4276 -1 -1 0 + 2440 61 1 3.7408 3.0469 -3.4847 -1 -1 0 + 2441 62 2 3.7790 -1.9945 -2.6587 0 0 0 + 2442 62 2 4.3143 -1.5118 -1.9531 0 0 0 + 2443 62 2 5.1657 -1.7925 -1.8020 0 0 0 + 2444 62 2 4.7781 -2.6520 -2.1554 0 0 0 + 2445 62 2 5.4805 -3.2550 -2.4721 0 0 0 + 2446 62 2 6.1369 -3.0800 -3.0847 0 0 0 + 2447 62 2 6.5733 -2.3303 -3.5469 0 0 0 + 2448 62 2 6.3832 -2.0096 -4.4028 0 0 0 + 2449 62 2 7.1758 -2.4449 -4.4552 0 0 0 + 2450 62 2 7.2166 -3.1203 -5.2201 0 0 0 + 2451 62 2 8.1017 -3.4383 -5.4295 0 0 0 + 2452 62 2 -7.6417 -2.8487 -5.1132 1 0 0 + 2453 62 2 -6.7893 -2.7450 -4.6371 1 0 0 + 2454 62 2 -5.9118 -3.0081 -5.0090 1 0 0 + 2455 62 2 -6.6052 -3.3168 -5.5533 1 0 0 + 2456 62 2 -7.4195 -3.5017 -6.1185 1 0 0 + 2457 62 2 -7.4154 -4.4460 -6.4043 1 0 0 + 2458 62 2 -8.0079 -5.2222 -6.5635 1 0 0 + 2459 62 2 7.8155 -5.2011 -7.3184 0 0 0 + 2460 62 2 8.0192 -6.0835 -7.6024 0 0 0 + 2461 62 2 7.1901 -6.5274 -7.3836 0 0 0 + 2462 62 2 6.8484 -5.6547 -7.7269 0 0 0 + 2463 62 2 6.0232 -5.1236 -7.7581 0 0 0 + 2464 62 2 5.0682 -4.9501 -7.8299 0 0 0 + 2465 62 2 4.2081 -5.3688 -7.9587 0 0 0 + 2466 62 2 3.9150 -5.5640 7.5624 0 0 -1 + 2467 62 2 3.5865 -6.4108 7.6488 0 0 -1 + 2468 62 2 2.7212 -6.9003 7.4590 0 0 -1 + 2469 62 2 2.8712 -7.7636 7.6674 0 0 -1 + 2470 62 2 3.4768 7.9549 7.4509 0 -1 -1 + 2471 62 2 3.5094 7.0343 7.3892 0 -1 -1 + 2472 62 2 4.2937 6.7135 7.0629 0 -1 -1 + 2473 62 2 4.0474 6.0443 7.6606 0 -1 -1 + 2474 62 2 4.2381 6.8310 8.2084 0 -1 -1 + 2475 62 2 4.9156 7.0156 -7.5851 0 -1 0 + 2476 62 2 4.5888 7.3995 -6.7531 0 -1 0 + 2477 62 2 3.9874 6.9440 -6.0342 0 -1 0 + 2478 62 2 3.0571 7.0958 -5.6932 0 -1 0 + 2479 62 2 2.9693 6.6684 -4.8951 0 -1 0 + 2480 62 2 3.2755 5.9356 -4.3961 0 -1 0 + 2481 63 1 -1.0106 -5.9029 8.0002 0 0 0 + 2482 63 1 -1.8641 -6.2029 -8.0879 0 0 1 + 2483 63 1 -2.6450 -6.2661 -7.5304 0 0 1 + 2484 63 1 -2.9868 -5.3700 -7.7129 0 0 1 + 2485 63 1 -2.7310 -4.4366 -7.8839 0 0 1 + 2486 63 1 -2.5604 -3.5406 -7.6315 0 0 1 + 2487 63 1 -1.7583 -3.0271 -7.5872 0 0 1 + 2488 63 1 -1.1835 -2.2857 -7.7859 0 0 1 + 2489 63 1 -0.5323 -2.2329 7.9109 0 0 0 + 2490 63 1 0.1149 -2.5970 -7.9578 0 0 1 + 2491 63 1 -0.1320 -2.2603 -7.0663 0 0 1 + 2492 63 1 -0.9187 -1.9603 -6.5025 0 0 1 + 2493 63 1 -1.8387 -2.2155 -6.6599 0 0 1 + 2494 63 1 -2.3807 -2.9487 -6.4430 0 0 1 + 2495 63 1 -1.8498 -3.6767 -6.2721 0 0 1 + 2496 63 1 -1.2800 -4.3371 -5.8547 0 0 1 + 2497 63 1 -1.6868 -5.0663 -5.2299 0 0 1 + 2498 63 1 -0.9011 -5.4769 -4.9800 0 0 1 + 2499 63 1 -0.3310 -6.0887 -5.4542 0 0 1 + 2500 63 1 -1.0763 -5.8455 -5.9954 0 0 1 + 2501 63 1 -0.5828 -6.4126 -6.5693 0 0 1 + 2502 63 1 -0.7112 -6.9397 -5.8042 0 0 1 + 2503 63 1 -0.4402 -7.4214 -5.0315 0 0 1 + 2504 63 1 -0.6347 -6.5802 -4.5148 0 0 1 + 2505 63 1 -1.1430 -5.9991 -3.9684 0 0 1 + 2506 63 1 -0.9435 -5.2485 -3.4968 0 0 1 + 2507 63 1 -0.0937 -5.2965 -3.1319 0 0 1 + 2508 63 1 0.6012 -5.1489 -2.5877 0 0 1 + 2509 63 1 1.5477 -4.9489 -2.6636 0 0 1 + 2510 63 1 2.0372 -5.7198 -2.9513 0 0 1 + 2511 63 1 2.4284 -6.5887 -3.2498 0 0 1 + 2512 63 1 2.5217 -7.4870 -3.6839 0 0 1 + 2513 63 1 3.1006 -8.0628 -4.1552 0 0 1 + 2514 63 1 3.4022 7.4413 -4.1337 0 -1 1 + 2515 63 1 3.9184 6.6615 -4.3010 0 -1 1 + 2516 63 1 3.9833 6.1722 -5.1366 0 -1 1 + 2517 63 1 4.0168 5.2330 -5.5308 0 -1 1 + 2518 63 1 4.4321 5.0293 -6.4203 0 -1 1 + 2519 63 1 4.1434 5.9423 -6.4831 0 -1 1 + 2520 63 1 4.0593 6.6107 -7.1676 0 -1 1 + 2521 64 2 7.5004 -1.7882 -0.6491 0 0 0 + 2522 64 2 6.5455 -1.6748 -0.8188 0 0 0 + 2523 64 2 6.7408 -2.5918 -0.6773 0 0 0 + 2524 64 2 7.5901 -2.9880 -0.7586 0 0 0 + 2525 64 2 7.4659 -2.7865 -1.8138 0 0 0 + 2526 64 2 8.1814 -2.9663 -2.3725 0 0 0 + 2527 64 2 -7.5105 -3.3280 -3.0295 1 0 0 + 2528 64 2 -7.4497 -3.9423 -3.7382 1 0 0 + 2529 64 2 -7.9951 -3.9471 -4.5359 1 0 0 + 2530 64 2 -7.5529 -4.7676 -4.4850 1 0 0 + 2531 64 2 -6.6989 -4.6404 -4.0405 1 0 0 + 2532 64 2 -6.0565 -4.9517 -3.4203 1 0 0 + 2533 64 2 -5.9436 -4.7942 -2.5369 1 0 0 + 2534 64 2 -5.5849 -4.1620 -1.8861 1 0 0 + 2535 64 2 -4.7789 -3.8963 -1.2838 1 0 0 + 2536 64 2 -3.8916 -3.5212 -1.2918 1 0 0 + 2537 64 2 -3.0541 -3.3652 -1.7022 1 0 0 + 2538 64 2 -3.4087 -2.5827 -2.0451 1 0 0 + 2539 64 2 -3.2540 -1.6642 -2.1694 1 0 0 + 2540 64 2 -3.5814 -0.7471 -2.2107 1 0 0 + 2541 64 2 -3.2544 -0.5090 -1.3397 1 0 0 + 2542 64 2 -2.3611 -0.5143 -1.0364 1 0 0 + 2543 64 2 -1.4257 -0.6648 -0.8249 1 0 0 + 2544 64 2 -0.7191 -0.9952 -0.2550 1 0 0 + 2545 64 2 0.1899 -1.2046 -0.2202 1 0 0 + 2546 64 2 0.4706 -0.2370 -0.5132 1 0 0 + 2547 64 2 1.2653 -0.4908 -0.0917 1 0 0 + 2548 64 2 2.1877 -0.6042 -0.2028 1 0 0 + 2549 64 2 2.0214 0.2271 0.1697 1 0 0 + 2550 64 2 1.8119 1.1342 0.4030 1 0 0 + 2551 64 2 1.1103 1.6090 0.8666 1 0 0 + 2552 64 2 1.9019 2.0453 0.9337 1 0 0 + 2553 64 2 2.1591 2.2048 0.0373 1 0 0 + 2554 64 2 1.9392 1.9853 -0.8858 1 0 0 + 2555 64 2 1.2022 2.2839 -1.4324 1 0 0 + 2556 64 2 0.6273 2.3686 -2.1277 1 0 0 + 2557 64 2 0.4632 1.5859 -2.8061 1 0 0 + 2558 64 2 0.3692 0.7006 -3.1473 1 0 0 + 2559 64 2 0.4065 0.0187 -3.8058 1 0 0 + 2560 64 2 -0.4008 -0.1243 -4.3242 1 0 0 + 2561 65 1 6.1127 -2.9504 4.3889 0 0 0 + 2562 65 1 6.6546 -3.7448 4.4490 0 0 0 + 2563 65 1 6.7366 -3.4606 5.3684 0 0 0 + 2564 65 1 6.4877 -3.0457 6.1934 0 0 0 + 2565 65 1 5.9012 -2.7075 5.5710 0 0 0 + 2566 65 1 5.4770 -1.8852 5.2083 0 0 0 + 2567 65 1 4.6174 -1.9746 5.6189 0 0 0 + 2568 65 1 3.9863 -2.6584 5.4912 0 0 0 + 2569 65 1 3.6435 -2.9055 4.6730 0 0 0 + 2570 65 1 4.3526 -2.1907 4.6394 0 0 0 + 2571 65 1 5.2785 -2.1873 4.1895 0 0 0 + 2572 65 1 5.1328 -2.8533 4.8202 0 0 0 + 2573 65 1 4.9161 -3.6226 5.3260 0 0 0 + 2574 65 1 4.9945 -3.0281 6.1064 0 0 0 + 2575 65 1 5.3199 -2.8786 6.9625 0 0 0 + 2576 65 1 4.8255 -3.6167 7.3350 0 0 0 + 2577 65 1 4.8789 -3.9819 8.2074 0 0 0 + 2578 65 1 4.2694 -4.0996 -7.5151 0 0 1 + 2579 65 1 3.4197 -3.8088 -7.6816 0 0 1 + 2580 65 1 3.5521 -4.5081 8.0266 0 0 0 + 2581 65 1 3.1654 -5.3558 -8.1497 0 0 1 + 2582 65 1 2.6254 -5.8461 7.5475 0 0 0 + 2583 65 1 3.2622 -6.0245 6.7559 0 0 0 + 2584 65 1 2.7621 -5.2364 6.5503 0 0 0 + 2585 65 1 2.6571 -4.3850 6.1078 0 0 0 + 2586 65 1 2.3210 -3.9718 5.3209 0 0 0 + 2587 65 1 2.8168 -3.1479 5.2459 0 0 0 + 2588 65 1 2.0255 -2.6887 5.1678 0 0 0 + 2589 65 1 1.7772 -3.2777 4.4245 0 0 0 + 2590 65 1 1.2744 -3.0983 3.6158 0 0 0 + 2591 65 1 0.5764 -3.7407 3.4885 0 0 0 + 2592 65 1 -0.0466 -3.9803 4.1640 0 0 0 + 2593 65 1 -0.8916 -3.5943 3.9297 0 0 0 + 2594 65 1 -1.1044 -4.3427 4.4857 0 0 0 + 2595 65 1 -1.5842 -4.4872 3.6658 0 0 0 + 2596 65 1 -2.0318 -3.7199 4.1589 0 0 0 + 2597 65 1 -2.5478 -2.9484 4.4240 0 0 0 + 2598 65 1 -3.3922 -2.4505 4.4863 0 0 0 + 2599 65 1 -4.2434 -2.8204 4.1720 0 0 0 + 2600 65 1 -4.4719 -2.1920 3.4650 0 0 0 + 2601 66 2 0.5194 2.4211 -3.2965 0 0 0 + 2602 66 2 0.2680 2.6413 -4.2426 0 0 0 + 2603 66 2 -0.0430 1.7684 -4.5338 0 0 0 + 2604 66 2 -0.1831 0.9362 -5.0820 0 0 0 + 2605 66 2 0.7249 0.8417 -4.9114 0 0 0 + 2606 66 2 1.4764 0.2381 -4.8637 0 0 0 + 2607 66 2 2.0778 -0.0353 -5.5045 0 0 0 + 2608 66 2 2.5138 0.0994 -4.6498 0 0 0 + 2609 66 2 2.6623 -0.2900 -3.7902 0 0 0 + 2610 66 2 3.5105 -0.1422 -3.2599 0 0 0 + 2611 66 2 4.2521 0.3643 -3.6107 0 0 0 + 2612 66 2 4.3600 -0.4896 -3.9821 0 0 0 + 2613 66 2 4.8230 -0.3846 -4.7743 0 0 0 + 2614 66 2 4.3521 0.4394 -4.9560 0 0 0 + 2615 66 2 4.2123 1.3020 -4.5038 0 0 0 + 2616 66 2 3.6931 1.8169 -3.8908 0 0 0 + 2617 66 2 3.0889 2.4933 -4.1815 0 0 0 + 2618 66 2 3.5859 2.1796 -4.9867 0 0 0 + 2619 66 2 3.4465 1.3330 -5.3666 0 0 0 + 2620 66 2 2.5410 1.0870 -5.2168 0 0 0 + 2621 66 2 1.6687 1.3922 -4.8965 0 0 0 + 2622 66 2 1.0646 2.1347 -4.7193 0 0 0 + 2623 66 2 0.4094 2.4992 -5.3462 0 0 0 + 2624 66 2 0.7833 3.3728 -5.5449 0 0 0 + 2625 66 2 0.5585 3.5558 -4.6667 0 0 0 + 2626 66 2 0.8427 4.0434 -3.8861 0 0 0 + 2627 66 2 1.7022 4.0579 -3.5839 0 0 0 + 2628 66 2 2.4479 4.6269 -3.3758 0 0 0 + 2629 66 2 1.5859 5.1269 -3.5848 0 0 0 + 2630 66 2 0.8067 5.0814 -4.1635 0 0 0 + 2631 66 2 -0.0211 5.2648 -4.5378 0 0 0 + 2632 66 2 -0.1919 4.7442 -3.7759 0 0 0 + 2633 66 2 -0.1816 3.7828 -3.6232 0 0 0 + 2634 66 2 -0.4372 2.9001 -3.3399 0 0 0 + 2635 66 2 -0.5090 2.0175 -3.6039 0 0 0 + 2636 66 2 -0.6915 1.3985 -2.8059 0 0 0 + 2637 66 2 -0.1230 1.4579 -2.0375 0 0 0 + 2638 66 2 -0.0970 0.6893 -1.5296 0 0 0 + 2639 66 2 -0.9338 0.4002 -1.2727 0 0 0 + 2640 66 2 -1.6302 0.3394 -0.5358 0 0 0 + 2641 67 1 2.9089 -4.6563 1.6843 0 0 0 + 2642 67 1 2.5384 -5.4174 2.1933 0 0 0 + 2643 67 1 1.5946 -5.5676 2.1571 0 0 0 + 2644 67 1 1.2012 -6.3834 2.4062 0 0 0 + 2645 67 1 1.7204 -5.9170 3.1102 0 0 0 + 2646 67 1 2.3568 -6.1821 3.7537 0 0 0 + 2647 67 1 3.1630 -5.9086 4.2129 0 0 0 + 2648 67 1 3.5699 -5.6927 5.0534 0 0 0 + 2649 67 1 3.4957 -5.1300 5.8238 0 0 0 + 2650 67 1 2.5926 -5.3310 5.4756 0 0 0 + 2651 67 1 1.6957 -5.0506 5.8114 0 0 0 + 2652 67 1 1.3054 -4.1324 5.6567 0 0 0 + 2653 67 1 1.1944 -3.1963 5.4557 0 0 0 + 2654 67 1 0.6325 -2.4912 5.1196 0 0 0 + 2655 67 1 -0.2041 -2.2854 5.6096 0 0 0 + 2656 67 1 -0.9468 -1.6039 5.6513 0 0 0 + 2657 67 1 -1.2516 -0.7865 6.1049 0 0 0 + 2658 67 1 -0.7578 -0.5816 5.3796 0 0 0 + 2659 67 1 -1.6591 -0.6246 5.0991 0 0 0 + 2660 67 1 -2.1899 -0.2281 4.4247 0 0 0 + 2661 67 1 -3.1558 0.0066 4.2486 0 0 0 + 2662 67 1 -3.9646 -0.5102 4.0584 0 0 0 + 2663 67 1 -4.6836 -1.0793 3.7974 0 0 0 + 2664 67 1 -5.3321 -1.2683 3.0637 0 0 0 + 2665 67 1 -6.1662 -1.7170 3.0254 0 0 0 + 2666 67 1 -6.9156 -2.3495 3.1627 0 0 0 + 2667 67 1 -7.5074 -2.1536 3.9362 0 0 0 + 2668 67 1 -7.9478 -1.5486 4.5476 0 0 0 + 2669 67 1 7.9585 -0.8088 4.6752 -1 0 0 + 2670 67 1 7.8608 -0.2365 3.9586 -1 0 0 + 2671 67 1 8.0102 0.4611 3.3583 -1 0 0 + 2672 67 1 -7.6888 1.0010 2.9876 0 0 0 + 2673 67 1 -7.1775 1.5428 2.4006 0 0 0 + 2674 67 1 -6.5265 1.2903 1.8199 0 0 0 + 2675 67 1 -6.7651 0.6198 1.1518 0 0 0 + 2676 67 1 -7.1119 0.4806 0.2795 0 0 0 + 2677 67 1 -6.2429 0.1787 0.3377 0 0 0 + 2678 67 1 -5.4802 0.4032 0.9182 0 0 0 + 2679 67 1 -5.9503 0.2247 1.7328 0 0 0 + 2680 67 1 -6.0209 -0.3647 2.4861 0 0 0 + 2681 68 2 -4.4384 5.6996 8.1227 0 0 0 + 2682 68 2 -4.5282 5.4047 7.2103 0 0 0 + 2683 68 2 -5.1953 4.8586 6.8323 0 0 0 + 2684 68 2 -5.2143 4.0487 6.2947 0 0 0 + 2685 68 2 -6.1018 3.6620 6.0101 0 0 0 + 2686 68 2 -6.5315 3.0579 5.4021 0 0 0 + 2687 68 2 -7.0775 3.1102 4.6263 0 0 0 + 2688 68 2 -7.5286 3.1533 3.7173 0 0 0 + 2689 68 2 -8.0364 3.0699 2.8867 0 0 0 + 2690 68 2 7.9263 2.2143 2.9823 -1 0 0 + 2691 68 2 7.2224 1.7646 2.5443 -1 0 0 + 2692 68 2 7.1997 2.4932 1.8819 -1 0 0 + 2693 68 2 7.1897 2.2603 0.9867 -1 0 0 + 2694 68 2 7.2998 1.5172 0.3895 -1 0 0 + 2695 68 2 8.1244 1.9499 0.4755 -1 0 0 + 2696 68 2 -7.4590 2.3279 0.1851 0 0 0 + 2697 68 2 -6.6920 2.6125 -0.3005 0 0 0 + 2698 68 2 -7.3685 3.2606 -0.2089 0 0 0 + 2699 68 2 -8.1725 3.7863 -0.0666 0 0 0 + 2700 68 2 7.6517 4.5039 0.2503 -1 0 0 + 2701 68 2 -7.8339 4.5086 0.5050 0 0 0 + 2702 68 2 -7.9361 5.5194 0.7012 0 0 0 + 2703 68 2 7.9288 6.2555 0.3681 -1 0 0 + 2704 68 2 7.8883 7.2200 0.5625 -1 0 0 + 2705 68 2 7.9469 8.0450 0.0701 -1 0 0 + 2706 68 2 -8.0726 -7.4881 0.2345 0 1 0 + 2707 68 2 -7.7076 -8.0529 0.9047 0 1 0 + 2708 68 2 -7.6802 7.4155 1.1007 0 0 0 + 2709 68 2 -7.6732 6.4950 1.3320 0 0 0 + 2710 68 2 -8.0665 6.8498 2.1233 0 0 0 + 2711 68 2 -7.5123 7.5002 2.5139 0 0 0 + 2712 68 2 -6.7122 8.0247 2.4504 0 0 0 + 2713 68 2 -6.8009 7.9757 1.4777 0 0 0 + 2714 68 2 -5.9905 7.9282 0.9028 0 0 0 + 2715 68 2 -5.0200 7.6086 0.6620 0 0 0 + 2716 68 2 -4.3907 7.1263 1.0847 0 0 0 + 2717 68 2 -4.1808 7.3274 0.1406 0 0 0 + 2718 68 2 -3.3601 7.6234 0.4430 0 0 0 + 2719 68 2 -3.4119 8.1216 -0.3709 0 0 0 + 2720 68 2 -2.9322 -7.6882 0.1671 0 1 0 + 2721 69 1 -1.5976 0.6749 -7.1646 0 0 0 + 2722 69 1 -2.1315 0.5175 -6.3512 0 0 0 + 2723 69 1 -2.9993 0.1467 -6.3137 0 0 0 + 2724 69 1 -3.3516 -0.7366 -6.5492 0 0 0 + 2725 69 1 -2.7909 -1.1999 -5.9807 0 0 0 + 2726 69 1 -2.0415 -1.6779 -5.5993 0 0 0 + 2727 69 1 -1.2610 -1.1775 -5.8379 0 0 0 + 2728 69 1 -1.9102 -0.5448 -6.2433 0 0 0 + 2729 69 1 -1.2406 0.1623 -6.1369 0 0 0 + 2730 69 1 -1.4093 0.6913 -5.3762 0 0 0 + 2731 69 1 -1.0273 1.5430 -4.9017 0 0 0 + 2732 69 1 -1.5857 2.2690 -4.5824 0 0 0 + 2733 69 1 -0.7495 2.7360 -4.4447 0 0 0 + 2734 69 1 -1.1388 3.4970 -4.8416 0 0 0 + 2735 69 1 -0.4263 3.5937 -5.4453 0 0 0 + 2736 69 1 -0.2908 3.5126 -6.4598 0 0 0 + 2737 69 1 0.5868 3.1585 -6.5957 0 0 0 + 2738 69 1 1.2834 2.5356 -6.5041 0 0 0 + 2739 69 1 2.1458 2.5809 -6.9349 0 0 0 + 2740 69 1 2.6535 3.2653 -6.5329 0 0 0 + 2741 69 1 2.4754 3.9802 -5.8938 0 0 0 + 2742 69 1 3.4124 3.8845 -6.1233 0 0 0 + 2743 69 1 4.3763 3.9680 -6.1726 0 0 0 + 2744 69 1 4.0718 4.1178 -7.0260 0 0 0 + 2745 69 1 4.4153 3.9091 -7.8789 0 0 0 + 2746 69 1 4.8669 3.9573 7.7050 0 0 -1 + 2747 69 1 5.3510 3.1369 7.6474 0 0 -1 + 2748 69 1 5.4599 2.4181 -8.1441 0 0 0 + 2749 69 1 5.4514 2.0915 7.2739 0 0 -1 + 2750 69 1 5.2729 2.3059 6.4146 0 0 -1 + 2751 69 1 5.3358 3.2542 6.4250 0 0 -1 + 2752 69 1 4.6858 3.9427 6.3564 0 0 -1 + 2753 69 1 4.1976 4.6515 6.7140 0 0 -1 + 2754 69 1 4.2365 5.0819 7.5687 0 0 -1 + 2755 69 1 4.7578 5.5213 6.8509 0 0 -1 + 2756 69 1 5.1419 6.2796 6.4756 0 0 -1 + 2757 69 1 5.9286 6.4882 5.9507 0 0 -1 + 2758 69 1 5.5729 6.1576 5.1549 0 0 -1 + 2759 69 1 5.4868 5.7911 4.1922 0 0 -1 + 2760 69 1 5.1694 5.0736 3.6068 0 0 -1 + 2761 70 2 6.8320 -2.3961 6.9270 0 0 0 + 2762 70 2 6.0783 -1.9102 7.1338 0 0 0 + 2763 70 2 5.2770 -1.7705 7.5052 0 0 0 + 2764 70 2 4.5699 -1.3471 7.9960 0 0 0 + 2765 70 2 4.3302 -1.3296 -7.5186 0 0 1 + 2766 70 2 5.1629 -0.9539 -7.4435 0 0 1 + 2767 70 2 5.0303 -1.5219 -6.6932 0 0 1 + 2768 70 2 5.7180 -1.8397 -6.1184 0 0 1 + 2769 70 2 6.6582 -1.6170 -6.1856 0 0 1 + 2770 70 2 7.0253 -0.8748 -6.6388 0 0 1 + 2771 70 2 7.6467 -1.6162 -6.5826 0 0 1 + 2772 70 2 7.5971 -2.0239 -5.7063 0 0 1 + 2773 70 2 -8.1341 -2.6121 -6.3428 1 0 1 + 2774 70 2 -7.9561 -2.1857 -7.2162 1 0 1 + 2775 70 2 -7.5885 -1.8463 -8.0285 1 0 1 + 2776 70 2 -6.8111 -2.4563 -8.0157 1 0 1 + 2777 70 2 -6.3958 -2.0553 -7.2652 1 0 1 + 2778 70 2 -6.3949 -1.5745 -6.4574 1 0 1 + 2779 70 2 -6.7703 -1.0339 -5.7560 1 0 1 + 2780 70 2 -7.3890 -1.5921 -6.3373 1 0 1 + 2781 70 2 -7.0388 -2.4769 -6.3631 1 0 1 + 2782 70 2 -6.1914 -2.8632 -6.7224 1 0 1 + 2783 70 2 -5.5281 -3.4190 -6.2590 1 0 1 + 2784 70 2 -6.1158 -4.1275 -6.1646 1 0 1 + 2785 70 2 -6.5208 -4.9857 -6.4159 1 0 1 + 2786 70 2 -6.5686 -5.8009 -5.8363 1 0 1 + 2787 70 2 -5.7518 -5.7842 -5.3562 1 0 1 + 2788 70 2 -6.2435 -4.9061 -5.1825 1 0 1 + 2789 70 2 -5.6850 -4.1094 -5.1404 1 0 1 + 2790 70 2 -5.8102 -4.1556 -4.1748 1 0 1 + 2791 70 2 -6.4581 -3.4840 -3.9120 1 0 1 + 2792 70 2 -6.9191 -3.8801 -4.6813 1 0 1 + 2793 70 2 -7.1748 -4.4859 -5.4586 1 0 1 + 2794 70 2 -7.7213 -5.3001 -5.4669 1 0 1 + 2795 70 2 -7.6776 -6.2613 -5.7934 1 0 1 + 2796 70 2 -7.2982 -6.0847 -6.6370 1 0 1 + 2797 70 2 -6.5952 -6.7239 -6.6917 1 0 1 + 2798 70 2 -5.8274 -6.8110 -6.0265 1 0 1 + 2799 70 2 -5.1728 -6.8317 -5.3331 1 0 1 + 2800 70 2 -5.0116 -6.1772 -4.6863 1 0 1 + 2801 71 1 0.4162 6.0322 -3.4019 0 0 0 + 2802 71 1 0.6219 5.1261 -3.0897 0 0 0 + 2803 71 1 1.2527 5.8407 -2.9367 0 0 0 + 2804 71 1 1.3914 6.9046 -2.9730 0 0 0 + 2805 71 1 1.1846 7.5396 -2.3495 0 0 0 + 2806 71 1 1.8094 8.2016 -2.0883 0 0 0 + 2807 71 1 2.0157 -7.5271 -1.5117 0 1 0 + 2808 71 1 1.2253 -7.0739 -1.6122 0 1 0 + 2809 71 1 1.4520 -6.3805 -2.2578 0 1 0 + 2810 71 1 0.8350 -7.0145 -2.7146 0 1 0 + 2811 71 1 0.8228 -7.8674 -2.2592 0 1 0 + 2812 71 1 0.4465 -8.0736 -3.1855 0 1 0 + 2813 71 1 -0.4735 8.1900 -3.0575 0 0 0 + 2814 71 1 -0.9685 -7.7322 -2.4739 0 1 0 + 2815 71 1 -0.1654 -7.4123 -2.0916 0 1 0 + 2816 71 1 0.1818 -6.5348 -2.0419 0 1 0 + 2817 71 1 -0.4268 -5.7404 -2.0002 0 1 0 + 2818 71 1 -1.1987 -5.2354 -2.2543 0 1 0 + 2819 71 1 -2.1763 -5.3984 -2.2662 0 1 0 + 2820 71 1 -3.1053 -5.7011 -2.1997 0 1 0 + 2821 71 1 -4.0505 -5.5000 -2.0332 0 1 0 + 2822 71 1 -3.9139 -4.7316 -1.4829 0 1 0 + 2823 71 1 -2.9947 -4.4213 -1.1548 0 1 0 + 2824 71 1 -2.1207 -4.0526 -0.8745 0 1 0 + 2825 71 1 -2.8878 -3.4684 -0.6574 0 1 0 + 2826 71 1 -3.6129 -4.1016 -0.4541 0 1 0 + 2827 71 1 -3.9613 -4.9452 -0.2105 0 1 0 + 2828 71 1 -4.3625 -5.4519 -0.9283 0 1 0 + 2829 71 1 -4.5143 -6.2263 -0.3886 0 1 0 + 2830 71 1 -3.5413 -6.1604 -0.2444 0 1 0 + 2831 71 1 -3.1747 -5.3937 -0.6363 0 1 0 + 2832 71 1 -2.3643 -4.9725 -0.2860 0 1 0 + 2833 71 1 -2.0372 -4.2093 0.1375 0 1 0 + 2834 71 1 -2.4017 -3.4047 0.5090 0 1 0 + 2835 71 1 -1.9475 -3.8077 1.2357 0 1 0 + 2836 71 1 -1.4346 -4.5171 0.8644 0 1 0 + 2837 71 1 -2.2775 -4.9999 0.8410 0 1 0 + 2838 71 1 -3.1193 -5.0385 0.4440 0 1 0 + 2839 71 1 -3.7680 -4.3967 0.6715 0 1 0 + 2840 71 1 -3.4917 -3.5296 0.4755 0 1 0 + 2841 72 2 2.2052 -3.0770 -1.6560 0 0 0 + 2842 72 2 1.7247 -3.7608 -2.2275 0 0 0 + 2843 72 2 0.9435 -4.2536 -2.1236 0 0 0 + 2844 72 2 1.1512 -4.7158 -1.3417 0 0 0 + 2845 72 2 0.5981 -4.1904 -0.7393 0 0 0 + 2846 72 2 1.2922 -4.2027 -0.0367 0 0 0 + 2847 72 2 1.6837 -4.9806 -0.3833 0 0 0 + 2848 72 2 2.3334 -5.6649 -0.1521 0 0 0 + 2849 72 2 2.4515 -5.3527 0.7860 0 0 0 + 2850 72 2 1.9155 -4.6825 1.1666 0 0 0 + 2851 72 2 1.3595 -5.3600 0.7279 0 0 0 + 2852 72 2 1.1771 -6.1205 1.2399 0 0 0 + 2853 72 2 0.9675 -7.0596 1.3991 0 0 0 + 2854 72 2 0.0614 -7.3980 1.5681 0 0 0 + 2855 72 2 -0.4532 -7.9220 0.9893 0 0 0 + 2856 72 2 -1.1781 7.8937 1.1199 0 -1 0 + 2857 72 2 -0.4163 7.3162 1.1825 0 -1 0 + 2858 72 2 0.0591 7.3911 0.3189 0 -1 0 + 2859 72 2 -0.6193 7.9560 -0.0046 0 -1 0 + 2860 72 2 -1.2355 -8.0459 -0.5408 0 0 0 + 2861 72 2 -1.3034 -7.3745 -1.3272 0 0 0 + 2862 72 2 -0.7116 -6.7042 -0.9020 0 0 0 + 2863 72 2 0.0773 -6.2414 -0.5338 0 0 0 + 2864 72 2 0.7869 -5.6879 -0.1662 0 0 0 + 2865 72 2 0.5039 -4.8306 0.1575 0 0 0 + 2866 72 2 0.8009 -4.2132 0.8042 0 0 0 + 2867 72 2 0.1640 -3.8767 1.4086 0 0 0 + 2868 72 2 0.8524 -4.1034 2.0106 0 0 0 + 2869 72 2 1.7769 -4.1193 2.0836 0 0 0 + 2870 72 2 2.4693 -4.5044 2.6736 0 0 0 + 2871 72 2 1.6417 -4.9026 3.0593 0 0 0 + 2872 72 2 1.5420 -3.9638 3.0425 0 0 0 + 2873 72 2 1.6948 -3.2039 2.4392 0 0 0 + 2874 72 2 2.0352 -2.7152 1.6846 0 0 0 + 2875 72 2 2.7977 -2.3047 1.2260 0 0 0 + 2876 72 2 3.5877 -2.7740 1.1227 0 0 0 + 2877 72 2 4.4018 -3.1156 0.7097 0 0 0 + 2878 72 2 4.8043 -2.6334 -0.0242 0 0 0 + 2879 72 2 4.7271 -2.8401 -0.9948 0 0 0 + 2880 72 2 5.2014 -3.6112 -1.1305 0 0 0 + 2881 73 1 6.0593 -7.8306 7.7923 0 0 0 + 2882 73 1 6.7361 -7.1806 8.1031 0 0 0 + 2883 73 1 7.4007 -7.8601 8.0135 0 0 0 + 2884 73 1 7.5445 -7.9231 7.0918 0 0 0 + 2885 73 1 -8.0458 8.0072 7.0844 1 -1 0 + 2886 73 1 -7.7306 7.0759 6.9960 1 -1 0 + 2887 73 1 -7.0245 6.5600 6.7767 1 -1 0 + 2888 73 1 -6.1124 6.8904 6.6002 1 -1 0 + 2889 73 1 -5.3373 7.5149 6.5857 1 -1 0 + 2890 73 1 -4.8968 8.1471 7.2132 1 -1 0 + 2891 73 1 -5.2331 -7.8458 7.9896 1 0 0 + 2892 73 1 -5.9243 -7.3084 -8.0557 1 0 1 + 2893 73 1 -6.3815 -6.6278 7.9940 1 0 0 + 2894 73 1 -7.0199 -6.0613 7.6251 1 0 0 + 2895 73 1 -7.1005 -5.8981 -7.8415 1 0 1 + 2896 73 1 -7.0136 -4.9746 -7.4516 1 0 1 + 2897 73 1 -6.3913 -5.6690 -7.1684 1 0 1 + 2898 73 1 -5.7122 -5.8369 -6.4673 1 0 1 + 2899 73 1 -5.3764 -5.0394 -6.1426 1 0 1 + 2900 73 1 -4.8091 -4.3288 -5.8471 1 0 1 + 2901 73 1 -4.5821 -4.1063 -4.9633 1 0 1 + 2902 73 1 -3.9791 -4.7901 -4.8939 1 0 1 + 2903 73 1 -4.7114 -5.2558 -5.2823 1 0 1 + 2904 73 1 -5.2945 -5.0933 -4.5262 1 0 1 + 2905 73 1 -4.8751 -4.4976 -3.8335 1 0 1 + 2906 73 1 -5.3680 -4.0570 -3.1849 1 0 1 + 2907 73 1 -6.2234 -3.8208 -2.9087 1 0 1 + 2908 73 1 -7.0425 -4.3574 -2.9862 1 0 1 + 2909 73 1 -7.6860 -4.5283 -2.3209 1 0 1 + 2910 73 1 7.8662 -4.6450 -1.9802 0 0 1 + 2911 73 1 6.9494 -4.5846 -1.8176 0 0 1 + 2912 73 1 6.0248 -4.6923 -1.6617 0 0 1 + 2913 73 1 6.0712 -4.5434 -0.7359 0 0 1 + 2914 73 1 6.7546 -3.8851 -0.5006 0 0 1 + 2915 73 1 7.3399 -3.8454 -1.2447 0 0 1 + 2916 73 1 -8.1863 -3.7556 -1.7323 1 0 1 + 2917 73 1 -7.2354 -3.7069 -1.7711 1 0 1 + 2918 73 1 -6.3172 -3.4973 -1.5452 1 0 1 + 2919 73 1 -6.5111 -4.4185 -1.6620 1 0 1 + 2920 73 1 -6.8208 -5.2693 -1.9328 1 0 1 + 2921 74 2 3.9712 -2.9641 6.4727 0 0 0 + 2922 74 2 3.7953 -3.5939 5.7713 0 0 0 + 2923 74 2 3.4889 -4.0366 4.9609 0 0 0 + 2924 74 2 2.7959 -4.4581 4.5145 0 0 0 + 2925 74 2 2.6904 -4.9813 3.7385 0 0 0 + 2926 74 2 2.9251 -5.6697 3.1165 0 0 0 + 2927 74 2 3.4534 -6.4125 2.9289 0 0 0 + 2928 74 2 2.7413 -7.0254 2.8470 0 0 0 + 2929 74 2 1.8777 -7.1106 3.1872 0 0 0 + 2930 74 2 0.9159 -7.2220 3.3590 0 0 0 + 2931 74 2 0.2628 -6.5680 3.6869 0 0 0 + 2932 74 2 0.5742 -5.8446 3.0916 0 0 0 + 2933 74 2 0.5068 -5.6867 2.1574 0 0 0 + 2934 74 2 0.5045 -4.9640 1.5558 0 0 0 + 2935 74 2 -0.2377 -4.6383 2.1167 0 0 0 + 2936 74 2 -1.1062 -4.9220 1.8509 0 0 0 + 2937 74 2 -1.6984 -5.6387 1.5183 0 0 0 + 2938 74 2 -2.2100 -5.2307 2.1900 0 0 0 + 2939 74 2 -2.9242 -5.6879 1.6975 0 0 0 + 2940 74 2 -3.7235 -5.0836 1.5673 0 0 0 + 2941 74 2 -4.3143 -5.1528 2.3276 0 0 0 + 2942 74 2 -4.9179 -4.8094 1.7001 0 0 0 + 2943 74 2 -4.6726 -5.2451 0.8968 0 0 0 + 2944 74 2 -4.0052 -5.9147 0.6191 0 0 0 + 2945 74 2 -3.5210 -6.6770 0.9622 0 0 0 + 2946 74 2 -2.7164 -6.9827 1.3075 0 0 0 + 2947 74 2 -1.8157 -7.3230 1.6910 0 0 0 + 2948 74 2 -0.8976 -7.0637 1.8576 0 0 0 + 2949 74 2 -0.8469 -7.9980 2.0320 0 0 0 + 2950 74 2 -0.7153 7.4919 2.2553 0 -1 0 + 2951 74 2 -1.0061 6.6390 1.8962 0 -1 0 + 2952 74 2 -1.7005 6.2922 1.2825 0 -1 0 + 2953 74 2 -1.1152 5.6569 0.8604 0 -1 0 + 2954 74 2 -0.4460 4.9572 0.7140 0 -1 0 + 2955 74 2 0.0861 4.2943 0.9934 0 -1 0 + 2956 74 2 0.9390 4.3773 0.6487 0 -1 0 + 2957 74 2 1.5352 5.2000 0.6343 0 -1 0 + 2958 74 2 1.6205 4.6248 -0.1811 0 -1 0 + 2959 74 2 1.6115 3.6434 -0.2147 0 -1 0 + 2960 74 2 1.7634 3.2384 -1.0709 0 -1 0 + 2961 75 1 6.9342 0.5823 -5.0870 0 0 0 + 2962 75 1 6.7740 -0.2816 -4.7481 0 0 0 + 2963 75 1 6.8070 -0.1934 -3.7187 0 0 0 + 2964 75 1 6.1329 -0.3231 -3.1066 0 0 0 + 2965 75 1 6.9775 -0.8707 -2.8982 0 0 0 + 2966 75 1 7.4574 -0.0558 -2.7352 0 0 0 + 2967 75 1 6.9904 0.6676 -3.0617 0 0 0 + 2968 75 1 7.0433 1.3720 -2.5419 0 0 0 + 2969 75 1 7.9779 1.2648 -2.3569 0 0 0 + 2970 75 1 -7.8678 1.3403 -1.6224 1 0 0 + 2971 75 1 -7.6618 2.1674 -2.0714 1 0 0 + 2972 75 1 -7.7303 2.5825 -2.9449 1 0 0 + 2973 75 1 -8.0851 2.7617 -3.8777 1 0 0 + 2974 75 1 -7.1600 3.0226 -4.0742 1 0 0 + 2975 75 1 -6.2896 2.9428 -4.4428 1 0 0 + 2976 75 1 -5.6914 2.5186 -5.0789 1 0 0 + 2977 75 1 -5.1478 2.8991 -4.4133 1 0 0 + 2978 75 1 -4.6102 2.3171 -3.9774 1 0 0 + 2979 75 1 -4.3406 3.1294 -3.6253 1 0 0 + 2980 75 1 -4.7868 3.9082 -3.9850 1 0 0 + 2981 75 1 -5.5744 4.2865 -4.3239 1 0 0 + 2982 75 1 -5.7796 5.1955 -4.5687 1 0 0 + 2983 75 1 -5.5576 6.0725 -4.7381 1 0 0 + 2984 75 1 -5.6325 6.7513 -5.4743 1 0 0 + 2985 75 1 -5.8566 6.7071 -6.3672 1 0 0 + 2986 75 1 -6.0665 6.9692 -7.2628 1 0 0 + 2987 75 1 -6.0248 6.9972 8.1915 1 0 -1 + 2988 75 1 -5.7664 7.8061 7.6094 1 0 -1 + 2989 75 1 -6.4924 7.9835 6.8254 1 0 -1 + 2990 75 1 -6.7996 7.3973 7.5078 1 0 -1 + 2991 75 1 -7.1398 7.0054 -8.0462 1 0 0 + 2992 75 1 -6.6210 7.7979 -7.9479 1 0 0 + 2993 75 1 -6.8441 -7.8060 -7.6166 1 1 0 + 2994 75 1 -6.8975 -8.0963 -6.7354 1 1 0 + 2995 75 1 -7.6972 -7.9115 -6.2602 1 1 0 + 2996 75 1 -7.7437 7.6612 -5.8181 1 0 0 + 2997 75 1 7.9529 8.1948 -5.5797 0 0 0 + 2998 75 1 7.9572 -7.2812 -5.6822 0 1 0 + 2999 75 1 8.0706 -6.5887 -5.1105 0 1 0 + 3000 75 1 -8.1006 -5.8448 -4.5805 1 1 0 + 3001 76 2 -1.2817 -1.4459 4.6417 0 0 0 + 3002 76 2 -1.5550 -0.9458 3.9243 0 0 0 + 3003 76 2 -1.7657 -0.4986 3.0806 0 0 0 + 3004 76 2 -2.5235 -1.0329 2.8672 0 0 0 + 3005 76 2 -3.4207 -1.2651 2.9530 0 0 0 + 3006 76 2 -4.2880 -1.0084 2.7139 0 0 0 + 3007 76 2 -3.7989 -1.8206 2.2710 0 0 0 + 3008 76 2 -2.9706 -2.2995 2.2170 0 0 0 + 3009 76 2 -2.4426 -2.5364 1.4391 0 0 0 + 3010 76 2 -1.6504 -2.8062 1.9911 0 0 0 + 3011 76 2 -1.8923 -2.1602 2.7060 0 0 0 + 3012 76 2 -2.6296 -2.0983 3.2592 0 0 0 + 3013 76 2 -3.4115 -2.6017 3.0926 0 0 0 + 3014 76 2 -4.1253 -3.1984 2.9040 0 0 0 + 3015 76 2 -4.0659 -3.8545 2.1806 0 0 0 + 3016 76 2 -3.2609 -3.5633 2.6174 0 0 0 + 3017 76 2 -2.4587 -3.1519 2.8731 0 0 0 + 3018 76 2 -1.4788 -3.1211 2.9561 0 0 0 + 3019 76 2 -1.5651 -2.7924 3.8302 0 0 0 + 3020 76 2 -1.2288 -1.9586 3.5857 0 0 0 + 3021 76 2 -0.8677 -1.0994 3.2096 0 0 0 + 3022 76 2 -0.0119 -0.6477 3.2099 0 0 0 + 3023 76 2 0.5280 -0.5058 2.3917 0 0 0 + 3024 76 2 1.2041 0.0316 2.7753 0 0 0 + 3025 76 2 1.5986 0.6220 3.3671 0 0 0 + 3026 76 2 1.5860 1.4829 2.8643 0 0 0 + 3027 76 2 1.2693 1.9757 3.7173 0 0 0 + 3028 76 2 0.7292 2.6441 4.0742 0 0 0 + 3029 76 2 0.2422 3.3387 4.5966 0 0 0 + 3030 76 2 1.1257 3.6586 4.3508 0 0 0 + 3031 76 2 1.0423 3.4077 3.4276 0 0 0 + 3032 76 2 1.7950 4.0017 3.2022 0 0 0 + 3033 76 2 2.1550 3.3090 3.7335 0 0 0 + 3034 76 2 1.8640 2.8698 4.5271 0 0 0 + 3035 76 2 1.1154 2.7083 5.0388 0 0 0 + 3036 76 2 1.3910 1.8104 4.8281 0 0 0 + 3037 76 2 2.2991 1.6809 4.5480 0 0 0 + 3038 76 2 2.3122 2.2059 3.7482 0 0 0 + 3039 76 2 1.7799 2.6092 3.0626 0 0 0 + 3040 76 2 1.4281 3.2741 2.4595 0 0 0 + 3041 77 1 -1.8315 5.5893 6.2620 0 0 0 + 3042 77 1 -2.4674 5.7019 5.5694 0 0 0 + 3043 77 1 -3.0441 5.2930 4.9227 0 0 0 + 3044 77 1 -3.4259 5.2972 4.0762 0 0 0 + 3045 77 1 -4.0494 4.6488 4.0111 0 0 0 + 3046 77 1 -4.8058 4.2801 4.4482 0 0 0 + 3047 77 1 -5.5411 4.1606 5.0775 0 0 0 + 3048 77 1 -6.2021 3.9297 4.4189 0 0 0 + 3049 77 1 -6.4192 3.5183 3.6054 0 0 0 + 3050 77 1 -6.2622 3.4131 2.6147 0 0 0 + 3051 77 1 -6.2505 3.3400 1.6362 0 0 0 + 3052 77 1 -5.6075 3.3997 0.9667 0 0 0 + 3053 77 1 -5.8485 2.5623 0.6288 0 0 0 + 3054 77 1 -5.1063 2.0430 0.5823 0 0 0 + 3055 77 1 -5.3775 1.4730 -0.2050 0 0 0 + 3056 77 1 -4.8140 0.9978 -0.7989 0 0 0 + 3057 77 1 -4.8026 1.2084 -1.7987 0 0 0 + 3058 77 1 -5.7620 1.2550 -1.7990 0 0 0 + 3059 77 1 -6.2712 1.7999 -2.4255 0 0 0 + 3060 77 1 -6.9910 1.7089 -2.9882 0 0 0 + 3061 77 1 -7.5555 1.8035 -3.8054 0 0 0 + 3062 77 1 -7.5052 1.6475 -4.7822 0 0 0 + 3063 77 1 -7.8312 1.5967 -5.6538 0 0 0 + 3064 77 1 7.7354 1.2156 -5.9110 -1 0 0 + 3065 77 1 6.8572 0.9468 -6.1843 -1 0 0 + 3066 77 1 6.3632 0.1786 -5.8624 -1 0 0 + 3067 77 1 5.9758 -0.6707 -5.9288 -1 0 0 + 3068 77 1 6.0363 -1.0977 -6.8274 -1 0 0 + 3069 77 1 6.5269 -1.7933 -7.2356 -1 0 0 + 3070 77 1 6.8594 -1.9949 -8.1140 -1 0 0 + 3071 77 1 7.0473 -2.8569 7.9839 -1 0 -1 + 3072 77 1 7.2085 -3.7922 7.9840 -1 0 -1 + 3073 77 1 6.8554 -4.1697 7.1288 -1 0 -1 + 3074 77 1 6.6687 -4.9003 6.5755 -1 0 -1 + 3075 77 1 5.8194 -5.2925 6.7968 -1 0 -1 + 3076 77 1 5.4828 -6.1114 6.4093 -1 0 -1 + 3077 77 1 5.3889 -6.6957 7.1820 -1 0 -1 + 3078 77 1 6.3215 -7.0370 7.1217 -1 0 -1 + 3079 77 1 6.4387 -6.2449 7.5754 -1 0 -1 + 3080 77 1 6.6548 -6.1188 6.7047 -1 0 -1 + 3081 78 2 -0.1144 5.6959 -5.5731 0 0 0 + 3082 78 2 0.5363 5.0237 -5.7555 0 0 0 + 3083 78 2 0.7649 4.1408 -6.2806 0 0 0 + 3084 78 2 0.4312 4.3368 -7.1589 0 0 0 + 3085 78 2 -0.3565 4.2460 -7.8534 0 0 0 + 3086 78 2 -1.2519 4.1110 8.1531 0 0 -1 + 3087 78 2 -1.8538 4.7273 7.6672 0 0 -1 + 3088 78 2 -0.9889 5.0411 7.8806 0 0 -1 + 3089 78 2 -0.4565 4.5466 7.3694 0 0 -1 + 3090 78 2 -0.6182 4.0205 6.6269 0 0 -1 + 3091 78 2 -1.1819 3.6024 7.2484 0 0 -1 + 3092 78 2 -1.3548 2.6809 7.0174 0 0 -1 + 3093 78 2 -0.8919 2.3698 6.2240 0 0 -1 + 3094 78 2 0.0060 2.2917 5.7702 0 0 -1 + 3095 78 2 0.1852 2.0898 4.8117 0 0 -1 + 3096 78 2 0.2475 1.7127 3.9644 0 0 -1 + 3097 78 2 0.7443 1.0365 4.4913 0 0 -1 + 3098 78 2 0.5446 0.9964 5.4356 0 0 -1 + 3099 78 2 0.7008 0.7449 6.3406 0 0 -1 + 3100 78 2 -0.1419 0.4801 6.0336 0 0 -1 + 3101 78 2 -1.0332 0.4454 5.6882 0 0 -1 + 3102 78 2 -1.2409 0.3176 4.7706 0 0 -1 + 3103 78 2 -1.6957 0.7961 3.9699 0 0 -1 + 3104 78 2 -1.1422 0.0552 3.6764 0 0 -1 + 3105 78 2 -0.3302 0.4836 3.9764 0 0 -1 + 3106 78 2 -0.2820 0.9524 4.8036 0 0 -1 + 3107 78 2 -0.5845 1.4288 5.5895 0 0 -1 + 3108 78 2 -1.4592 1.3218 5.1290 0 0 -1 + 3109 78 2 -2.1333 0.6468 5.3721 0 0 -1 + 3110 78 2 -2.4826 -0.2116 5.6582 0 0 -1 + 3111 78 2 -3.0180 -0.3755 6.3910 0 0 -1 + 3112 78 2 -2.6795 -0.7867 7.2467 0 0 -1 + 3113 78 2 -2.2935 -0.0539 7.7751 0 0 -1 + 3114 78 2 -1.7200 0.5145 -8.1975 0 0 0 + 3115 78 2 -0.7647 0.4276 -8.1330 0 0 0 + 3116 78 2 0.1856 0.6136 -7.9183 0 0 0 + 3117 78 2 0.6616 1.3907 -7.7027 0 0 0 + 3118 78 2 0.6946 2.3051 -7.3666 0 0 0 + 3119 78 2 -0.2844 2.3614 -7.6186 0 0 0 + 3120 78 2 -0.9296 2.2674 8.0967 0 0 -1 + 3121 79 1 -8.0941 2.6759 4.9747 0 0 0 + 3122 79 1 -7.6157 3.3722 5.4347 0 0 0 + 3123 79 1 -7.1003 3.9935 6.0455 0 0 0 + 3124 79 1 -7.0933 3.0918 6.5466 0 0 0 + 3125 79 1 -7.2080 2.3740 5.9164 0 0 0 + 3126 79 1 -6.9138 1.9214 5.1566 0 0 0 + 3127 79 1 -6.4246 1.3576 4.6159 0 0 0 + 3128 79 1 -5.8571 0.8659 3.9300 0 0 0 + 3129 79 1 -5.9144 0.1116 3.3629 0 0 0 + 3130 79 1 -5.0659 0.0628 3.8891 0 0 0 + 3131 79 1 -4.7708 -0.4477 4.6477 0 0 0 + 3132 79 1 -4.4853 -0.8688 5.4274 0 0 0 + 3133 79 1 -4.2955 -1.6414 5.9900 0 0 0 + 3134 79 1 -5.1853 -1.6998 5.6826 0 0 0 + 3135 79 1 -5.0988 -1.4298 4.7860 0 0 0 + 3136 79 1 -5.9610 -1.2211 5.0177 0 0 0 + 3137 79 1 -5.4716 -0.5485 5.4255 0 0 0 + 3138 79 1 -5.7130 0.1909 5.9274 0 0 0 + 3139 79 1 -5.6818 0.4380 4.9185 0 0 0 + 3140 79 1 -4.8376 0.8873 4.8537 0 0 0 + 3141 79 1 -5.3301 1.6993 4.8322 0 0 0 + 3142 79 1 -5.9495 1.6832 5.5168 0 0 0 + 3143 79 1 -6.0888 2.1984 6.2602 0 0 0 + 3144 79 1 -6.8318 1.7552 6.7369 0 0 0 + 3145 79 1 -7.4307 1.2980 6.1721 0 0 0 + 3146 79 1 -7.6507 0.4642 5.6465 0 0 0 + 3147 79 1 8.0203 0.4001 5.0932 -1 0 0 + 3148 79 1 7.4313 0.6006 4.3732 -1 0 0 + 3149 79 1 6.5206 0.4132 4.1884 -1 0 0 + 3150 79 1 6.3158 -0.4789 3.9429 -1 0 0 + 3151 79 1 6.0411 -1.4253 4.0369 -1 0 0 + 3152 79 1 6.3784 -1.9618 4.7345 -1 0 0 + 3153 79 1 6.8196 -2.1411 5.5833 -1 0 0 + 3154 79 1 7.5996 -2.6124 5.9755 -1 0 0 + 3155 79 1 7.7464 -3.4518 5.4314 -1 0 0 + 3156 79 1 -7.7777 -3.2166 5.7260 0 0 0 + 3157 79 1 -7.6438 -3.1974 6.7293 0 0 0 + 3158 79 1 -7.3382 -3.5114 7.5899 0 0 0 + 3159 79 1 -7.8103 -4.0197 8.1482 0 0 0 + 3160 79 1 -7.9347 -4.4569 -7.3933 0 0 1 + 3161 80 2 -7.5891 -5.2874 7.9547 0 0 0 + 3162 80 2 -6.9871 -4.5784 7.6441 0 0 0 + 3163 80 2 -6.4150 -4.4882 6.8386 0 0 0 + 3164 80 2 -5.5313 -4.2697 6.6682 0 0 0 + 3165 80 2 -4.8372 -3.6055 6.7143 0 0 0 + 3166 80 2 -4.0589 -3.1064 6.4477 0 0 0 + 3167 80 2 -4.0936 -3.2095 7.3810 0 0 0 + 3168 80 2 -4.7128 -3.9233 7.6706 0 0 0 + 3169 80 2 -5.1956 -4.1100 -7.9116 0 0 1 + 3170 80 2 -5.5378 -4.1453 -6.9820 0 0 1 + 3171 80 2 -5.0120 -4.8925 -7.0881 0 0 1 + 3172 80 2 -4.6158 -5.8050 -7.1836 0 0 1 + 3173 80 2 -4.4083 -5.4022 -6.3706 0 0 1 + 3174 80 2 -3.8373 -5.7521 -5.7152 0 0 1 + 3175 80 2 -2.9850 -6.0000 -5.3578 0 0 1 + 3176 80 2 -2.0502 -5.9952 -5.7025 0 0 1 + 3177 80 2 -1.4274 -6.5009 -5.2261 0 0 1 + 3178 80 2 -1.3955 -7.2929 -4.6706 0 0 1 + 3179 80 2 -1.3599 -8.1603 -4.1951 0 0 1 + 3180 80 2 -2.2356 7.8876 -4.0969 0 -1 1 + 3181 80 2 -3.0769 7.9674 -3.7280 0 -1 1 + 3182 80 2 -3.4862 7.2498 -3.2879 0 -1 1 + 3183 80 2 -4.1697 6.7320 -2.9419 0 -1 1 + 3184 80 2 -4.6713 6.3526 -3.7217 0 -1 1 + 3185 80 2 -3.8060 6.3117 -4.0619 0 -1 1 + 3186 80 2 -3.2834 6.1696 -4.8608 0 -1 1 + 3187 80 2 -2.3440 5.9486 -4.7910 0 -1 1 + 3188 80 2 -1.6836 6.3336 -4.1419 0 -1 1 + 3189 80 2 -1.7995 5.4374 -3.7977 0 -1 1 + 3190 80 2 -2.1763 4.6022 -3.6147 0 -1 1 + 3191 80 2 -2.6015 4.8160 -2.7150 0 -1 1 + 3192 80 2 -3.0024 5.5359 -2.2200 0 -1 1 + 3193 80 2 -2.7350 6.1103 -1.4854 0 -1 1 + 3194 80 2 -2.3259 6.5185 -0.7205 0 -1 1 + 3195 80 2 -2.1796 6.1758 0.2398 0 -1 1 + 3196 80 2 -2.0711 5.3155 0.6096 0 -1 1 + 3197 80 2 -1.4964 4.5998 0.6437 0 -1 1 + 3198 80 2 -1.3284 4.4775 -0.2668 0 -1 1 + 3199 80 2 -1.2092 4.1177 -1.0795 0 -1 1 + 3200 80 2 -0.5103 4.2055 -1.7125 0 -1 1 + 3201 81 1 2.0033 6.8319 3.7207 0 0 0 + 3202 81 1 2.8698 6.6677 4.1319 0 0 0 + 3203 81 1 3.0299 6.0722 3.4814 0 0 0 + 3204 81 1 3.0646 5.1769 3.1667 0 0 0 + 3205 81 1 3.4298 4.4601 3.6173 0 0 0 + 3206 81 1 2.9378 3.8412 3.0576 0 0 0 + 3207 81 1 2.3302 3.7509 2.3123 0 0 0 + 3208 81 1 2.0286 3.4078 1.4806 0 0 0 + 3209 81 1 2.3126 3.4764 0.5326 0 0 0 + 3210 81 1 2.6501 3.1391 -0.3302 0 0 0 + 3211 81 1 2.7101 2.5634 -1.0810 0 0 0 + 3212 81 1 2.5486 2.0625 -1.9444 0 0 0 + 3213 81 1 2.7357 1.4122 -2.6292 0 0 0 + 3214 81 1 3.5080 0.9971 -2.1118 0 0 0 + 3215 81 1 3.6540 0.1128 -2.2834 0 0 0 + 3216 81 1 3.9842 -0.5815 -1.7188 0 0 0 + 3217 81 1 3.7038 -0.6103 -0.7882 0 0 0 + 3218 81 1 3.8569 -1.1996 -0.0919 0 0 0 + 3219 81 1 3.6434 -1.8700 0.6035 0 0 0 + 3220 81 1 3.2325 -2.4924 0.0348 0 0 0 + 3221 81 1 2.8472 -2.8769 -0.7445 0 0 0 + 3222 81 1 2.9113 -2.2440 -1.4138 0 0 0 + 3223 81 1 3.4418 -1.4270 -1.5531 0 0 0 + 3224 81 1 2.8876 -0.6259 -1.7148 0 0 0 + 3225 81 1 2.2139 -0.1700 -1.1807 0 0 0 + 3226 81 1 1.3499 0.1763 -1.1777 0 0 0 + 3227 81 1 2.0099 0.6981 -0.7027 0 0 0 + 3228 81 1 2.7981 1.0348 -0.3277 0 0 0 + 3229 81 1 2.8708 1.4349 -1.1313 0 0 0 + 3230 81 1 2.0807 1.1607 -1.6354 0 0 0 + 3231 81 1 1.2100 0.9960 -1.9521 0 0 0 + 3232 81 1 1.4753 1.7965 -2.3903 0 0 0 + 3233 81 1 1.7493 2.7084 -2.3187 0 0 0 + 3234 81 1 1.9693 3.6098 -2.1284 0 0 0 + 3235 81 1 1.0972 3.4337 -1.7316 0 0 0 + 3236 81 1 0.8740 4.2069 -1.1945 0 0 0 + 3237 81 1 1.8211 4.4632 -1.1505 0 0 0 + 3238 81 1 1.4442 5.0508 -1.8094 0 0 0 + 3239 81 1 1.6942 4.6790 -2.6288 0 0 0 + 3240 81 1 2.5193 4.4397 -2.1799 0 0 0 + 3241 82 2 2.8035 5.4342 0.1406 0 0 0 + 3242 82 2 2.4059 5.3175 -0.6869 0 0 0 + 3243 82 2 1.4657 5.4770 -0.8288 0 0 0 + 3244 82 2 0.5472 5.6197 -0.8903 0 0 0 + 3245 82 2 -0.0632 4.9012 -1.0594 0 0 0 + 3246 82 2 -0.9943 5.1669 -1.3321 0 0 0 + 3247 82 2 -0.4703 5.9728 -1.4514 0 0 0 + 3248 82 2 -0.0613 6.7430 -1.0974 0 0 0 + 3249 82 2 0.2803 6.3037 -0.3104 0 0 0 + 3250 82 2 0.3915 5.5363 0.2314 0 0 0 + 3251 82 2 0.1658 4.6483 -0.0237 0 0 0 + 3252 82 2 0.1882 3.6062 0.0509 0 0 0 + 3253 82 2 -0.7526 3.7446 0.2834 0 0 0 + 3254 82 2 -1.7144 3.6854 0.3574 0 0 0 + 3255 82 2 -2.2547 3.6602 1.1012 0 0 0 + 3256 82 2 -2.7178 3.8188 1.9408 0 0 0 + 3257 82 2 -3.0884 4.0781 2.7354 0 0 0 + 3258 82 2 -3.0772 4.4458 3.5928 0 0 0 + 3259 82 2 -2.4402 4.8646 4.0815 0 0 0 + 3260 82 2 -2.1679 5.6419 4.5417 0 0 0 + 3261 82 2 -2.1752 6.5997 4.6722 0 0 0 + 3262 82 2 -2.2748 7.4591 5.1067 0 0 0 + 3263 82 2 -1.2773 7.5528 4.9973 0 0 0 + 3264 82 2 -1.1718 6.8584 4.2710 0 0 0 + 3265 82 2 -0.4208 6.2829 4.1256 0 0 0 + 3266 82 2 0.4135 6.0437 4.5138 0 0 0 + 3267 82 2 0.9012 6.0770 5.3176 0 0 0 + 3268 82 2 1.6452 6.4923 4.7634 0 0 0 + 3269 82 2 1.7342 5.7460 4.0970 0 0 0 + 3270 82 2 2.3130 4.9240 4.1370 0 0 0 + 3271 82 2 1.3879 4.7148 4.2637 0 0 0 + 3272 82 2 0.5044 4.5856 4.7137 0 0 0 + 3273 82 2 0.0272 5.3027 5.0995 0 0 0 + 3274 82 2 -0.7555 5.4781 4.5416 0 0 0 + 3275 82 2 -0.1894 5.1195 3.7988 0 0 0 + 3276 82 2 -1.0140 4.5855 3.7190 0 0 0 + 3277 82 2 -1.5623 3.9266 3.3659 0 0 0 + 3278 82 2 -2.1905 3.4657 2.8247 0 0 0 + 3279 82 2 -2.6714 2.7706 3.4397 0 0 0 + 3280 82 2 -3.5433 3.0764 3.2039 0 0 0 + 3281 83 1 0.6668 -8.0107 -7.8989 0 0 0 + 3282 83 1 -0.1957 8.0294 -7.7013 0 -1 0 + 3283 83 1 -0.2364 -7.5422 -8.0857 0 0 0 + 3284 83 1 -0.2792 -6.6855 7.8964 0 0 -1 + 3285 83 1 -0.1022 -5.8121 7.5085 0 0 -1 + 3286 83 1 -0.2693 -5.0966 8.1156 0 0 -1 + 3287 83 1 -0.6624 -4.4139 -7.7318 0 0 0 + 3288 83 1 -0.1924 -4.1306 -7.0123 0 0 0 + 3289 83 1 0.5369 -4.2046 -6.3660 0 0 0 + 3290 83 1 0.9324 -5.0394 -5.9691 0 0 0 + 3291 83 1 0.6851 -5.9001 -5.5309 0 0 0 + 3292 83 1 1.4679 -5.9725 -5.0555 0 0 0 + 3293 83 1 1.3546 -6.0824 -4.1029 0 0 0 + 3294 83 1 0.8026 -6.0304 -3.3255 0 0 0 + 3295 83 1 -0.0281 -6.1107 -3.7997 0 0 0 + 3296 83 1 0.0519 -5.5832 -4.5631 0 0 0 + 3297 83 1 0.4431 -4.7297 -4.8507 0 0 0 + 3298 83 1 0.1938 -4.2544 -4.0775 0 0 0 + 3299 83 1 1.0549 -3.8919 -4.3424 0 0 0 + 3300 83 1 1.9328 -3.5775 -4.5334 0 0 0 + 3301 83 1 2.8535 -3.4042 -4.6631 0 0 0 + 3302 83 1 3.0281 -3.9561 -3.9257 0 0 0 + 3303 83 1 3.8332 -4.3885 -3.5710 0 0 0 + 3304 83 1 4.5037 -5.2506 -3.5141 0 0 0 + 3305 83 1 4.9699 -6.0853 -3.2613 0 0 0 + 3306 83 1 5.8597 -6.3504 -3.1677 0 0 0 + 3307 83 1 6.7163 -6.0074 -3.5795 0 0 0 + 3308 83 1 7.2193 -5.8823 -4.3384 0 0 0 + 3309 83 1 7.6121 -5.0428 -4.6991 0 0 0 + 3310 83 1 7.6528 -4.2680 -5.2117 0 0 0 + 3311 83 1 6.8180 -4.2509 -4.7667 0 0 0 + 3312 83 1 6.6556 -5.0404 -4.2498 0 0 0 + 3313 83 1 7.4391 -5.0059 -3.6999 0 0 0 + 3314 83 1 -7.9661 -4.8599 -3.4998 1 0 0 + 3315 83 1 7.8676 -4.3946 -2.9344 0 0 0 + 3316 83 1 7.9898 -3.5889 -3.3957 0 0 0 + 3317 83 1 7.4032 -2.8143 -3.2650 0 0 0 + 3318 83 1 7.0450 -3.3456 -2.5716 0 0 0 + 3319 83 1 6.4933 -3.0102 -1.8268 0 0 0 + 3320 83 1 5.6903 -2.8069 -1.3697 0 0 0 + 3321 84 2 -3.5540 -4.7927 4.6395 0 0 0 + 3322 84 2 -4.2580 -5.3775 4.4543 0 0 0 + 3323 84 2 -5.1207 -5.5486 4.6318 0 0 0 + 3324 84 2 -6.0659 -5.6897 4.8918 0 0 0 + 3325 84 2 -5.8741 -5.4467 5.7689 0 0 0 + 3326 84 2 -5.8484 -5.7301 6.6404 0 0 0 + 3327 84 2 -6.7371 -5.4697 6.5802 0 0 0 + 3328 84 2 -7.6269 -5.3856 6.3342 0 0 0 + 3329 84 2 -8.1019 -4.8477 5.6968 0 0 0 + 3330 84 2 -7.8309 -5.3344 4.8946 0 0 0 + 3331 84 2 8.1603 -6.2179 4.9639 -1 0 0 + 3332 84 2 7.6730 -7.0114 5.1511 -1 0 0 + 3333 84 2 6.8141 -7.0485 4.8060 -1 0 0 + 3334 84 2 6.4552 -6.9840 3.9096 -1 0 0 + 3335 84 2 5.7781 -6.8471 3.2014 -1 0 0 + 3336 84 2 5.3792 -6.5919 2.3728 -1 0 0 + 3337 84 2 5.8140 -7.3512 1.8998 -1 0 0 + 3338 84 2 6.3585 -6.6927 1.5244 -1 0 0 + 3339 84 2 6.0040 -5.8205 1.2705 -1 0 0 + 3340 84 2 6.3506 -5.0591 0.8383 -1 0 0 + 3341 84 2 6.4833 -4.1646 0.6080 -1 0 0 + 3342 84 2 5.8449 -3.4696 0.8456 -1 0 0 + 3343 84 2 5.4978 -2.5982 0.9060 -1 0 0 + 3344 84 2 6.3793 -2.6885 1.3261 -1 0 0 + 3345 84 2 6.2560 -3.3729 1.9817 -1 0 0 + 3346 84 2 5.3244 -3.1192 1.8703 -1 0 0 + 3347 84 2 5.6760 -2.6973 2.6545 -1 0 0 + 3348 84 2 6.1335 -2.4734 3.4905 -1 0 0 + 3349 84 2 7.1003 -2.5036 3.6302 -1 0 0 + 3350 84 2 7.8349 -1.9735 3.4939 -1 0 0 + 3351 84 2 -8.0876 -1.1897 3.5194 0 0 0 + 3352 84 2 -7.7467 -0.3782 3.1008 0 0 0 + 3353 84 2 -7.1129 0.1569 3.4700 0 0 0 + 3354 84 2 -7.4553 -0.5607 4.0476 0 0 0 + 3355 84 2 -7.5756 -0.4134 5.0667 0 0 0 + 3356 84 2 -8.1936 -0.6078 5.7863 0 0 0 + 3357 84 2 7.3288 -0.7421 5.9752 -1 0 0 + 3358 84 2 6.5007 -1.1859 6.0650 -1 0 0 + 3359 84 2 6.4572 -0.9608 5.1400 -1 0 0 + 3360 84 2 6.9117 -0.1462 5.0619 -1 0 0 + 3361 85 1 6.2235 -6.8960 5.8323 0 0 0 + 3362 85 1 6.6344 -6.1622 5.4501 0 0 0 + 3363 85 1 7.3343 -5.5147 5.4893 0 0 0 + 3364 85 1 7.6228 -5.4155 6.3544 0 0 0 + 3365 85 1 7.9044 -5.0268 7.1765 0 0 0 + 3366 85 1 7.8313 -4.7427 8.0588 0 0 0 + 3367 85 1 7.4549 -4.3525 -7.6034 0 0 1 + 3368 85 1 6.7288 -4.6916 -7.0658 0 0 1 + 3369 85 1 6.1011 -5.2377 -6.6340 0 0 1 + 3370 85 1 5.2096 -5.5577 -6.7611 0 0 1 + 3371 85 1 4.3041 -5.3915 -6.7868 0 0 1 + 3372 85 1 4.2789 -4.5044 -6.4749 0 0 1 + 3373 85 1 3.8010 -4.7392 -5.6396 0 0 1 + 3374 85 1 3.3597 -4.7634 -4.7755 0 0 1 + 3375 85 1 3.8478 -3.9504 -4.6073 0 0 1 + 3376 85 1 4.2974 -3.1628 -4.8490 0 0 1 + 3377 85 1 5.2178 -3.2176 -4.9810 0 0 1 + 3378 85 1 5.8949 -3.8850 -4.9987 0 0 1 + 3379 85 1 5.6961 -4.8167 -4.9661 0 0 1 + 3380 85 1 5.5515 -5.4731 -5.6487 0 0 1 + 3381 85 1 4.6361 -5.5580 -5.8681 0 0 1 + 3382 85 1 4.0846 -5.9724 -5.2883 0 0 1 + 3383 85 1 3.3827 -5.7411 -5.9648 0 0 1 + 3384 85 1 3.2656 -6.6019 -6.3394 0 0 1 + 3385 85 1 3.3408 -6.9568 -7.2497 0 0 1 + 3386 85 1 2.5908 -6.9775 -7.7931 0 0 1 + 3387 85 1 2.1273 -7.8612 -7.7466 0 0 1 + 3388 85 1 3.1037 -8.0650 -7.7829 0 0 1 + 3389 85 1 3.9665 7.8799 -7.9023 0 -1 1 + 3390 85 1 4.8408 8.1543 -7.7710 0 -1 1 + 3391 85 1 5.7501 7.8176 -7.8515 0 -1 1 + 3392 85 1 5.5954 7.6539 -6.9403 0 -1 1 + 3393 85 1 6.2278 -8.1790 -6.4592 0 0 1 + 3394 85 1 6.9191 -7.7721 -5.9915 0 0 1 + 3395 85 1 7.1172 -6.8701 -6.2283 0 0 1 + 3396 85 1 7.2903 -5.9747 -5.6796 0 0 1 + 3397 85 1 7.5587 -5.1182 -6.0055 0 0 1 + 3398 85 1 7.9012 -4.2789 -6.2956 0 0 1 + 3399 85 1 8.0693 -3.5124 -6.7963 0 0 1 + 3400 85 1 7.6254 -2.8340 -7.4615 0 0 1 + 3401 86 2 2.9781 0.0867 -0.1631 0 0 0 + 3402 86 2 3.5378 0.4403 -0.8823 0 0 0 + 3403 86 2 3.8897 1.3755 -0.9045 0 0 0 + 3404 86 2 3.9547 2.3039 -1.0643 0 0 0 + 3405 86 2 3.7488 2.9538 -0.3535 0 0 0 + 3406 86 2 3.5480 3.7543 0.1384 0 0 0 + 3407 86 2 3.6341 4.7020 0.1604 0 0 0 + 3408 86 2 3.7670 5.5070 -0.3364 0 0 0 + 3409 86 2 4.3623 6.1065 -0.6640 0 0 0 + 3410 86 2 4.8710 6.7310 -0.0918 0 0 0 + 3411 86 2 5.7183 6.5944 -0.5843 0 0 0 + 3412 86 2 5.4510 6.5146 -1.5240 0 0 0 + 3413 86 2 4.9209 6.5587 -2.3506 0 0 0 + 3414 86 2 5.3426 7.4093 -2.4317 0 0 0 + 3415 86 2 6.0878 6.9621 -2.7926 0 0 0 + 3416 86 2 6.7977 7.2819 -2.1707 0 0 0 + 3417 86 2 7.2697 8.0861 -1.8814 0 0 0 + 3418 86 2 6.6276 -8.1473 -2.5574 0 1 0 + 3419 86 2 7.0227 7.5743 -3.0753 0 0 0 + 3420 86 2 6.1498 7.7096 -3.5444 0 0 0 + 3421 86 2 6.1893 -7.7879 -3.4235 0 1 0 + 3422 86 2 6.8534 -7.1277 -3.7612 0 1 0 + 3423 86 2 7.6638 -7.0398 -4.1915 0 1 0 + 3424 86 2 -7.9784 -6.6111 -3.8438 1 1 0 + 3425 86 2 7.8246 -5.9967 -3.4596 0 1 0 + 3426 86 2 7.3431 -5.5950 -2.7351 0 1 0 + 3427 86 2 7.2672 -5.6387 -1.7745 0 1 0 + 3428 86 2 7.8618 -5.2440 -1.0848 0 1 0 + 3429 86 2 8.1403 -5.2822 -0.1746 0 1 0 + 3430 86 2 7.4344 -5.0307 0.4050 0 1 0 + 3431 86 2 7.2956 -4.8470 1.3359 0 1 0 + 3432 86 2 7.1875 -3.9449 1.2890 0 1 0 + 3433 86 2 7.5401 -3.0687 1.0339 0 1 0 + 3434 86 2 7.2945 -2.9488 1.9531 0 1 0 + 3435 86 2 7.5170 -2.0791 2.2437 0 1 0 + 3436 86 2 8.0812 -1.2960 2.1261 0 1 0 + 3437 86 2 -7.9684 -0.4646 1.9857 1 1 0 + 3438 86 2 -7.2039 -0.5794 1.4803 1 1 0 + 3439 86 2 -6.2631 -0.8277 1.2176 1 1 0 + 3440 86 2 -5.6301 -0.6821 0.5419 1 1 0 + 3441 87 1 -0.0448 0.8323 1.0716 0 0 0 + 3442 87 1 -0.9474 0.7492 1.0191 0 0 0 + 3443 87 1 -1.8881 0.7017 1.0203 0 0 0 + 3444 87 1 -2.2336 0.2673 0.3087 0 0 0 + 3445 87 1 -3.0412 0.6471 0.7287 0 0 0 + 3446 87 1 -3.7201 0.8882 1.3643 0 0 0 + 3447 87 1 -4.4875 0.6928 1.8393 0 0 0 + 3448 87 1 -5.1444 1.1911 1.4048 0 0 0 + 3449 87 1 -5.6616 1.9601 1.5318 0 0 0 + 3450 87 1 -6.3641 2.3117 2.0717 0 0 0 + 3451 87 1 -6.7929 2.5948 2.8942 0 0 0 + 3452 87 1 -5.9867 2.5202 3.3927 0 0 0 + 3453 87 1 -5.4869 1.8087 3.6768 0 0 0 + 3454 87 1 -5.1564 1.0165 3.2516 0 0 0 + 3455 87 1 -5.0482 0.2700 2.6807 0 0 0 + 3456 87 1 -4.1118 0.2457 3.0262 0 0 0 + 3457 87 1 -3.3951 0.6840 2.6201 0 0 0 + 3458 87 1 -2.8768 0.5555 1.8470 0 0 0 + 3459 87 1 -2.6302 -0.2483 1.3211 0 0 0 + 3460 87 1 -2.0053 -0.6378 1.9118 0 0 0 + 3461 87 1 -1.3882 -1.2437 2.3210 0 0 0 + 3462 87 1 -0.8255 -1.9856 2.5561 0 0 0 + 3463 87 1 0.0327 -1.5342 2.6898 0 0 0 + 3464 87 1 0.9186 -1.2711 2.9974 0 0 0 + 3465 87 1 1.7716 -0.9566 2.7566 0 0 0 + 3466 87 1 2.2909 -0.2780 2.3590 0 0 0 + 3467 87 1 2.1603 0.6519 2.3735 0 0 0 + 3468 87 1 2.0956 1.5459 1.9548 0 0 0 + 3469 87 1 1.5001 2.2940 1.9789 0 0 0 + 3470 87 1 0.7212 2.7594 1.6255 0 0 0 + 3471 87 1 0.8724 3.2618 0.8741 0 0 0 + 3472 87 1 1.0332 3.8553 1.6221 0 0 0 + 3473 87 1 0.8776 4.0841 2.5429 0 0 0 + 3474 87 1 0.8233 4.9387 2.9434 0 0 0 + 3475 87 1 0.6931 5.7571 3.5115 0 0 0 + 3476 87 1 0.8310 6.6649 3.5854 0 0 0 + 3477 87 1 0.0250 7.1392 3.8031 0 0 0 + 3478 87 1 -0.0960 7.8566 3.1308 0 0 0 + 3479 87 1 -0.1007 -7.6711 2.7569 0 1 0 + 3480 87 1 0.3778 -6.8511 2.5943 0 1 0 + 3481 88 2 -6.6948 -5.6882 -4.6239 0 0 0 + 3482 88 2 -6.8627 -6.3409 -3.8571 0 0 0 + 3483 88 2 -6.7923 -5.7756 -3.0541 0 0 0 + 3484 88 2 -5.9892 -5.7854 -2.5083 0 0 0 + 3485 88 2 -6.0490 -5.9335 -1.5552 0 0 0 + 3486 88 2 -5.4764 -6.3360 -0.9533 0 0 0 + 3487 88 2 -5.2465 -6.9160 -0.2544 0 0 0 + 3488 88 2 -5.5579 -7.0685 0.6410 0 0 0 + 3489 88 2 -5.2326 -7.8520 1.1785 0 0 0 + 3490 88 2 -4.2822 -7.9898 1.0474 0 0 0 + 3491 88 2 -3.7480 -7.4763 1.6376 0 0 0 + 3492 88 2 -3.1197 -8.0842 1.2649 0 0 0 + 3493 88 2 -2.2280 8.0768 1.7061 0 -1 0 + 3494 88 2 -2.8343 -7.8666 2.3211 0 0 0 + 3495 88 2 -2.5844 -7.7234 3.2201 0 0 0 + 3496 88 2 -2.7071 -7.4216 4.1596 0 0 0 + 3497 88 2 -1.7883 -7.5856 3.7842 0 0 0 + 3498 88 2 -1.0481 -7.6483 3.1967 0 0 0 + 3499 88 2 -0.6266 -6.8418 3.1045 0 0 0 + 3500 88 2 -0.5728 -5.9506 3.5605 0 0 0 + 3501 88 2 -1.2470 -5.4023 3.9583 0 0 0 + 3502 88 2 -2.1051 -5.4959 4.2593 0 0 0 + 3503 88 2 -1.7608 -4.9961 4.9790 0 0 0 + 3504 88 2 -1.2513 -4.4699 5.6193 0 0 0 + 3505 88 2 -1.6596 -4.1544 6.4360 0 0 0 + 3506 88 2 -2.3487 -3.5515 6.5585 0 0 0 + 3507 88 2 -3.2682 -3.7096 6.8461 0 0 0 + 3508 88 2 -3.4251 -4.1290 7.6603 0 0 0 + 3509 88 2 -2.4667 -4.2190 7.4218 0 0 0 + 3510 88 2 -1.7971 -3.8715 8.0876 0 0 0 + 3511 88 2 -0.8986 -3.4412 8.0322 0 0 0 + 3512 88 2 -0.5530 -3.3261 -7.5194 0 0 1 + 3513 88 2 -1.0784 -3.2006 -6.7166 0 0 1 + 3514 88 2 -1.5278 -3.9655 -7.2724 0 0 1 + 3515 88 2 -1.8153 -4.7738 -7.6352 0 0 1 + 3516 88 2 -1.8768 -5.4578 -6.9598 0 0 1 + 3517 88 2 -1.7597 -6.3563 -6.7357 0 0 1 + 3518 88 2 -2.4363 -6.7644 -6.2542 0 0 1 + 3519 88 2 -2.9158 -7.3857 -5.7338 0 0 1 + 3520 88 2 -2.6078 -8.0157 -6.4453 0 0 1 + 3521 89 1 3.7846 3.1327 5.3316 0 0 0 + 3522 89 1 4.5047 3.7549 5.3536 0 0 0 + 3523 89 1 5.3586 4.1023 5.5276 0 0 0 + 3524 89 1 6.2577 3.6417 5.3720 0 0 0 + 3525 89 1 6.0906 4.3720 4.8806 0 0 0 + 3526 89 1 5.2258 4.3774 4.5110 0 0 0 + 3527 89 1 4.7096 5.2400 4.5753 0 0 0 + 3528 89 1 4.2566 4.4452 4.2162 0 0 0 + 3529 89 1 3.6462 3.7492 4.5780 0 0 0 + 3530 89 1 2.7294 3.9074 4.4941 0 0 0 + 3531 89 1 1.8992 3.9868 4.8936 0 0 0 + 3532 89 1 1.0908 4.0939 5.4963 0 0 0 + 3533 89 1 1.2180 3.9570 6.4464 0 0 0 + 3534 89 1 1.8155 4.0828 7.1549 0 0 0 + 3535 89 1 1.5573 3.8628 8.0508 0 0 0 + 3536 89 1 1.4098 3.0585 -7.8699 0 0 1 + 3537 89 1 0.5625 3.4171 -7.6039 0 0 1 + 3538 89 1 0.6328 4.1707 -8.1340 0 0 1 + 3539 89 1 0.5035 5.0068 7.8467 0 0 0 + 3540 89 1 0.8449 5.4174 -7.7805 0 0 1 + 3541 89 1 -0.1037 5.2298 -7.5860 0 0 1 + 3542 89 1 -1.0991 5.4429 -7.4726 0 0 1 + 3543 89 1 -1.9551 4.9007 -7.4986 0 0 1 + 3544 89 1 -2.1370 3.9412 -7.4740 0 0 1 + 3545 89 1 -2.0167 4.1875 -6.5724 0 0 1 + 3546 89 1 -2.7038 4.9368 -6.6287 0 0 1 + 3547 89 1 -3.1830 4.2038 -6.4941 0 0 1 + 3548 89 1 -2.6626 3.4162 -6.4457 0 0 1 + 3549 89 1 -2.8408 2.6134 -6.0348 0 0 1 + 3550 89 1 -2.7635 2.2724 -5.1207 0 0 1 + 3551 89 1 -2.6970 2.5293 -4.1724 0 0 1 + 3552 89 1 -3.4074 2.6371 -3.4844 0 0 1 + 3553 89 1 -3.5392 1.6793 -3.3614 0 0 1 + 3554 89 1 -3.5168 0.6847 -3.5172 0 0 1 + 3555 89 1 -2.9917 -0.0916 -3.1048 0 0 1 + 3556 89 1 -3.1566 -0.1637 -4.0596 0 0 1 + 3557 89 1 -2.6263 0.3132 -4.6675 0 0 1 + 3558 89 1 -2.8150 0.8462 -5.4007 0 0 1 + 3559 89 1 -2.7621 1.4230 -6.1834 0 0 1 + 3560 89 1 -3.2965 1.8910 -6.8309 0 0 1 + 3561 90 2 7.6430 -1.9244 -3.6326 0 0 0 + 3562 90 2 7.5318 -1.9794 -2.6484 0 0 0 + 3563 90 2 7.5430 -1.7062 -1.6900 0 0 0 + 3564 90 2 6.7098 -1.3034 -1.7163 0 0 0 + 3565 90 2 5.9208 -1.1095 -2.1616 0 0 0 + 3566 90 2 5.0118 -0.6761 -2.0928 0 0 0 + 3567 90 2 4.7187 0.1293 -2.6038 0 0 0 + 3568 90 2 5.2397 0.2105 -3.3839 0 0 0 + 3569 90 2 5.0265 0.8220 -4.0741 0 0 0 + 3570 90 2 5.4840 1.5948 -3.7431 0 0 0 + 3571 90 2 5.0436 2.3527 -3.3666 0 0 0 + 3572 90 2 4.7761 3.2389 -3.1256 0 0 0 + 3573 90 2 4.1680 3.8315 -2.6317 0 0 0 + 3574 90 2 4.2421 3.2276 -1.9214 0 0 0 + 3575 90 2 3.5122 2.6162 -2.0163 0 0 0 + 3576 90 2 2.8229 3.1637 -2.4324 0 0 0 + 3577 90 2 2.5042 3.4289 -3.2910 0 0 0 + 3578 90 2 2.9829 3.7351 -4.0688 0 0 0 + 3579 90 2 3.0575 4.6517 -4.4093 0 0 0 + 3580 90 2 3.3119 5.1563 -3.6485 0 0 0 + 3581 90 2 3.1831 5.9780 -3.2149 0 0 0 + 3582 90 2 2.4392 5.5052 -2.7810 0 0 0 + 3583 90 2 2.3800 6.4623 -2.6267 0 0 0 + 3584 90 2 2.4468 7.4342 -2.4789 0 0 0 + 3585 90 2 3.2840 7.5883 -3.1152 0 0 0 + 3586 90 2 2.7291 6.8680 -3.5010 0 0 0 + 3587 90 2 2.1911 6.1352 -3.5642 0 0 0 + 3588 90 2 2.4399 5.4688 -4.2253 0 0 0 + 3589 90 2 2.0504 4.6451 -4.5137 0 0 0 + 3590 90 2 2.1882 5.3795 -5.2458 0 0 0 + 3591 90 2 1.5376 5.1334 -5.9552 0 0 0 + 3592 90 2 0.9660 5.3945 -6.6808 0 0 0 + 3593 90 2 0.7929 6.2700 -7.1188 0 0 0 + 3594 90 2 1.0864 6.6711 -7.9480 0 0 0 + 3595 90 2 0.1407 6.4988 -8.0057 0 0 0 + 3596 90 2 -0.0064 7.1197 -7.2982 0 0 0 + 3597 90 2 -0.4815 7.6825 -6.6807 0 0 0 + 3598 90 2 -0.2730 -8.1013 -5.9029 0 1 0 + 3599 90 2 -0.2516 7.9491 -4.9528 0 0 0 + 3600 90 2 -0.5070 7.8787 -4.0280 0 0 0 + 3601 91 1 0.6223 -4.7095 2.7945 0 0 0 + 3602 91 1 0.7569 -4.7830 3.7632 0 0 0 + 3603 91 1 0.8296 -4.7011 4.7468 0 0 0 + 3604 91 1 0.8229 -3.7360 4.6554 0 0 0 + 3605 91 1 0.3845 -2.9559 4.2514 0 0 0 + 3606 91 1 -0.2964 -2.5611 3.7200 0 0 0 + 3607 91 1 -0.2820 -2.0971 4.6000 0 0 0 + 3608 91 1 -1.0418 -2.7487 4.8396 0 0 0 + 3609 91 1 -0.3278 -3.2755 5.0093 0 0 0 + 3610 91 1 0.2260 -3.6621 5.6597 0 0 0 + 3611 91 1 -0.0864 -4.4345 5.2561 0 0 0 + 3612 91 1 0.2662 -5.3256 5.4393 0 0 0 + 3613 91 1 0.6071 -4.6709 6.0704 0 0 0 + 3614 91 1 1.1085 -4.1290 6.6853 0 0 0 + 3615 91 1 1.9173 -3.7325 6.9972 0 0 0 + 3616 91 1 2.0567 -2.9408 7.4996 0 0 0 + 3617 91 1 2.4505 -2.1883 7.8871 0 0 0 + 3618 91 1 2.5560 -1.2386 7.6676 0 0 0 + 3619 91 1 2.5152 -0.2378 8.0337 0 0 0 + 3620 91 1 2.1280 0.6061 -8.1650 0 0 1 + 3621 91 1 1.3822 1.0683 7.9757 0 0 0 + 3622 91 1 0.6052 1.1811 7.4819 0 0 0 + 3623 91 1 -0.0126 1.8197 7.8920 0 0 0 + 3624 91 1 -0.3811 1.4478 -7.7050 0 0 1 + 3625 91 1 -0.1606 1.0380 -6.8800 0 0 1 + 3626 91 1 -0.1481 0.5705 -6.0248 0 0 1 + 3627 91 1 -0.3447 -0.2268 -5.5177 0 0 1 + 3628 91 1 -0.0775 -1.0934 -5.1781 0 0 1 + 3629 91 1 0.6574 -1.3480 -5.7742 0 0 1 + 3630 91 1 0.0879 -2.1068 -5.7543 0 0 1 + 3631 91 1 -0.3576 -2.7902 -5.2361 0 0 1 + 3632 91 1 0.0254 -2.9423 -4.3472 0 0 1 + 3633 91 1 -0.3613 -3.4714 -3.6089 0 0 1 + 3634 91 1 -0.1642 -2.6916 -3.0436 0 0 1 + 3635 91 1 -0.8741 -2.1141 -3.3529 0 0 1 + 3636 91 1 -1.1906 -1.3007 -3.0277 0 0 1 + 3637 91 1 -1.1741 -0.5922 -3.6176 0 0 1 + 3638 91 1 -0.4676 -0.4699 -3.0283 0 0 1 + 3639 91 1 -0.3009 -0.3478 -2.1091 0 0 1 + 3640 91 1 -0.1885 -0.6961 -1.1832 0 0 1 + 3641 92 2 -0.9911 -4.2988 -1.5795 0 0 0 + 3642 92 2 -1.8063 -4.7628 -1.5485 0 0 0 + 3643 92 2 -2.3638 -4.3270 -2.2405 0 0 0 + 3644 92 2 -2.4481 -4.1665 -3.1721 0 0 0 + 3645 92 2 -1.5754 -3.8175 -3.6807 0 0 0 + 3646 92 2 -1.2625 -2.9782 -3.9715 0 0 0 + 3647 92 2 -1.4869 -2.9451 -3.0271 0 0 0 + 3648 92 2 -0.8642 -3.3345 -2.3194 0 0 0 + 3649 92 2 -0.1218 -3.7872 -1.9106 0 0 0 + 3650 92 2 0.1336 -4.7546 -1.6780 0 0 0 + 3651 92 2 0.5096 -5.7030 -1.4842 0 0 0 + 3652 92 2 1.2181 -6.0868 -1.0024 0 0 0 + 3653 92 2 2.0704 -6.5264 -0.8645 0 0 0 + 3654 92 2 2.2224 -7.3431 -0.4004 0 0 0 + 3655 92 2 2.9083 -7.8229 -0.9674 0 0 0 + 3656 92 2 3.5186 -7.2218 -1.3121 0 0 0 + 3657 92 2 3.7235 -7.3489 -2.2234 0 0 0 + 3658 92 2 3.2919 -6.7889 -2.7696 0 0 0 + 3659 92 2 2.7340 -6.5851 -2.0199 0 0 0 + 3660 92 2 2.8506 -5.6275 -2.1346 0 0 0 + 3661 92 2 3.1697 -4.9592 -2.6934 0 0 0 + 3662 92 2 2.7534 -5.1649 -3.5137 0 0 0 + 3663 92 2 3.2863 -5.9430 -3.3552 0 0 0 + 3664 92 2 3.5813 -6.7340 -3.7205 0 0 0 + 3665 92 2 4.0903 -7.5130 -4.0241 0 0 0 + 3666 92 2 4.6066 -7.8031 -4.7657 0 0 0 + 3667 92 2 5.1451 7.8302 -4.9908 0 -1 0 + 3668 92 2 5.8601 7.3116 -4.5359 0 -1 0 + 3669 92 2 6.6248 6.7741 -4.3327 0 -1 0 + 3670 92 2 7.0689 5.8764 -4.3380 0 -1 0 + 3671 92 2 7.9754 5.5530 -4.5888 0 -1 0 + 3672 92 2 -7.7764 5.1541 -4.1110 1 -1 0 + 3673 92 2 -7.9957 5.2073 -3.2385 1 -1 0 + 3674 92 2 -7.8665 5.0133 -2.2742 1 -1 0 + 3675 92 2 -7.9484 5.3139 -1.3053 1 -1 0 + 3676 92 2 7.9808 6.2511 -1.3897 0 -1 0 + 3677 92 2 -7.5047 6.5615 -1.3143 1 -1 0 + 3678 92 2 -7.1236 6.1255 -0.5485 1 -1 0 + 3679 92 2 -6.5441 6.0533 -1.3527 1 -1 0 + 3680 92 2 -6.3317 5.2630 -0.7679 1 -1 0 + 3681 93 1 4.4523 -7.2150 -7.6080 0 0 0 + 3682 93 1 4.8168 -7.6798 -6.8248 0 0 0 + 3683 93 1 4.9922 -8.0643 -5.9476 0 0 0 + 3684 93 1 4.2049 7.8967 -5.9835 0 -1 0 + 3685 93 1 3.5145 7.9610 -5.3472 0 -1 0 + 3686 93 1 4.2292 7.5306 -4.9714 0 -1 0 + 3687 93 1 4.8487 6.7662 -4.9595 0 -1 0 + 3688 93 1 5.4873 6.1358 -4.5808 0 -1 0 + 3689 93 1 6.0026 6.4486 -5.2913 0 -1 0 + 3690 93 1 6.7702 6.6300 -5.8978 0 -1 0 + 3691 93 1 6.1935 7.3643 -6.1067 0 -1 0 + 3692 93 1 5.2948 7.2202 -5.8189 0 -1 0 + 3693 93 1 4.9931 6.2313 -5.9513 0 -1 0 + 3694 93 1 5.6594 5.5812 -5.8156 0 -1 0 + 3695 93 1 6.1190 4.7465 -5.8175 0 -1 0 + 3696 93 1 5.9981 3.8139 -5.9083 0 -1 0 + 3697 93 1 6.0196 2.9565 -5.4082 0 -1 0 + 3698 93 1 6.0513 2.1076 -4.9955 0 -1 0 + 3699 93 1 6.9013 1.6275 -5.1798 0 -1 0 + 3700 93 1 7.7674 1.3041 -4.9268 0 -1 0 + 3701 93 1 7.9116 0.4543 -5.3372 0 -1 0 + 3702 93 1 -8.0598 0.3767 -6.2293 1 -1 0 + 3703 93 1 -7.1543 0.7683 -6.1678 1 -1 0 + 3704 93 1 -6.8733 0.9141 -5.2877 1 -1 0 + 3705 93 1 -6.4099 0.9525 -4.3833 1 -1 0 + 3706 93 1 -6.6307 1.9062 -4.3746 1 -1 0 + 3707 93 1 -6.8364 2.3795 -5.2522 1 -1 0 + 3708 93 1 -7.1810 3.2617 -5.1219 1 -1 0 + 3709 93 1 -6.2672 3.3382 -5.3198 1 -1 0 + 3710 93 1 -5.8754 3.4155 -6.1494 1 -1 0 + 3711 93 1 -6.5217 2.7037 -6.4517 1 -1 0 + 3712 93 1 -7.4785 2.7341 -6.0180 1 -1 0 + 3713 93 1 8.1243 2.4827 -6.3666 0 -1 0 + 3714 93 1 -7.9242 1.6579 -6.6941 1 -1 0 + 3715 93 1 -8.2073 1.4561 -7.5947 1 -1 0 + 3716 93 1 8.1961 1.1089 7.8770 0 -1 -1 + 3717 93 1 -7.8253 1.0494 7.0267 1 -1 -1 + 3718 93 1 7.8246 1.5530 6.8332 0 -1 -1 + 3719 93 1 7.0198 2.0656 6.9128 0 -1 -1 + 3720 93 1 6.2210 2.6562 6.8084 0 -1 -1 + 3721 94 2 4.4680 2.1721 -2.0004 0 0 0 + 3722 94 2 3.7664 1.8460 -2.5839 0 0 0 + 3723 94 2 3.0880 2.3140 -3.0135 0 0 0 + 3724 94 2 2.1800 2.4074 -3.2201 0 0 0 + 3725 94 2 1.5627 1.8950 -3.8548 0 0 0 + 3726 94 2 0.6779 1.3522 -3.8490 0 0 0 + 3727 94 2 -0.1707 0.9561 -3.9195 0 0 0 + 3728 94 2 -0.7627 0.3256 -3.4503 0 0 0 + 3729 94 2 -0.9066 0.3824 -2.5211 0 0 0 + 3730 94 2 -1.4046 -0.3086 -2.0663 0 0 0 + 3731 94 2 -0.9244 -1.1594 -1.9028 0 0 0 + 3732 94 2 -0.1321 -1.4246 -2.3011 0 0 0 + 3733 94 2 0.7705 -1.4335 -2.0574 0 0 0 + 3734 94 2 1.5616 -0.8229 -1.9028 0 0 0 + 3735 94 2 1.6335 -0.9786 -1.0179 0 0 0 + 3736 94 2 2.3262 -1.5805 -1.0228 0 0 0 + 3737 94 2 1.8583 -1.8560 -1.8201 0 0 0 + 3738 94 2 1.7274 -1.5181 -2.7045 0 0 0 + 3739 94 2 1.6254 -1.9092 -3.6648 0 0 0 + 3740 94 2 1.3845 -1.0765 -3.7451 0 0 0 + 3741 94 2 1.5610 -0.2121 -3.9906 0 0 0 + 3742 94 2 1.5143 0.8143 -3.9763 0 0 0 + 3743 94 2 1.5399 1.0162 -3.0405 0 0 0 + 3744 94 2 1.2317 0.1307 -3.0721 0 0 0 + 3745 94 2 0.7904 -0.6224 -2.7730 0 0 0 + 3746 94 2 0.5077 -1.4376 -3.0911 0 0 0 + 3747 94 2 0.4126 -2.1941 -3.6895 0 0 0 + 3748 94 2 1.1690 -2.8415 -3.7132 0 0 0 + 3749 94 2 1.3016 -3.5581 -3.0808 0 0 0 + 3750 94 2 0.5876 -3.3105 -2.5100 0 0 0 + 3751 94 2 0.1158 -2.6992 -1.8997 0 0 0 + 3752 94 2 -0.0867 -1.9870 -1.3448 0 0 0 + 3753 94 2 -0.5192 -2.1377 -0.5062 0 0 0 + 3754 94 2 0.4444 -2.3646 -0.4102 0 0 0 + 3755 94 2 1.0662 -2.0390 -1.1018 0 0 0 + 3756 94 2 1.7026 -2.6777 -0.7593 0 0 0 + 3757 94 2 1.9622 -3.5584 -0.4785 0 0 0 + 3758 94 2 2.1679 -4.1024 -1.1824 0 0 0 + 3759 94 2 2.2753 -4.7708 -1.8271 0 0 0 + 3760 94 2 2.0547 -5.5373 -1.3506 0 0 0 + 3761 95 1 -6.6573 -7.8409 0.5266 0 0 0 + 3762 95 1 -6.5122 -7.4271 -0.3240 0 0 0 + 3763 95 1 -6.2325 -6.5195 -0.1798 0 0 0 + 3764 95 1 -5.8987 -5.9885 0.5490 0 0 0 + 3765 95 1 -5.0622 -6.1487 0.8667 0 0 0 + 3766 95 1 -4.5835 -6.9149 1.1602 0 0 0 + 3767 95 1 -4.0666 -6.3351 1.7189 0 0 0 + 3768 95 1 -3.6959 -5.9879 2.4936 0 0 0 + 3769 95 1 -4.1678 -6.1581 3.3049 0 0 0 + 3770 95 1 -4.6572 -6.7756 3.8167 0 0 0 + 3771 95 1 -5.3937 -7.2791 3.8830 0 0 0 + 3772 95 1 -5.6824 -8.1720 4.0510 0 0 0 + 3773 95 1 -5.8701 7.8472 4.9005 0 -1 0 + 3774 95 1 -6.0999 7.6890 5.8286 0 -1 0 + 3775 95 1 -6.5356 -7.8725 5.9492 0 0 0 + 3776 95 1 -6.5452 -7.5319 5.0583 0 0 0 + 3777 95 1 -5.9531 -6.8211 4.8043 0 0 0 + 3778 95 1 -5.0676 -6.5825 4.8270 0 0 0 + 3779 95 1 -5.1460 -7.3738 5.3148 0 0 0 + 3780 95 1 -4.5541 -6.9605 5.9733 0 0 0 + 3781 95 1 -3.9251 -6.6961 6.6788 0 0 0 + 3782 95 1 -4.7330 -7.0102 7.1003 0 0 0 + 3783 95 1 -5.4015 -6.3448 7.3828 0 0 0 + 3784 95 1 -5.9311 -5.5673 7.6817 0 0 0 + 3785 95 1 -6.1483 -4.8273 -8.1510 0 0 1 + 3786 95 1 -5.5206 -4.5305 7.6164 0 0 0 + 3787 95 1 -5.7784 -3.5858 7.4964 0 0 0 + 3788 95 1 -5.1342 -2.8470 7.6810 0 0 0 + 3789 95 1 -5.2974 -2.9006 -7.7942 0 0 1 + 3790 95 1 -6.1523 -3.2622 -7.6513 0 0 1 + 3791 95 1 -6.7498 -3.9216 -8.0386 0 0 1 + 3792 95 1 -6.7021 -4.0262 -7.0797 0 0 1 + 3793 95 1 -7.1200 -3.1645 -7.1035 0 0 1 + 3794 95 1 -7.6996 -3.0755 -7.8478 0 0 1 + 3795 95 1 8.1553 -2.9654 7.8080 -1 0 0 + 3796 95 1 7.9116 -2.2877 7.1723 -1 0 0 + 3797 95 1 7.5092 -1.7021 6.4381 -1 0 0 + 3798 95 1 7.8130 -1.6096 5.5344 -1 0 0 + 3799 95 1 -7.6748 -1.4231 5.5215 0 0 0 + 3800 95 1 -7.8242 -1.6039 6.5139 0 0 0 + 3801 96 2 -0.2064 5.8582 1.6664 0 0 0 + 3802 96 2 0.6740 5.4034 1.7008 0 0 0 + 3803 96 2 0.2553 4.5682 1.9470 0 0 0 + 3804 96 2 -0.0165 3.7083 1.8207 0 0 0 + 3805 96 2 -0.2308 3.2039 1.0658 0 0 0 + 3806 96 2 -0.6797 2.7826 1.8430 0 0 0 + 3807 96 2 -0.8754 3.0708 2.7450 0 0 0 + 3808 96 2 -0.6116 3.9515 2.7173 0 0 0 + 3809 96 2 -0.5369 4.9095 2.8249 0 0 0 + 3810 96 2 -0.0072 5.6713 2.7435 0 0 0 + 3811 96 2 0.8336 6.0860 2.5309 0 0 0 + 3812 96 2 1.6746 6.5182 2.6754 0 0 0 + 3813 96 2 2.3632 7.1221 2.8032 0 0 0 + 3814 96 2 3.1426 7.4229 3.2098 0 0 0 + 3815 96 2 3.8603 7.6818 2.5637 0 0 0 + 3816 96 2 3.7389 -7.9848 1.9720 0 1 0 + 3817 96 2 4.0411 -7.2316 1.4904 0 1 0 + 3818 96 2 4.1239 -6.3788 1.9507 0 1 0 + 3819 96 2 4.5640 -5.8143 2.5664 0 1 0 + 3820 96 2 4.8200 -5.0204 3.0631 0 1 0 + 3821 96 2 4.7816 -4.3022 3.7595 0 1 0 + 3822 96 2 4.2132 -3.5626 4.0334 0 1 0 + 3823 96 2 4.3987 -2.6592 3.6698 0 1 0 + 3824 96 2 4.6377 -1.8461 3.2403 0 1 0 + 3825 96 2 4.6675 -2.3457 2.3781 0 1 0 + 3826 96 2 4.5222 -2.2432 1.4497 0 1 0 + 3827 96 2 4.6793 -1.7836 0.5833 0 1 0 + 3828 96 2 4.5890 -1.0127 1.1512 0 1 0 + 3829 96 2 5.4810 -0.6902 1.4786 0 1 0 + 3830 96 2 5.6239 0.3098 1.6953 0 1 0 + 3831 96 2 5.7421 1.2206 1.8102 0 1 0 + 3832 96 2 6.1718 1.4709 2.6257 0 1 0 + 3833 96 2 6.2930 1.6216 3.5859 0 1 0 + 3834 96 2 6.4221 1.9578 4.4871 0 1 0 + 3835 96 2 6.9843 2.3248 3.8584 0 1 0 + 3836 96 2 7.7458 2.9537 3.9104 0 1 0 + 3837 96 2 7.9951 3.6358 4.4548 0 1 0 + 3838 96 2 8.2029 4.4086 4.9750 0 1 0 + 3839 96 2 -8.1360 4.7580 5.8771 1 1 0 + 3840 96 2 8.0645 4.5369 6.8113 0 1 0 + 3841 97 1 2.2176 -2.9274 -3.8226 0 0 0 + 3842 97 1 2.8929 -3.2219 -3.2024 0 0 0 + 3843 97 1 3.6141 -3.2384 -2.5673 0 0 0 + 3844 97 1 3.9311 -4.1229 -2.4003 0 0 0 + 3845 97 1 4.5565 -3.6787 -3.0248 0 0 0 + 3846 97 1 4.7864 -2.9487 -3.5626 0 0 0 + 3847 97 1 5.5886 -2.6648 -3.9160 0 0 0 + 3848 97 1 6.2406 -3.2310 -4.3089 0 0 0 + 3849 97 1 5.6700 -3.9656 -3.9760 0 0 0 + 3850 97 1 4.7723 -4.1973 -4.2281 0 0 0 + 3851 97 1 4.5470 -4.9681 -4.7430 0 0 0 + 3852 97 1 4.6849 -4.2229 -5.3700 0 0 0 + 3853 97 1 5.3739 -4.3661 -6.1301 0 0 0 + 3854 97 1 5.2196 -4.2225 -7.0693 0 0 0 + 3855 97 1 5.8976 -4.0524 -7.7757 0 0 0 + 3856 97 1 5.4442 -3.1967 -7.6501 0 0 0 + 3857 97 1 5.7946 -2.5912 -6.9866 0 0 0 + 3858 97 1 6.6077 -2.7919 -7.3467 0 0 0 + 3859 97 1 6.8766 -3.6557 -7.0869 0 0 0 + 3860 97 1 6.0351 -3.5913 -6.6762 0 0 0 + 3861 97 1 5.5009 -3.2243 -5.9232 0 0 0 + 3862 97 1 4.8788 -2.4881 -5.8521 0 0 0 + 3863 97 1 3.9104 -2.3312 -5.5244 0 0 0 + 3864 97 1 4.2056 -1.5060 -6.0766 0 0 0 + 3865 97 1 4.9607 -1.4426 -5.5598 0 0 0 + 3866 97 1 5.6463 -1.1450 -5.0275 0 0 0 + 3867 97 1 6.5996 -1.3033 -5.2726 0 0 0 + 3868 97 1 7.4756 -1.5377 -4.8725 0 0 0 + 3869 97 1 -8.1520 -1.9564 -4.6295 1 0 0 + 3870 97 1 -7.6298 -1.4899 -4.0482 1 0 0 + 3871 97 1 -8.0985 -1.3013 -3.2348 1 0 0 + 3872 97 1 8.0718 -0.9901 -2.3552 0 0 0 + 3873 97 1 -7.8066 -0.7851 -1.6191 1 0 0 + 3874 97 1 -6.8574 -0.6092 -1.6602 1 0 0 + 3875 97 1 -5.8815 -0.6170 -1.6926 1 0 0 + 3876 97 1 -5.6996 0.1750 -2.3004 1 0 0 + 3877 97 1 -5.1896 0.8974 -2.6834 1 0 0 + 3878 97 1 -5.2093 1.8078 -2.8274 1 0 0 + 3879 97 1 -4.5488 1.3299 -3.3981 1 0 0 + 3880 97 1 -4.4461 1.3287 -4.3497 1 0 0 + 3881 98 2 -7.4942 6.0337 7.6977 0 0 0 + 3882 98 2 -8.1690 5.6874 7.0895 0 0 0 + 3883 98 2 7.3459 5.4855 7.2686 -1 0 0 + 3884 98 2 6.9916 4.6791 7.5562 -1 0 0 + 3885 98 2 6.4535 5.1731 6.8732 -1 0 0 + 3886 98 2 5.7204 5.3752 6.2811 -1 0 0 + 3887 98 2 5.2617 5.2731 5.4817 -1 0 0 + 3888 98 2 4.6718 5.9912 5.5488 -1 0 0 + 3889 98 2 4.2878 5.1171 5.7795 -1 0 0 + 3890 98 2 3.7989 5.6316 6.4428 -1 0 0 + 3891 98 2 3.2292 5.1097 7.0029 -1 0 0 + 3892 98 2 3.0393 5.0355 6.0669 -1 0 0 + 3893 98 2 2.5949 5.8431 5.9616 -1 0 0 + 3894 98 2 2.1568 5.6068 5.0991 -1 0 0 + 3895 98 2 2.4896 4.7649 5.3387 -1 0 0 + 3896 98 2 1.9143 4.6290 6.0671 -1 0 0 + 3897 98 2 2.2942 4.9366 6.9173 -1 0 0 + 3898 98 2 2.9235 4.1278 6.9701 -1 0 0 + 3899 98 2 2.5725 3.5630 6.2633 -1 0 0 + 3900 98 2 2.0380 3.1685 5.5789 -1 0 0 + 3901 98 2 2.7763 2.6831 5.1908 -1 0 0 + 3902 98 2 3.0235 2.6720 4.2237 -1 0 0 + 3903 98 2 3.6488 3.1947 3.6444 -1 0 0 + 3904 98 2 4.2144 3.6322 3.0384 -1 0 0 + 3905 98 2 4.8975 4.0952 2.6262 -1 0 0 + 3906 98 2 5.6524 3.4583 2.4646 -1 0 0 + 3907 98 2 5.6717 3.7592 3.3583 -1 0 0 + 3908 98 2 6.1617 4.6357 3.6583 -1 0 0 + 3909 98 2 6.4158 5.2311 4.3886 -1 0 0 + 3910 98 2 7.0746 5.0313 5.0350 -1 0 0 + 3911 98 2 6.6465 5.5738 5.6948 -1 0 0 + 3912 98 2 6.7898 6.1867 4.9582 -1 0 0 + 3913 98 2 6.9233 6.1730 4.0313 -1 0 0 + 3914 98 2 6.4301 6.9638 4.2154 -1 0 0 + 3915 98 2 7.0534 7.5509 4.6320 -1 0 0 + 3916 98 2 7.4794 -8.1866 5.2521 -1 1 0 + 3917 98 2 8.0154 -7.9437 6.0497 -1 1 0 + 3918 98 2 8.0564 7.5547 5.7590 -1 0 0 + 3919 98 2 7.8396 6.8147 6.4245 -1 0 0 + 3920 98 2 7.5599 6.8805 7.3209 -1 0 0 + 3921 99 1 -2.6511 -6.6859 -2.9121 0 0 0 + 3922 99 1 -1.7653 -7.0269 -3.1716 0 0 0 + 3923 99 1 -0.9589 -7.3221 -3.6025 0 0 0 + 3924 99 1 -0.1562 -6.9875 -3.1788 0 0 0 + 3925 99 1 0.0503 -7.3933 -3.9821 0 0 0 + 3926 99 1 0.4866 -8.1059 -4.3875 0 0 0 + 3927 99 1 1.4127 -7.9622 -4.5685 0 0 0 + 3928 99 1 2.3239 -7.7622 -4.8107 0 0 0 + 3929 99 1 2.8610 -7.8147 -5.6104 0 0 0 + 3930 99 1 3.4741 -7.5413 -6.2854 0 0 0 + 3931 99 1 3.8719 -7.9771 -7.0558 0 0 0 + 3932 99 1 3.4359 7.6830 -6.6406 0 -1 0 + 3933 99 1 2.5774 8.1445 -6.6252 0 -1 0 + 3934 99 1 1.7239 -8.1801 -6.7809 0 0 0 + 3935 99 1 1.0718 -7.4714 -6.9195 0 0 0 + 3936 99 1 0.3431 -8.0777 -6.7810 0 0 0 + 3937 99 1 0.9578 7.6113 -6.9475 0 -1 0 + 3938 99 1 1.4527 7.5950 -6.1025 0 -1 0 + 3939 99 1 1.9555 6.8497 -6.3643 0 -1 0 + 3940 99 1 2.0673 6.7828 -5.4465 0 -1 0 + 3941 99 1 1.9142 6.3749 -4.5645 0 -1 0 + 3942 99 1 1.2348 6.7046 -4.0041 0 -1 0 + 3943 99 1 1.2482 7.6196 -3.8559 0 -1 0 + 3944 99 1 0.4342 7.4045 -4.2628 0 -1 0 + 3945 99 1 -0.0701 6.9421 -3.6305 0 -1 0 + 3946 99 1 0.3520 7.3533 -2.8616 0 -1 0 + 3947 99 1 0.0830 6.6155 -2.1990 0 -1 0 + 3948 99 1 -0.8998 6.4798 -2.2951 0 -1 0 + 3949 99 1 -0.7661 7.3393 -2.6824 0 -1 0 + 3950 99 1 -0.2049 7.9437 -2.1199 0 -1 0 + 3951 99 1 0.4468 7.4593 -1.6601 0 -1 0 + 3952 99 1 1.3016 7.5690 -1.3034 0 -1 0 + 3953 99 1 0.5376 7.6028 -0.7224 0 -1 0 + 3954 99 1 1.0954 -8.0806 -0.6026 0 0 0 + 3955 99 1 0.8394 -8.1920 0.3112 0 0 0 + 3956 99 1 0.4630 7.8580 1.1605 0 -1 0 + 3957 99 1 0.6496 7.9163 2.1331 0 -1 0 + 3958 99 1 1.2222 -7.8225 2.4436 0 0 0 + 3959 99 1 1.8590 -7.1861 2.0758 0 0 0 + 3960 99 1 2.2357 -6.4494 1.5474 0 0 0 + 3961 100 2 6.4113 3.1710 -2.1706 0 0 0 + 3962 100 2 5.6570 3.0466 -2.7465 0 0 0 + 3963 100 2 5.2007 3.6574 -2.1073 0 0 0 + 3964 100 2 5.3121 2.7867 -1.7184 0 0 0 + 3965 100 2 5.9663 2.0712 -1.5363 0 0 0 + 3966 100 2 5.9158 1.7612 -2.4522 0 0 0 + 3967 100 2 5.0206 1.4834 -2.7386 0 0 0 + 3968 100 2 4.2637 1.3713 -3.3115 0 0 0 + 3969 100 2 3.4221 0.8671 -3.2860 0 0 0 + 3970 100 2 3.3572 0.7603 -4.2097 0 0 0 + 3971 100 2 2.4794 0.8200 -3.8262 0 0 0 + 3972 100 2 2.4925 1.5676 -4.3610 0 0 0 + 3973 100 2 2.3614 2.1423 -5.1211 0 0 0 + 3974 100 2 1.6577 2.8577 -5.4364 0 0 0 + 3975 100 2 1.6094 3.4333 -6.2720 0 0 0 + 3976 100 2 1.5995 3.7313 -7.1570 0 0 0 + 3977 100 2 1.5783 4.5664 -7.6095 0 0 0 + 3978 100 2 1.7286 4.9157 7.9155 0 0 -1 + 3979 100 2 1.2413 5.1097 7.0880 0 0 -1 + 3980 100 2 1.5442 5.8274 6.4799 0 0 -1 + 3981 100 2 2.1561 6.0235 7.1258 0 0 -1 + 3982 100 2 2.5293 5.4955 7.7964 0 0 -1 + 3983 100 2 2.6656 5.1380 -7.7496 0 0 0 + 3984 100 2 3.4163 4.5476 -7.7127 0 0 0 + 3985 100 2 2.9216 4.1944 -6.9944 0 0 0 + 3986 100 2 2.2870 4.8367 -6.7200 0 0 0 + 3987 100 2 2.0293 5.7732 -6.7039 0 0 0 + 3988 100 2 1.9921 6.3163 -7.4576 0 0 0 + 3989 100 2 1.6896 6.0225 8.0822 0 0 -1 + 3990 100 2 0.7463 6.0286 7.6473 0 0 -1 + 3991 100 2 0.5802 6.2086 6.6852 0 0 -1 + 3992 100 2 0.0280 5.8380 6.0163 0 0 -1 + 3993 100 2 -0.8852 5.6790 5.7187 0 0 -1 + 3994 100 2 -1.3945 4.8974 5.4669 0 0 -1 + 3995 100 2 -1.5923 3.9584 5.5511 0 0 -1 + 3996 100 2 -1.2935 3.2574 6.0695 0 0 -1 + 3997 100 2 -0.5427 3.5610 5.5476 0 0 -1 + 3998 100 2 -0.9175 3.2914 4.6129 0 0 -1 + 3999 100 2 -1.5850 3.0510 3.9963 0 0 -1 + 4000 100 2 -2.2447 3.7440 4.1318 0 0 -1 + +Bonds + + 1 1 1 2 + 2 1 2 3 + 3 1 3 4 + 4 1 4 5 + 5 1 5 6 + 6 1 6 7 + 7 1 7 8 + 8 1 8 9 + 9 1 9 10 + 10 1 10 11 + 11 1 11 12 + 12 1 12 13 + 13 1 13 14 + 14 1 14 15 + 15 1 15 16 + 16 1 16 17 + 17 1 17 18 + 18 1 18 19 + 19 1 19 20 + 20 1 20 21 + 21 1 21 22 + 22 1 22 23 + 23 1 23 24 + 24 1 24 25 + 25 1 25 26 + 26 1 26 27 + 27 1 27 28 + 28 1 28 29 + 29 1 29 30 + 30 1 30 31 + 31 1 31 32 + 32 1 32 33 + 33 1 33 34 + 34 1 34 35 + 35 1 35 36 + 36 1 36 37 + 37 1 37 38 + 38 1 38 39 + 39 1 39 40 + 40 1 41 42 + 41 1 42 43 + 42 1 43 44 + 43 1 44 45 + 44 1 45 46 + 45 1 46 47 + 46 1 47 48 + 47 1 48 49 + 48 1 49 50 + 49 1 50 51 + 50 1 51 52 + 51 1 52 53 + 52 1 53 54 + 53 1 54 55 + 54 1 55 56 + 55 1 56 57 + 56 1 57 58 + 57 1 58 59 + 58 1 59 60 + 59 1 60 61 + 60 1 61 62 + 61 1 62 63 + 62 1 63 64 + 63 1 64 65 + 64 1 65 66 + 65 1 66 67 + 66 1 67 68 + 67 1 68 69 + 68 1 69 70 + 69 1 70 71 + 70 1 71 72 + 71 1 72 73 + 72 1 73 74 + 73 1 74 75 + 74 1 75 76 + 75 1 76 77 + 76 1 77 78 + 77 1 78 79 + 78 1 79 80 + 79 1 81 82 + 80 1 82 83 + 81 1 83 84 + 82 1 84 85 + 83 1 85 86 + 84 1 86 87 + 85 1 87 88 + 86 1 88 89 + 87 1 89 90 + 88 1 90 91 + 89 1 91 92 + 90 1 92 93 + 91 1 93 94 + 92 1 94 95 + 93 1 95 96 + 94 1 96 97 + 95 1 97 98 + 96 1 98 99 + 97 1 99 100 + 98 1 100 101 + 99 1 101 102 + 100 1 102 103 + 101 1 103 104 + 102 1 104 105 + 103 1 105 106 + 104 1 106 107 + 105 1 107 108 + 106 1 108 109 + 107 1 109 110 + 108 1 110 111 + 109 1 111 112 + 110 1 112 113 + 111 1 113 114 + 112 1 114 115 + 113 1 115 116 + 114 1 116 117 + 115 1 117 118 + 116 1 118 119 + 117 1 119 120 + 118 1 121 122 + 119 1 122 123 + 120 1 123 124 + 121 1 124 125 + 122 1 125 126 + 123 1 126 127 + 124 1 127 128 + 125 1 128 129 + 126 1 129 130 + 127 1 130 131 + 128 1 131 132 + 129 1 132 133 + 130 1 133 134 + 131 1 134 135 + 132 1 135 136 + 133 1 136 137 + 134 1 137 138 + 135 1 138 139 + 136 1 139 140 + 137 1 140 141 + 138 1 141 142 + 139 1 142 143 + 140 1 143 144 + 141 1 144 145 + 142 1 145 146 + 143 1 146 147 + 144 1 147 148 + 145 1 148 149 + 146 1 149 150 + 147 1 150 151 + 148 1 151 152 + 149 1 152 153 + 150 1 153 154 + 151 1 154 155 + 152 1 155 156 + 153 1 156 157 + 154 1 157 158 + 155 1 158 159 + 156 1 159 160 + 157 1 161 162 + 158 1 162 163 + 159 1 163 164 + 160 1 164 165 + 161 1 165 166 + 162 1 166 167 + 163 1 167 168 + 164 1 168 169 + 165 1 169 170 + 166 1 170 171 + 167 1 171 172 + 168 1 172 173 + 169 1 173 174 + 170 1 174 175 + 171 1 175 176 + 172 1 176 177 + 173 1 177 178 + 174 1 178 179 + 175 1 179 180 + 176 1 180 181 + 177 1 181 182 + 178 1 182 183 + 179 1 183 184 + 180 1 184 185 + 181 1 185 186 + 182 1 186 187 + 183 1 187 188 + 184 1 188 189 + 185 1 189 190 + 186 1 190 191 + 187 1 191 192 + 188 1 192 193 + 189 1 193 194 + 190 1 194 195 + 191 1 195 196 + 192 1 196 197 + 193 1 197 198 + 194 1 198 199 + 195 1 199 200 + 196 1 201 202 + 197 1 202 203 + 198 1 203 204 + 199 1 204 205 + 200 1 205 206 + 201 1 206 207 + 202 1 207 208 + 203 1 208 209 + 204 1 209 210 + 205 1 210 211 + 206 1 211 212 + 207 1 212 213 + 208 1 213 214 + 209 1 214 215 + 210 1 215 216 + 211 1 216 217 + 212 1 217 218 + 213 1 218 219 + 214 1 219 220 + 215 1 220 221 + 216 1 221 222 + 217 1 222 223 + 218 1 223 224 + 219 1 224 225 + 220 1 225 226 + 221 1 226 227 + 222 1 227 228 + 223 1 228 229 + 224 1 229 230 + 225 1 230 231 + 226 1 231 232 + 227 1 232 233 + 228 1 233 234 + 229 1 234 235 + 230 1 235 236 + 231 1 236 237 + 232 1 237 238 + 233 1 238 239 + 234 1 239 240 + 235 1 241 242 + 236 1 242 243 + 237 1 243 244 + 238 1 244 245 + 239 1 245 246 + 240 1 246 247 + 241 1 247 248 + 242 1 248 249 + 243 1 249 250 + 244 1 250 251 + 245 1 251 252 + 246 1 252 253 + 247 1 253 254 + 248 1 254 255 + 249 1 255 256 + 250 1 256 257 + 251 1 257 258 + 252 1 258 259 + 253 1 259 260 + 254 1 260 261 + 255 1 261 262 + 256 1 262 263 + 257 1 263 264 + 258 1 264 265 + 259 1 265 266 + 260 1 266 267 + 261 1 267 268 + 262 1 268 269 + 263 1 269 270 + 264 1 270 271 + 265 1 271 272 + 266 1 272 273 + 267 1 273 274 + 268 1 274 275 + 269 1 275 276 + 270 1 276 277 + 271 1 277 278 + 272 1 278 279 + 273 1 279 280 + 274 1 281 282 + 275 1 282 283 + 276 1 283 284 + 277 1 284 285 + 278 1 285 286 + 279 1 286 287 + 280 1 287 288 + 281 1 288 289 + 282 1 289 290 + 283 1 290 291 + 284 1 291 292 + 285 1 292 293 + 286 1 293 294 + 287 1 294 295 + 288 1 295 296 + 289 1 296 297 + 290 1 297 298 + 291 1 298 299 + 292 1 299 300 + 293 1 300 301 + 294 1 301 302 + 295 1 302 303 + 296 1 303 304 + 297 1 304 305 + 298 1 305 306 + 299 1 306 307 + 300 1 307 308 + 301 1 308 309 + 302 1 309 310 + 303 1 310 311 + 304 1 311 312 + 305 1 312 313 + 306 1 313 314 + 307 1 314 315 + 308 1 315 316 + 309 1 316 317 + 310 1 317 318 + 311 1 318 319 + 312 1 319 320 + 313 1 321 322 + 314 1 322 323 + 315 1 323 324 + 316 1 324 325 + 317 1 325 326 + 318 1 326 327 + 319 1 327 328 + 320 1 328 329 + 321 1 329 330 + 322 1 330 331 + 323 1 331 332 + 324 1 332 333 + 325 1 333 334 + 326 1 334 335 + 327 1 335 336 + 328 1 336 337 + 329 1 337 338 + 330 1 338 339 + 331 1 339 340 + 332 1 340 341 + 333 1 341 342 + 334 1 342 343 + 335 1 343 344 + 336 1 344 345 + 337 1 345 346 + 338 1 346 347 + 339 1 347 348 + 340 1 348 349 + 341 1 349 350 + 342 1 350 351 + 343 1 351 352 + 344 1 352 353 + 345 1 353 354 + 346 1 354 355 + 347 1 355 356 + 348 1 356 357 + 349 1 357 358 + 350 1 358 359 + 351 1 359 360 + 352 1 361 362 + 353 1 362 363 + 354 1 363 364 + 355 1 364 365 + 356 1 365 366 + 357 1 366 367 + 358 1 367 368 + 359 1 368 369 + 360 1 369 370 + 361 1 370 371 + 362 1 371 372 + 363 1 372 373 + 364 1 373 374 + 365 1 374 375 + 366 1 375 376 + 367 1 376 377 + 368 1 377 378 + 369 1 378 379 + 370 1 379 380 + 371 1 380 381 + 372 1 381 382 + 373 1 382 383 + 374 1 383 384 + 375 1 384 385 + 376 1 385 386 + 377 1 386 387 + 378 1 387 388 + 379 1 388 389 + 380 1 389 390 + 381 1 390 391 + 382 1 391 392 + 383 1 392 393 + 384 1 393 394 + 385 1 394 395 + 386 1 395 396 + 387 1 396 397 + 388 1 397 398 + 389 1 398 399 + 390 1 399 400 + 391 1 401 402 + 392 1 402 403 + 393 1 403 404 + 394 1 404 405 + 395 1 405 406 + 396 1 406 407 + 397 1 407 408 + 398 1 408 409 + 399 1 409 410 + 400 1 410 411 + 401 1 411 412 + 402 1 412 413 + 403 1 413 414 + 404 1 414 415 + 405 1 415 416 + 406 1 416 417 + 407 1 417 418 + 408 1 418 419 + 409 1 419 420 + 410 1 420 421 + 411 1 421 422 + 412 1 422 423 + 413 1 423 424 + 414 1 424 425 + 415 1 425 426 + 416 1 426 427 + 417 1 427 428 + 418 1 428 429 + 419 1 429 430 + 420 1 430 431 + 421 1 431 432 + 422 1 432 433 + 423 1 433 434 + 424 1 434 435 + 425 1 435 436 + 426 1 436 437 + 427 1 437 438 + 428 1 438 439 + 429 1 439 440 + 430 1 441 442 + 431 1 442 443 + 432 1 443 444 + 433 1 444 445 + 434 1 445 446 + 435 1 446 447 + 436 1 447 448 + 437 1 448 449 + 438 1 449 450 + 439 1 450 451 + 440 1 451 452 + 441 1 452 453 + 442 1 453 454 + 443 1 454 455 + 444 1 455 456 + 445 1 456 457 + 446 1 457 458 + 447 1 458 459 + 448 1 459 460 + 449 1 460 461 + 450 1 461 462 + 451 1 462 463 + 452 1 463 464 + 453 1 464 465 + 454 1 465 466 + 455 1 466 467 + 456 1 467 468 + 457 1 468 469 + 458 1 469 470 + 459 1 470 471 + 460 1 471 472 + 461 1 472 473 + 462 1 473 474 + 463 1 474 475 + 464 1 475 476 + 465 1 476 477 + 466 1 477 478 + 467 1 478 479 + 468 1 479 480 + 469 1 481 482 + 470 1 482 483 + 471 1 483 484 + 472 1 484 485 + 473 1 485 486 + 474 1 486 487 + 475 1 487 488 + 476 1 488 489 + 477 1 489 490 + 478 1 490 491 + 479 1 491 492 + 480 1 492 493 + 481 1 493 494 + 482 1 494 495 + 483 1 495 496 + 484 1 496 497 + 485 1 497 498 + 486 1 498 499 + 487 1 499 500 + 488 1 500 501 + 489 1 501 502 + 490 1 502 503 + 491 1 503 504 + 492 1 504 505 + 493 1 505 506 + 494 1 506 507 + 495 1 507 508 + 496 1 508 509 + 497 1 509 510 + 498 1 510 511 + 499 1 511 512 + 500 1 512 513 + 501 1 513 514 + 502 1 514 515 + 503 1 515 516 + 504 1 516 517 + 505 1 517 518 + 506 1 518 519 + 507 1 519 520 + 508 1 521 522 + 509 1 522 523 + 510 1 523 524 + 511 1 524 525 + 512 1 525 526 + 513 1 526 527 + 514 1 527 528 + 515 1 528 529 + 516 1 529 530 + 517 1 530 531 + 518 1 531 532 + 519 1 532 533 + 520 1 533 534 + 521 1 534 535 + 522 1 535 536 + 523 1 536 537 + 524 1 537 538 + 525 1 538 539 + 526 1 539 540 + 527 1 540 541 + 528 1 541 542 + 529 1 542 543 + 530 1 543 544 + 531 1 544 545 + 532 1 545 546 + 533 1 546 547 + 534 1 547 548 + 535 1 548 549 + 536 1 549 550 + 537 1 550 551 + 538 1 551 552 + 539 1 552 553 + 540 1 553 554 + 541 1 554 555 + 542 1 555 556 + 543 1 556 557 + 544 1 557 558 + 545 1 558 559 + 546 1 559 560 + 547 1 561 562 + 548 1 562 563 + 549 1 563 564 + 550 1 564 565 + 551 1 565 566 + 552 1 566 567 + 553 1 567 568 + 554 1 568 569 + 555 1 569 570 + 556 1 570 571 + 557 1 571 572 + 558 1 572 573 + 559 1 573 574 + 560 1 574 575 + 561 1 575 576 + 562 1 576 577 + 563 1 577 578 + 564 1 578 579 + 565 1 579 580 + 566 1 580 581 + 567 1 581 582 + 568 1 582 583 + 569 1 583 584 + 570 1 584 585 + 571 1 585 586 + 572 1 586 587 + 573 1 587 588 + 574 1 588 589 + 575 1 589 590 + 576 1 590 591 + 577 1 591 592 + 578 1 592 593 + 579 1 593 594 + 580 1 594 595 + 581 1 595 596 + 582 1 596 597 + 583 1 597 598 + 584 1 598 599 + 585 1 599 600 + 586 1 601 602 + 587 1 602 603 + 588 1 603 604 + 589 1 604 605 + 590 1 605 606 + 591 1 606 607 + 592 1 607 608 + 593 1 608 609 + 594 1 609 610 + 595 1 610 611 + 596 1 611 612 + 597 1 612 613 + 598 1 613 614 + 599 1 614 615 + 600 1 615 616 + 601 1 616 617 + 602 1 617 618 + 603 1 618 619 + 604 1 619 620 + 605 1 620 621 + 606 1 621 622 + 607 1 622 623 + 608 1 623 624 + 609 1 624 625 + 610 1 625 626 + 611 1 626 627 + 612 1 627 628 + 613 1 628 629 + 614 1 629 630 + 615 1 630 631 + 616 1 631 632 + 617 1 632 633 + 618 1 633 634 + 619 1 634 635 + 620 1 635 636 + 621 1 636 637 + 622 1 637 638 + 623 1 638 639 + 624 1 639 640 + 625 1 641 642 + 626 1 642 643 + 627 1 643 644 + 628 1 644 645 + 629 1 645 646 + 630 1 646 647 + 631 1 647 648 + 632 1 648 649 + 633 1 649 650 + 634 1 650 651 + 635 1 651 652 + 636 1 652 653 + 637 1 653 654 + 638 1 654 655 + 639 1 655 656 + 640 1 656 657 + 641 1 657 658 + 642 1 658 659 + 643 1 659 660 + 644 1 660 661 + 645 1 661 662 + 646 1 662 663 + 647 1 663 664 + 648 1 664 665 + 649 1 665 666 + 650 1 666 667 + 651 1 667 668 + 652 1 668 669 + 653 1 669 670 + 654 1 670 671 + 655 1 671 672 + 656 1 672 673 + 657 1 673 674 + 658 1 674 675 + 659 1 675 676 + 660 1 676 677 + 661 1 677 678 + 662 1 678 679 + 663 1 679 680 + 664 1 681 682 + 665 1 682 683 + 666 1 683 684 + 667 1 684 685 + 668 1 685 686 + 669 1 686 687 + 670 1 687 688 + 671 1 688 689 + 672 1 689 690 + 673 1 690 691 + 674 1 691 692 + 675 1 692 693 + 676 1 693 694 + 677 1 694 695 + 678 1 695 696 + 679 1 696 697 + 680 1 697 698 + 681 1 698 699 + 682 1 699 700 + 683 1 700 701 + 684 1 701 702 + 685 1 702 703 + 686 1 703 704 + 687 1 704 705 + 688 1 705 706 + 689 1 706 707 + 690 1 707 708 + 691 1 708 709 + 692 1 709 710 + 693 1 710 711 + 694 1 711 712 + 695 1 712 713 + 696 1 713 714 + 697 1 714 715 + 698 1 715 716 + 699 1 716 717 + 700 1 717 718 + 701 1 718 719 + 702 1 719 720 + 703 1 721 722 + 704 1 722 723 + 705 1 723 724 + 706 1 724 725 + 707 1 725 726 + 708 1 726 727 + 709 1 727 728 + 710 1 728 729 + 711 1 729 730 + 712 1 730 731 + 713 1 731 732 + 714 1 732 733 + 715 1 733 734 + 716 1 734 735 + 717 1 735 736 + 718 1 736 737 + 719 1 737 738 + 720 1 738 739 + 721 1 739 740 + 722 1 740 741 + 723 1 741 742 + 724 1 742 743 + 725 1 743 744 + 726 1 744 745 + 727 1 745 746 + 728 1 746 747 + 729 1 747 748 + 730 1 748 749 + 731 1 749 750 + 732 1 750 751 + 733 1 751 752 + 734 1 752 753 + 735 1 753 754 + 736 1 754 755 + 737 1 755 756 + 738 1 756 757 + 739 1 757 758 + 740 1 758 759 + 741 1 759 760 + 742 1 761 762 + 743 1 762 763 + 744 1 763 764 + 745 1 764 765 + 746 1 765 766 + 747 1 766 767 + 748 1 767 768 + 749 1 768 769 + 750 1 769 770 + 751 1 770 771 + 752 1 771 772 + 753 1 772 773 + 754 1 773 774 + 755 1 774 775 + 756 1 775 776 + 757 1 776 777 + 758 1 777 778 + 759 1 778 779 + 760 1 779 780 + 761 1 780 781 + 762 1 781 782 + 763 1 782 783 + 764 1 783 784 + 765 1 784 785 + 766 1 785 786 + 767 1 786 787 + 768 1 787 788 + 769 1 788 789 + 770 1 789 790 + 771 1 790 791 + 772 1 791 792 + 773 1 792 793 + 774 1 793 794 + 775 1 794 795 + 776 1 795 796 + 777 1 796 797 + 778 1 797 798 + 779 1 798 799 + 780 1 799 800 + 781 1 801 802 + 782 1 802 803 + 783 1 803 804 + 784 1 804 805 + 785 1 805 806 + 786 1 806 807 + 787 1 807 808 + 788 1 808 809 + 789 1 809 810 + 790 1 810 811 + 791 1 811 812 + 792 1 812 813 + 793 1 813 814 + 794 1 814 815 + 795 1 815 816 + 796 1 816 817 + 797 1 817 818 + 798 1 818 819 + 799 1 819 820 + 800 1 820 821 + 801 1 821 822 + 802 1 822 823 + 803 1 823 824 + 804 1 824 825 + 805 1 825 826 + 806 1 826 827 + 807 1 827 828 + 808 1 828 829 + 809 1 829 830 + 810 1 830 831 + 811 1 831 832 + 812 1 832 833 + 813 1 833 834 + 814 1 834 835 + 815 1 835 836 + 816 1 836 837 + 817 1 837 838 + 818 1 838 839 + 819 1 839 840 + 820 1 841 842 + 821 1 842 843 + 822 1 843 844 + 823 1 844 845 + 824 1 845 846 + 825 1 846 847 + 826 1 847 848 + 827 1 848 849 + 828 1 849 850 + 829 1 850 851 + 830 1 851 852 + 831 1 852 853 + 832 1 853 854 + 833 1 854 855 + 834 1 855 856 + 835 1 856 857 + 836 1 857 858 + 837 1 858 859 + 838 1 859 860 + 839 1 860 861 + 840 1 861 862 + 841 1 862 863 + 842 1 863 864 + 843 1 864 865 + 844 1 865 866 + 845 1 866 867 + 846 1 867 868 + 847 1 868 869 + 848 1 869 870 + 849 1 870 871 + 850 1 871 872 + 851 1 872 873 + 852 1 873 874 + 853 1 874 875 + 854 1 875 876 + 855 1 876 877 + 856 1 877 878 + 857 1 878 879 + 858 1 879 880 + 859 1 881 882 + 860 1 882 883 + 861 1 883 884 + 862 1 884 885 + 863 1 885 886 + 864 1 886 887 + 865 1 887 888 + 866 1 888 889 + 867 1 889 890 + 868 1 890 891 + 869 1 891 892 + 870 1 892 893 + 871 1 893 894 + 872 1 894 895 + 873 1 895 896 + 874 1 896 897 + 875 1 897 898 + 876 1 898 899 + 877 1 899 900 + 878 1 900 901 + 879 1 901 902 + 880 1 902 903 + 881 1 903 904 + 882 1 904 905 + 883 1 905 906 + 884 1 906 907 + 885 1 907 908 + 886 1 908 909 + 887 1 909 910 + 888 1 910 911 + 889 1 911 912 + 890 1 912 913 + 891 1 913 914 + 892 1 914 915 + 893 1 915 916 + 894 1 916 917 + 895 1 917 918 + 896 1 918 919 + 897 1 919 920 + 898 1 921 922 + 899 1 922 923 + 900 1 923 924 + 901 1 924 925 + 902 1 925 926 + 903 1 926 927 + 904 1 927 928 + 905 1 928 929 + 906 1 929 930 + 907 1 930 931 + 908 1 931 932 + 909 1 932 933 + 910 1 933 934 + 911 1 934 935 + 912 1 935 936 + 913 1 936 937 + 914 1 937 938 + 915 1 938 939 + 916 1 939 940 + 917 1 940 941 + 918 1 941 942 + 919 1 942 943 + 920 1 943 944 + 921 1 944 945 + 922 1 945 946 + 923 1 946 947 + 924 1 947 948 + 925 1 948 949 + 926 1 949 950 + 927 1 950 951 + 928 1 951 952 + 929 1 952 953 + 930 1 953 954 + 931 1 954 955 + 932 1 955 956 + 933 1 956 957 + 934 1 957 958 + 935 1 958 959 + 936 1 959 960 + 937 1 961 962 + 938 1 962 963 + 939 1 963 964 + 940 1 964 965 + 941 1 965 966 + 942 1 966 967 + 943 1 967 968 + 944 1 968 969 + 945 1 969 970 + 946 1 970 971 + 947 1 971 972 + 948 1 972 973 + 949 1 973 974 + 950 1 974 975 + 951 1 975 976 + 952 1 976 977 + 953 1 977 978 + 954 1 978 979 + 955 1 979 980 + 956 1 980 981 + 957 1 981 982 + 958 1 982 983 + 959 1 983 984 + 960 1 984 985 + 961 1 985 986 + 962 1 986 987 + 963 1 987 988 + 964 1 988 989 + 965 1 989 990 + 966 1 990 991 + 967 1 991 992 + 968 1 992 993 + 969 1 993 994 + 970 1 994 995 + 971 1 995 996 + 972 1 996 997 + 973 1 997 998 + 974 1 998 999 + 975 1 999 1000 + 976 1 1001 1002 + 977 1 1002 1003 + 978 1 1003 1004 + 979 1 1004 1005 + 980 1 1005 1006 + 981 1 1006 1007 + 982 1 1007 1008 + 983 1 1008 1009 + 984 1 1009 1010 + 985 1 1010 1011 + 986 1 1011 1012 + 987 1 1012 1013 + 988 1 1013 1014 + 989 1 1014 1015 + 990 1 1015 1016 + 991 1 1016 1017 + 992 1 1017 1018 + 993 1 1018 1019 + 994 1 1019 1020 + 995 1 1020 1021 + 996 1 1021 1022 + 997 1 1022 1023 + 998 1 1023 1024 + 999 1 1024 1025 + 1000 1 1025 1026 + 1001 1 1026 1027 + 1002 1 1027 1028 + 1003 1 1028 1029 + 1004 1 1029 1030 + 1005 1 1030 1031 + 1006 1 1031 1032 + 1007 1 1032 1033 + 1008 1 1033 1034 + 1009 1 1034 1035 + 1010 1 1035 1036 + 1011 1 1036 1037 + 1012 1 1037 1038 + 1013 1 1038 1039 + 1014 1 1039 1040 + 1015 1 1041 1042 + 1016 1 1042 1043 + 1017 1 1043 1044 + 1018 1 1044 1045 + 1019 1 1045 1046 + 1020 1 1046 1047 + 1021 1 1047 1048 + 1022 1 1048 1049 + 1023 1 1049 1050 + 1024 1 1050 1051 + 1025 1 1051 1052 + 1026 1 1052 1053 + 1027 1 1053 1054 + 1028 1 1054 1055 + 1029 1 1055 1056 + 1030 1 1056 1057 + 1031 1 1057 1058 + 1032 1 1058 1059 + 1033 1 1059 1060 + 1034 1 1060 1061 + 1035 1 1061 1062 + 1036 1 1062 1063 + 1037 1 1063 1064 + 1038 1 1064 1065 + 1039 1 1065 1066 + 1040 1 1066 1067 + 1041 1 1067 1068 + 1042 1 1068 1069 + 1043 1 1069 1070 + 1044 1 1070 1071 + 1045 1 1071 1072 + 1046 1 1072 1073 + 1047 1 1073 1074 + 1048 1 1074 1075 + 1049 1 1075 1076 + 1050 1 1076 1077 + 1051 1 1077 1078 + 1052 1 1078 1079 + 1053 1 1079 1080 + 1054 1 1081 1082 + 1055 1 1082 1083 + 1056 1 1083 1084 + 1057 1 1084 1085 + 1058 1 1085 1086 + 1059 1 1086 1087 + 1060 1 1087 1088 + 1061 1 1088 1089 + 1062 1 1089 1090 + 1063 1 1090 1091 + 1064 1 1091 1092 + 1065 1 1092 1093 + 1066 1 1093 1094 + 1067 1 1094 1095 + 1068 1 1095 1096 + 1069 1 1096 1097 + 1070 1 1097 1098 + 1071 1 1098 1099 + 1072 1 1099 1100 + 1073 1 1100 1101 + 1074 1 1101 1102 + 1075 1 1102 1103 + 1076 1 1103 1104 + 1077 1 1104 1105 + 1078 1 1105 1106 + 1079 1 1106 1107 + 1080 1 1107 1108 + 1081 1 1108 1109 + 1082 1 1109 1110 + 1083 1 1110 1111 + 1084 1 1111 1112 + 1085 1 1112 1113 + 1086 1 1113 1114 + 1087 1 1114 1115 + 1088 1 1115 1116 + 1089 1 1116 1117 + 1090 1 1117 1118 + 1091 1 1118 1119 + 1092 1 1119 1120 + 1093 1 1121 1122 + 1094 1 1122 1123 + 1095 1 1123 1124 + 1096 1 1124 1125 + 1097 1 1125 1126 + 1098 1 1126 1127 + 1099 1 1127 1128 + 1100 1 1128 1129 + 1101 1 1129 1130 + 1102 1 1130 1131 + 1103 1 1131 1132 + 1104 1 1132 1133 + 1105 1 1133 1134 + 1106 1 1134 1135 + 1107 1 1135 1136 + 1108 1 1136 1137 + 1109 1 1137 1138 + 1110 1 1138 1139 + 1111 1 1139 1140 + 1112 1 1140 1141 + 1113 1 1141 1142 + 1114 1 1142 1143 + 1115 1 1143 1144 + 1116 1 1144 1145 + 1117 1 1145 1146 + 1118 1 1146 1147 + 1119 1 1147 1148 + 1120 1 1148 1149 + 1121 1 1149 1150 + 1122 1 1150 1151 + 1123 1 1151 1152 + 1124 1 1152 1153 + 1125 1 1153 1154 + 1126 1 1154 1155 + 1127 1 1155 1156 + 1128 1 1156 1157 + 1129 1 1157 1158 + 1130 1 1158 1159 + 1131 1 1159 1160 + 1132 1 1161 1162 + 1133 1 1162 1163 + 1134 1 1163 1164 + 1135 1 1164 1165 + 1136 1 1165 1166 + 1137 1 1166 1167 + 1138 1 1167 1168 + 1139 1 1168 1169 + 1140 1 1169 1170 + 1141 1 1170 1171 + 1142 1 1171 1172 + 1143 1 1172 1173 + 1144 1 1173 1174 + 1145 1 1174 1175 + 1146 1 1175 1176 + 1147 1 1176 1177 + 1148 1 1177 1178 + 1149 1 1178 1179 + 1150 1 1179 1180 + 1151 1 1180 1181 + 1152 1 1181 1182 + 1153 1 1182 1183 + 1154 1 1183 1184 + 1155 1 1184 1185 + 1156 1 1185 1186 + 1157 1 1186 1187 + 1158 1 1187 1188 + 1159 1 1188 1189 + 1160 1 1189 1190 + 1161 1 1190 1191 + 1162 1 1191 1192 + 1163 1 1192 1193 + 1164 1 1193 1194 + 1165 1 1194 1195 + 1166 1 1195 1196 + 1167 1 1196 1197 + 1168 1 1197 1198 + 1169 1 1198 1199 + 1170 1 1199 1200 + 1171 1 1201 1202 + 1172 1 1202 1203 + 1173 1 1203 1204 + 1174 1 1204 1205 + 1175 1 1205 1206 + 1176 1 1206 1207 + 1177 1 1207 1208 + 1178 1 1208 1209 + 1179 1 1209 1210 + 1180 1 1210 1211 + 1181 1 1211 1212 + 1182 1 1212 1213 + 1183 1 1213 1214 + 1184 1 1214 1215 + 1185 1 1215 1216 + 1186 1 1216 1217 + 1187 1 1217 1218 + 1188 1 1218 1219 + 1189 1 1219 1220 + 1190 1 1220 1221 + 1191 1 1221 1222 + 1192 1 1222 1223 + 1193 1 1223 1224 + 1194 1 1224 1225 + 1195 1 1225 1226 + 1196 1 1226 1227 + 1197 1 1227 1228 + 1198 1 1228 1229 + 1199 1 1229 1230 + 1200 1 1230 1231 + 1201 1 1231 1232 + 1202 1 1232 1233 + 1203 1 1233 1234 + 1204 1 1234 1235 + 1205 1 1235 1236 + 1206 1 1236 1237 + 1207 1 1237 1238 + 1208 1 1238 1239 + 1209 1 1239 1240 + 1210 1 1241 1242 + 1211 1 1242 1243 + 1212 1 1243 1244 + 1213 1 1244 1245 + 1214 1 1245 1246 + 1215 1 1246 1247 + 1216 1 1247 1248 + 1217 1 1248 1249 + 1218 1 1249 1250 + 1219 1 1250 1251 + 1220 1 1251 1252 + 1221 1 1252 1253 + 1222 1 1253 1254 + 1223 1 1254 1255 + 1224 1 1255 1256 + 1225 1 1256 1257 + 1226 1 1257 1258 + 1227 1 1258 1259 + 1228 1 1259 1260 + 1229 1 1260 1261 + 1230 1 1261 1262 + 1231 1 1262 1263 + 1232 1 1263 1264 + 1233 1 1264 1265 + 1234 1 1265 1266 + 1235 1 1266 1267 + 1236 1 1267 1268 + 1237 1 1268 1269 + 1238 1 1269 1270 + 1239 1 1270 1271 + 1240 1 1271 1272 + 1241 1 1272 1273 + 1242 1 1273 1274 + 1243 1 1274 1275 + 1244 1 1275 1276 + 1245 1 1276 1277 + 1246 1 1277 1278 + 1247 1 1278 1279 + 1248 1 1279 1280 + 1249 1 1281 1282 + 1250 1 1282 1283 + 1251 1 1283 1284 + 1252 1 1284 1285 + 1253 1 1285 1286 + 1254 1 1286 1287 + 1255 1 1287 1288 + 1256 1 1288 1289 + 1257 1 1289 1290 + 1258 1 1290 1291 + 1259 1 1291 1292 + 1260 1 1292 1293 + 1261 1 1293 1294 + 1262 1 1294 1295 + 1263 1 1295 1296 + 1264 1 1296 1297 + 1265 1 1297 1298 + 1266 1 1298 1299 + 1267 1 1299 1300 + 1268 1 1300 1301 + 1269 1 1301 1302 + 1270 1 1302 1303 + 1271 1 1303 1304 + 1272 1 1304 1305 + 1273 1 1305 1306 + 1274 1 1306 1307 + 1275 1 1307 1308 + 1276 1 1308 1309 + 1277 1 1309 1310 + 1278 1 1310 1311 + 1279 1 1311 1312 + 1280 1 1312 1313 + 1281 1 1313 1314 + 1282 1 1314 1315 + 1283 1 1315 1316 + 1284 1 1316 1317 + 1285 1 1317 1318 + 1286 1 1318 1319 + 1287 1 1319 1320 + 1288 1 1321 1322 + 1289 1 1322 1323 + 1290 1 1323 1324 + 1291 1 1324 1325 + 1292 1 1325 1326 + 1293 1 1326 1327 + 1294 1 1327 1328 + 1295 1 1328 1329 + 1296 1 1329 1330 + 1297 1 1330 1331 + 1298 1 1331 1332 + 1299 1 1332 1333 + 1300 1 1333 1334 + 1301 1 1334 1335 + 1302 1 1335 1336 + 1303 1 1336 1337 + 1304 1 1337 1338 + 1305 1 1338 1339 + 1306 1 1339 1340 + 1307 1 1340 1341 + 1308 1 1341 1342 + 1309 1 1342 1343 + 1310 1 1343 1344 + 1311 1 1344 1345 + 1312 1 1345 1346 + 1313 1 1346 1347 + 1314 1 1347 1348 + 1315 1 1348 1349 + 1316 1 1349 1350 + 1317 1 1350 1351 + 1318 1 1351 1352 + 1319 1 1352 1353 + 1320 1 1353 1354 + 1321 1 1354 1355 + 1322 1 1355 1356 + 1323 1 1356 1357 + 1324 1 1357 1358 + 1325 1 1358 1359 + 1326 1 1359 1360 + 1327 1 1361 1362 + 1328 1 1362 1363 + 1329 1 1363 1364 + 1330 1 1364 1365 + 1331 1 1365 1366 + 1332 1 1366 1367 + 1333 1 1367 1368 + 1334 1 1368 1369 + 1335 1 1369 1370 + 1336 1 1370 1371 + 1337 1 1371 1372 + 1338 1 1372 1373 + 1339 1 1373 1374 + 1340 1 1374 1375 + 1341 1 1375 1376 + 1342 1 1376 1377 + 1343 1 1377 1378 + 1344 1 1378 1379 + 1345 1 1379 1380 + 1346 1 1380 1381 + 1347 1 1381 1382 + 1348 1 1382 1383 + 1349 1 1383 1384 + 1350 1 1384 1385 + 1351 1 1385 1386 + 1352 1 1386 1387 + 1353 1 1387 1388 + 1354 1 1388 1389 + 1355 1 1389 1390 + 1356 1 1390 1391 + 1357 1 1391 1392 + 1358 1 1392 1393 + 1359 1 1393 1394 + 1360 1 1394 1395 + 1361 1 1395 1396 + 1362 1 1396 1397 + 1363 1 1397 1398 + 1364 1 1398 1399 + 1365 1 1399 1400 + 1366 1 1401 1402 + 1367 1 1402 1403 + 1368 1 1403 1404 + 1369 1 1404 1405 + 1370 1 1405 1406 + 1371 1 1406 1407 + 1372 1 1407 1408 + 1373 1 1408 1409 + 1374 1 1409 1410 + 1375 1 1410 1411 + 1376 1 1411 1412 + 1377 1 1412 1413 + 1378 1 1413 1414 + 1379 1 1414 1415 + 1380 1 1415 1416 + 1381 1 1416 1417 + 1382 1 1417 1418 + 1383 1 1418 1419 + 1384 1 1419 1420 + 1385 1 1420 1421 + 1386 1 1421 1422 + 1387 1 1422 1423 + 1388 1 1423 1424 + 1389 1 1424 1425 + 1390 1 1425 1426 + 1391 1 1426 1427 + 1392 1 1427 1428 + 1393 1 1428 1429 + 1394 1 1429 1430 + 1395 1 1430 1431 + 1396 1 1431 1432 + 1397 1 1432 1433 + 1398 1 1433 1434 + 1399 1 1434 1435 + 1400 1 1435 1436 + 1401 1 1436 1437 + 1402 1 1437 1438 + 1403 1 1438 1439 + 1404 1 1439 1440 + 1405 1 1441 1442 + 1406 1 1442 1443 + 1407 1 1443 1444 + 1408 1 1444 1445 + 1409 1 1445 1446 + 1410 1 1446 1447 + 1411 1 1447 1448 + 1412 1 1448 1449 + 1413 1 1449 1450 + 1414 1 1450 1451 + 1415 1 1451 1452 + 1416 1 1452 1453 + 1417 1 1453 1454 + 1418 1 1454 1455 + 1419 1 1455 1456 + 1420 1 1456 1457 + 1421 1 1457 1458 + 1422 1 1458 1459 + 1423 1 1459 1460 + 1424 1 1460 1461 + 1425 1 1461 1462 + 1426 1 1462 1463 + 1427 1 1463 1464 + 1428 1 1464 1465 + 1429 1 1465 1466 + 1430 1 1466 1467 + 1431 1 1467 1468 + 1432 1 1468 1469 + 1433 1 1469 1470 + 1434 1 1470 1471 + 1435 1 1471 1472 + 1436 1 1472 1473 + 1437 1 1473 1474 + 1438 1 1474 1475 + 1439 1 1475 1476 + 1440 1 1476 1477 + 1441 1 1477 1478 + 1442 1 1478 1479 + 1443 1 1479 1480 + 1444 1 1481 1482 + 1445 1 1482 1483 + 1446 1 1483 1484 + 1447 1 1484 1485 + 1448 1 1485 1486 + 1449 1 1486 1487 + 1450 1 1487 1488 + 1451 1 1488 1489 + 1452 1 1489 1490 + 1453 1 1490 1491 + 1454 1 1491 1492 + 1455 1 1492 1493 + 1456 1 1493 1494 + 1457 1 1494 1495 + 1458 1 1495 1496 + 1459 1 1496 1497 + 1460 1 1497 1498 + 1461 1 1498 1499 + 1462 1 1499 1500 + 1463 1 1500 1501 + 1464 1 1501 1502 + 1465 1 1502 1503 + 1466 1 1503 1504 + 1467 1 1504 1505 + 1468 1 1505 1506 + 1469 1 1506 1507 + 1470 1 1507 1508 + 1471 1 1508 1509 + 1472 1 1509 1510 + 1473 1 1510 1511 + 1474 1 1511 1512 + 1475 1 1512 1513 + 1476 1 1513 1514 + 1477 1 1514 1515 + 1478 1 1515 1516 + 1479 1 1516 1517 + 1480 1 1517 1518 + 1481 1 1518 1519 + 1482 1 1519 1520 + 1483 1 1521 1522 + 1484 1 1522 1523 + 1485 1 1523 1524 + 1486 1 1524 1525 + 1487 1 1525 1526 + 1488 1 1526 1527 + 1489 1 1527 1528 + 1490 1 1528 1529 + 1491 1 1529 1530 + 1492 1 1530 1531 + 1493 1 1531 1532 + 1494 1 1532 1533 + 1495 1 1533 1534 + 1496 1 1534 1535 + 1497 1 1535 1536 + 1498 1 1536 1537 + 1499 1 1537 1538 + 1500 1 1538 1539 + 1501 1 1539 1540 + 1502 1 1540 1541 + 1503 1 1541 1542 + 1504 1 1542 1543 + 1505 1 1543 1544 + 1506 1 1544 1545 + 1507 1 1545 1546 + 1508 1 1546 1547 + 1509 1 1547 1548 + 1510 1 1548 1549 + 1511 1 1549 1550 + 1512 1 1550 1551 + 1513 1 1551 1552 + 1514 1 1552 1553 + 1515 1 1553 1554 + 1516 1 1554 1555 + 1517 1 1555 1556 + 1518 1 1556 1557 + 1519 1 1557 1558 + 1520 1 1558 1559 + 1521 1 1559 1560 + 1522 1 1561 1562 + 1523 1 1562 1563 + 1524 1 1563 1564 + 1525 1 1564 1565 + 1526 1 1565 1566 + 1527 1 1566 1567 + 1528 1 1567 1568 + 1529 1 1568 1569 + 1530 1 1569 1570 + 1531 1 1570 1571 + 1532 1 1571 1572 + 1533 1 1572 1573 + 1534 1 1573 1574 + 1535 1 1574 1575 + 1536 1 1575 1576 + 1537 1 1576 1577 + 1538 1 1577 1578 + 1539 1 1578 1579 + 1540 1 1579 1580 + 1541 1 1580 1581 + 1542 1 1581 1582 + 1543 1 1582 1583 + 1544 1 1583 1584 + 1545 1 1584 1585 + 1546 1 1585 1586 + 1547 1 1586 1587 + 1548 1 1587 1588 + 1549 1 1588 1589 + 1550 1 1589 1590 + 1551 1 1590 1591 + 1552 1 1591 1592 + 1553 1 1592 1593 + 1554 1 1593 1594 + 1555 1 1594 1595 + 1556 1 1595 1596 + 1557 1 1596 1597 + 1558 1 1597 1598 + 1559 1 1598 1599 + 1560 1 1599 1600 + 1561 1 1601 1602 + 1562 1 1602 1603 + 1563 1 1603 1604 + 1564 1 1604 1605 + 1565 1 1605 1606 + 1566 1 1606 1607 + 1567 1 1607 1608 + 1568 1 1608 1609 + 1569 1 1609 1610 + 1570 1 1610 1611 + 1571 1 1611 1612 + 1572 1 1612 1613 + 1573 1 1613 1614 + 1574 1 1614 1615 + 1575 1 1615 1616 + 1576 1 1616 1617 + 1577 1 1617 1618 + 1578 1 1618 1619 + 1579 1 1619 1620 + 1580 1 1620 1621 + 1581 1 1621 1622 + 1582 1 1622 1623 + 1583 1 1623 1624 + 1584 1 1624 1625 + 1585 1 1625 1626 + 1586 1 1626 1627 + 1587 1 1627 1628 + 1588 1 1628 1629 + 1589 1 1629 1630 + 1590 1 1630 1631 + 1591 1 1631 1632 + 1592 1 1632 1633 + 1593 1 1633 1634 + 1594 1 1634 1635 + 1595 1 1635 1636 + 1596 1 1636 1637 + 1597 1 1637 1638 + 1598 1 1638 1639 + 1599 1 1639 1640 + 1600 1 1641 1642 + 1601 1 1642 1643 + 1602 1 1643 1644 + 1603 1 1644 1645 + 1604 1 1645 1646 + 1605 1 1646 1647 + 1606 1 1647 1648 + 1607 1 1648 1649 + 1608 1 1649 1650 + 1609 1 1650 1651 + 1610 1 1651 1652 + 1611 1 1652 1653 + 1612 1 1653 1654 + 1613 1 1654 1655 + 1614 1 1655 1656 + 1615 1 1656 1657 + 1616 1 1657 1658 + 1617 1 1658 1659 + 1618 1 1659 1660 + 1619 1 1660 1661 + 1620 1 1661 1662 + 1621 1 1662 1663 + 1622 1 1663 1664 + 1623 1 1664 1665 + 1624 1 1665 1666 + 1625 1 1666 1667 + 1626 1 1667 1668 + 1627 1 1668 1669 + 1628 1 1669 1670 + 1629 1 1670 1671 + 1630 1 1671 1672 + 1631 1 1672 1673 + 1632 1 1673 1674 + 1633 1 1674 1675 + 1634 1 1675 1676 + 1635 1 1676 1677 + 1636 1 1677 1678 + 1637 1 1678 1679 + 1638 1 1679 1680 + 1639 1 1681 1682 + 1640 1 1682 1683 + 1641 1 1683 1684 + 1642 1 1684 1685 + 1643 1 1685 1686 + 1644 1 1686 1687 + 1645 1 1687 1688 + 1646 1 1688 1689 + 1647 1 1689 1690 + 1648 1 1690 1691 + 1649 1 1691 1692 + 1650 1 1692 1693 + 1651 1 1693 1694 + 1652 1 1694 1695 + 1653 1 1695 1696 + 1654 1 1696 1697 + 1655 1 1697 1698 + 1656 1 1698 1699 + 1657 1 1699 1700 + 1658 1 1700 1701 + 1659 1 1701 1702 + 1660 1 1702 1703 + 1661 1 1703 1704 + 1662 1 1704 1705 + 1663 1 1705 1706 + 1664 1 1706 1707 + 1665 1 1707 1708 + 1666 1 1708 1709 + 1667 1 1709 1710 + 1668 1 1710 1711 + 1669 1 1711 1712 + 1670 1 1712 1713 + 1671 1 1713 1714 + 1672 1 1714 1715 + 1673 1 1715 1716 + 1674 1 1716 1717 + 1675 1 1717 1718 + 1676 1 1718 1719 + 1677 1 1719 1720 + 1678 1 1721 1722 + 1679 1 1722 1723 + 1680 1 1723 1724 + 1681 1 1724 1725 + 1682 1 1725 1726 + 1683 1 1726 1727 + 1684 1 1727 1728 + 1685 1 1728 1729 + 1686 1 1729 1730 + 1687 1 1730 1731 + 1688 1 1731 1732 + 1689 1 1732 1733 + 1690 1 1733 1734 + 1691 1 1734 1735 + 1692 1 1735 1736 + 1693 1 1736 1737 + 1694 1 1737 1738 + 1695 1 1738 1739 + 1696 1 1739 1740 + 1697 1 1740 1741 + 1698 1 1741 1742 + 1699 1 1742 1743 + 1700 1 1743 1744 + 1701 1 1744 1745 + 1702 1 1745 1746 + 1703 1 1746 1747 + 1704 1 1747 1748 + 1705 1 1748 1749 + 1706 1 1749 1750 + 1707 1 1750 1751 + 1708 1 1751 1752 + 1709 1 1752 1753 + 1710 1 1753 1754 + 1711 1 1754 1755 + 1712 1 1755 1756 + 1713 1 1756 1757 + 1714 1 1757 1758 + 1715 1 1758 1759 + 1716 1 1759 1760 + 1717 1 1761 1762 + 1718 1 1762 1763 + 1719 1 1763 1764 + 1720 1 1764 1765 + 1721 1 1765 1766 + 1722 1 1766 1767 + 1723 1 1767 1768 + 1724 1 1768 1769 + 1725 1 1769 1770 + 1726 1 1770 1771 + 1727 1 1771 1772 + 1728 1 1772 1773 + 1729 1 1773 1774 + 1730 1 1774 1775 + 1731 1 1775 1776 + 1732 1 1776 1777 + 1733 1 1777 1778 + 1734 1 1778 1779 + 1735 1 1779 1780 + 1736 1 1780 1781 + 1737 1 1781 1782 + 1738 1 1782 1783 + 1739 1 1783 1784 + 1740 1 1784 1785 + 1741 1 1785 1786 + 1742 1 1786 1787 + 1743 1 1787 1788 + 1744 1 1788 1789 + 1745 1 1789 1790 + 1746 1 1790 1791 + 1747 1 1791 1792 + 1748 1 1792 1793 + 1749 1 1793 1794 + 1750 1 1794 1795 + 1751 1 1795 1796 + 1752 1 1796 1797 + 1753 1 1797 1798 + 1754 1 1798 1799 + 1755 1 1799 1800 + 1756 1 1801 1802 + 1757 1 1802 1803 + 1758 1 1803 1804 + 1759 1 1804 1805 + 1760 1 1805 1806 + 1761 1 1806 1807 + 1762 1 1807 1808 + 1763 1 1808 1809 + 1764 1 1809 1810 + 1765 1 1810 1811 + 1766 1 1811 1812 + 1767 1 1812 1813 + 1768 1 1813 1814 + 1769 1 1814 1815 + 1770 1 1815 1816 + 1771 1 1816 1817 + 1772 1 1817 1818 + 1773 1 1818 1819 + 1774 1 1819 1820 + 1775 1 1820 1821 + 1776 1 1821 1822 + 1777 1 1822 1823 + 1778 1 1823 1824 + 1779 1 1824 1825 + 1780 1 1825 1826 + 1781 1 1826 1827 + 1782 1 1827 1828 + 1783 1 1828 1829 + 1784 1 1829 1830 + 1785 1 1830 1831 + 1786 1 1831 1832 + 1787 1 1832 1833 + 1788 1 1833 1834 + 1789 1 1834 1835 + 1790 1 1835 1836 + 1791 1 1836 1837 + 1792 1 1837 1838 + 1793 1 1838 1839 + 1794 1 1839 1840 + 1795 1 1841 1842 + 1796 1 1842 1843 + 1797 1 1843 1844 + 1798 1 1844 1845 + 1799 1 1845 1846 + 1800 1 1846 1847 + 1801 1 1847 1848 + 1802 1 1848 1849 + 1803 1 1849 1850 + 1804 1 1850 1851 + 1805 1 1851 1852 + 1806 1 1852 1853 + 1807 1 1853 1854 + 1808 1 1854 1855 + 1809 1 1855 1856 + 1810 1 1856 1857 + 1811 1 1857 1858 + 1812 1 1858 1859 + 1813 1 1859 1860 + 1814 1 1860 1861 + 1815 1 1861 1862 + 1816 1 1862 1863 + 1817 1 1863 1864 + 1818 1 1864 1865 + 1819 1 1865 1866 + 1820 1 1866 1867 + 1821 1 1867 1868 + 1822 1 1868 1869 + 1823 1 1869 1870 + 1824 1 1870 1871 + 1825 1 1871 1872 + 1826 1 1872 1873 + 1827 1 1873 1874 + 1828 1 1874 1875 + 1829 1 1875 1876 + 1830 1 1876 1877 + 1831 1 1877 1878 + 1832 1 1878 1879 + 1833 1 1879 1880 + 1834 1 1881 1882 + 1835 1 1882 1883 + 1836 1 1883 1884 + 1837 1 1884 1885 + 1838 1 1885 1886 + 1839 1 1886 1887 + 1840 1 1887 1888 + 1841 1 1888 1889 + 1842 1 1889 1890 + 1843 1 1890 1891 + 1844 1 1891 1892 + 1845 1 1892 1893 + 1846 1 1893 1894 + 1847 1 1894 1895 + 1848 1 1895 1896 + 1849 1 1896 1897 + 1850 1 1897 1898 + 1851 1 1898 1899 + 1852 1 1899 1900 + 1853 1 1900 1901 + 1854 1 1901 1902 + 1855 1 1902 1903 + 1856 1 1903 1904 + 1857 1 1904 1905 + 1858 1 1905 1906 + 1859 1 1906 1907 + 1860 1 1907 1908 + 1861 1 1908 1909 + 1862 1 1909 1910 + 1863 1 1910 1911 + 1864 1 1911 1912 + 1865 1 1912 1913 + 1866 1 1913 1914 + 1867 1 1914 1915 + 1868 1 1915 1916 + 1869 1 1916 1917 + 1870 1 1917 1918 + 1871 1 1918 1919 + 1872 1 1919 1920 + 1873 1 1921 1922 + 1874 1 1922 1923 + 1875 1 1923 1924 + 1876 1 1924 1925 + 1877 1 1925 1926 + 1878 1 1926 1927 + 1879 1 1927 1928 + 1880 1 1928 1929 + 1881 1 1929 1930 + 1882 1 1930 1931 + 1883 1 1931 1932 + 1884 1 1932 1933 + 1885 1 1933 1934 + 1886 1 1934 1935 + 1887 1 1935 1936 + 1888 1 1936 1937 + 1889 1 1937 1938 + 1890 1 1938 1939 + 1891 1 1939 1940 + 1892 1 1940 1941 + 1893 1 1941 1942 + 1894 1 1942 1943 + 1895 1 1943 1944 + 1896 1 1944 1945 + 1897 1 1945 1946 + 1898 1 1946 1947 + 1899 1 1947 1948 + 1900 1 1948 1949 + 1901 1 1949 1950 + 1902 1 1950 1951 + 1903 1 1951 1952 + 1904 1 1952 1953 + 1905 1 1953 1954 + 1906 1 1954 1955 + 1907 1 1955 1956 + 1908 1 1956 1957 + 1909 1 1957 1958 + 1910 1 1958 1959 + 1911 1 1959 1960 + 1912 1 1961 1962 + 1913 1 1962 1963 + 1914 1 1963 1964 + 1915 1 1964 1965 + 1916 1 1965 1966 + 1917 1 1966 1967 + 1918 1 1967 1968 + 1919 1 1968 1969 + 1920 1 1969 1970 + 1921 1 1970 1971 + 1922 1 1971 1972 + 1923 1 1972 1973 + 1924 1 1973 1974 + 1925 1 1974 1975 + 1926 1 1975 1976 + 1927 1 1976 1977 + 1928 1 1977 1978 + 1929 1 1978 1979 + 1930 1 1979 1980 + 1931 1 1980 1981 + 1932 1 1981 1982 + 1933 1 1982 1983 + 1934 1 1983 1984 + 1935 1 1984 1985 + 1936 1 1985 1986 + 1937 1 1986 1987 + 1938 1 1987 1988 + 1939 1 1988 1989 + 1940 1 1989 1990 + 1941 1 1990 1991 + 1942 1 1991 1992 + 1943 1 1992 1993 + 1944 1 1993 1994 + 1945 1 1994 1995 + 1946 1 1995 1996 + 1947 1 1996 1997 + 1948 1 1997 1998 + 1949 1 1998 1999 + 1950 1 1999 2000 + 1951 1 2001 2002 + 1952 1 2002 2003 + 1953 1 2003 2004 + 1954 1 2004 2005 + 1955 1 2005 2006 + 1956 1 2006 2007 + 1957 1 2007 2008 + 1958 1 2008 2009 + 1959 1 2009 2010 + 1960 1 2010 2011 + 1961 1 2011 2012 + 1962 1 2012 2013 + 1963 1 2013 2014 + 1964 1 2014 2015 + 1965 1 2015 2016 + 1966 1 2016 2017 + 1967 1 2017 2018 + 1968 1 2018 2019 + 1969 1 2019 2020 + 1970 1 2020 2021 + 1971 1 2021 2022 + 1972 1 2022 2023 + 1973 1 2023 2024 + 1974 1 2024 2025 + 1975 1 2025 2026 + 1976 1 2026 2027 + 1977 1 2027 2028 + 1978 1 2028 2029 + 1979 1 2029 2030 + 1980 1 2030 2031 + 1981 1 2031 2032 + 1982 1 2032 2033 + 1983 1 2033 2034 + 1984 1 2034 2035 + 1985 1 2035 2036 + 1986 1 2036 2037 + 1987 1 2037 2038 + 1988 1 2038 2039 + 1989 1 2039 2040 + 1990 1 2041 2042 + 1991 1 2042 2043 + 1992 1 2043 2044 + 1993 1 2044 2045 + 1994 1 2045 2046 + 1995 1 2046 2047 + 1996 1 2047 2048 + 1997 1 2048 2049 + 1998 1 2049 2050 + 1999 1 2050 2051 + 2000 1 2051 2052 + 2001 1 2052 2053 + 2002 1 2053 2054 + 2003 1 2054 2055 + 2004 1 2055 2056 + 2005 1 2056 2057 + 2006 1 2057 2058 + 2007 1 2058 2059 + 2008 1 2059 2060 + 2009 1 2060 2061 + 2010 1 2061 2062 + 2011 1 2062 2063 + 2012 1 2063 2064 + 2013 1 2064 2065 + 2014 1 2065 2066 + 2015 1 2066 2067 + 2016 1 2067 2068 + 2017 1 2068 2069 + 2018 1 2069 2070 + 2019 1 2070 2071 + 2020 1 2071 2072 + 2021 1 2072 2073 + 2022 1 2073 2074 + 2023 1 2074 2075 + 2024 1 2075 2076 + 2025 1 2076 2077 + 2026 1 2077 2078 + 2027 1 2078 2079 + 2028 1 2079 2080 + 2029 1 2081 2082 + 2030 1 2082 2083 + 2031 1 2083 2084 + 2032 1 2084 2085 + 2033 1 2085 2086 + 2034 1 2086 2087 + 2035 1 2087 2088 + 2036 1 2088 2089 + 2037 1 2089 2090 + 2038 1 2090 2091 + 2039 1 2091 2092 + 2040 1 2092 2093 + 2041 1 2093 2094 + 2042 1 2094 2095 + 2043 1 2095 2096 + 2044 1 2096 2097 + 2045 1 2097 2098 + 2046 1 2098 2099 + 2047 1 2099 2100 + 2048 1 2100 2101 + 2049 1 2101 2102 + 2050 1 2102 2103 + 2051 1 2103 2104 + 2052 1 2104 2105 + 2053 1 2105 2106 + 2054 1 2106 2107 + 2055 1 2107 2108 + 2056 1 2108 2109 + 2057 1 2109 2110 + 2058 1 2110 2111 + 2059 1 2111 2112 + 2060 1 2112 2113 + 2061 1 2113 2114 + 2062 1 2114 2115 + 2063 1 2115 2116 + 2064 1 2116 2117 + 2065 1 2117 2118 + 2066 1 2118 2119 + 2067 1 2119 2120 + 2068 1 2121 2122 + 2069 1 2122 2123 + 2070 1 2123 2124 + 2071 1 2124 2125 + 2072 1 2125 2126 + 2073 1 2126 2127 + 2074 1 2127 2128 + 2075 1 2128 2129 + 2076 1 2129 2130 + 2077 1 2130 2131 + 2078 1 2131 2132 + 2079 1 2132 2133 + 2080 1 2133 2134 + 2081 1 2134 2135 + 2082 1 2135 2136 + 2083 1 2136 2137 + 2084 1 2137 2138 + 2085 1 2138 2139 + 2086 1 2139 2140 + 2087 1 2140 2141 + 2088 1 2141 2142 + 2089 1 2142 2143 + 2090 1 2143 2144 + 2091 1 2144 2145 + 2092 1 2145 2146 + 2093 1 2146 2147 + 2094 1 2147 2148 + 2095 1 2148 2149 + 2096 1 2149 2150 + 2097 1 2150 2151 + 2098 1 2151 2152 + 2099 1 2152 2153 + 2100 1 2153 2154 + 2101 1 2154 2155 + 2102 1 2155 2156 + 2103 1 2156 2157 + 2104 1 2157 2158 + 2105 1 2158 2159 + 2106 1 2159 2160 + 2107 1 2161 2162 + 2108 1 2162 2163 + 2109 1 2163 2164 + 2110 1 2164 2165 + 2111 1 2165 2166 + 2112 1 2166 2167 + 2113 1 2167 2168 + 2114 1 2168 2169 + 2115 1 2169 2170 + 2116 1 2170 2171 + 2117 1 2171 2172 + 2118 1 2172 2173 + 2119 1 2173 2174 + 2120 1 2174 2175 + 2121 1 2175 2176 + 2122 1 2176 2177 + 2123 1 2177 2178 + 2124 1 2178 2179 + 2125 1 2179 2180 + 2126 1 2180 2181 + 2127 1 2181 2182 + 2128 1 2182 2183 + 2129 1 2183 2184 + 2130 1 2184 2185 + 2131 1 2185 2186 + 2132 1 2186 2187 + 2133 1 2187 2188 + 2134 1 2188 2189 + 2135 1 2189 2190 + 2136 1 2190 2191 + 2137 1 2191 2192 + 2138 1 2192 2193 + 2139 1 2193 2194 + 2140 1 2194 2195 + 2141 1 2195 2196 + 2142 1 2196 2197 + 2143 1 2197 2198 + 2144 1 2198 2199 + 2145 1 2199 2200 + 2146 1 2201 2202 + 2147 1 2202 2203 + 2148 1 2203 2204 + 2149 1 2204 2205 + 2150 1 2205 2206 + 2151 1 2206 2207 + 2152 1 2207 2208 + 2153 1 2208 2209 + 2154 1 2209 2210 + 2155 1 2210 2211 + 2156 1 2211 2212 + 2157 1 2212 2213 + 2158 1 2213 2214 + 2159 1 2214 2215 + 2160 1 2215 2216 + 2161 1 2216 2217 + 2162 1 2217 2218 + 2163 1 2218 2219 + 2164 1 2219 2220 + 2165 1 2220 2221 + 2166 1 2221 2222 + 2167 1 2222 2223 + 2168 1 2223 2224 + 2169 1 2224 2225 + 2170 1 2225 2226 + 2171 1 2226 2227 + 2172 1 2227 2228 + 2173 1 2228 2229 + 2174 1 2229 2230 + 2175 1 2230 2231 + 2176 1 2231 2232 + 2177 1 2232 2233 + 2178 1 2233 2234 + 2179 1 2234 2235 + 2180 1 2235 2236 + 2181 1 2236 2237 + 2182 1 2237 2238 + 2183 1 2238 2239 + 2184 1 2239 2240 + 2185 1 2241 2242 + 2186 1 2242 2243 + 2187 1 2243 2244 + 2188 1 2244 2245 + 2189 1 2245 2246 + 2190 1 2246 2247 + 2191 1 2247 2248 + 2192 1 2248 2249 + 2193 1 2249 2250 + 2194 1 2250 2251 + 2195 1 2251 2252 + 2196 1 2252 2253 + 2197 1 2253 2254 + 2198 1 2254 2255 + 2199 1 2255 2256 + 2200 1 2256 2257 + 2201 1 2257 2258 + 2202 1 2258 2259 + 2203 1 2259 2260 + 2204 1 2260 2261 + 2205 1 2261 2262 + 2206 1 2262 2263 + 2207 1 2263 2264 + 2208 1 2264 2265 + 2209 1 2265 2266 + 2210 1 2266 2267 + 2211 1 2267 2268 + 2212 1 2268 2269 + 2213 1 2269 2270 + 2214 1 2270 2271 + 2215 1 2271 2272 + 2216 1 2272 2273 + 2217 1 2273 2274 + 2218 1 2274 2275 + 2219 1 2275 2276 + 2220 1 2276 2277 + 2221 1 2277 2278 + 2222 1 2278 2279 + 2223 1 2279 2280 + 2224 1 2281 2282 + 2225 1 2282 2283 + 2226 1 2283 2284 + 2227 1 2284 2285 + 2228 1 2285 2286 + 2229 1 2286 2287 + 2230 1 2287 2288 + 2231 1 2288 2289 + 2232 1 2289 2290 + 2233 1 2290 2291 + 2234 1 2291 2292 + 2235 1 2292 2293 + 2236 1 2293 2294 + 2237 1 2294 2295 + 2238 1 2295 2296 + 2239 1 2296 2297 + 2240 1 2297 2298 + 2241 1 2298 2299 + 2242 1 2299 2300 + 2243 1 2300 2301 + 2244 1 2301 2302 + 2245 1 2302 2303 + 2246 1 2303 2304 + 2247 1 2304 2305 + 2248 1 2305 2306 + 2249 1 2306 2307 + 2250 1 2307 2308 + 2251 1 2308 2309 + 2252 1 2309 2310 + 2253 1 2310 2311 + 2254 1 2311 2312 + 2255 1 2312 2313 + 2256 1 2313 2314 + 2257 1 2314 2315 + 2258 1 2315 2316 + 2259 1 2316 2317 + 2260 1 2317 2318 + 2261 1 2318 2319 + 2262 1 2319 2320 + 2263 1 2321 2322 + 2264 1 2322 2323 + 2265 1 2323 2324 + 2266 1 2324 2325 + 2267 1 2325 2326 + 2268 1 2326 2327 + 2269 1 2327 2328 + 2270 1 2328 2329 + 2271 1 2329 2330 + 2272 1 2330 2331 + 2273 1 2331 2332 + 2274 1 2332 2333 + 2275 1 2333 2334 + 2276 1 2334 2335 + 2277 1 2335 2336 + 2278 1 2336 2337 + 2279 1 2337 2338 + 2280 1 2338 2339 + 2281 1 2339 2340 + 2282 1 2340 2341 + 2283 1 2341 2342 + 2284 1 2342 2343 + 2285 1 2343 2344 + 2286 1 2344 2345 + 2287 1 2345 2346 + 2288 1 2346 2347 + 2289 1 2347 2348 + 2290 1 2348 2349 + 2291 1 2349 2350 + 2292 1 2350 2351 + 2293 1 2351 2352 + 2294 1 2352 2353 + 2295 1 2353 2354 + 2296 1 2354 2355 + 2297 1 2355 2356 + 2298 1 2356 2357 + 2299 1 2357 2358 + 2300 1 2358 2359 + 2301 1 2359 2360 + 2302 1 2361 2362 + 2303 1 2362 2363 + 2304 1 2363 2364 + 2305 1 2364 2365 + 2306 1 2365 2366 + 2307 1 2366 2367 + 2308 1 2367 2368 + 2309 1 2368 2369 + 2310 1 2369 2370 + 2311 1 2370 2371 + 2312 1 2371 2372 + 2313 1 2372 2373 + 2314 1 2373 2374 + 2315 1 2374 2375 + 2316 1 2375 2376 + 2317 1 2376 2377 + 2318 1 2377 2378 + 2319 1 2378 2379 + 2320 1 2379 2380 + 2321 1 2380 2381 + 2322 1 2381 2382 + 2323 1 2382 2383 + 2324 1 2383 2384 + 2325 1 2384 2385 + 2326 1 2385 2386 + 2327 1 2386 2387 + 2328 1 2387 2388 + 2329 1 2388 2389 + 2330 1 2389 2390 + 2331 1 2390 2391 + 2332 1 2391 2392 + 2333 1 2392 2393 + 2334 1 2393 2394 + 2335 1 2394 2395 + 2336 1 2395 2396 + 2337 1 2396 2397 + 2338 1 2397 2398 + 2339 1 2398 2399 + 2340 1 2399 2400 + 2341 1 2401 2402 + 2342 1 2402 2403 + 2343 1 2403 2404 + 2344 1 2404 2405 + 2345 1 2405 2406 + 2346 1 2406 2407 + 2347 1 2407 2408 + 2348 1 2408 2409 + 2349 1 2409 2410 + 2350 1 2410 2411 + 2351 1 2411 2412 + 2352 1 2412 2413 + 2353 1 2413 2414 + 2354 1 2414 2415 + 2355 1 2415 2416 + 2356 1 2416 2417 + 2357 1 2417 2418 + 2358 1 2418 2419 + 2359 1 2419 2420 + 2360 1 2420 2421 + 2361 1 2421 2422 + 2362 1 2422 2423 + 2363 1 2423 2424 + 2364 1 2424 2425 + 2365 1 2425 2426 + 2366 1 2426 2427 + 2367 1 2427 2428 + 2368 1 2428 2429 + 2369 1 2429 2430 + 2370 1 2430 2431 + 2371 1 2431 2432 + 2372 1 2432 2433 + 2373 1 2433 2434 + 2374 1 2434 2435 + 2375 1 2435 2436 + 2376 1 2436 2437 + 2377 1 2437 2438 + 2378 1 2438 2439 + 2379 1 2439 2440 + 2380 1 2441 2442 + 2381 1 2442 2443 + 2382 1 2443 2444 + 2383 1 2444 2445 + 2384 1 2445 2446 + 2385 1 2446 2447 + 2386 1 2447 2448 + 2387 1 2448 2449 + 2388 1 2449 2450 + 2389 1 2450 2451 + 2390 1 2451 2452 + 2391 1 2452 2453 + 2392 1 2453 2454 + 2393 1 2454 2455 + 2394 1 2455 2456 + 2395 1 2456 2457 + 2396 1 2457 2458 + 2397 1 2458 2459 + 2398 1 2459 2460 + 2399 1 2460 2461 + 2400 1 2461 2462 + 2401 1 2462 2463 + 2402 1 2463 2464 + 2403 1 2464 2465 + 2404 1 2465 2466 + 2405 1 2466 2467 + 2406 1 2467 2468 + 2407 1 2468 2469 + 2408 1 2469 2470 + 2409 1 2470 2471 + 2410 1 2471 2472 + 2411 1 2472 2473 + 2412 1 2473 2474 + 2413 1 2474 2475 + 2414 1 2475 2476 + 2415 1 2476 2477 + 2416 1 2477 2478 + 2417 1 2478 2479 + 2418 1 2479 2480 + 2419 1 2481 2482 + 2420 1 2482 2483 + 2421 1 2483 2484 + 2422 1 2484 2485 + 2423 1 2485 2486 + 2424 1 2486 2487 + 2425 1 2487 2488 + 2426 1 2488 2489 + 2427 1 2489 2490 + 2428 1 2490 2491 + 2429 1 2491 2492 + 2430 1 2492 2493 + 2431 1 2493 2494 + 2432 1 2494 2495 + 2433 1 2495 2496 + 2434 1 2496 2497 + 2435 1 2497 2498 + 2436 1 2498 2499 + 2437 1 2499 2500 + 2438 1 2500 2501 + 2439 1 2501 2502 + 2440 1 2502 2503 + 2441 1 2503 2504 + 2442 1 2504 2505 + 2443 1 2505 2506 + 2444 1 2506 2507 + 2445 1 2507 2508 + 2446 1 2508 2509 + 2447 1 2509 2510 + 2448 1 2510 2511 + 2449 1 2511 2512 + 2450 1 2512 2513 + 2451 1 2513 2514 + 2452 1 2514 2515 + 2453 1 2515 2516 + 2454 1 2516 2517 + 2455 1 2517 2518 + 2456 1 2518 2519 + 2457 1 2519 2520 + 2458 1 2521 2522 + 2459 1 2522 2523 + 2460 1 2523 2524 + 2461 1 2524 2525 + 2462 1 2525 2526 + 2463 1 2526 2527 + 2464 1 2527 2528 + 2465 1 2528 2529 + 2466 1 2529 2530 + 2467 1 2530 2531 + 2468 1 2531 2532 + 2469 1 2532 2533 + 2470 1 2533 2534 + 2471 1 2534 2535 + 2472 1 2535 2536 + 2473 1 2536 2537 + 2474 1 2537 2538 + 2475 1 2538 2539 + 2476 1 2539 2540 + 2477 1 2540 2541 + 2478 1 2541 2542 + 2479 1 2542 2543 + 2480 1 2543 2544 + 2481 1 2544 2545 + 2482 1 2545 2546 + 2483 1 2546 2547 + 2484 1 2547 2548 + 2485 1 2548 2549 + 2486 1 2549 2550 + 2487 1 2550 2551 + 2488 1 2551 2552 + 2489 1 2552 2553 + 2490 1 2553 2554 + 2491 1 2554 2555 + 2492 1 2555 2556 + 2493 1 2556 2557 + 2494 1 2557 2558 + 2495 1 2558 2559 + 2496 1 2559 2560 + 2497 1 2561 2562 + 2498 1 2562 2563 + 2499 1 2563 2564 + 2500 1 2564 2565 + 2501 1 2565 2566 + 2502 1 2566 2567 + 2503 1 2567 2568 + 2504 1 2568 2569 + 2505 1 2569 2570 + 2506 1 2570 2571 + 2507 1 2571 2572 + 2508 1 2572 2573 + 2509 1 2573 2574 + 2510 1 2574 2575 + 2511 1 2575 2576 + 2512 1 2576 2577 + 2513 1 2577 2578 + 2514 1 2578 2579 + 2515 1 2579 2580 + 2516 1 2580 2581 + 2517 1 2581 2582 + 2518 1 2582 2583 + 2519 1 2583 2584 + 2520 1 2584 2585 + 2521 1 2585 2586 + 2522 1 2586 2587 + 2523 1 2587 2588 + 2524 1 2588 2589 + 2525 1 2589 2590 + 2526 1 2590 2591 + 2527 1 2591 2592 + 2528 1 2592 2593 + 2529 1 2593 2594 + 2530 1 2594 2595 + 2531 1 2595 2596 + 2532 1 2596 2597 + 2533 1 2597 2598 + 2534 1 2598 2599 + 2535 1 2599 2600 + 2536 1 2601 2602 + 2537 1 2602 2603 + 2538 1 2603 2604 + 2539 1 2604 2605 + 2540 1 2605 2606 + 2541 1 2606 2607 + 2542 1 2607 2608 + 2543 1 2608 2609 + 2544 1 2609 2610 + 2545 1 2610 2611 + 2546 1 2611 2612 + 2547 1 2612 2613 + 2548 1 2613 2614 + 2549 1 2614 2615 + 2550 1 2615 2616 + 2551 1 2616 2617 + 2552 1 2617 2618 + 2553 1 2618 2619 + 2554 1 2619 2620 + 2555 1 2620 2621 + 2556 1 2621 2622 + 2557 1 2622 2623 + 2558 1 2623 2624 + 2559 1 2624 2625 + 2560 1 2625 2626 + 2561 1 2626 2627 + 2562 1 2627 2628 + 2563 1 2628 2629 + 2564 1 2629 2630 + 2565 1 2630 2631 + 2566 1 2631 2632 + 2567 1 2632 2633 + 2568 1 2633 2634 + 2569 1 2634 2635 + 2570 1 2635 2636 + 2571 1 2636 2637 + 2572 1 2637 2638 + 2573 1 2638 2639 + 2574 1 2639 2640 + 2575 1 2641 2642 + 2576 1 2642 2643 + 2577 1 2643 2644 + 2578 1 2644 2645 + 2579 1 2645 2646 + 2580 1 2646 2647 + 2581 1 2647 2648 + 2582 1 2648 2649 + 2583 1 2649 2650 + 2584 1 2650 2651 + 2585 1 2651 2652 + 2586 1 2652 2653 + 2587 1 2653 2654 + 2588 1 2654 2655 + 2589 1 2655 2656 + 2590 1 2656 2657 + 2591 1 2657 2658 + 2592 1 2658 2659 + 2593 1 2659 2660 + 2594 1 2660 2661 + 2595 1 2661 2662 + 2596 1 2662 2663 + 2597 1 2663 2664 + 2598 1 2664 2665 + 2599 1 2665 2666 + 2600 1 2666 2667 + 2601 1 2667 2668 + 2602 1 2668 2669 + 2603 1 2669 2670 + 2604 1 2670 2671 + 2605 1 2671 2672 + 2606 1 2672 2673 + 2607 1 2673 2674 + 2608 1 2674 2675 + 2609 1 2675 2676 + 2610 1 2676 2677 + 2611 1 2677 2678 + 2612 1 2678 2679 + 2613 1 2679 2680 + 2614 1 2681 2682 + 2615 1 2682 2683 + 2616 1 2683 2684 + 2617 1 2684 2685 + 2618 1 2685 2686 + 2619 1 2686 2687 + 2620 1 2687 2688 + 2621 1 2688 2689 + 2622 1 2689 2690 + 2623 1 2690 2691 + 2624 1 2691 2692 + 2625 1 2692 2693 + 2626 1 2693 2694 + 2627 1 2694 2695 + 2628 1 2695 2696 + 2629 1 2696 2697 + 2630 1 2697 2698 + 2631 1 2698 2699 + 2632 1 2699 2700 + 2633 1 2700 2701 + 2634 1 2701 2702 + 2635 1 2702 2703 + 2636 1 2703 2704 + 2637 1 2704 2705 + 2638 1 2705 2706 + 2639 1 2706 2707 + 2640 1 2707 2708 + 2641 1 2708 2709 + 2642 1 2709 2710 + 2643 1 2710 2711 + 2644 1 2711 2712 + 2645 1 2712 2713 + 2646 1 2713 2714 + 2647 1 2714 2715 + 2648 1 2715 2716 + 2649 1 2716 2717 + 2650 1 2717 2718 + 2651 1 2718 2719 + 2652 1 2719 2720 + 2653 1 2721 2722 + 2654 1 2722 2723 + 2655 1 2723 2724 + 2656 1 2724 2725 + 2657 1 2725 2726 + 2658 1 2726 2727 + 2659 1 2727 2728 + 2660 1 2728 2729 + 2661 1 2729 2730 + 2662 1 2730 2731 + 2663 1 2731 2732 + 2664 1 2732 2733 + 2665 1 2733 2734 + 2666 1 2734 2735 + 2667 1 2735 2736 + 2668 1 2736 2737 + 2669 1 2737 2738 + 2670 1 2738 2739 + 2671 1 2739 2740 + 2672 1 2740 2741 + 2673 1 2741 2742 + 2674 1 2742 2743 + 2675 1 2743 2744 + 2676 1 2744 2745 + 2677 1 2745 2746 + 2678 1 2746 2747 + 2679 1 2747 2748 + 2680 1 2748 2749 + 2681 1 2749 2750 + 2682 1 2750 2751 + 2683 1 2751 2752 + 2684 1 2752 2753 + 2685 1 2753 2754 + 2686 1 2754 2755 + 2687 1 2755 2756 + 2688 1 2756 2757 + 2689 1 2757 2758 + 2690 1 2758 2759 + 2691 1 2759 2760 + 2692 1 2761 2762 + 2693 1 2762 2763 + 2694 1 2763 2764 + 2695 1 2764 2765 + 2696 1 2765 2766 + 2697 1 2766 2767 + 2698 1 2767 2768 + 2699 1 2768 2769 + 2700 1 2769 2770 + 2701 1 2770 2771 + 2702 1 2771 2772 + 2703 1 2772 2773 + 2704 1 2773 2774 + 2705 1 2774 2775 + 2706 1 2775 2776 + 2707 1 2776 2777 + 2708 1 2777 2778 + 2709 1 2778 2779 + 2710 1 2779 2780 + 2711 1 2780 2781 + 2712 1 2781 2782 + 2713 1 2782 2783 + 2714 1 2783 2784 + 2715 1 2784 2785 + 2716 1 2785 2786 + 2717 1 2786 2787 + 2718 1 2787 2788 + 2719 1 2788 2789 + 2720 1 2789 2790 + 2721 1 2790 2791 + 2722 1 2791 2792 + 2723 1 2792 2793 + 2724 1 2793 2794 + 2725 1 2794 2795 + 2726 1 2795 2796 + 2727 1 2796 2797 + 2728 1 2797 2798 + 2729 1 2798 2799 + 2730 1 2799 2800 + 2731 1 2801 2802 + 2732 1 2802 2803 + 2733 1 2803 2804 + 2734 1 2804 2805 + 2735 1 2805 2806 + 2736 1 2806 2807 + 2737 1 2807 2808 + 2738 1 2808 2809 + 2739 1 2809 2810 + 2740 1 2810 2811 + 2741 1 2811 2812 + 2742 1 2812 2813 + 2743 1 2813 2814 + 2744 1 2814 2815 + 2745 1 2815 2816 + 2746 1 2816 2817 + 2747 1 2817 2818 + 2748 1 2818 2819 + 2749 1 2819 2820 + 2750 1 2820 2821 + 2751 1 2821 2822 + 2752 1 2822 2823 + 2753 1 2823 2824 + 2754 1 2824 2825 + 2755 1 2825 2826 + 2756 1 2826 2827 + 2757 1 2827 2828 + 2758 1 2828 2829 + 2759 1 2829 2830 + 2760 1 2830 2831 + 2761 1 2831 2832 + 2762 1 2832 2833 + 2763 1 2833 2834 + 2764 1 2834 2835 + 2765 1 2835 2836 + 2766 1 2836 2837 + 2767 1 2837 2838 + 2768 1 2838 2839 + 2769 1 2839 2840 + 2770 1 2841 2842 + 2771 1 2842 2843 + 2772 1 2843 2844 + 2773 1 2844 2845 + 2774 1 2845 2846 + 2775 1 2846 2847 + 2776 1 2847 2848 + 2777 1 2848 2849 + 2778 1 2849 2850 + 2779 1 2850 2851 + 2780 1 2851 2852 + 2781 1 2852 2853 + 2782 1 2853 2854 + 2783 1 2854 2855 + 2784 1 2855 2856 + 2785 1 2856 2857 + 2786 1 2857 2858 + 2787 1 2858 2859 + 2788 1 2859 2860 + 2789 1 2860 2861 + 2790 1 2861 2862 + 2791 1 2862 2863 + 2792 1 2863 2864 + 2793 1 2864 2865 + 2794 1 2865 2866 + 2795 1 2866 2867 + 2796 1 2867 2868 + 2797 1 2868 2869 + 2798 1 2869 2870 + 2799 1 2870 2871 + 2800 1 2871 2872 + 2801 1 2872 2873 + 2802 1 2873 2874 + 2803 1 2874 2875 + 2804 1 2875 2876 + 2805 1 2876 2877 + 2806 1 2877 2878 + 2807 1 2878 2879 + 2808 1 2879 2880 + 2809 1 2881 2882 + 2810 1 2882 2883 + 2811 1 2883 2884 + 2812 1 2884 2885 + 2813 1 2885 2886 + 2814 1 2886 2887 + 2815 1 2887 2888 + 2816 1 2888 2889 + 2817 1 2889 2890 + 2818 1 2890 2891 + 2819 1 2891 2892 + 2820 1 2892 2893 + 2821 1 2893 2894 + 2822 1 2894 2895 + 2823 1 2895 2896 + 2824 1 2896 2897 + 2825 1 2897 2898 + 2826 1 2898 2899 + 2827 1 2899 2900 + 2828 1 2900 2901 + 2829 1 2901 2902 + 2830 1 2902 2903 + 2831 1 2903 2904 + 2832 1 2904 2905 + 2833 1 2905 2906 + 2834 1 2906 2907 + 2835 1 2907 2908 + 2836 1 2908 2909 + 2837 1 2909 2910 + 2838 1 2910 2911 + 2839 1 2911 2912 + 2840 1 2912 2913 + 2841 1 2913 2914 + 2842 1 2914 2915 + 2843 1 2915 2916 + 2844 1 2916 2917 + 2845 1 2917 2918 + 2846 1 2918 2919 + 2847 1 2919 2920 + 2848 1 2921 2922 + 2849 1 2922 2923 + 2850 1 2923 2924 + 2851 1 2924 2925 + 2852 1 2925 2926 + 2853 1 2926 2927 + 2854 1 2927 2928 + 2855 1 2928 2929 + 2856 1 2929 2930 + 2857 1 2930 2931 + 2858 1 2931 2932 + 2859 1 2932 2933 + 2860 1 2933 2934 + 2861 1 2934 2935 + 2862 1 2935 2936 + 2863 1 2936 2937 + 2864 1 2937 2938 + 2865 1 2938 2939 + 2866 1 2939 2940 + 2867 1 2940 2941 + 2868 1 2941 2942 + 2869 1 2942 2943 + 2870 1 2943 2944 + 2871 1 2944 2945 + 2872 1 2945 2946 + 2873 1 2946 2947 + 2874 1 2947 2948 + 2875 1 2948 2949 + 2876 1 2949 2950 + 2877 1 2950 2951 + 2878 1 2951 2952 + 2879 1 2952 2953 + 2880 1 2953 2954 + 2881 1 2954 2955 + 2882 1 2955 2956 + 2883 1 2956 2957 + 2884 1 2957 2958 + 2885 1 2958 2959 + 2886 1 2959 2960 + 2887 1 2961 2962 + 2888 1 2962 2963 + 2889 1 2963 2964 + 2890 1 2964 2965 + 2891 1 2965 2966 + 2892 1 2966 2967 + 2893 1 2967 2968 + 2894 1 2968 2969 + 2895 1 2969 2970 + 2896 1 2970 2971 + 2897 1 2971 2972 + 2898 1 2972 2973 + 2899 1 2973 2974 + 2900 1 2974 2975 + 2901 1 2975 2976 + 2902 1 2976 2977 + 2903 1 2977 2978 + 2904 1 2978 2979 + 2905 1 2979 2980 + 2906 1 2980 2981 + 2907 1 2981 2982 + 2908 1 2982 2983 + 2909 1 2983 2984 + 2910 1 2984 2985 + 2911 1 2985 2986 + 2912 1 2986 2987 + 2913 1 2987 2988 + 2914 1 2988 2989 + 2915 1 2989 2990 + 2916 1 2990 2991 + 2917 1 2991 2992 + 2918 1 2992 2993 + 2919 1 2993 2994 + 2920 1 2994 2995 + 2921 1 2995 2996 + 2922 1 2996 2997 + 2923 1 2997 2998 + 2924 1 2998 2999 + 2925 1 2999 3000 + 2926 1 3001 3002 + 2927 1 3002 3003 + 2928 1 3003 3004 + 2929 1 3004 3005 + 2930 1 3005 3006 + 2931 1 3006 3007 + 2932 1 3007 3008 + 2933 1 3008 3009 + 2934 1 3009 3010 + 2935 1 3010 3011 + 2936 1 3011 3012 + 2937 1 3012 3013 + 2938 1 3013 3014 + 2939 1 3014 3015 + 2940 1 3015 3016 + 2941 1 3016 3017 + 2942 1 3017 3018 + 2943 1 3018 3019 + 2944 1 3019 3020 + 2945 1 3020 3021 + 2946 1 3021 3022 + 2947 1 3022 3023 + 2948 1 3023 3024 + 2949 1 3024 3025 + 2950 1 3025 3026 + 2951 1 3026 3027 + 2952 1 3027 3028 + 2953 1 3028 3029 + 2954 1 3029 3030 + 2955 1 3030 3031 + 2956 1 3031 3032 + 2957 1 3032 3033 + 2958 1 3033 3034 + 2959 1 3034 3035 + 2960 1 3035 3036 + 2961 1 3036 3037 + 2962 1 3037 3038 + 2963 1 3038 3039 + 2964 1 3039 3040 + 2965 1 3041 3042 + 2966 1 3042 3043 + 2967 1 3043 3044 + 2968 1 3044 3045 + 2969 1 3045 3046 + 2970 1 3046 3047 + 2971 1 3047 3048 + 2972 1 3048 3049 + 2973 1 3049 3050 + 2974 1 3050 3051 + 2975 1 3051 3052 + 2976 1 3052 3053 + 2977 1 3053 3054 + 2978 1 3054 3055 + 2979 1 3055 3056 + 2980 1 3056 3057 + 2981 1 3057 3058 + 2982 1 3058 3059 + 2983 1 3059 3060 + 2984 1 3060 3061 + 2985 1 3061 3062 + 2986 1 3062 3063 + 2987 1 3063 3064 + 2988 1 3064 3065 + 2989 1 3065 3066 + 2990 1 3066 3067 + 2991 1 3067 3068 + 2992 1 3068 3069 + 2993 1 3069 3070 + 2994 1 3070 3071 + 2995 1 3071 3072 + 2996 1 3072 3073 + 2997 1 3073 3074 + 2998 1 3074 3075 + 2999 1 3075 3076 + 3000 1 3076 3077 + 3001 1 3077 3078 + 3002 1 3078 3079 + 3003 1 3079 3080 + 3004 1 3081 3082 + 3005 1 3082 3083 + 3006 1 3083 3084 + 3007 1 3084 3085 + 3008 1 3085 3086 + 3009 1 3086 3087 + 3010 1 3087 3088 + 3011 1 3088 3089 + 3012 1 3089 3090 + 3013 1 3090 3091 + 3014 1 3091 3092 + 3015 1 3092 3093 + 3016 1 3093 3094 + 3017 1 3094 3095 + 3018 1 3095 3096 + 3019 1 3096 3097 + 3020 1 3097 3098 + 3021 1 3098 3099 + 3022 1 3099 3100 + 3023 1 3100 3101 + 3024 1 3101 3102 + 3025 1 3102 3103 + 3026 1 3103 3104 + 3027 1 3104 3105 + 3028 1 3105 3106 + 3029 1 3106 3107 + 3030 1 3107 3108 + 3031 1 3108 3109 + 3032 1 3109 3110 + 3033 1 3110 3111 + 3034 1 3111 3112 + 3035 1 3112 3113 + 3036 1 3113 3114 + 3037 1 3114 3115 + 3038 1 3115 3116 + 3039 1 3116 3117 + 3040 1 3117 3118 + 3041 1 3118 3119 + 3042 1 3119 3120 + 3043 1 3121 3122 + 3044 1 3122 3123 + 3045 1 3123 3124 + 3046 1 3124 3125 + 3047 1 3125 3126 + 3048 1 3126 3127 + 3049 1 3127 3128 + 3050 1 3128 3129 + 3051 1 3129 3130 + 3052 1 3130 3131 + 3053 1 3131 3132 + 3054 1 3132 3133 + 3055 1 3133 3134 + 3056 1 3134 3135 + 3057 1 3135 3136 + 3058 1 3136 3137 + 3059 1 3137 3138 + 3060 1 3138 3139 + 3061 1 3139 3140 + 3062 1 3140 3141 + 3063 1 3141 3142 + 3064 1 3142 3143 + 3065 1 3143 3144 + 3066 1 3144 3145 + 3067 1 3145 3146 + 3068 1 3146 3147 + 3069 1 3147 3148 + 3070 1 3148 3149 + 3071 1 3149 3150 + 3072 1 3150 3151 + 3073 1 3151 3152 + 3074 1 3152 3153 + 3075 1 3153 3154 + 3076 1 3154 3155 + 3077 1 3155 3156 + 3078 1 3156 3157 + 3079 1 3157 3158 + 3080 1 3158 3159 + 3081 1 3159 3160 + 3082 1 3161 3162 + 3083 1 3162 3163 + 3084 1 3163 3164 + 3085 1 3164 3165 + 3086 1 3165 3166 + 3087 1 3166 3167 + 3088 1 3167 3168 + 3089 1 3168 3169 + 3090 1 3169 3170 + 3091 1 3170 3171 + 3092 1 3171 3172 + 3093 1 3172 3173 + 3094 1 3173 3174 + 3095 1 3174 3175 + 3096 1 3175 3176 + 3097 1 3176 3177 + 3098 1 3177 3178 + 3099 1 3178 3179 + 3100 1 3179 3180 + 3101 1 3180 3181 + 3102 1 3181 3182 + 3103 1 3182 3183 + 3104 1 3183 3184 + 3105 1 3184 3185 + 3106 1 3185 3186 + 3107 1 3186 3187 + 3108 1 3187 3188 + 3109 1 3188 3189 + 3110 1 3189 3190 + 3111 1 3190 3191 + 3112 1 3191 3192 + 3113 1 3192 3193 + 3114 1 3193 3194 + 3115 1 3194 3195 + 3116 1 3195 3196 + 3117 1 3196 3197 + 3118 1 3197 3198 + 3119 1 3198 3199 + 3120 1 3199 3200 + 3121 1 3201 3202 + 3122 1 3202 3203 + 3123 1 3203 3204 + 3124 1 3204 3205 + 3125 1 3205 3206 + 3126 1 3206 3207 + 3127 1 3207 3208 + 3128 1 3208 3209 + 3129 1 3209 3210 + 3130 1 3210 3211 + 3131 1 3211 3212 + 3132 1 3212 3213 + 3133 1 3213 3214 + 3134 1 3214 3215 + 3135 1 3215 3216 + 3136 1 3216 3217 + 3137 1 3217 3218 + 3138 1 3218 3219 + 3139 1 3219 3220 + 3140 1 3220 3221 + 3141 1 3221 3222 + 3142 1 3222 3223 + 3143 1 3223 3224 + 3144 1 3224 3225 + 3145 1 3225 3226 + 3146 1 3226 3227 + 3147 1 3227 3228 + 3148 1 3228 3229 + 3149 1 3229 3230 + 3150 1 3230 3231 + 3151 1 3231 3232 + 3152 1 3232 3233 + 3153 1 3233 3234 + 3154 1 3234 3235 + 3155 1 3235 3236 + 3156 1 3236 3237 + 3157 1 3237 3238 + 3158 1 3238 3239 + 3159 1 3239 3240 + 3160 1 3241 3242 + 3161 1 3242 3243 + 3162 1 3243 3244 + 3163 1 3244 3245 + 3164 1 3245 3246 + 3165 1 3246 3247 + 3166 1 3247 3248 + 3167 1 3248 3249 + 3168 1 3249 3250 + 3169 1 3250 3251 + 3170 1 3251 3252 + 3171 1 3252 3253 + 3172 1 3253 3254 + 3173 1 3254 3255 + 3174 1 3255 3256 + 3175 1 3256 3257 + 3176 1 3257 3258 + 3177 1 3258 3259 + 3178 1 3259 3260 + 3179 1 3260 3261 + 3180 1 3261 3262 + 3181 1 3262 3263 + 3182 1 3263 3264 + 3183 1 3264 3265 + 3184 1 3265 3266 + 3185 1 3266 3267 + 3186 1 3267 3268 + 3187 1 3268 3269 + 3188 1 3269 3270 + 3189 1 3270 3271 + 3190 1 3271 3272 + 3191 1 3272 3273 + 3192 1 3273 3274 + 3193 1 3274 3275 + 3194 1 3275 3276 + 3195 1 3276 3277 + 3196 1 3277 3278 + 3197 1 3278 3279 + 3198 1 3279 3280 + 3199 1 3281 3282 + 3200 1 3282 3283 + 3201 1 3283 3284 + 3202 1 3284 3285 + 3203 1 3285 3286 + 3204 1 3286 3287 + 3205 1 3287 3288 + 3206 1 3288 3289 + 3207 1 3289 3290 + 3208 1 3290 3291 + 3209 1 3291 3292 + 3210 1 3292 3293 + 3211 1 3293 3294 + 3212 1 3294 3295 + 3213 1 3295 3296 + 3214 1 3296 3297 + 3215 1 3297 3298 + 3216 1 3298 3299 + 3217 1 3299 3300 + 3218 1 3300 3301 + 3219 1 3301 3302 + 3220 1 3302 3303 + 3221 1 3303 3304 + 3222 1 3304 3305 + 3223 1 3305 3306 + 3224 1 3306 3307 + 3225 1 3307 3308 + 3226 1 3308 3309 + 3227 1 3309 3310 + 3228 1 3310 3311 + 3229 1 3311 3312 + 3230 1 3312 3313 + 3231 1 3313 3314 + 3232 1 3314 3315 + 3233 1 3315 3316 + 3234 1 3316 3317 + 3235 1 3317 3318 + 3236 1 3318 3319 + 3237 1 3319 3320 + 3238 1 3321 3322 + 3239 1 3322 3323 + 3240 1 3323 3324 + 3241 1 3324 3325 + 3242 1 3325 3326 + 3243 1 3326 3327 + 3244 1 3327 3328 + 3245 1 3328 3329 + 3246 1 3329 3330 + 3247 1 3330 3331 + 3248 1 3331 3332 + 3249 1 3332 3333 + 3250 1 3333 3334 + 3251 1 3334 3335 + 3252 1 3335 3336 + 3253 1 3336 3337 + 3254 1 3337 3338 + 3255 1 3338 3339 + 3256 1 3339 3340 + 3257 1 3340 3341 + 3258 1 3341 3342 + 3259 1 3342 3343 + 3260 1 3343 3344 + 3261 1 3344 3345 + 3262 1 3345 3346 + 3263 1 3346 3347 + 3264 1 3347 3348 + 3265 1 3348 3349 + 3266 1 3349 3350 + 3267 1 3350 3351 + 3268 1 3351 3352 + 3269 1 3352 3353 + 3270 1 3353 3354 + 3271 1 3354 3355 + 3272 1 3355 3356 + 3273 1 3356 3357 + 3274 1 3357 3358 + 3275 1 3358 3359 + 3276 1 3359 3360 + 3277 1 3361 3362 + 3278 1 3362 3363 + 3279 1 3363 3364 + 3280 1 3364 3365 + 3281 1 3365 3366 + 3282 1 3366 3367 + 3283 1 3367 3368 + 3284 1 3368 3369 + 3285 1 3369 3370 + 3286 1 3370 3371 + 3287 1 3371 3372 + 3288 1 3372 3373 + 3289 1 3373 3374 + 3290 1 3374 3375 + 3291 1 3375 3376 + 3292 1 3376 3377 + 3293 1 3377 3378 + 3294 1 3378 3379 + 3295 1 3379 3380 + 3296 1 3380 3381 + 3297 1 3381 3382 + 3298 1 3382 3383 + 3299 1 3383 3384 + 3300 1 3384 3385 + 3301 1 3385 3386 + 3302 1 3386 3387 + 3303 1 3387 3388 + 3304 1 3388 3389 + 3305 1 3389 3390 + 3306 1 3390 3391 + 3307 1 3391 3392 + 3308 1 3392 3393 + 3309 1 3393 3394 + 3310 1 3394 3395 + 3311 1 3395 3396 + 3312 1 3396 3397 + 3313 1 3397 3398 + 3314 1 3398 3399 + 3315 1 3399 3400 + 3316 1 3401 3402 + 3317 1 3402 3403 + 3318 1 3403 3404 + 3319 1 3404 3405 + 3320 1 3405 3406 + 3321 1 3406 3407 + 3322 1 3407 3408 + 3323 1 3408 3409 + 3324 1 3409 3410 + 3325 1 3410 3411 + 3326 1 3411 3412 + 3327 1 3412 3413 + 3328 1 3413 3414 + 3329 1 3414 3415 + 3330 1 3415 3416 + 3331 1 3416 3417 + 3332 1 3417 3418 + 3333 1 3418 3419 + 3334 1 3419 3420 + 3335 1 3420 3421 + 3336 1 3421 3422 + 3337 1 3422 3423 + 3338 1 3423 3424 + 3339 1 3424 3425 + 3340 1 3425 3426 + 3341 1 3426 3427 + 3342 1 3427 3428 + 3343 1 3428 3429 + 3344 1 3429 3430 + 3345 1 3430 3431 + 3346 1 3431 3432 + 3347 1 3432 3433 + 3348 1 3433 3434 + 3349 1 3434 3435 + 3350 1 3435 3436 + 3351 1 3436 3437 + 3352 1 3437 3438 + 3353 1 3438 3439 + 3354 1 3439 3440 + 3355 1 3441 3442 + 3356 1 3442 3443 + 3357 1 3443 3444 + 3358 1 3444 3445 + 3359 1 3445 3446 + 3360 1 3446 3447 + 3361 1 3447 3448 + 3362 1 3448 3449 + 3363 1 3449 3450 + 3364 1 3450 3451 + 3365 1 3451 3452 + 3366 1 3452 3453 + 3367 1 3453 3454 + 3368 1 3454 3455 + 3369 1 3455 3456 + 3370 1 3456 3457 + 3371 1 3457 3458 + 3372 1 3458 3459 + 3373 1 3459 3460 + 3374 1 3460 3461 + 3375 1 3461 3462 + 3376 1 3462 3463 + 3377 1 3463 3464 + 3378 1 3464 3465 + 3379 1 3465 3466 + 3380 1 3466 3467 + 3381 1 3467 3468 + 3382 1 3468 3469 + 3383 1 3469 3470 + 3384 1 3470 3471 + 3385 1 3471 3472 + 3386 1 3472 3473 + 3387 1 3473 3474 + 3388 1 3474 3475 + 3389 1 3475 3476 + 3390 1 3476 3477 + 3391 1 3477 3478 + 3392 1 3478 3479 + 3393 1 3479 3480 + 3394 1 3481 3482 + 3395 1 3482 3483 + 3396 1 3483 3484 + 3397 1 3484 3485 + 3398 1 3485 3486 + 3399 1 3486 3487 + 3400 1 3487 3488 + 3401 1 3488 3489 + 3402 1 3489 3490 + 3403 1 3490 3491 + 3404 1 3491 3492 + 3405 1 3492 3493 + 3406 1 3493 3494 + 3407 1 3494 3495 + 3408 1 3495 3496 + 3409 1 3496 3497 + 3410 1 3497 3498 + 3411 1 3498 3499 + 3412 1 3499 3500 + 3413 1 3500 3501 + 3414 1 3501 3502 + 3415 1 3502 3503 + 3416 1 3503 3504 + 3417 1 3504 3505 + 3418 1 3505 3506 + 3419 1 3506 3507 + 3420 1 3507 3508 + 3421 1 3508 3509 + 3422 1 3509 3510 + 3423 1 3510 3511 + 3424 1 3511 3512 + 3425 1 3512 3513 + 3426 1 3513 3514 + 3427 1 3514 3515 + 3428 1 3515 3516 + 3429 1 3516 3517 + 3430 1 3517 3518 + 3431 1 3518 3519 + 3432 1 3519 3520 + 3433 1 3521 3522 + 3434 1 3522 3523 + 3435 1 3523 3524 + 3436 1 3524 3525 + 3437 1 3525 3526 + 3438 1 3526 3527 + 3439 1 3527 3528 + 3440 1 3528 3529 + 3441 1 3529 3530 + 3442 1 3530 3531 + 3443 1 3531 3532 + 3444 1 3532 3533 + 3445 1 3533 3534 + 3446 1 3534 3535 + 3447 1 3535 3536 + 3448 1 3536 3537 + 3449 1 3537 3538 + 3450 1 3538 3539 + 3451 1 3539 3540 + 3452 1 3540 3541 + 3453 1 3541 3542 + 3454 1 3542 3543 + 3455 1 3543 3544 + 3456 1 3544 3545 + 3457 1 3545 3546 + 3458 1 3546 3547 + 3459 1 3547 3548 + 3460 1 3548 3549 + 3461 1 3549 3550 + 3462 1 3550 3551 + 3463 1 3551 3552 + 3464 1 3552 3553 + 3465 1 3553 3554 + 3466 1 3554 3555 + 3467 1 3555 3556 + 3468 1 3556 3557 + 3469 1 3557 3558 + 3470 1 3558 3559 + 3471 1 3559 3560 + 3472 1 3561 3562 + 3473 1 3562 3563 + 3474 1 3563 3564 + 3475 1 3564 3565 + 3476 1 3565 3566 + 3477 1 3566 3567 + 3478 1 3567 3568 + 3479 1 3568 3569 + 3480 1 3569 3570 + 3481 1 3570 3571 + 3482 1 3571 3572 + 3483 1 3572 3573 + 3484 1 3573 3574 + 3485 1 3574 3575 + 3486 1 3575 3576 + 3487 1 3576 3577 + 3488 1 3577 3578 + 3489 1 3578 3579 + 3490 1 3579 3580 + 3491 1 3580 3581 + 3492 1 3581 3582 + 3493 1 3582 3583 + 3494 1 3583 3584 + 3495 1 3584 3585 + 3496 1 3585 3586 + 3497 1 3586 3587 + 3498 1 3587 3588 + 3499 1 3588 3589 + 3500 1 3589 3590 + 3501 1 3590 3591 + 3502 1 3591 3592 + 3503 1 3592 3593 + 3504 1 3593 3594 + 3505 1 3594 3595 + 3506 1 3595 3596 + 3507 1 3596 3597 + 3508 1 3597 3598 + 3509 1 3598 3599 + 3510 1 3599 3600 + 3511 1 3601 3602 + 3512 1 3602 3603 + 3513 1 3603 3604 + 3514 1 3604 3605 + 3515 1 3605 3606 + 3516 1 3606 3607 + 3517 1 3607 3608 + 3518 1 3608 3609 + 3519 1 3609 3610 + 3520 1 3610 3611 + 3521 1 3611 3612 + 3522 1 3612 3613 + 3523 1 3613 3614 + 3524 1 3614 3615 + 3525 1 3615 3616 + 3526 1 3616 3617 + 3527 1 3617 3618 + 3528 1 3618 3619 + 3529 1 3619 3620 + 3530 1 3620 3621 + 3531 1 3621 3622 + 3532 1 3622 3623 + 3533 1 3623 3624 + 3534 1 3624 3625 + 3535 1 3625 3626 + 3536 1 3626 3627 + 3537 1 3627 3628 + 3538 1 3628 3629 + 3539 1 3629 3630 + 3540 1 3630 3631 + 3541 1 3631 3632 + 3542 1 3632 3633 + 3543 1 3633 3634 + 3544 1 3634 3635 + 3545 1 3635 3636 + 3546 1 3636 3637 + 3547 1 3637 3638 + 3548 1 3638 3639 + 3549 1 3639 3640 + 3550 1 3641 3642 + 3551 1 3642 3643 + 3552 1 3643 3644 + 3553 1 3644 3645 + 3554 1 3645 3646 + 3555 1 3646 3647 + 3556 1 3647 3648 + 3557 1 3648 3649 + 3558 1 3649 3650 + 3559 1 3650 3651 + 3560 1 3651 3652 + 3561 1 3652 3653 + 3562 1 3653 3654 + 3563 1 3654 3655 + 3564 1 3655 3656 + 3565 1 3656 3657 + 3566 1 3657 3658 + 3567 1 3658 3659 + 3568 1 3659 3660 + 3569 1 3660 3661 + 3570 1 3661 3662 + 3571 1 3662 3663 + 3572 1 3663 3664 + 3573 1 3664 3665 + 3574 1 3665 3666 + 3575 1 3666 3667 + 3576 1 3667 3668 + 3577 1 3668 3669 + 3578 1 3669 3670 + 3579 1 3670 3671 + 3580 1 3671 3672 + 3581 1 3672 3673 + 3582 1 3673 3674 + 3583 1 3674 3675 + 3584 1 3675 3676 + 3585 1 3676 3677 + 3586 1 3677 3678 + 3587 1 3678 3679 + 3588 1 3679 3680 + 3589 1 3681 3682 + 3590 1 3682 3683 + 3591 1 3683 3684 + 3592 1 3684 3685 + 3593 1 3685 3686 + 3594 1 3686 3687 + 3595 1 3687 3688 + 3596 1 3688 3689 + 3597 1 3689 3690 + 3598 1 3690 3691 + 3599 1 3691 3692 + 3600 1 3692 3693 + 3601 1 3693 3694 + 3602 1 3694 3695 + 3603 1 3695 3696 + 3604 1 3696 3697 + 3605 1 3697 3698 + 3606 1 3698 3699 + 3607 1 3699 3700 + 3608 1 3700 3701 + 3609 1 3701 3702 + 3610 1 3702 3703 + 3611 1 3703 3704 + 3612 1 3704 3705 + 3613 1 3705 3706 + 3614 1 3706 3707 + 3615 1 3707 3708 + 3616 1 3708 3709 + 3617 1 3709 3710 + 3618 1 3710 3711 + 3619 1 3711 3712 + 3620 1 3712 3713 + 3621 1 3713 3714 + 3622 1 3714 3715 + 3623 1 3715 3716 + 3624 1 3716 3717 + 3625 1 3717 3718 + 3626 1 3718 3719 + 3627 1 3719 3720 + 3628 1 3721 3722 + 3629 1 3722 3723 + 3630 1 3723 3724 + 3631 1 3724 3725 + 3632 1 3725 3726 + 3633 1 3726 3727 + 3634 1 3727 3728 + 3635 1 3728 3729 + 3636 1 3729 3730 + 3637 1 3730 3731 + 3638 1 3731 3732 + 3639 1 3732 3733 + 3640 1 3733 3734 + 3641 1 3734 3735 + 3642 1 3735 3736 + 3643 1 3736 3737 + 3644 1 3737 3738 + 3645 1 3738 3739 + 3646 1 3739 3740 + 3647 1 3740 3741 + 3648 1 3741 3742 + 3649 1 3742 3743 + 3650 1 3743 3744 + 3651 1 3744 3745 + 3652 1 3745 3746 + 3653 1 3746 3747 + 3654 1 3747 3748 + 3655 1 3748 3749 + 3656 1 3749 3750 + 3657 1 3750 3751 + 3658 1 3751 3752 + 3659 1 3752 3753 + 3660 1 3753 3754 + 3661 1 3754 3755 + 3662 1 3755 3756 + 3663 1 3756 3757 + 3664 1 3757 3758 + 3665 1 3758 3759 + 3666 1 3759 3760 + 3667 1 3761 3762 + 3668 1 3762 3763 + 3669 1 3763 3764 + 3670 1 3764 3765 + 3671 1 3765 3766 + 3672 1 3766 3767 + 3673 1 3767 3768 + 3674 1 3768 3769 + 3675 1 3769 3770 + 3676 1 3770 3771 + 3677 1 3771 3772 + 3678 1 3772 3773 + 3679 1 3773 3774 + 3680 1 3774 3775 + 3681 1 3775 3776 + 3682 1 3776 3777 + 3683 1 3777 3778 + 3684 1 3778 3779 + 3685 1 3779 3780 + 3686 1 3780 3781 + 3687 1 3781 3782 + 3688 1 3782 3783 + 3689 1 3783 3784 + 3690 1 3784 3785 + 3691 1 3785 3786 + 3692 1 3786 3787 + 3693 1 3787 3788 + 3694 1 3788 3789 + 3695 1 3789 3790 + 3696 1 3790 3791 + 3697 1 3791 3792 + 3698 1 3792 3793 + 3699 1 3793 3794 + 3700 1 3794 3795 + 3701 1 3795 3796 + 3702 1 3796 3797 + 3703 1 3797 3798 + 3704 1 3798 3799 + 3705 1 3799 3800 + 3706 1 3801 3802 + 3707 1 3802 3803 + 3708 1 3803 3804 + 3709 1 3804 3805 + 3710 1 3805 3806 + 3711 1 3806 3807 + 3712 1 3807 3808 + 3713 1 3808 3809 + 3714 1 3809 3810 + 3715 1 3810 3811 + 3716 1 3811 3812 + 3717 1 3812 3813 + 3718 1 3813 3814 + 3719 1 3814 3815 + 3720 1 3815 3816 + 3721 1 3816 3817 + 3722 1 3817 3818 + 3723 1 3818 3819 + 3724 1 3819 3820 + 3725 1 3820 3821 + 3726 1 3821 3822 + 3727 1 3822 3823 + 3728 1 3823 3824 + 3729 1 3824 3825 + 3730 1 3825 3826 + 3731 1 3826 3827 + 3732 1 3827 3828 + 3733 1 3828 3829 + 3734 1 3829 3830 + 3735 1 3830 3831 + 3736 1 3831 3832 + 3737 1 3832 3833 + 3738 1 3833 3834 + 3739 1 3834 3835 + 3740 1 3835 3836 + 3741 1 3836 3837 + 3742 1 3837 3838 + 3743 1 3838 3839 + 3744 1 3839 3840 + 3745 1 3841 3842 + 3746 1 3842 3843 + 3747 1 3843 3844 + 3748 1 3844 3845 + 3749 1 3845 3846 + 3750 1 3846 3847 + 3751 1 3847 3848 + 3752 1 3848 3849 + 3753 1 3849 3850 + 3754 1 3850 3851 + 3755 1 3851 3852 + 3756 1 3852 3853 + 3757 1 3853 3854 + 3758 1 3854 3855 + 3759 1 3855 3856 + 3760 1 3856 3857 + 3761 1 3857 3858 + 3762 1 3858 3859 + 3763 1 3859 3860 + 3764 1 3860 3861 + 3765 1 3861 3862 + 3766 1 3862 3863 + 3767 1 3863 3864 + 3768 1 3864 3865 + 3769 1 3865 3866 + 3770 1 3866 3867 + 3771 1 3867 3868 + 3772 1 3868 3869 + 3773 1 3869 3870 + 3774 1 3870 3871 + 3775 1 3871 3872 + 3776 1 3872 3873 + 3777 1 3873 3874 + 3778 1 3874 3875 + 3779 1 3875 3876 + 3780 1 3876 3877 + 3781 1 3877 3878 + 3782 1 3878 3879 + 3783 1 3879 3880 + 3784 1 3881 3882 + 3785 1 3882 3883 + 3786 1 3883 3884 + 3787 1 3884 3885 + 3788 1 3885 3886 + 3789 1 3886 3887 + 3790 1 3887 3888 + 3791 1 3888 3889 + 3792 1 3889 3890 + 3793 1 3890 3891 + 3794 1 3891 3892 + 3795 1 3892 3893 + 3796 1 3893 3894 + 3797 1 3894 3895 + 3798 1 3895 3896 + 3799 1 3896 3897 + 3800 1 3897 3898 + 3801 1 3898 3899 + 3802 1 3899 3900 + 3803 1 3900 3901 + 3804 1 3901 3902 + 3805 1 3902 3903 + 3806 1 3903 3904 + 3807 1 3904 3905 + 3808 1 3905 3906 + 3809 1 3906 3907 + 3810 1 3907 3908 + 3811 1 3908 3909 + 3812 1 3909 3910 + 3813 1 3910 3911 + 3814 1 3911 3912 + 3815 1 3912 3913 + 3816 1 3913 3914 + 3817 1 3914 3915 + 3818 1 3915 3916 + 3819 1 3916 3917 + 3820 1 3917 3918 + 3821 1 3918 3919 + 3822 1 3919 3920 + 3823 1 3921 3922 + 3824 1 3922 3923 + 3825 1 3923 3924 + 3826 1 3924 3925 + 3827 1 3925 3926 + 3828 1 3926 3927 + 3829 1 3927 3928 + 3830 1 3928 3929 + 3831 1 3929 3930 + 3832 1 3930 3931 + 3833 1 3931 3932 + 3834 1 3932 3933 + 3835 1 3933 3934 + 3836 1 3934 3935 + 3837 1 3935 3936 + 3838 1 3936 3937 + 3839 1 3937 3938 + 3840 1 3938 3939 + 3841 1 3939 3940 + 3842 1 3940 3941 + 3843 1 3941 3942 + 3844 1 3942 3943 + 3845 1 3943 3944 + 3846 1 3944 3945 + 3847 1 3945 3946 + 3848 1 3946 3947 + 3849 1 3947 3948 + 3850 1 3948 3949 + 3851 1 3949 3950 + 3852 1 3950 3951 + 3853 1 3951 3952 + 3854 1 3952 3953 + 3855 1 3953 3954 + 3856 1 3954 3955 + 3857 1 3955 3956 + 3858 1 3956 3957 + 3859 1 3957 3958 + 3860 1 3958 3959 + 3861 1 3959 3960 + 3862 1 3961 3962 + 3863 1 3962 3963 + 3864 1 3963 3964 + 3865 1 3964 3965 + 3866 1 3965 3966 + 3867 1 3966 3967 + 3868 1 3967 3968 + 3869 1 3968 3969 + 3870 1 3969 3970 + 3871 1 3970 3971 + 3872 1 3971 3972 + 3873 1 3972 3973 + 3874 1 3973 3974 + 3875 1 3974 3975 + 3876 1 3975 3976 + 3877 1 3976 3977 + 3878 1 3977 3978 + 3879 1 3978 3979 + 3880 1 3979 3980 + 3881 1 3980 3981 + 3882 1 3981 3982 + 3883 1 3982 3983 + 3884 1 3983 3984 + 3885 1 3984 3985 + 3886 1 3985 3986 + 3887 1 3986 3987 + 3888 1 3987 3988 + 3889 1 3988 3989 + 3890 1 3989 3990 + 3891 1 3990 3991 + 3892 1 3991 3992 + 3893 1 3992 3993 + 3894 1 3993 3994 + 3895 1 3994 3995 + 3896 1 3995 3996 + 3897 1 3996 3997 + 3898 1 3997 3998 + 3899 1 3998 3999 + 3900 1 3999 4000 + +Angles + + 1 1 1 2 3 + 2 1 2 3 4 + 3 1 3 4 5 + 4 1 4 5 6 + 5 1 5 6 7 + 6 1 6 7 8 + 7 1 7 8 9 + 8 1 8 9 10 + 9 1 9 10 11 + 10 1 10 11 12 + 11 1 11 12 13 + 12 1 12 13 14 + 13 1 13 14 15 + 14 1 14 15 16 + 15 1 15 16 17 + 16 1 16 17 18 + 17 1 17 18 19 + 18 1 18 19 20 + 19 1 19 20 21 + 20 1 20 21 22 + 21 1 21 22 23 + 22 1 22 23 24 + 23 1 23 24 25 + 24 1 24 25 26 + 25 1 25 26 27 + 26 1 26 27 28 + 27 1 27 28 29 + 28 1 28 29 30 + 29 1 29 30 31 + 30 1 30 31 32 + 31 1 31 32 33 + 32 1 32 33 34 + 33 1 33 34 35 + 34 1 34 35 36 + 35 1 35 36 37 + 36 1 36 37 38 + 37 1 37 38 39 + 38 1 38 39 40 + 39 1 41 42 43 + 40 1 42 43 44 + 41 1 43 44 45 + 42 1 44 45 46 + 43 1 45 46 47 + 44 1 46 47 48 + 45 1 47 48 49 + 46 1 48 49 50 + 47 1 49 50 51 + 48 1 50 51 52 + 49 1 51 52 53 + 50 1 52 53 54 + 51 1 53 54 55 + 52 1 54 55 56 + 53 1 55 56 57 + 54 1 56 57 58 + 55 1 57 58 59 + 56 1 58 59 60 + 57 1 59 60 61 + 58 1 60 61 62 + 59 1 61 62 63 + 60 1 62 63 64 + 61 1 63 64 65 + 62 1 64 65 66 + 63 1 65 66 67 + 64 1 66 67 68 + 65 1 67 68 69 + 66 1 68 69 70 + 67 1 69 70 71 + 68 1 70 71 72 + 69 1 71 72 73 + 70 1 72 73 74 + 71 1 73 74 75 + 72 1 74 75 76 + 73 1 75 76 77 + 74 1 76 77 78 + 75 1 77 78 79 + 76 1 78 79 80 + 77 1 81 82 83 + 78 1 82 83 84 + 79 1 83 84 85 + 80 1 84 85 86 + 81 1 85 86 87 + 82 1 86 87 88 + 83 1 87 88 89 + 84 1 88 89 90 + 85 1 89 90 91 + 86 1 90 91 92 + 87 1 91 92 93 + 88 1 92 93 94 + 89 1 93 94 95 + 90 1 94 95 96 + 91 1 95 96 97 + 92 1 96 97 98 + 93 1 97 98 99 + 94 1 98 99 100 + 95 1 99 100 101 + 96 1 100 101 102 + 97 1 101 102 103 + 98 1 102 103 104 + 99 1 103 104 105 + 100 1 104 105 106 + 101 1 105 106 107 + 102 1 106 107 108 + 103 1 107 108 109 + 104 1 108 109 110 + 105 1 109 110 111 + 106 1 110 111 112 + 107 1 111 112 113 + 108 1 112 113 114 + 109 1 113 114 115 + 110 1 114 115 116 + 111 1 115 116 117 + 112 1 116 117 118 + 113 1 117 118 119 + 114 1 118 119 120 + 115 1 121 122 123 + 116 1 122 123 124 + 117 1 123 124 125 + 118 1 124 125 126 + 119 1 125 126 127 + 120 1 126 127 128 + 121 1 127 128 129 + 122 1 128 129 130 + 123 1 129 130 131 + 124 1 130 131 132 + 125 1 131 132 133 + 126 1 132 133 134 + 127 1 133 134 135 + 128 1 134 135 136 + 129 1 135 136 137 + 130 1 136 137 138 + 131 1 137 138 139 + 132 1 138 139 140 + 133 1 139 140 141 + 134 1 140 141 142 + 135 1 141 142 143 + 136 1 142 143 144 + 137 1 143 144 145 + 138 1 144 145 146 + 139 1 145 146 147 + 140 1 146 147 148 + 141 1 147 148 149 + 142 1 148 149 150 + 143 1 149 150 151 + 144 1 150 151 152 + 145 1 151 152 153 + 146 1 152 153 154 + 147 1 153 154 155 + 148 1 154 155 156 + 149 1 155 156 157 + 150 1 156 157 158 + 151 1 157 158 159 + 152 1 158 159 160 + 153 1 161 162 163 + 154 1 162 163 164 + 155 1 163 164 165 + 156 1 164 165 166 + 157 1 165 166 167 + 158 1 166 167 168 + 159 1 167 168 169 + 160 1 168 169 170 + 161 1 169 170 171 + 162 1 170 171 172 + 163 1 171 172 173 + 164 1 172 173 174 + 165 1 173 174 175 + 166 1 174 175 176 + 167 1 175 176 177 + 168 1 176 177 178 + 169 1 177 178 179 + 170 1 178 179 180 + 171 1 179 180 181 + 172 1 180 181 182 + 173 1 181 182 183 + 174 1 182 183 184 + 175 1 183 184 185 + 176 1 184 185 186 + 177 1 185 186 187 + 178 1 186 187 188 + 179 1 187 188 189 + 180 1 188 189 190 + 181 1 189 190 191 + 182 1 190 191 192 + 183 1 191 192 193 + 184 1 192 193 194 + 185 1 193 194 195 + 186 1 194 195 196 + 187 1 195 196 197 + 188 1 196 197 198 + 189 1 197 198 199 + 190 1 198 199 200 + 191 1 201 202 203 + 192 1 202 203 204 + 193 1 203 204 205 + 194 1 204 205 206 + 195 1 205 206 207 + 196 1 206 207 208 + 197 1 207 208 209 + 198 1 208 209 210 + 199 1 209 210 211 + 200 1 210 211 212 + 201 1 211 212 213 + 202 1 212 213 214 + 203 1 213 214 215 + 204 1 214 215 216 + 205 1 215 216 217 + 206 1 216 217 218 + 207 1 217 218 219 + 208 1 218 219 220 + 209 1 219 220 221 + 210 1 220 221 222 + 211 1 221 222 223 + 212 1 222 223 224 + 213 1 223 224 225 + 214 1 224 225 226 + 215 1 225 226 227 + 216 1 226 227 228 + 217 1 227 228 229 + 218 1 228 229 230 + 219 1 229 230 231 + 220 1 230 231 232 + 221 1 231 232 233 + 222 1 232 233 234 + 223 1 233 234 235 + 224 1 234 235 236 + 225 1 235 236 237 + 226 1 236 237 238 + 227 1 237 238 239 + 228 1 238 239 240 + 229 1 241 242 243 + 230 1 242 243 244 + 231 1 243 244 245 + 232 1 244 245 246 + 233 1 245 246 247 + 234 1 246 247 248 + 235 1 247 248 249 + 236 1 248 249 250 + 237 1 249 250 251 + 238 1 250 251 252 + 239 1 251 252 253 + 240 1 252 253 254 + 241 1 253 254 255 + 242 1 254 255 256 + 243 1 255 256 257 + 244 1 256 257 258 + 245 1 257 258 259 + 246 1 258 259 260 + 247 1 259 260 261 + 248 1 260 261 262 + 249 1 261 262 263 + 250 1 262 263 264 + 251 1 263 264 265 + 252 1 264 265 266 + 253 1 265 266 267 + 254 1 266 267 268 + 255 1 267 268 269 + 256 1 268 269 270 + 257 1 269 270 271 + 258 1 270 271 272 + 259 1 271 272 273 + 260 1 272 273 274 + 261 1 273 274 275 + 262 1 274 275 276 + 263 1 275 276 277 + 264 1 276 277 278 + 265 1 277 278 279 + 266 1 278 279 280 + 267 1 281 282 283 + 268 1 282 283 284 + 269 1 283 284 285 + 270 1 284 285 286 + 271 1 285 286 287 + 272 1 286 287 288 + 273 1 287 288 289 + 274 1 288 289 290 + 275 1 289 290 291 + 276 1 290 291 292 + 277 1 291 292 293 + 278 1 292 293 294 + 279 1 293 294 295 + 280 1 294 295 296 + 281 1 295 296 297 + 282 1 296 297 298 + 283 1 297 298 299 + 284 1 298 299 300 + 285 1 299 300 301 + 286 1 300 301 302 + 287 1 301 302 303 + 288 1 302 303 304 + 289 1 303 304 305 + 290 1 304 305 306 + 291 1 305 306 307 + 292 1 306 307 308 + 293 1 307 308 309 + 294 1 308 309 310 + 295 1 309 310 311 + 296 1 310 311 312 + 297 1 311 312 313 + 298 1 312 313 314 + 299 1 313 314 315 + 300 1 314 315 316 + 301 1 315 316 317 + 302 1 316 317 318 + 303 1 317 318 319 + 304 1 318 319 320 + 305 1 321 322 323 + 306 1 322 323 324 + 307 1 323 324 325 + 308 1 324 325 326 + 309 1 325 326 327 + 310 1 326 327 328 + 311 1 327 328 329 + 312 1 328 329 330 + 313 1 329 330 331 + 314 1 330 331 332 + 315 1 331 332 333 + 316 1 332 333 334 + 317 1 333 334 335 + 318 1 334 335 336 + 319 1 335 336 337 + 320 1 336 337 338 + 321 1 337 338 339 + 322 1 338 339 340 + 323 1 339 340 341 + 324 1 340 341 342 + 325 1 341 342 343 + 326 1 342 343 344 + 327 1 343 344 345 + 328 1 344 345 346 + 329 1 345 346 347 + 330 1 346 347 348 + 331 1 347 348 349 + 332 1 348 349 350 + 333 1 349 350 351 + 334 1 350 351 352 + 335 1 351 352 353 + 336 1 352 353 354 + 337 1 353 354 355 + 338 1 354 355 356 + 339 1 355 356 357 + 340 1 356 357 358 + 341 1 357 358 359 + 342 1 358 359 360 + 343 1 361 362 363 + 344 1 362 363 364 + 345 1 363 364 365 + 346 1 364 365 366 + 347 1 365 366 367 + 348 1 366 367 368 + 349 1 367 368 369 + 350 1 368 369 370 + 351 1 369 370 371 + 352 1 370 371 372 + 353 1 371 372 373 + 354 1 372 373 374 + 355 1 373 374 375 + 356 1 374 375 376 + 357 1 375 376 377 + 358 1 376 377 378 + 359 1 377 378 379 + 360 1 378 379 380 + 361 1 379 380 381 + 362 1 380 381 382 + 363 1 381 382 383 + 364 1 382 383 384 + 365 1 383 384 385 + 366 1 384 385 386 + 367 1 385 386 387 + 368 1 386 387 388 + 369 1 387 388 389 + 370 1 388 389 390 + 371 1 389 390 391 + 372 1 390 391 392 + 373 1 391 392 393 + 374 1 392 393 394 + 375 1 393 394 395 + 376 1 394 395 396 + 377 1 395 396 397 + 378 1 396 397 398 + 379 1 397 398 399 + 380 1 398 399 400 + 381 1 401 402 403 + 382 1 402 403 404 + 383 1 403 404 405 + 384 1 404 405 406 + 385 1 405 406 407 + 386 1 406 407 408 + 387 1 407 408 409 + 388 1 408 409 410 + 389 1 409 410 411 + 390 1 410 411 412 + 391 1 411 412 413 + 392 1 412 413 414 + 393 1 413 414 415 + 394 1 414 415 416 + 395 1 415 416 417 + 396 1 416 417 418 + 397 1 417 418 419 + 398 1 418 419 420 + 399 1 419 420 421 + 400 1 420 421 422 + 401 1 421 422 423 + 402 1 422 423 424 + 403 1 423 424 425 + 404 1 424 425 426 + 405 1 425 426 427 + 406 1 426 427 428 + 407 1 427 428 429 + 408 1 428 429 430 + 409 1 429 430 431 + 410 1 430 431 432 + 411 1 431 432 433 + 412 1 432 433 434 + 413 1 433 434 435 + 414 1 434 435 436 + 415 1 435 436 437 + 416 1 436 437 438 + 417 1 437 438 439 + 418 1 438 439 440 + 419 1 441 442 443 + 420 1 442 443 444 + 421 1 443 444 445 + 422 1 444 445 446 + 423 1 445 446 447 + 424 1 446 447 448 + 425 1 447 448 449 + 426 1 448 449 450 + 427 1 449 450 451 + 428 1 450 451 452 + 429 1 451 452 453 + 430 1 452 453 454 + 431 1 453 454 455 + 432 1 454 455 456 + 433 1 455 456 457 + 434 1 456 457 458 + 435 1 457 458 459 + 436 1 458 459 460 + 437 1 459 460 461 + 438 1 460 461 462 + 439 1 461 462 463 + 440 1 462 463 464 + 441 1 463 464 465 + 442 1 464 465 466 + 443 1 465 466 467 + 444 1 466 467 468 + 445 1 467 468 469 + 446 1 468 469 470 + 447 1 469 470 471 + 448 1 470 471 472 + 449 1 471 472 473 + 450 1 472 473 474 + 451 1 473 474 475 + 452 1 474 475 476 + 453 1 475 476 477 + 454 1 476 477 478 + 455 1 477 478 479 + 456 1 478 479 480 + 457 1 481 482 483 + 458 1 482 483 484 + 459 1 483 484 485 + 460 1 484 485 486 + 461 1 485 486 487 + 462 1 486 487 488 + 463 1 487 488 489 + 464 1 488 489 490 + 465 1 489 490 491 + 466 1 490 491 492 + 467 1 491 492 493 + 468 1 492 493 494 + 469 1 493 494 495 + 470 1 494 495 496 + 471 1 495 496 497 + 472 1 496 497 498 + 473 1 497 498 499 + 474 1 498 499 500 + 475 1 499 500 501 + 476 1 500 501 502 + 477 1 501 502 503 + 478 1 502 503 504 + 479 1 503 504 505 + 480 1 504 505 506 + 481 1 505 506 507 + 482 1 506 507 508 + 483 1 507 508 509 + 484 1 508 509 510 + 485 1 509 510 511 + 486 1 510 511 512 + 487 1 511 512 513 + 488 1 512 513 514 + 489 1 513 514 515 + 490 1 514 515 516 + 491 1 515 516 517 + 492 1 516 517 518 + 493 1 517 518 519 + 494 1 518 519 520 + 495 1 521 522 523 + 496 1 522 523 524 + 497 1 523 524 525 + 498 1 524 525 526 + 499 1 525 526 527 + 500 1 526 527 528 + 501 1 527 528 529 + 502 1 528 529 530 + 503 1 529 530 531 + 504 1 530 531 532 + 505 1 531 532 533 + 506 1 532 533 534 + 507 1 533 534 535 + 508 1 534 535 536 + 509 1 535 536 537 + 510 1 536 537 538 + 511 1 537 538 539 + 512 1 538 539 540 + 513 1 539 540 541 + 514 1 540 541 542 + 515 1 541 542 543 + 516 1 542 543 544 + 517 1 543 544 545 + 518 1 544 545 546 + 519 1 545 546 547 + 520 1 546 547 548 + 521 1 547 548 549 + 522 1 548 549 550 + 523 1 549 550 551 + 524 1 550 551 552 + 525 1 551 552 553 + 526 1 552 553 554 + 527 1 553 554 555 + 528 1 554 555 556 + 529 1 555 556 557 + 530 1 556 557 558 + 531 1 557 558 559 + 532 1 558 559 560 + 533 1 561 562 563 + 534 1 562 563 564 + 535 1 563 564 565 + 536 1 564 565 566 + 537 1 565 566 567 + 538 1 566 567 568 + 539 1 567 568 569 + 540 1 568 569 570 + 541 1 569 570 571 + 542 1 570 571 572 + 543 1 571 572 573 + 544 1 572 573 574 + 545 1 573 574 575 + 546 1 574 575 576 + 547 1 575 576 577 + 548 1 576 577 578 + 549 1 577 578 579 + 550 1 578 579 580 + 551 1 579 580 581 + 552 1 580 581 582 + 553 1 581 582 583 + 554 1 582 583 584 + 555 1 583 584 585 + 556 1 584 585 586 + 557 1 585 586 587 + 558 1 586 587 588 + 559 1 587 588 589 + 560 1 588 589 590 + 561 1 589 590 591 + 562 1 590 591 592 + 563 1 591 592 593 + 564 1 592 593 594 + 565 1 593 594 595 + 566 1 594 595 596 + 567 1 595 596 597 + 568 1 596 597 598 + 569 1 597 598 599 + 570 1 598 599 600 + 571 1 601 602 603 + 572 1 602 603 604 + 573 1 603 604 605 + 574 1 604 605 606 + 575 1 605 606 607 + 576 1 606 607 608 + 577 1 607 608 609 + 578 1 608 609 610 + 579 1 609 610 611 + 580 1 610 611 612 + 581 1 611 612 613 + 582 1 612 613 614 + 583 1 613 614 615 + 584 1 614 615 616 + 585 1 615 616 617 + 586 1 616 617 618 + 587 1 617 618 619 + 588 1 618 619 620 + 589 1 619 620 621 + 590 1 620 621 622 + 591 1 621 622 623 + 592 1 622 623 624 + 593 1 623 624 625 + 594 1 624 625 626 + 595 1 625 626 627 + 596 1 626 627 628 + 597 1 627 628 629 + 598 1 628 629 630 + 599 1 629 630 631 + 600 1 630 631 632 + 601 1 631 632 633 + 602 1 632 633 634 + 603 1 633 634 635 + 604 1 634 635 636 + 605 1 635 636 637 + 606 1 636 637 638 + 607 1 637 638 639 + 608 1 638 639 640 + 609 1 641 642 643 + 610 1 642 643 644 + 611 1 643 644 645 + 612 1 644 645 646 + 613 1 645 646 647 + 614 1 646 647 648 + 615 1 647 648 649 + 616 1 648 649 650 + 617 1 649 650 651 + 618 1 650 651 652 + 619 1 651 652 653 + 620 1 652 653 654 + 621 1 653 654 655 + 622 1 654 655 656 + 623 1 655 656 657 + 624 1 656 657 658 + 625 1 657 658 659 + 626 1 658 659 660 + 627 1 659 660 661 + 628 1 660 661 662 + 629 1 661 662 663 + 630 1 662 663 664 + 631 1 663 664 665 + 632 1 664 665 666 + 633 1 665 666 667 + 634 1 666 667 668 + 635 1 667 668 669 + 636 1 668 669 670 + 637 1 669 670 671 + 638 1 670 671 672 + 639 1 671 672 673 + 640 1 672 673 674 + 641 1 673 674 675 + 642 1 674 675 676 + 643 1 675 676 677 + 644 1 676 677 678 + 645 1 677 678 679 + 646 1 678 679 680 + 647 1 681 682 683 + 648 1 682 683 684 + 649 1 683 684 685 + 650 1 684 685 686 + 651 1 685 686 687 + 652 1 686 687 688 + 653 1 687 688 689 + 654 1 688 689 690 + 655 1 689 690 691 + 656 1 690 691 692 + 657 1 691 692 693 + 658 1 692 693 694 + 659 1 693 694 695 + 660 1 694 695 696 + 661 1 695 696 697 + 662 1 696 697 698 + 663 1 697 698 699 + 664 1 698 699 700 + 665 1 699 700 701 + 666 1 700 701 702 + 667 1 701 702 703 + 668 1 702 703 704 + 669 1 703 704 705 + 670 1 704 705 706 + 671 1 705 706 707 + 672 1 706 707 708 + 673 1 707 708 709 + 674 1 708 709 710 + 675 1 709 710 711 + 676 1 710 711 712 + 677 1 711 712 713 + 678 1 712 713 714 + 679 1 713 714 715 + 680 1 714 715 716 + 681 1 715 716 717 + 682 1 716 717 718 + 683 1 717 718 719 + 684 1 718 719 720 + 685 1 721 722 723 + 686 1 722 723 724 + 687 1 723 724 725 + 688 1 724 725 726 + 689 1 725 726 727 + 690 1 726 727 728 + 691 1 727 728 729 + 692 1 728 729 730 + 693 1 729 730 731 + 694 1 730 731 732 + 695 1 731 732 733 + 696 1 732 733 734 + 697 1 733 734 735 + 698 1 734 735 736 + 699 1 735 736 737 + 700 1 736 737 738 + 701 1 737 738 739 + 702 1 738 739 740 + 703 1 739 740 741 + 704 1 740 741 742 + 705 1 741 742 743 + 706 1 742 743 744 + 707 1 743 744 745 + 708 1 744 745 746 + 709 1 745 746 747 + 710 1 746 747 748 + 711 1 747 748 749 + 712 1 748 749 750 + 713 1 749 750 751 + 714 1 750 751 752 + 715 1 751 752 753 + 716 1 752 753 754 + 717 1 753 754 755 + 718 1 754 755 756 + 719 1 755 756 757 + 720 1 756 757 758 + 721 1 757 758 759 + 722 1 758 759 760 + 723 1 761 762 763 + 724 1 762 763 764 + 725 1 763 764 765 + 726 1 764 765 766 + 727 1 765 766 767 + 728 1 766 767 768 + 729 1 767 768 769 + 730 1 768 769 770 + 731 1 769 770 771 + 732 1 770 771 772 + 733 1 771 772 773 + 734 1 772 773 774 + 735 1 773 774 775 + 736 1 774 775 776 + 737 1 775 776 777 + 738 1 776 777 778 + 739 1 777 778 779 + 740 1 778 779 780 + 741 1 779 780 781 + 742 1 780 781 782 + 743 1 781 782 783 + 744 1 782 783 784 + 745 1 783 784 785 + 746 1 784 785 786 + 747 1 785 786 787 + 748 1 786 787 788 + 749 1 787 788 789 + 750 1 788 789 790 + 751 1 789 790 791 + 752 1 790 791 792 + 753 1 791 792 793 + 754 1 792 793 794 + 755 1 793 794 795 + 756 1 794 795 796 + 757 1 795 796 797 + 758 1 796 797 798 + 759 1 797 798 799 + 760 1 798 799 800 + 761 1 801 802 803 + 762 1 802 803 804 + 763 1 803 804 805 + 764 1 804 805 806 + 765 1 805 806 807 + 766 1 806 807 808 + 767 1 807 808 809 + 768 1 808 809 810 + 769 1 809 810 811 + 770 1 810 811 812 + 771 1 811 812 813 + 772 1 812 813 814 + 773 1 813 814 815 + 774 1 814 815 816 + 775 1 815 816 817 + 776 1 816 817 818 + 777 1 817 818 819 + 778 1 818 819 820 + 779 1 819 820 821 + 780 1 820 821 822 + 781 1 821 822 823 + 782 1 822 823 824 + 783 1 823 824 825 + 784 1 824 825 826 + 785 1 825 826 827 + 786 1 826 827 828 + 787 1 827 828 829 + 788 1 828 829 830 + 789 1 829 830 831 + 790 1 830 831 832 + 791 1 831 832 833 + 792 1 832 833 834 + 793 1 833 834 835 + 794 1 834 835 836 + 795 1 835 836 837 + 796 1 836 837 838 + 797 1 837 838 839 + 798 1 838 839 840 + 799 1 841 842 843 + 800 1 842 843 844 + 801 1 843 844 845 + 802 1 844 845 846 + 803 1 845 846 847 + 804 1 846 847 848 + 805 1 847 848 849 + 806 1 848 849 850 + 807 1 849 850 851 + 808 1 850 851 852 + 809 1 851 852 853 + 810 1 852 853 854 + 811 1 853 854 855 + 812 1 854 855 856 + 813 1 855 856 857 + 814 1 856 857 858 + 815 1 857 858 859 + 816 1 858 859 860 + 817 1 859 860 861 + 818 1 860 861 862 + 819 1 861 862 863 + 820 1 862 863 864 + 821 1 863 864 865 + 822 1 864 865 866 + 823 1 865 866 867 + 824 1 866 867 868 + 825 1 867 868 869 + 826 1 868 869 870 + 827 1 869 870 871 + 828 1 870 871 872 + 829 1 871 872 873 + 830 1 872 873 874 + 831 1 873 874 875 + 832 1 874 875 876 + 833 1 875 876 877 + 834 1 876 877 878 + 835 1 877 878 879 + 836 1 878 879 880 + 837 1 881 882 883 + 838 1 882 883 884 + 839 1 883 884 885 + 840 1 884 885 886 + 841 1 885 886 887 + 842 1 886 887 888 + 843 1 887 888 889 + 844 1 888 889 890 + 845 1 889 890 891 + 846 1 890 891 892 + 847 1 891 892 893 + 848 1 892 893 894 + 849 1 893 894 895 + 850 1 894 895 896 + 851 1 895 896 897 + 852 1 896 897 898 + 853 1 897 898 899 + 854 1 898 899 900 + 855 1 899 900 901 + 856 1 900 901 902 + 857 1 901 902 903 + 858 1 902 903 904 + 859 1 903 904 905 + 860 1 904 905 906 + 861 1 905 906 907 + 862 1 906 907 908 + 863 1 907 908 909 + 864 1 908 909 910 + 865 1 909 910 911 + 866 1 910 911 912 + 867 1 911 912 913 + 868 1 912 913 914 + 869 1 913 914 915 + 870 1 914 915 916 + 871 1 915 916 917 + 872 1 916 917 918 + 873 1 917 918 919 + 874 1 918 919 920 + 875 1 921 922 923 + 876 1 922 923 924 + 877 1 923 924 925 + 878 1 924 925 926 + 879 1 925 926 927 + 880 1 926 927 928 + 881 1 927 928 929 + 882 1 928 929 930 + 883 1 929 930 931 + 884 1 930 931 932 + 885 1 931 932 933 + 886 1 932 933 934 + 887 1 933 934 935 + 888 1 934 935 936 + 889 1 935 936 937 + 890 1 936 937 938 + 891 1 937 938 939 + 892 1 938 939 940 + 893 1 939 940 941 + 894 1 940 941 942 + 895 1 941 942 943 + 896 1 942 943 944 + 897 1 943 944 945 + 898 1 944 945 946 + 899 1 945 946 947 + 900 1 946 947 948 + 901 1 947 948 949 + 902 1 948 949 950 + 903 1 949 950 951 + 904 1 950 951 952 + 905 1 951 952 953 + 906 1 952 953 954 + 907 1 953 954 955 + 908 1 954 955 956 + 909 1 955 956 957 + 910 1 956 957 958 + 911 1 957 958 959 + 912 1 958 959 960 + 913 1 961 962 963 + 914 1 962 963 964 + 915 1 963 964 965 + 916 1 964 965 966 + 917 1 965 966 967 + 918 1 966 967 968 + 919 1 967 968 969 + 920 1 968 969 970 + 921 1 969 970 971 + 922 1 970 971 972 + 923 1 971 972 973 + 924 1 972 973 974 + 925 1 973 974 975 + 926 1 974 975 976 + 927 1 975 976 977 + 928 1 976 977 978 + 929 1 977 978 979 + 930 1 978 979 980 + 931 1 979 980 981 + 932 1 980 981 982 + 933 1 981 982 983 + 934 1 982 983 984 + 935 1 983 984 985 + 936 1 984 985 986 + 937 1 985 986 987 + 938 1 986 987 988 + 939 1 987 988 989 + 940 1 988 989 990 + 941 1 989 990 991 + 942 1 990 991 992 + 943 1 991 992 993 + 944 1 992 993 994 + 945 1 993 994 995 + 946 1 994 995 996 + 947 1 995 996 997 + 948 1 996 997 998 + 949 1 997 998 999 + 950 1 998 999 1000 + 951 1 1001 1002 1003 + 952 1 1002 1003 1004 + 953 1 1003 1004 1005 + 954 1 1004 1005 1006 + 955 1 1005 1006 1007 + 956 1 1006 1007 1008 + 957 1 1007 1008 1009 + 958 1 1008 1009 1010 + 959 1 1009 1010 1011 + 960 1 1010 1011 1012 + 961 1 1011 1012 1013 + 962 1 1012 1013 1014 + 963 1 1013 1014 1015 + 964 1 1014 1015 1016 + 965 1 1015 1016 1017 + 966 1 1016 1017 1018 + 967 1 1017 1018 1019 + 968 1 1018 1019 1020 + 969 1 1019 1020 1021 + 970 1 1020 1021 1022 + 971 1 1021 1022 1023 + 972 1 1022 1023 1024 + 973 1 1023 1024 1025 + 974 1 1024 1025 1026 + 975 1 1025 1026 1027 + 976 1 1026 1027 1028 + 977 1 1027 1028 1029 + 978 1 1028 1029 1030 + 979 1 1029 1030 1031 + 980 1 1030 1031 1032 + 981 1 1031 1032 1033 + 982 1 1032 1033 1034 + 983 1 1033 1034 1035 + 984 1 1034 1035 1036 + 985 1 1035 1036 1037 + 986 1 1036 1037 1038 + 987 1 1037 1038 1039 + 988 1 1038 1039 1040 + 989 1 1041 1042 1043 + 990 1 1042 1043 1044 + 991 1 1043 1044 1045 + 992 1 1044 1045 1046 + 993 1 1045 1046 1047 + 994 1 1046 1047 1048 + 995 1 1047 1048 1049 + 996 1 1048 1049 1050 + 997 1 1049 1050 1051 + 998 1 1050 1051 1052 + 999 1 1051 1052 1053 + 1000 1 1052 1053 1054 + 1001 1 1053 1054 1055 + 1002 1 1054 1055 1056 + 1003 1 1055 1056 1057 + 1004 1 1056 1057 1058 + 1005 1 1057 1058 1059 + 1006 1 1058 1059 1060 + 1007 1 1059 1060 1061 + 1008 1 1060 1061 1062 + 1009 1 1061 1062 1063 + 1010 1 1062 1063 1064 + 1011 1 1063 1064 1065 + 1012 1 1064 1065 1066 + 1013 1 1065 1066 1067 + 1014 1 1066 1067 1068 + 1015 1 1067 1068 1069 + 1016 1 1068 1069 1070 + 1017 1 1069 1070 1071 + 1018 1 1070 1071 1072 + 1019 1 1071 1072 1073 + 1020 1 1072 1073 1074 + 1021 1 1073 1074 1075 + 1022 1 1074 1075 1076 + 1023 1 1075 1076 1077 + 1024 1 1076 1077 1078 + 1025 1 1077 1078 1079 + 1026 1 1078 1079 1080 + 1027 1 1081 1082 1083 + 1028 1 1082 1083 1084 + 1029 1 1083 1084 1085 + 1030 1 1084 1085 1086 + 1031 1 1085 1086 1087 + 1032 1 1086 1087 1088 + 1033 1 1087 1088 1089 + 1034 1 1088 1089 1090 + 1035 1 1089 1090 1091 + 1036 1 1090 1091 1092 + 1037 1 1091 1092 1093 + 1038 1 1092 1093 1094 + 1039 1 1093 1094 1095 + 1040 1 1094 1095 1096 + 1041 1 1095 1096 1097 + 1042 1 1096 1097 1098 + 1043 1 1097 1098 1099 + 1044 1 1098 1099 1100 + 1045 1 1099 1100 1101 + 1046 1 1100 1101 1102 + 1047 1 1101 1102 1103 + 1048 1 1102 1103 1104 + 1049 1 1103 1104 1105 + 1050 1 1104 1105 1106 + 1051 1 1105 1106 1107 + 1052 1 1106 1107 1108 + 1053 1 1107 1108 1109 + 1054 1 1108 1109 1110 + 1055 1 1109 1110 1111 + 1056 1 1110 1111 1112 + 1057 1 1111 1112 1113 + 1058 1 1112 1113 1114 + 1059 1 1113 1114 1115 + 1060 1 1114 1115 1116 + 1061 1 1115 1116 1117 + 1062 1 1116 1117 1118 + 1063 1 1117 1118 1119 + 1064 1 1118 1119 1120 + 1065 1 1121 1122 1123 + 1066 1 1122 1123 1124 + 1067 1 1123 1124 1125 + 1068 1 1124 1125 1126 + 1069 1 1125 1126 1127 + 1070 1 1126 1127 1128 + 1071 1 1127 1128 1129 + 1072 1 1128 1129 1130 + 1073 1 1129 1130 1131 + 1074 1 1130 1131 1132 + 1075 1 1131 1132 1133 + 1076 1 1132 1133 1134 + 1077 1 1133 1134 1135 + 1078 1 1134 1135 1136 + 1079 1 1135 1136 1137 + 1080 1 1136 1137 1138 + 1081 1 1137 1138 1139 + 1082 1 1138 1139 1140 + 1083 1 1139 1140 1141 + 1084 1 1140 1141 1142 + 1085 1 1141 1142 1143 + 1086 1 1142 1143 1144 + 1087 1 1143 1144 1145 + 1088 1 1144 1145 1146 + 1089 1 1145 1146 1147 + 1090 1 1146 1147 1148 + 1091 1 1147 1148 1149 + 1092 1 1148 1149 1150 + 1093 1 1149 1150 1151 + 1094 1 1150 1151 1152 + 1095 1 1151 1152 1153 + 1096 1 1152 1153 1154 + 1097 1 1153 1154 1155 + 1098 1 1154 1155 1156 + 1099 1 1155 1156 1157 + 1100 1 1156 1157 1158 + 1101 1 1157 1158 1159 + 1102 1 1158 1159 1160 + 1103 1 1161 1162 1163 + 1104 1 1162 1163 1164 + 1105 1 1163 1164 1165 + 1106 1 1164 1165 1166 + 1107 1 1165 1166 1167 + 1108 1 1166 1167 1168 + 1109 1 1167 1168 1169 + 1110 1 1168 1169 1170 + 1111 1 1169 1170 1171 + 1112 1 1170 1171 1172 + 1113 1 1171 1172 1173 + 1114 1 1172 1173 1174 + 1115 1 1173 1174 1175 + 1116 1 1174 1175 1176 + 1117 1 1175 1176 1177 + 1118 1 1176 1177 1178 + 1119 1 1177 1178 1179 + 1120 1 1178 1179 1180 + 1121 1 1179 1180 1181 + 1122 1 1180 1181 1182 + 1123 1 1181 1182 1183 + 1124 1 1182 1183 1184 + 1125 1 1183 1184 1185 + 1126 1 1184 1185 1186 + 1127 1 1185 1186 1187 + 1128 1 1186 1187 1188 + 1129 1 1187 1188 1189 + 1130 1 1188 1189 1190 + 1131 1 1189 1190 1191 + 1132 1 1190 1191 1192 + 1133 1 1191 1192 1193 + 1134 1 1192 1193 1194 + 1135 1 1193 1194 1195 + 1136 1 1194 1195 1196 + 1137 1 1195 1196 1197 + 1138 1 1196 1197 1198 + 1139 1 1197 1198 1199 + 1140 1 1198 1199 1200 + 1141 1 1201 1202 1203 + 1142 1 1202 1203 1204 + 1143 1 1203 1204 1205 + 1144 1 1204 1205 1206 + 1145 1 1205 1206 1207 + 1146 1 1206 1207 1208 + 1147 1 1207 1208 1209 + 1148 1 1208 1209 1210 + 1149 1 1209 1210 1211 + 1150 1 1210 1211 1212 + 1151 1 1211 1212 1213 + 1152 1 1212 1213 1214 + 1153 1 1213 1214 1215 + 1154 1 1214 1215 1216 + 1155 1 1215 1216 1217 + 1156 1 1216 1217 1218 + 1157 1 1217 1218 1219 + 1158 1 1218 1219 1220 + 1159 1 1219 1220 1221 + 1160 1 1220 1221 1222 + 1161 1 1221 1222 1223 + 1162 1 1222 1223 1224 + 1163 1 1223 1224 1225 + 1164 1 1224 1225 1226 + 1165 1 1225 1226 1227 + 1166 1 1226 1227 1228 + 1167 1 1227 1228 1229 + 1168 1 1228 1229 1230 + 1169 1 1229 1230 1231 + 1170 1 1230 1231 1232 + 1171 1 1231 1232 1233 + 1172 1 1232 1233 1234 + 1173 1 1233 1234 1235 + 1174 1 1234 1235 1236 + 1175 1 1235 1236 1237 + 1176 1 1236 1237 1238 + 1177 1 1237 1238 1239 + 1178 1 1238 1239 1240 + 1179 1 1241 1242 1243 + 1180 1 1242 1243 1244 + 1181 1 1243 1244 1245 + 1182 1 1244 1245 1246 + 1183 1 1245 1246 1247 + 1184 1 1246 1247 1248 + 1185 1 1247 1248 1249 + 1186 1 1248 1249 1250 + 1187 1 1249 1250 1251 + 1188 1 1250 1251 1252 + 1189 1 1251 1252 1253 + 1190 1 1252 1253 1254 + 1191 1 1253 1254 1255 + 1192 1 1254 1255 1256 + 1193 1 1255 1256 1257 + 1194 1 1256 1257 1258 + 1195 1 1257 1258 1259 + 1196 1 1258 1259 1260 + 1197 1 1259 1260 1261 + 1198 1 1260 1261 1262 + 1199 1 1261 1262 1263 + 1200 1 1262 1263 1264 + 1201 1 1263 1264 1265 + 1202 1 1264 1265 1266 + 1203 1 1265 1266 1267 + 1204 1 1266 1267 1268 + 1205 1 1267 1268 1269 + 1206 1 1268 1269 1270 + 1207 1 1269 1270 1271 + 1208 1 1270 1271 1272 + 1209 1 1271 1272 1273 + 1210 1 1272 1273 1274 + 1211 1 1273 1274 1275 + 1212 1 1274 1275 1276 + 1213 1 1275 1276 1277 + 1214 1 1276 1277 1278 + 1215 1 1277 1278 1279 + 1216 1 1278 1279 1280 + 1217 1 1281 1282 1283 + 1218 1 1282 1283 1284 + 1219 1 1283 1284 1285 + 1220 1 1284 1285 1286 + 1221 1 1285 1286 1287 + 1222 1 1286 1287 1288 + 1223 1 1287 1288 1289 + 1224 1 1288 1289 1290 + 1225 1 1289 1290 1291 + 1226 1 1290 1291 1292 + 1227 1 1291 1292 1293 + 1228 1 1292 1293 1294 + 1229 1 1293 1294 1295 + 1230 1 1294 1295 1296 + 1231 1 1295 1296 1297 + 1232 1 1296 1297 1298 + 1233 1 1297 1298 1299 + 1234 1 1298 1299 1300 + 1235 1 1299 1300 1301 + 1236 1 1300 1301 1302 + 1237 1 1301 1302 1303 + 1238 1 1302 1303 1304 + 1239 1 1303 1304 1305 + 1240 1 1304 1305 1306 + 1241 1 1305 1306 1307 + 1242 1 1306 1307 1308 + 1243 1 1307 1308 1309 + 1244 1 1308 1309 1310 + 1245 1 1309 1310 1311 + 1246 1 1310 1311 1312 + 1247 1 1311 1312 1313 + 1248 1 1312 1313 1314 + 1249 1 1313 1314 1315 + 1250 1 1314 1315 1316 + 1251 1 1315 1316 1317 + 1252 1 1316 1317 1318 + 1253 1 1317 1318 1319 + 1254 1 1318 1319 1320 + 1255 1 1321 1322 1323 + 1256 1 1322 1323 1324 + 1257 1 1323 1324 1325 + 1258 1 1324 1325 1326 + 1259 1 1325 1326 1327 + 1260 1 1326 1327 1328 + 1261 1 1327 1328 1329 + 1262 1 1328 1329 1330 + 1263 1 1329 1330 1331 + 1264 1 1330 1331 1332 + 1265 1 1331 1332 1333 + 1266 1 1332 1333 1334 + 1267 1 1333 1334 1335 + 1268 1 1334 1335 1336 + 1269 1 1335 1336 1337 + 1270 1 1336 1337 1338 + 1271 1 1337 1338 1339 + 1272 1 1338 1339 1340 + 1273 1 1339 1340 1341 + 1274 1 1340 1341 1342 + 1275 1 1341 1342 1343 + 1276 1 1342 1343 1344 + 1277 1 1343 1344 1345 + 1278 1 1344 1345 1346 + 1279 1 1345 1346 1347 + 1280 1 1346 1347 1348 + 1281 1 1347 1348 1349 + 1282 1 1348 1349 1350 + 1283 1 1349 1350 1351 + 1284 1 1350 1351 1352 + 1285 1 1351 1352 1353 + 1286 1 1352 1353 1354 + 1287 1 1353 1354 1355 + 1288 1 1354 1355 1356 + 1289 1 1355 1356 1357 + 1290 1 1356 1357 1358 + 1291 1 1357 1358 1359 + 1292 1 1358 1359 1360 + 1293 1 1361 1362 1363 + 1294 1 1362 1363 1364 + 1295 1 1363 1364 1365 + 1296 1 1364 1365 1366 + 1297 1 1365 1366 1367 + 1298 1 1366 1367 1368 + 1299 1 1367 1368 1369 + 1300 1 1368 1369 1370 + 1301 1 1369 1370 1371 + 1302 1 1370 1371 1372 + 1303 1 1371 1372 1373 + 1304 1 1372 1373 1374 + 1305 1 1373 1374 1375 + 1306 1 1374 1375 1376 + 1307 1 1375 1376 1377 + 1308 1 1376 1377 1378 + 1309 1 1377 1378 1379 + 1310 1 1378 1379 1380 + 1311 1 1379 1380 1381 + 1312 1 1380 1381 1382 + 1313 1 1381 1382 1383 + 1314 1 1382 1383 1384 + 1315 1 1383 1384 1385 + 1316 1 1384 1385 1386 + 1317 1 1385 1386 1387 + 1318 1 1386 1387 1388 + 1319 1 1387 1388 1389 + 1320 1 1388 1389 1390 + 1321 1 1389 1390 1391 + 1322 1 1390 1391 1392 + 1323 1 1391 1392 1393 + 1324 1 1392 1393 1394 + 1325 1 1393 1394 1395 + 1326 1 1394 1395 1396 + 1327 1 1395 1396 1397 + 1328 1 1396 1397 1398 + 1329 1 1397 1398 1399 + 1330 1 1398 1399 1400 + 1331 1 1401 1402 1403 + 1332 1 1402 1403 1404 + 1333 1 1403 1404 1405 + 1334 1 1404 1405 1406 + 1335 1 1405 1406 1407 + 1336 1 1406 1407 1408 + 1337 1 1407 1408 1409 + 1338 1 1408 1409 1410 + 1339 1 1409 1410 1411 + 1340 1 1410 1411 1412 + 1341 1 1411 1412 1413 + 1342 1 1412 1413 1414 + 1343 1 1413 1414 1415 + 1344 1 1414 1415 1416 + 1345 1 1415 1416 1417 + 1346 1 1416 1417 1418 + 1347 1 1417 1418 1419 + 1348 1 1418 1419 1420 + 1349 1 1419 1420 1421 + 1350 1 1420 1421 1422 + 1351 1 1421 1422 1423 + 1352 1 1422 1423 1424 + 1353 1 1423 1424 1425 + 1354 1 1424 1425 1426 + 1355 1 1425 1426 1427 + 1356 1 1426 1427 1428 + 1357 1 1427 1428 1429 + 1358 1 1428 1429 1430 + 1359 1 1429 1430 1431 + 1360 1 1430 1431 1432 + 1361 1 1431 1432 1433 + 1362 1 1432 1433 1434 + 1363 1 1433 1434 1435 + 1364 1 1434 1435 1436 + 1365 1 1435 1436 1437 + 1366 1 1436 1437 1438 + 1367 1 1437 1438 1439 + 1368 1 1438 1439 1440 + 1369 1 1441 1442 1443 + 1370 1 1442 1443 1444 + 1371 1 1443 1444 1445 + 1372 1 1444 1445 1446 + 1373 1 1445 1446 1447 + 1374 1 1446 1447 1448 + 1375 1 1447 1448 1449 + 1376 1 1448 1449 1450 + 1377 1 1449 1450 1451 + 1378 1 1450 1451 1452 + 1379 1 1451 1452 1453 + 1380 1 1452 1453 1454 + 1381 1 1453 1454 1455 + 1382 1 1454 1455 1456 + 1383 1 1455 1456 1457 + 1384 1 1456 1457 1458 + 1385 1 1457 1458 1459 + 1386 1 1458 1459 1460 + 1387 1 1459 1460 1461 + 1388 1 1460 1461 1462 + 1389 1 1461 1462 1463 + 1390 1 1462 1463 1464 + 1391 1 1463 1464 1465 + 1392 1 1464 1465 1466 + 1393 1 1465 1466 1467 + 1394 1 1466 1467 1468 + 1395 1 1467 1468 1469 + 1396 1 1468 1469 1470 + 1397 1 1469 1470 1471 + 1398 1 1470 1471 1472 + 1399 1 1471 1472 1473 + 1400 1 1472 1473 1474 + 1401 1 1473 1474 1475 + 1402 1 1474 1475 1476 + 1403 1 1475 1476 1477 + 1404 1 1476 1477 1478 + 1405 1 1477 1478 1479 + 1406 1 1478 1479 1480 + 1407 1 1481 1482 1483 + 1408 1 1482 1483 1484 + 1409 1 1483 1484 1485 + 1410 1 1484 1485 1486 + 1411 1 1485 1486 1487 + 1412 1 1486 1487 1488 + 1413 1 1487 1488 1489 + 1414 1 1488 1489 1490 + 1415 1 1489 1490 1491 + 1416 1 1490 1491 1492 + 1417 1 1491 1492 1493 + 1418 1 1492 1493 1494 + 1419 1 1493 1494 1495 + 1420 1 1494 1495 1496 + 1421 1 1495 1496 1497 + 1422 1 1496 1497 1498 + 1423 1 1497 1498 1499 + 1424 1 1498 1499 1500 + 1425 1 1499 1500 1501 + 1426 1 1500 1501 1502 + 1427 1 1501 1502 1503 + 1428 1 1502 1503 1504 + 1429 1 1503 1504 1505 + 1430 1 1504 1505 1506 + 1431 1 1505 1506 1507 + 1432 1 1506 1507 1508 + 1433 1 1507 1508 1509 + 1434 1 1508 1509 1510 + 1435 1 1509 1510 1511 + 1436 1 1510 1511 1512 + 1437 1 1511 1512 1513 + 1438 1 1512 1513 1514 + 1439 1 1513 1514 1515 + 1440 1 1514 1515 1516 + 1441 1 1515 1516 1517 + 1442 1 1516 1517 1518 + 1443 1 1517 1518 1519 + 1444 1 1518 1519 1520 + 1445 1 1521 1522 1523 + 1446 1 1522 1523 1524 + 1447 1 1523 1524 1525 + 1448 1 1524 1525 1526 + 1449 1 1525 1526 1527 + 1450 1 1526 1527 1528 + 1451 1 1527 1528 1529 + 1452 1 1528 1529 1530 + 1453 1 1529 1530 1531 + 1454 1 1530 1531 1532 + 1455 1 1531 1532 1533 + 1456 1 1532 1533 1534 + 1457 1 1533 1534 1535 + 1458 1 1534 1535 1536 + 1459 1 1535 1536 1537 + 1460 1 1536 1537 1538 + 1461 1 1537 1538 1539 + 1462 1 1538 1539 1540 + 1463 1 1539 1540 1541 + 1464 1 1540 1541 1542 + 1465 1 1541 1542 1543 + 1466 1 1542 1543 1544 + 1467 1 1543 1544 1545 + 1468 1 1544 1545 1546 + 1469 1 1545 1546 1547 + 1470 1 1546 1547 1548 + 1471 1 1547 1548 1549 + 1472 1 1548 1549 1550 + 1473 1 1549 1550 1551 + 1474 1 1550 1551 1552 + 1475 1 1551 1552 1553 + 1476 1 1552 1553 1554 + 1477 1 1553 1554 1555 + 1478 1 1554 1555 1556 + 1479 1 1555 1556 1557 + 1480 1 1556 1557 1558 + 1481 1 1557 1558 1559 + 1482 1 1558 1559 1560 + 1483 1 1561 1562 1563 + 1484 1 1562 1563 1564 + 1485 1 1563 1564 1565 + 1486 1 1564 1565 1566 + 1487 1 1565 1566 1567 + 1488 1 1566 1567 1568 + 1489 1 1567 1568 1569 + 1490 1 1568 1569 1570 + 1491 1 1569 1570 1571 + 1492 1 1570 1571 1572 + 1493 1 1571 1572 1573 + 1494 1 1572 1573 1574 + 1495 1 1573 1574 1575 + 1496 1 1574 1575 1576 + 1497 1 1575 1576 1577 + 1498 1 1576 1577 1578 + 1499 1 1577 1578 1579 + 1500 1 1578 1579 1580 + 1501 1 1579 1580 1581 + 1502 1 1580 1581 1582 + 1503 1 1581 1582 1583 + 1504 1 1582 1583 1584 + 1505 1 1583 1584 1585 + 1506 1 1584 1585 1586 + 1507 1 1585 1586 1587 + 1508 1 1586 1587 1588 + 1509 1 1587 1588 1589 + 1510 1 1588 1589 1590 + 1511 1 1589 1590 1591 + 1512 1 1590 1591 1592 + 1513 1 1591 1592 1593 + 1514 1 1592 1593 1594 + 1515 1 1593 1594 1595 + 1516 1 1594 1595 1596 + 1517 1 1595 1596 1597 + 1518 1 1596 1597 1598 + 1519 1 1597 1598 1599 + 1520 1 1598 1599 1600 + 1521 1 1601 1602 1603 + 1522 1 1602 1603 1604 + 1523 1 1603 1604 1605 + 1524 1 1604 1605 1606 + 1525 1 1605 1606 1607 + 1526 1 1606 1607 1608 + 1527 1 1607 1608 1609 + 1528 1 1608 1609 1610 + 1529 1 1609 1610 1611 + 1530 1 1610 1611 1612 + 1531 1 1611 1612 1613 + 1532 1 1612 1613 1614 + 1533 1 1613 1614 1615 + 1534 1 1614 1615 1616 + 1535 1 1615 1616 1617 + 1536 1 1616 1617 1618 + 1537 1 1617 1618 1619 + 1538 1 1618 1619 1620 + 1539 1 1619 1620 1621 + 1540 1 1620 1621 1622 + 1541 1 1621 1622 1623 + 1542 1 1622 1623 1624 + 1543 1 1623 1624 1625 + 1544 1 1624 1625 1626 + 1545 1 1625 1626 1627 + 1546 1 1626 1627 1628 + 1547 1 1627 1628 1629 + 1548 1 1628 1629 1630 + 1549 1 1629 1630 1631 + 1550 1 1630 1631 1632 + 1551 1 1631 1632 1633 + 1552 1 1632 1633 1634 + 1553 1 1633 1634 1635 + 1554 1 1634 1635 1636 + 1555 1 1635 1636 1637 + 1556 1 1636 1637 1638 + 1557 1 1637 1638 1639 + 1558 1 1638 1639 1640 + 1559 1 1641 1642 1643 + 1560 1 1642 1643 1644 + 1561 1 1643 1644 1645 + 1562 1 1644 1645 1646 + 1563 1 1645 1646 1647 + 1564 1 1646 1647 1648 + 1565 1 1647 1648 1649 + 1566 1 1648 1649 1650 + 1567 1 1649 1650 1651 + 1568 1 1650 1651 1652 + 1569 1 1651 1652 1653 + 1570 1 1652 1653 1654 + 1571 1 1653 1654 1655 + 1572 1 1654 1655 1656 + 1573 1 1655 1656 1657 + 1574 1 1656 1657 1658 + 1575 1 1657 1658 1659 + 1576 1 1658 1659 1660 + 1577 1 1659 1660 1661 + 1578 1 1660 1661 1662 + 1579 1 1661 1662 1663 + 1580 1 1662 1663 1664 + 1581 1 1663 1664 1665 + 1582 1 1664 1665 1666 + 1583 1 1665 1666 1667 + 1584 1 1666 1667 1668 + 1585 1 1667 1668 1669 + 1586 1 1668 1669 1670 + 1587 1 1669 1670 1671 + 1588 1 1670 1671 1672 + 1589 1 1671 1672 1673 + 1590 1 1672 1673 1674 + 1591 1 1673 1674 1675 + 1592 1 1674 1675 1676 + 1593 1 1675 1676 1677 + 1594 1 1676 1677 1678 + 1595 1 1677 1678 1679 + 1596 1 1678 1679 1680 + 1597 1 1681 1682 1683 + 1598 1 1682 1683 1684 + 1599 1 1683 1684 1685 + 1600 1 1684 1685 1686 + 1601 1 1685 1686 1687 + 1602 1 1686 1687 1688 + 1603 1 1687 1688 1689 + 1604 1 1688 1689 1690 + 1605 1 1689 1690 1691 + 1606 1 1690 1691 1692 + 1607 1 1691 1692 1693 + 1608 1 1692 1693 1694 + 1609 1 1693 1694 1695 + 1610 1 1694 1695 1696 + 1611 1 1695 1696 1697 + 1612 1 1696 1697 1698 + 1613 1 1697 1698 1699 + 1614 1 1698 1699 1700 + 1615 1 1699 1700 1701 + 1616 1 1700 1701 1702 + 1617 1 1701 1702 1703 + 1618 1 1702 1703 1704 + 1619 1 1703 1704 1705 + 1620 1 1704 1705 1706 + 1621 1 1705 1706 1707 + 1622 1 1706 1707 1708 + 1623 1 1707 1708 1709 + 1624 1 1708 1709 1710 + 1625 1 1709 1710 1711 + 1626 1 1710 1711 1712 + 1627 1 1711 1712 1713 + 1628 1 1712 1713 1714 + 1629 1 1713 1714 1715 + 1630 1 1714 1715 1716 + 1631 1 1715 1716 1717 + 1632 1 1716 1717 1718 + 1633 1 1717 1718 1719 + 1634 1 1718 1719 1720 + 1635 1 1721 1722 1723 + 1636 1 1722 1723 1724 + 1637 1 1723 1724 1725 + 1638 1 1724 1725 1726 + 1639 1 1725 1726 1727 + 1640 1 1726 1727 1728 + 1641 1 1727 1728 1729 + 1642 1 1728 1729 1730 + 1643 1 1729 1730 1731 + 1644 1 1730 1731 1732 + 1645 1 1731 1732 1733 + 1646 1 1732 1733 1734 + 1647 1 1733 1734 1735 + 1648 1 1734 1735 1736 + 1649 1 1735 1736 1737 + 1650 1 1736 1737 1738 + 1651 1 1737 1738 1739 + 1652 1 1738 1739 1740 + 1653 1 1739 1740 1741 + 1654 1 1740 1741 1742 + 1655 1 1741 1742 1743 + 1656 1 1742 1743 1744 + 1657 1 1743 1744 1745 + 1658 1 1744 1745 1746 + 1659 1 1745 1746 1747 + 1660 1 1746 1747 1748 + 1661 1 1747 1748 1749 + 1662 1 1748 1749 1750 + 1663 1 1749 1750 1751 + 1664 1 1750 1751 1752 + 1665 1 1751 1752 1753 + 1666 1 1752 1753 1754 + 1667 1 1753 1754 1755 + 1668 1 1754 1755 1756 + 1669 1 1755 1756 1757 + 1670 1 1756 1757 1758 + 1671 1 1757 1758 1759 + 1672 1 1758 1759 1760 + 1673 1 1761 1762 1763 + 1674 1 1762 1763 1764 + 1675 1 1763 1764 1765 + 1676 1 1764 1765 1766 + 1677 1 1765 1766 1767 + 1678 1 1766 1767 1768 + 1679 1 1767 1768 1769 + 1680 1 1768 1769 1770 + 1681 1 1769 1770 1771 + 1682 1 1770 1771 1772 + 1683 1 1771 1772 1773 + 1684 1 1772 1773 1774 + 1685 1 1773 1774 1775 + 1686 1 1774 1775 1776 + 1687 1 1775 1776 1777 + 1688 1 1776 1777 1778 + 1689 1 1777 1778 1779 + 1690 1 1778 1779 1780 + 1691 1 1779 1780 1781 + 1692 1 1780 1781 1782 + 1693 1 1781 1782 1783 + 1694 1 1782 1783 1784 + 1695 1 1783 1784 1785 + 1696 1 1784 1785 1786 + 1697 1 1785 1786 1787 + 1698 1 1786 1787 1788 + 1699 1 1787 1788 1789 + 1700 1 1788 1789 1790 + 1701 1 1789 1790 1791 + 1702 1 1790 1791 1792 + 1703 1 1791 1792 1793 + 1704 1 1792 1793 1794 + 1705 1 1793 1794 1795 + 1706 1 1794 1795 1796 + 1707 1 1795 1796 1797 + 1708 1 1796 1797 1798 + 1709 1 1797 1798 1799 + 1710 1 1798 1799 1800 + 1711 1 1801 1802 1803 + 1712 1 1802 1803 1804 + 1713 1 1803 1804 1805 + 1714 1 1804 1805 1806 + 1715 1 1805 1806 1807 + 1716 1 1806 1807 1808 + 1717 1 1807 1808 1809 + 1718 1 1808 1809 1810 + 1719 1 1809 1810 1811 + 1720 1 1810 1811 1812 + 1721 1 1811 1812 1813 + 1722 1 1812 1813 1814 + 1723 1 1813 1814 1815 + 1724 1 1814 1815 1816 + 1725 1 1815 1816 1817 + 1726 1 1816 1817 1818 + 1727 1 1817 1818 1819 + 1728 1 1818 1819 1820 + 1729 1 1819 1820 1821 + 1730 1 1820 1821 1822 + 1731 1 1821 1822 1823 + 1732 1 1822 1823 1824 + 1733 1 1823 1824 1825 + 1734 1 1824 1825 1826 + 1735 1 1825 1826 1827 + 1736 1 1826 1827 1828 + 1737 1 1827 1828 1829 + 1738 1 1828 1829 1830 + 1739 1 1829 1830 1831 + 1740 1 1830 1831 1832 + 1741 1 1831 1832 1833 + 1742 1 1832 1833 1834 + 1743 1 1833 1834 1835 + 1744 1 1834 1835 1836 + 1745 1 1835 1836 1837 + 1746 1 1836 1837 1838 + 1747 1 1837 1838 1839 + 1748 1 1838 1839 1840 + 1749 1 1841 1842 1843 + 1750 1 1842 1843 1844 + 1751 1 1843 1844 1845 + 1752 1 1844 1845 1846 + 1753 1 1845 1846 1847 + 1754 1 1846 1847 1848 + 1755 1 1847 1848 1849 + 1756 1 1848 1849 1850 + 1757 1 1849 1850 1851 + 1758 1 1850 1851 1852 + 1759 1 1851 1852 1853 + 1760 1 1852 1853 1854 + 1761 1 1853 1854 1855 + 1762 1 1854 1855 1856 + 1763 1 1855 1856 1857 + 1764 1 1856 1857 1858 + 1765 1 1857 1858 1859 + 1766 1 1858 1859 1860 + 1767 1 1859 1860 1861 + 1768 1 1860 1861 1862 + 1769 1 1861 1862 1863 + 1770 1 1862 1863 1864 + 1771 1 1863 1864 1865 + 1772 1 1864 1865 1866 + 1773 1 1865 1866 1867 + 1774 1 1866 1867 1868 + 1775 1 1867 1868 1869 + 1776 1 1868 1869 1870 + 1777 1 1869 1870 1871 + 1778 1 1870 1871 1872 + 1779 1 1871 1872 1873 + 1780 1 1872 1873 1874 + 1781 1 1873 1874 1875 + 1782 1 1874 1875 1876 + 1783 1 1875 1876 1877 + 1784 1 1876 1877 1878 + 1785 1 1877 1878 1879 + 1786 1 1878 1879 1880 + 1787 1 1881 1882 1883 + 1788 1 1882 1883 1884 + 1789 1 1883 1884 1885 + 1790 1 1884 1885 1886 + 1791 1 1885 1886 1887 + 1792 1 1886 1887 1888 + 1793 1 1887 1888 1889 + 1794 1 1888 1889 1890 + 1795 1 1889 1890 1891 + 1796 1 1890 1891 1892 + 1797 1 1891 1892 1893 + 1798 1 1892 1893 1894 + 1799 1 1893 1894 1895 + 1800 1 1894 1895 1896 + 1801 1 1895 1896 1897 + 1802 1 1896 1897 1898 + 1803 1 1897 1898 1899 + 1804 1 1898 1899 1900 + 1805 1 1899 1900 1901 + 1806 1 1900 1901 1902 + 1807 1 1901 1902 1903 + 1808 1 1902 1903 1904 + 1809 1 1903 1904 1905 + 1810 1 1904 1905 1906 + 1811 1 1905 1906 1907 + 1812 1 1906 1907 1908 + 1813 1 1907 1908 1909 + 1814 1 1908 1909 1910 + 1815 1 1909 1910 1911 + 1816 1 1910 1911 1912 + 1817 1 1911 1912 1913 + 1818 1 1912 1913 1914 + 1819 1 1913 1914 1915 + 1820 1 1914 1915 1916 + 1821 1 1915 1916 1917 + 1822 1 1916 1917 1918 + 1823 1 1917 1918 1919 + 1824 1 1918 1919 1920 + 1825 1 1921 1922 1923 + 1826 1 1922 1923 1924 + 1827 1 1923 1924 1925 + 1828 1 1924 1925 1926 + 1829 1 1925 1926 1927 + 1830 1 1926 1927 1928 + 1831 1 1927 1928 1929 + 1832 1 1928 1929 1930 + 1833 1 1929 1930 1931 + 1834 1 1930 1931 1932 + 1835 1 1931 1932 1933 + 1836 1 1932 1933 1934 + 1837 1 1933 1934 1935 + 1838 1 1934 1935 1936 + 1839 1 1935 1936 1937 + 1840 1 1936 1937 1938 + 1841 1 1937 1938 1939 + 1842 1 1938 1939 1940 + 1843 1 1939 1940 1941 + 1844 1 1940 1941 1942 + 1845 1 1941 1942 1943 + 1846 1 1942 1943 1944 + 1847 1 1943 1944 1945 + 1848 1 1944 1945 1946 + 1849 1 1945 1946 1947 + 1850 1 1946 1947 1948 + 1851 1 1947 1948 1949 + 1852 1 1948 1949 1950 + 1853 1 1949 1950 1951 + 1854 1 1950 1951 1952 + 1855 1 1951 1952 1953 + 1856 1 1952 1953 1954 + 1857 1 1953 1954 1955 + 1858 1 1954 1955 1956 + 1859 1 1955 1956 1957 + 1860 1 1956 1957 1958 + 1861 1 1957 1958 1959 + 1862 1 1958 1959 1960 + 1863 1 1961 1962 1963 + 1864 1 1962 1963 1964 + 1865 1 1963 1964 1965 + 1866 1 1964 1965 1966 + 1867 1 1965 1966 1967 + 1868 1 1966 1967 1968 + 1869 1 1967 1968 1969 + 1870 1 1968 1969 1970 + 1871 1 1969 1970 1971 + 1872 1 1970 1971 1972 + 1873 1 1971 1972 1973 + 1874 1 1972 1973 1974 + 1875 1 1973 1974 1975 + 1876 1 1974 1975 1976 + 1877 1 1975 1976 1977 + 1878 1 1976 1977 1978 + 1879 1 1977 1978 1979 + 1880 1 1978 1979 1980 + 1881 1 1979 1980 1981 + 1882 1 1980 1981 1982 + 1883 1 1981 1982 1983 + 1884 1 1982 1983 1984 + 1885 1 1983 1984 1985 + 1886 1 1984 1985 1986 + 1887 1 1985 1986 1987 + 1888 1 1986 1987 1988 + 1889 1 1987 1988 1989 + 1890 1 1988 1989 1990 + 1891 1 1989 1990 1991 + 1892 1 1990 1991 1992 + 1893 1 1991 1992 1993 + 1894 1 1992 1993 1994 + 1895 1 1993 1994 1995 + 1896 1 1994 1995 1996 + 1897 1 1995 1996 1997 + 1898 1 1996 1997 1998 + 1899 1 1997 1998 1999 + 1900 1 1998 1999 2000 + 1901 1 2001 2002 2003 + 1902 1 2002 2003 2004 + 1903 1 2003 2004 2005 + 1904 1 2004 2005 2006 + 1905 1 2005 2006 2007 + 1906 1 2006 2007 2008 + 1907 1 2007 2008 2009 + 1908 1 2008 2009 2010 + 1909 1 2009 2010 2011 + 1910 1 2010 2011 2012 + 1911 1 2011 2012 2013 + 1912 1 2012 2013 2014 + 1913 1 2013 2014 2015 + 1914 1 2014 2015 2016 + 1915 1 2015 2016 2017 + 1916 1 2016 2017 2018 + 1917 1 2017 2018 2019 + 1918 1 2018 2019 2020 + 1919 1 2019 2020 2021 + 1920 1 2020 2021 2022 + 1921 1 2021 2022 2023 + 1922 1 2022 2023 2024 + 1923 1 2023 2024 2025 + 1924 1 2024 2025 2026 + 1925 1 2025 2026 2027 + 1926 1 2026 2027 2028 + 1927 1 2027 2028 2029 + 1928 1 2028 2029 2030 + 1929 1 2029 2030 2031 + 1930 1 2030 2031 2032 + 1931 1 2031 2032 2033 + 1932 1 2032 2033 2034 + 1933 1 2033 2034 2035 + 1934 1 2034 2035 2036 + 1935 1 2035 2036 2037 + 1936 1 2036 2037 2038 + 1937 1 2037 2038 2039 + 1938 1 2038 2039 2040 + 1939 1 2041 2042 2043 + 1940 1 2042 2043 2044 + 1941 1 2043 2044 2045 + 1942 1 2044 2045 2046 + 1943 1 2045 2046 2047 + 1944 1 2046 2047 2048 + 1945 1 2047 2048 2049 + 1946 1 2048 2049 2050 + 1947 1 2049 2050 2051 + 1948 1 2050 2051 2052 + 1949 1 2051 2052 2053 + 1950 1 2052 2053 2054 + 1951 1 2053 2054 2055 + 1952 1 2054 2055 2056 + 1953 1 2055 2056 2057 + 1954 1 2056 2057 2058 + 1955 1 2057 2058 2059 + 1956 1 2058 2059 2060 + 1957 1 2059 2060 2061 + 1958 1 2060 2061 2062 + 1959 1 2061 2062 2063 + 1960 1 2062 2063 2064 + 1961 1 2063 2064 2065 + 1962 1 2064 2065 2066 + 1963 1 2065 2066 2067 + 1964 1 2066 2067 2068 + 1965 1 2067 2068 2069 + 1966 1 2068 2069 2070 + 1967 1 2069 2070 2071 + 1968 1 2070 2071 2072 + 1969 1 2071 2072 2073 + 1970 1 2072 2073 2074 + 1971 1 2073 2074 2075 + 1972 1 2074 2075 2076 + 1973 1 2075 2076 2077 + 1974 1 2076 2077 2078 + 1975 1 2077 2078 2079 + 1976 1 2078 2079 2080 + 1977 1 2081 2082 2083 + 1978 1 2082 2083 2084 + 1979 1 2083 2084 2085 + 1980 1 2084 2085 2086 + 1981 1 2085 2086 2087 + 1982 1 2086 2087 2088 + 1983 1 2087 2088 2089 + 1984 1 2088 2089 2090 + 1985 1 2089 2090 2091 + 1986 1 2090 2091 2092 + 1987 1 2091 2092 2093 + 1988 1 2092 2093 2094 + 1989 1 2093 2094 2095 + 1990 1 2094 2095 2096 + 1991 1 2095 2096 2097 + 1992 1 2096 2097 2098 + 1993 1 2097 2098 2099 + 1994 1 2098 2099 2100 + 1995 1 2099 2100 2101 + 1996 1 2100 2101 2102 + 1997 1 2101 2102 2103 + 1998 1 2102 2103 2104 + 1999 1 2103 2104 2105 + 2000 1 2104 2105 2106 + 2001 1 2105 2106 2107 + 2002 1 2106 2107 2108 + 2003 1 2107 2108 2109 + 2004 1 2108 2109 2110 + 2005 1 2109 2110 2111 + 2006 1 2110 2111 2112 + 2007 1 2111 2112 2113 + 2008 1 2112 2113 2114 + 2009 1 2113 2114 2115 + 2010 1 2114 2115 2116 + 2011 1 2115 2116 2117 + 2012 1 2116 2117 2118 + 2013 1 2117 2118 2119 + 2014 1 2118 2119 2120 + 2015 1 2121 2122 2123 + 2016 1 2122 2123 2124 + 2017 1 2123 2124 2125 + 2018 1 2124 2125 2126 + 2019 1 2125 2126 2127 + 2020 1 2126 2127 2128 + 2021 1 2127 2128 2129 + 2022 1 2128 2129 2130 + 2023 1 2129 2130 2131 + 2024 1 2130 2131 2132 + 2025 1 2131 2132 2133 + 2026 1 2132 2133 2134 + 2027 1 2133 2134 2135 + 2028 1 2134 2135 2136 + 2029 1 2135 2136 2137 + 2030 1 2136 2137 2138 + 2031 1 2137 2138 2139 + 2032 1 2138 2139 2140 + 2033 1 2139 2140 2141 + 2034 1 2140 2141 2142 + 2035 1 2141 2142 2143 + 2036 1 2142 2143 2144 + 2037 1 2143 2144 2145 + 2038 1 2144 2145 2146 + 2039 1 2145 2146 2147 + 2040 1 2146 2147 2148 + 2041 1 2147 2148 2149 + 2042 1 2148 2149 2150 + 2043 1 2149 2150 2151 + 2044 1 2150 2151 2152 + 2045 1 2151 2152 2153 + 2046 1 2152 2153 2154 + 2047 1 2153 2154 2155 + 2048 1 2154 2155 2156 + 2049 1 2155 2156 2157 + 2050 1 2156 2157 2158 + 2051 1 2157 2158 2159 + 2052 1 2158 2159 2160 + 2053 1 2161 2162 2163 + 2054 1 2162 2163 2164 + 2055 1 2163 2164 2165 + 2056 1 2164 2165 2166 + 2057 1 2165 2166 2167 + 2058 1 2166 2167 2168 + 2059 1 2167 2168 2169 + 2060 1 2168 2169 2170 + 2061 1 2169 2170 2171 + 2062 1 2170 2171 2172 + 2063 1 2171 2172 2173 + 2064 1 2172 2173 2174 + 2065 1 2173 2174 2175 + 2066 1 2174 2175 2176 + 2067 1 2175 2176 2177 + 2068 1 2176 2177 2178 + 2069 1 2177 2178 2179 + 2070 1 2178 2179 2180 + 2071 1 2179 2180 2181 + 2072 1 2180 2181 2182 + 2073 1 2181 2182 2183 + 2074 1 2182 2183 2184 + 2075 1 2183 2184 2185 + 2076 1 2184 2185 2186 + 2077 1 2185 2186 2187 + 2078 1 2186 2187 2188 + 2079 1 2187 2188 2189 + 2080 1 2188 2189 2190 + 2081 1 2189 2190 2191 + 2082 1 2190 2191 2192 + 2083 1 2191 2192 2193 + 2084 1 2192 2193 2194 + 2085 1 2193 2194 2195 + 2086 1 2194 2195 2196 + 2087 1 2195 2196 2197 + 2088 1 2196 2197 2198 + 2089 1 2197 2198 2199 + 2090 1 2198 2199 2200 + 2091 1 2201 2202 2203 + 2092 1 2202 2203 2204 + 2093 1 2203 2204 2205 + 2094 1 2204 2205 2206 + 2095 1 2205 2206 2207 + 2096 1 2206 2207 2208 + 2097 1 2207 2208 2209 + 2098 1 2208 2209 2210 + 2099 1 2209 2210 2211 + 2100 1 2210 2211 2212 + 2101 1 2211 2212 2213 + 2102 1 2212 2213 2214 + 2103 1 2213 2214 2215 + 2104 1 2214 2215 2216 + 2105 1 2215 2216 2217 + 2106 1 2216 2217 2218 + 2107 1 2217 2218 2219 + 2108 1 2218 2219 2220 + 2109 1 2219 2220 2221 + 2110 1 2220 2221 2222 + 2111 1 2221 2222 2223 + 2112 1 2222 2223 2224 + 2113 1 2223 2224 2225 + 2114 1 2224 2225 2226 + 2115 1 2225 2226 2227 + 2116 1 2226 2227 2228 + 2117 1 2227 2228 2229 + 2118 1 2228 2229 2230 + 2119 1 2229 2230 2231 + 2120 1 2230 2231 2232 + 2121 1 2231 2232 2233 + 2122 1 2232 2233 2234 + 2123 1 2233 2234 2235 + 2124 1 2234 2235 2236 + 2125 1 2235 2236 2237 + 2126 1 2236 2237 2238 + 2127 1 2237 2238 2239 + 2128 1 2238 2239 2240 + 2129 1 2241 2242 2243 + 2130 1 2242 2243 2244 + 2131 1 2243 2244 2245 + 2132 1 2244 2245 2246 + 2133 1 2245 2246 2247 + 2134 1 2246 2247 2248 + 2135 1 2247 2248 2249 + 2136 1 2248 2249 2250 + 2137 1 2249 2250 2251 + 2138 1 2250 2251 2252 + 2139 1 2251 2252 2253 + 2140 1 2252 2253 2254 + 2141 1 2253 2254 2255 + 2142 1 2254 2255 2256 + 2143 1 2255 2256 2257 + 2144 1 2256 2257 2258 + 2145 1 2257 2258 2259 + 2146 1 2258 2259 2260 + 2147 1 2259 2260 2261 + 2148 1 2260 2261 2262 + 2149 1 2261 2262 2263 + 2150 1 2262 2263 2264 + 2151 1 2263 2264 2265 + 2152 1 2264 2265 2266 + 2153 1 2265 2266 2267 + 2154 1 2266 2267 2268 + 2155 1 2267 2268 2269 + 2156 1 2268 2269 2270 + 2157 1 2269 2270 2271 + 2158 1 2270 2271 2272 + 2159 1 2271 2272 2273 + 2160 1 2272 2273 2274 + 2161 1 2273 2274 2275 + 2162 1 2274 2275 2276 + 2163 1 2275 2276 2277 + 2164 1 2276 2277 2278 + 2165 1 2277 2278 2279 + 2166 1 2278 2279 2280 + 2167 1 2281 2282 2283 + 2168 1 2282 2283 2284 + 2169 1 2283 2284 2285 + 2170 1 2284 2285 2286 + 2171 1 2285 2286 2287 + 2172 1 2286 2287 2288 + 2173 1 2287 2288 2289 + 2174 1 2288 2289 2290 + 2175 1 2289 2290 2291 + 2176 1 2290 2291 2292 + 2177 1 2291 2292 2293 + 2178 1 2292 2293 2294 + 2179 1 2293 2294 2295 + 2180 1 2294 2295 2296 + 2181 1 2295 2296 2297 + 2182 1 2296 2297 2298 + 2183 1 2297 2298 2299 + 2184 1 2298 2299 2300 + 2185 1 2299 2300 2301 + 2186 1 2300 2301 2302 + 2187 1 2301 2302 2303 + 2188 1 2302 2303 2304 + 2189 1 2303 2304 2305 + 2190 1 2304 2305 2306 + 2191 1 2305 2306 2307 + 2192 1 2306 2307 2308 + 2193 1 2307 2308 2309 + 2194 1 2308 2309 2310 + 2195 1 2309 2310 2311 + 2196 1 2310 2311 2312 + 2197 1 2311 2312 2313 + 2198 1 2312 2313 2314 + 2199 1 2313 2314 2315 + 2200 1 2314 2315 2316 + 2201 1 2315 2316 2317 + 2202 1 2316 2317 2318 + 2203 1 2317 2318 2319 + 2204 1 2318 2319 2320 + 2205 1 2321 2322 2323 + 2206 1 2322 2323 2324 + 2207 1 2323 2324 2325 + 2208 1 2324 2325 2326 + 2209 1 2325 2326 2327 + 2210 1 2326 2327 2328 + 2211 1 2327 2328 2329 + 2212 1 2328 2329 2330 + 2213 1 2329 2330 2331 + 2214 1 2330 2331 2332 + 2215 1 2331 2332 2333 + 2216 1 2332 2333 2334 + 2217 1 2333 2334 2335 + 2218 1 2334 2335 2336 + 2219 1 2335 2336 2337 + 2220 1 2336 2337 2338 + 2221 1 2337 2338 2339 + 2222 1 2338 2339 2340 + 2223 1 2339 2340 2341 + 2224 1 2340 2341 2342 + 2225 1 2341 2342 2343 + 2226 1 2342 2343 2344 + 2227 1 2343 2344 2345 + 2228 1 2344 2345 2346 + 2229 1 2345 2346 2347 + 2230 1 2346 2347 2348 + 2231 1 2347 2348 2349 + 2232 1 2348 2349 2350 + 2233 1 2349 2350 2351 + 2234 1 2350 2351 2352 + 2235 1 2351 2352 2353 + 2236 1 2352 2353 2354 + 2237 1 2353 2354 2355 + 2238 1 2354 2355 2356 + 2239 1 2355 2356 2357 + 2240 1 2356 2357 2358 + 2241 1 2357 2358 2359 + 2242 1 2358 2359 2360 + 2243 1 2361 2362 2363 + 2244 1 2362 2363 2364 + 2245 1 2363 2364 2365 + 2246 1 2364 2365 2366 + 2247 1 2365 2366 2367 + 2248 1 2366 2367 2368 + 2249 1 2367 2368 2369 + 2250 1 2368 2369 2370 + 2251 1 2369 2370 2371 + 2252 1 2370 2371 2372 + 2253 1 2371 2372 2373 + 2254 1 2372 2373 2374 + 2255 1 2373 2374 2375 + 2256 1 2374 2375 2376 + 2257 1 2375 2376 2377 + 2258 1 2376 2377 2378 + 2259 1 2377 2378 2379 + 2260 1 2378 2379 2380 + 2261 1 2379 2380 2381 + 2262 1 2380 2381 2382 + 2263 1 2381 2382 2383 + 2264 1 2382 2383 2384 + 2265 1 2383 2384 2385 + 2266 1 2384 2385 2386 + 2267 1 2385 2386 2387 + 2268 1 2386 2387 2388 + 2269 1 2387 2388 2389 + 2270 1 2388 2389 2390 + 2271 1 2389 2390 2391 + 2272 1 2390 2391 2392 + 2273 1 2391 2392 2393 + 2274 1 2392 2393 2394 + 2275 1 2393 2394 2395 + 2276 1 2394 2395 2396 + 2277 1 2395 2396 2397 + 2278 1 2396 2397 2398 + 2279 1 2397 2398 2399 + 2280 1 2398 2399 2400 + 2281 1 2401 2402 2403 + 2282 1 2402 2403 2404 + 2283 1 2403 2404 2405 + 2284 1 2404 2405 2406 + 2285 1 2405 2406 2407 + 2286 1 2406 2407 2408 + 2287 1 2407 2408 2409 + 2288 1 2408 2409 2410 + 2289 1 2409 2410 2411 + 2290 1 2410 2411 2412 + 2291 1 2411 2412 2413 + 2292 1 2412 2413 2414 + 2293 1 2413 2414 2415 + 2294 1 2414 2415 2416 + 2295 1 2415 2416 2417 + 2296 1 2416 2417 2418 + 2297 1 2417 2418 2419 + 2298 1 2418 2419 2420 + 2299 1 2419 2420 2421 + 2300 1 2420 2421 2422 + 2301 1 2421 2422 2423 + 2302 1 2422 2423 2424 + 2303 1 2423 2424 2425 + 2304 1 2424 2425 2426 + 2305 1 2425 2426 2427 + 2306 1 2426 2427 2428 + 2307 1 2427 2428 2429 + 2308 1 2428 2429 2430 + 2309 1 2429 2430 2431 + 2310 1 2430 2431 2432 + 2311 1 2431 2432 2433 + 2312 1 2432 2433 2434 + 2313 1 2433 2434 2435 + 2314 1 2434 2435 2436 + 2315 1 2435 2436 2437 + 2316 1 2436 2437 2438 + 2317 1 2437 2438 2439 + 2318 1 2438 2439 2440 + 2319 1 2441 2442 2443 + 2320 1 2442 2443 2444 + 2321 1 2443 2444 2445 + 2322 1 2444 2445 2446 + 2323 1 2445 2446 2447 + 2324 1 2446 2447 2448 + 2325 1 2447 2448 2449 + 2326 1 2448 2449 2450 + 2327 1 2449 2450 2451 + 2328 1 2450 2451 2452 + 2329 1 2451 2452 2453 + 2330 1 2452 2453 2454 + 2331 1 2453 2454 2455 + 2332 1 2454 2455 2456 + 2333 1 2455 2456 2457 + 2334 1 2456 2457 2458 + 2335 1 2457 2458 2459 + 2336 1 2458 2459 2460 + 2337 1 2459 2460 2461 + 2338 1 2460 2461 2462 + 2339 1 2461 2462 2463 + 2340 1 2462 2463 2464 + 2341 1 2463 2464 2465 + 2342 1 2464 2465 2466 + 2343 1 2465 2466 2467 + 2344 1 2466 2467 2468 + 2345 1 2467 2468 2469 + 2346 1 2468 2469 2470 + 2347 1 2469 2470 2471 + 2348 1 2470 2471 2472 + 2349 1 2471 2472 2473 + 2350 1 2472 2473 2474 + 2351 1 2473 2474 2475 + 2352 1 2474 2475 2476 + 2353 1 2475 2476 2477 + 2354 1 2476 2477 2478 + 2355 1 2477 2478 2479 + 2356 1 2478 2479 2480 + 2357 1 2481 2482 2483 + 2358 1 2482 2483 2484 + 2359 1 2483 2484 2485 + 2360 1 2484 2485 2486 + 2361 1 2485 2486 2487 + 2362 1 2486 2487 2488 + 2363 1 2487 2488 2489 + 2364 1 2488 2489 2490 + 2365 1 2489 2490 2491 + 2366 1 2490 2491 2492 + 2367 1 2491 2492 2493 + 2368 1 2492 2493 2494 + 2369 1 2493 2494 2495 + 2370 1 2494 2495 2496 + 2371 1 2495 2496 2497 + 2372 1 2496 2497 2498 + 2373 1 2497 2498 2499 + 2374 1 2498 2499 2500 + 2375 1 2499 2500 2501 + 2376 1 2500 2501 2502 + 2377 1 2501 2502 2503 + 2378 1 2502 2503 2504 + 2379 1 2503 2504 2505 + 2380 1 2504 2505 2506 + 2381 1 2505 2506 2507 + 2382 1 2506 2507 2508 + 2383 1 2507 2508 2509 + 2384 1 2508 2509 2510 + 2385 1 2509 2510 2511 + 2386 1 2510 2511 2512 + 2387 1 2511 2512 2513 + 2388 1 2512 2513 2514 + 2389 1 2513 2514 2515 + 2390 1 2514 2515 2516 + 2391 1 2515 2516 2517 + 2392 1 2516 2517 2518 + 2393 1 2517 2518 2519 + 2394 1 2518 2519 2520 + 2395 1 2521 2522 2523 + 2396 1 2522 2523 2524 + 2397 1 2523 2524 2525 + 2398 1 2524 2525 2526 + 2399 1 2525 2526 2527 + 2400 1 2526 2527 2528 + 2401 1 2527 2528 2529 + 2402 1 2528 2529 2530 + 2403 1 2529 2530 2531 + 2404 1 2530 2531 2532 + 2405 1 2531 2532 2533 + 2406 1 2532 2533 2534 + 2407 1 2533 2534 2535 + 2408 1 2534 2535 2536 + 2409 1 2535 2536 2537 + 2410 1 2536 2537 2538 + 2411 1 2537 2538 2539 + 2412 1 2538 2539 2540 + 2413 1 2539 2540 2541 + 2414 1 2540 2541 2542 + 2415 1 2541 2542 2543 + 2416 1 2542 2543 2544 + 2417 1 2543 2544 2545 + 2418 1 2544 2545 2546 + 2419 1 2545 2546 2547 + 2420 1 2546 2547 2548 + 2421 1 2547 2548 2549 + 2422 1 2548 2549 2550 + 2423 1 2549 2550 2551 + 2424 1 2550 2551 2552 + 2425 1 2551 2552 2553 + 2426 1 2552 2553 2554 + 2427 1 2553 2554 2555 + 2428 1 2554 2555 2556 + 2429 1 2555 2556 2557 + 2430 1 2556 2557 2558 + 2431 1 2557 2558 2559 + 2432 1 2558 2559 2560 + 2433 1 2561 2562 2563 + 2434 1 2562 2563 2564 + 2435 1 2563 2564 2565 + 2436 1 2564 2565 2566 + 2437 1 2565 2566 2567 + 2438 1 2566 2567 2568 + 2439 1 2567 2568 2569 + 2440 1 2568 2569 2570 + 2441 1 2569 2570 2571 + 2442 1 2570 2571 2572 + 2443 1 2571 2572 2573 + 2444 1 2572 2573 2574 + 2445 1 2573 2574 2575 + 2446 1 2574 2575 2576 + 2447 1 2575 2576 2577 + 2448 1 2576 2577 2578 + 2449 1 2577 2578 2579 + 2450 1 2578 2579 2580 + 2451 1 2579 2580 2581 + 2452 1 2580 2581 2582 + 2453 1 2581 2582 2583 + 2454 1 2582 2583 2584 + 2455 1 2583 2584 2585 + 2456 1 2584 2585 2586 + 2457 1 2585 2586 2587 + 2458 1 2586 2587 2588 + 2459 1 2587 2588 2589 + 2460 1 2588 2589 2590 + 2461 1 2589 2590 2591 + 2462 1 2590 2591 2592 + 2463 1 2591 2592 2593 + 2464 1 2592 2593 2594 + 2465 1 2593 2594 2595 + 2466 1 2594 2595 2596 + 2467 1 2595 2596 2597 + 2468 1 2596 2597 2598 + 2469 1 2597 2598 2599 + 2470 1 2598 2599 2600 + 2471 1 2601 2602 2603 + 2472 1 2602 2603 2604 + 2473 1 2603 2604 2605 + 2474 1 2604 2605 2606 + 2475 1 2605 2606 2607 + 2476 1 2606 2607 2608 + 2477 1 2607 2608 2609 + 2478 1 2608 2609 2610 + 2479 1 2609 2610 2611 + 2480 1 2610 2611 2612 + 2481 1 2611 2612 2613 + 2482 1 2612 2613 2614 + 2483 1 2613 2614 2615 + 2484 1 2614 2615 2616 + 2485 1 2615 2616 2617 + 2486 1 2616 2617 2618 + 2487 1 2617 2618 2619 + 2488 1 2618 2619 2620 + 2489 1 2619 2620 2621 + 2490 1 2620 2621 2622 + 2491 1 2621 2622 2623 + 2492 1 2622 2623 2624 + 2493 1 2623 2624 2625 + 2494 1 2624 2625 2626 + 2495 1 2625 2626 2627 + 2496 1 2626 2627 2628 + 2497 1 2627 2628 2629 + 2498 1 2628 2629 2630 + 2499 1 2629 2630 2631 + 2500 1 2630 2631 2632 + 2501 1 2631 2632 2633 + 2502 1 2632 2633 2634 + 2503 1 2633 2634 2635 + 2504 1 2634 2635 2636 + 2505 1 2635 2636 2637 + 2506 1 2636 2637 2638 + 2507 1 2637 2638 2639 + 2508 1 2638 2639 2640 + 2509 1 2641 2642 2643 + 2510 1 2642 2643 2644 + 2511 1 2643 2644 2645 + 2512 1 2644 2645 2646 + 2513 1 2645 2646 2647 + 2514 1 2646 2647 2648 + 2515 1 2647 2648 2649 + 2516 1 2648 2649 2650 + 2517 1 2649 2650 2651 + 2518 1 2650 2651 2652 + 2519 1 2651 2652 2653 + 2520 1 2652 2653 2654 + 2521 1 2653 2654 2655 + 2522 1 2654 2655 2656 + 2523 1 2655 2656 2657 + 2524 1 2656 2657 2658 + 2525 1 2657 2658 2659 + 2526 1 2658 2659 2660 + 2527 1 2659 2660 2661 + 2528 1 2660 2661 2662 + 2529 1 2661 2662 2663 + 2530 1 2662 2663 2664 + 2531 1 2663 2664 2665 + 2532 1 2664 2665 2666 + 2533 1 2665 2666 2667 + 2534 1 2666 2667 2668 + 2535 1 2667 2668 2669 + 2536 1 2668 2669 2670 + 2537 1 2669 2670 2671 + 2538 1 2670 2671 2672 + 2539 1 2671 2672 2673 + 2540 1 2672 2673 2674 + 2541 1 2673 2674 2675 + 2542 1 2674 2675 2676 + 2543 1 2675 2676 2677 + 2544 1 2676 2677 2678 + 2545 1 2677 2678 2679 + 2546 1 2678 2679 2680 + 2547 1 2681 2682 2683 + 2548 1 2682 2683 2684 + 2549 1 2683 2684 2685 + 2550 1 2684 2685 2686 + 2551 1 2685 2686 2687 + 2552 1 2686 2687 2688 + 2553 1 2687 2688 2689 + 2554 1 2688 2689 2690 + 2555 1 2689 2690 2691 + 2556 1 2690 2691 2692 + 2557 1 2691 2692 2693 + 2558 1 2692 2693 2694 + 2559 1 2693 2694 2695 + 2560 1 2694 2695 2696 + 2561 1 2695 2696 2697 + 2562 1 2696 2697 2698 + 2563 1 2697 2698 2699 + 2564 1 2698 2699 2700 + 2565 1 2699 2700 2701 + 2566 1 2700 2701 2702 + 2567 1 2701 2702 2703 + 2568 1 2702 2703 2704 + 2569 1 2703 2704 2705 + 2570 1 2704 2705 2706 + 2571 1 2705 2706 2707 + 2572 1 2706 2707 2708 + 2573 1 2707 2708 2709 + 2574 1 2708 2709 2710 + 2575 1 2709 2710 2711 + 2576 1 2710 2711 2712 + 2577 1 2711 2712 2713 + 2578 1 2712 2713 2714 + 2579 1 2713 2714 2715 + 2580 1 2714 2715 2716 + 2581 1 2715 2716 2717 + 2582 1 2716 2717 2718 + 2583 1 2717 2718 2719 + 2584 1 2718 2719 2720 + 2585 1 2721 2722 2723 + 2586 1 2722 2723 2724 + 2587 1 2723 2724 2725 + 2588 1 2724 2725 2726 + 2589 1 2725 2726 2727 + 2590 1 2726 2727 2728 + 2591 1 2727 2728 2729 + 2592 1 2728 2729 2730 + 2593 1 2729 2730 2731 + 2594 1 2730 2731 2732 + 2595 1 2731 2732 2733 + 2596 1 2732 2733 2734 + 2597 1 2733 2734 2735 + 2598 1 2734 2735 2736 + 2599 1 2735 2736 2737 + 2600 1 2736 2737 2738 + 2601 1 2737 2738 2739 + 2602 1 2738 2739 2740 + 2603 1 2739 2740 2741 + 2604 1 2740 2741 2742 + 2605 1 2741 2742 2743 + 2606 1 2742 2743 2744 + 2607 1 2743 2744 2745 + 2608 1 2744 2745 2746 + 2609 1 2745 2746 2747 + 2610 1 2746 2747 2748 + 2611 1 2747 2748 2749 + 2612 1 2748 2749 2750 + 2613 1 2749 2750 2751 + 2614 1 2750 2751 2752 + 2615 1 2751 2752 2753 + 2616 1 2752 2753 2754 + 2617 1 2753 2754 2755 + 2618 1 2754 2755 2756 + 2619 1 2755 2756 2757 + 2620 1 2756 2757 2758 + 2621 1 2757 2758 2759 + 2622 1 2758 2759 2760 + 2623 1 2761 2762 2763 + 2624 1 2762 2763 2764 + 2625 1 2763 2764 2765 + 2626 1 2764 2765 2766 + 2627 1 2765 2766 2767 + 2628 1 2766 2767 2768 + 2629 1 2767 2768 2769 + 2630 1 2768 2769 2770 + 2631 1 2769 2770 2771 + 2632 1 2770 2771 2772 + 2633 1 2771 2772 2773 + 2634 1 2772 2773 2774 + 2635 1 2773 2774 2775 + 2636 1 2774 2775 2776 + 2637 1 2775 2776 2777 + 2638 1 2776 2777 2778 + 2639 1 2777 2778 2779 + 2640 1 2778 2779 2780 + 2641 1 2779 2780 2781 + 2642 1 2780 2781 2782 + 2643 1 2781 2782 2783 + 2644 1 2782 2783 2784 + 2645 1 2783 2784 2785 + 2646 1 2784 2785 2786 + 2647 1 2785 2786 2787 + 2648 1 2786 2787 2788 + 2649 1 2787 2788 2789 + 2650 1 2788 2789 2790 + 2651 1 2789 2790 2791 + 2652 1 2790 2791 2792 + 2653 1 2791 2792 2793 + 2654 1 2792 2793 2794 + 2655 1 2793 2794 2795 + 2656 1 2794 2795 2796 + 2657 1 2795 2796 2797 + 2658 1 2796 2797 2798 + 2659 1 2797 2798 2799 + 2660 1 2798 2799 2800 + 2661 1 2801 2802 2803 + 2662 1 2802 2803 2804 + 2663 1 2803 2804 2805 + 2664 1 2804 2805 2806 + 2665 1 2805 2806 2807 + 2666 1 2806 2807 2808 + 2667 1 2807 2808 2809 + 2668 1 2808 2809 2810 + 2669 1 2809 2810 2811 + 2670 1 2810 2811 2812 + 2671 1 2811 2812 2813 + 2672 1 2812 2813 2814 + 2673 1 2813 2814 2815 + 2674 1 2814 2815 2816 + 2675 1 2815 2816 2817 + 2676 1 2816 2817 2818 + 2677 1 2817 2818 2819 + 2678 1 2818 2819 2820 + 2679 1 2819 2820 2821 + 2680 1 2820 2821 2822 + 2681 1 2821 2822 2823 + 2682 1 2822 2823 2824 + 2683 1 2823 2824 2825 + 2684 1 2824 2825 2826 + 2685 1 2825 2826 2827 + 2686 1 2826 2827 2828 + 2687 1 2827 2828 2829 + 2688 1 2828 2829 2830 + 2689 1 2829 2830 2831 + 2690 1 2830 2831 2832 + 2691 1 2831 2832 2833 + 2692 1 2832 2833 2834 + 2693 1 2833 2834 2835 + 2694 1 2834 2835 2836 + 2695 1 2835 2836 2837 + 2696 1 2836 2837 2838 + 2697 1 2837 2838 2839 + 2698 1 2838 2839 2840 + 2699 1 2841 2842 2843 + 2700 1 2842 2843 2844 + 2701 1 2843 2844 2845 + 2702 1 2844 2845 2846 + 2703 1 2845 2846 2847 + 2704 1 2846 2847 2848 + 2705 1 2847 2848 2849 + 2706 1 2848 2849 2850 + 2707 1 2849 2850 2851 + 2708 1 2850 2851 2852 + 2709 1 2851 2852 2853 + 2710 1 2852 2853 2854 + 2711 1 2853 2854 2855 + 2712 1 2854 2855 2856 + 2713 1 2855 2856 2857 + 2714 1 2856 2857 2858 + 2715 1 2857 2858 2859 + 2716 1 2858 2859 2860 + 2717 1 2859 2860 2861 + 2718 1 2860 2861 2862 + 2719 1 2861 2862 2863 + 2720 1 2862 2863 2864 + 2721 1 2863 2864 2865 + 2722 1 2864 2865 2866 + 2723 1 2865 2866 2867 + 2724 1 2866 2867 2868 + 2725 1 2867 2868 2869 + 2726 1 2868 2869 2870 + 2727 1 2869 2870 2871 + 2728 1 2870 2871 2872 + 2729 1 2871 2872 2873 + 2730 1 2872 2873 2874 + 2731 1 2873 2874 2875 + 2732 1 2874 2875 2876 + 2733 1 2875 2876 2877 + 2734 1 2876 2877 2878 + 2735 1 2877 2878 2879 + 2736 1 2878 2879 2880 + 2737 1 2881 2882 2883 + 2738 1 2882 2883 2884 + 2739 1 2883 2884 2885 + 2740 1 2884 2885 2886 + 2741 1 2885 2886 2887 + 2742 1 2886 2887 2888 + 2743 1 2887 2888 2889 + 2744 1 2888 2889 2890 + 2745 1 2889 2890 2891 + 2746 1 2890 2891 2892 + 2747 1 2891 2892 2893 + 2748 1 2892 2893 2894 + 2749 1 2893 2894 2895 + 2750 1 2894 2895 2896 + 2751 1 2895 2896 2897 + 2752 1 2896 2897 2898 + 2753 1 2897 2898 2899 + 2754 1 2898 2899 2900 + 2755 1 2899 2900 2901 + 2756 1 2900 2901 2902 + 2757 1 2901 2902 2903 + 2758 1 2902 2903 2904 + 2759 1 2903 2904 2905 + 2760 1 2904 2905 2906 + 2761 1 2905 2906 2907 + 2762 1 2906 2907 2908 + 2763 1 2907 2908 2909 + 2764 1 2908 2909 2910 + 2765 1 2909 2910 2911 + 2766 1 2910 2911 2912 + 2767 1 2911 2912 2913 + 2768 1 2912 2913 2914 + 2769 1 2913 2914 2915 + 2770 1 2914 2915 2916 + 2771 1 2915 2916 2917 + 2772 1 2916 2917 2918 + 2773 1 2917 2918 2919 + 2774 1 2918 2919 2920 + 2775 1 2921 2922 2923 + 2776 1 2922 2923 2924 + 2777 1 2923 2924 2925 + 2778 1 2924 2925 2926 + 2779 1 2925 2926 2927 + 2780 1 2926 2927 2928 + 2781 1 2927 2928 2929 + 2782 1 2928 2929 2930 + 2783 1 2929 2930 2931 + 2784 1 2930 2931 2932 + 2785 1 2931 2932 2933 + 2786 1 2932 2933 2934 + 2787 1 2933 2934 2935 + 2788 1 2934 2935 2936 + 2789 1 2935 2936 2937 + 2790 1 2936 2937 2938 + 2791 1 2937 2938 2939 + 2792 1 2938 2939 2940 + 2793 1 2939 2940 2941 + 2794 1 2940 2941 2942 + 2795 1 2941 2942 2943 + 2796 1 2942 2943 2944 + 2797 1 2943 2944 2945 + 2798 1 2944 2945 2946 + 2799 1 2945 2946 2947 + 2800 1 2946 2947 2948 + 2801 1 2947 2948 2949 + 2802 1 2948 2949 2950 + 2803 1 2949 2950 2951 + 2804 1 2950 2951 2952 + 2805 1 2951 2952 2953 + 2806 1 2952 2953 2954 + 2807 1 2953 2954 2955 + 2808 1 2954 2955 2956 + 2809 1 2955 2956 2957 + 2810 1 2956 2957 2958 + 2811 1 2957 2958 2959 + 2812 1 2958 2959 2960 + 2813 1 2961 2962 2963 + 2814 1 2962 2963 2964 + 2815 1 2963 2964 2965 + 2816 1 2964 2965 2966 + 2817 1 2965 2966 2967 + 2818 1 2966 2967 2968 + 2819 1 2967 2968 2969 + 2820 1 2968 2969 2970 + 2821 1 2969 2970 2971 + 2822 1 2970 2971 2972 + 2823 1 2971 2972 2973 + 2824 1 2972 2973 2974 + 2825 1 2973 2974 2975 + 2826 1 2974 2975 2976 + 2827 1 2975 2976 2977 + 2828 1 2976 2977 2978 + 2829 1 2977 2978 2979 + 2830 1 2978 2979 2980 + 2831 1 2979 2980 2981 + 2832 1 2980 2981 2982 + 2833 1 2981 2982 2983 + 2834 1 2982 2983 2984 + 2835 1 2983 2984 2985 + 2836 1 2984 2985 2986 + 2837 1 2985 2986 2987 + 2838 1 2986 2987 2988 + 2839 1 2987 2988 2989 + 2840 1 2988 2989 2990 + 2841 1 2989 2990 2991 + 2842 1 2990 2991 2992 + 2843 1 2991 2992 2993 + 2844 1 2992 2993 2994 + 2845 1 2993 2994 2995 + 2846 1 2994 2995 2996 + 2847 1 2995 2996 2997 + 2848 1 2996 2997 2998 + 2849 1 2997 2998 2999 + 2850 1 2998 2999 3000 + 2851 1 3001 3002 3003 + 2852 1 3002 3003 3004 + 2853 1 3003 3004 3005 + 2854 1 3004 3005 3006 + 2855 1 3005 3006 3007 + 2856 1 3006 3007 3008 + 2857 1 3007 3008 3009 + 2858 1 3008 3009 3010 + 2859 1 3009 3010 3011 + 2860 1 3010 3011 3012 + 2861 1 3011 3012 3013 + 2862 1 3012 3013 3014 + 2863 1 3013 3014 3015 + 2864 1 3014 3015 3016 + 2865 1 3015 3016 3017 + 2866 1 3016 3017 3018 + 2867 1 3017 3018 3019 + 2868 1 3018 3019 3020 + 2869 1 3019 3020 3021 + 2870 1 3020 3021 3022 + 2871 1 3021 3022 3023 + 2872 1 3022 3023 3024 + 2873 1 3023 3024 3025 + 2874 1 3024 3025 3026 + 2875 1 3025 3026 3027 + 2876 1 3026 3027 3028 + 2877 1 3027 3028 3029 + 2878 1 3028 3029 3030 + 2879 1 3029 3030 3031 + 2880 1 3030 3031 3032 + 2881 1 3031 3032 3033 + 2882 1 3032 3033 3034 + 2883 1 3033 3034 3035 + 2884 1 3034 3035 3036 + 2885 1 3035 3036 3037 + 2886 1 3036 3037 3038 + 2887 1 3037 3038 3039 + 2888 1 3038 3039 3040 + 2889 1 3041 3042 3043 + 2890 1 3042 3043 3044 + 2891 1 3043 3044 3045 + 2892 1 3044 3045 3046 + 2893 1 3045 3046 3047 + 2894 1 3046 3047 3048 + 2895 1 3047 3048 3049 + 2896 1 3048 3049 3050 + 2897 1 3049 3050 3051 + 2898 1 3050 3051 3052 + 2899 1 3051 3052 3053 + 2900 1 3052 3053 3054 + 2901 1 3053 3054 3055 + 2902 1 3054 3055 3056 + 2903 1 3055 3056 3057 + 2904 1 3056 3057 3058 + 2905 1 3057 3058 3059 + 2906 1 3058 3059 3060 + 2907 1 3059 3060 3061 + 2908 1 3060 3061 3062 + 2909 1 3061 3062 3063 + 2910 1 3062 3063 3064 + 2911 1 3063 3064 3065 + 2912 1 3064 3065 3066 + 2913 1 3065 3066 3067 + 2914 1 3066 3067 3068 + 2915 1 3067 3068 3069 + 2916 1 3068 3069 3070 + 2917 1 3069 3070 3071 + 2918 1 3070 3071 3072 + 2919 1 3071 3072 3073 + 2920 1 3072 3073 3074 + 2921 1 3073 3074 3075 + 2922 1 3074 3075 3076 + 2923 1 3075 3076 3077 + 2924 1 3076 3077 3078 + 2925 1 3077 3078 3079 + 2926 1 3078 3079 3080 + 2927 1 3081 3082 3083 + 2928 1 3082 3083 3084 + 2929 1 3083 3084 3085 + 2930 1 3084 3085 3086 + 2931 1 3085 3086 3087 + 2932 1 3086 3087 3088 + 2933 1 3087 3088 3089 + 2934 1 3088 3089 3090 + 2935 1 3089 3090 3091 + 2936 1 3090 3091 3092 + 2937 1 3091 3092 3093 + 2938 1 3092 3093 3094 + 2939 1 3093 3094 3095 + 2940 1 3094 3095 3096 + 2941 1 3095 3096 3097 + 2942 1 3096 3097 3098 + 2943 1 3097 3098 3099 + 2944 1 3098 3099 3100 + 2945 1 3099 3100 3101 + 2946 1 3100 3101 3102 + 2947 1 3101 3102 3103 + 2948 1 3102 3103 3104 + 2949 1 3103 3104 3105 + 2950 1 3104 3105 3106 + 2951 1 3105 3106 3107 + 2952 1 3106 3107 3108 + 2953 1 3107 3108 3109 + 2954 1 3108 3109 3110 + 2955 1 3109 3110 3111 + 2956 1 3110 3111 3112 + 2957 1 3111 3112 3113 + 2958 1 3112 3113 3114 + 2959 1 3113 3114 3115 + 2960 1 3114 3115 3116 + 2961 1 3115 3116 3117 + 2962 1 3116 3117 3118 + 2963 1 3117 3118 3119 + 2964 1 3118 3119 3120 + 2965 1 3121 3122 3123 + 2966 1 3122 3123 3124 + 2967 1 3123 3124 3125 + 2968 1 3124 3125 3126 + 2969 1 3125 3126 3127 + 2970 1 3126 3127 3128 + 2971 1 3127 3128 3129 + 2972 1 3128 3129 3130 + 2973 1 3129 3130 3131 + 2974 1 3130 3131 3132 + 2975 1 3131 3132 3133 + 2976 1 3132 3133 3134 + 2977 1 3133 3134 3135 + 2978 1 3134 3135 3136 + 2979 1 3135 3136 3137 + 2980 1 3136 3137 3138 + 2981 1 3137 3138 3139 + 2982 1 3138 3139 3140 + 2983 1 3139 3140 3141 + 2984 1 3140 3141 3142 + 2985 1 3141 3142 3143 + 2986 1 3142 3143 3144 + 2987 1 3143 3144 3145 + 2988 1 3144 3145 3146 + 2989 1 3145 3146 3147 + 2990 1 3146 3147 3148 + 2991 1 3147 3148 3149 + 2992 1 3148 3149 3150 + 2993 1 3149 3150 3151 + 2994 1 3150 3151 3152 + 2995 1 3151 3152 3153 + 2996 1 3152 3153 3154 + 2997 1 3153 3154 3155 + 2998 1 3154 3155 3156 + 2999 1 3155 3156 3157 + 3000 1 3156 3157 3158 + 3001 1 3157 3158 3159 + 3002 1 3158 3159 3160 + 3003 1 3161 3162 3163 + 3004 1 3162 3163 3164 + 3005 1 3163 3164 3165 + 3006 1 3164 3165 3166 + 3007 1 3165 3166 3167 + 3008 1 3166 3167 3168 + 3009 1 3167 3168 3169 + 3010 1 3168 3169 3170 + 3011 1 3169 3170 3171 + 3012 1 3170 3171 3172 + 3013 1 3171 3172 3173 + 3014 1 3172 3173 3174 + 3015 1 3173 3174 3175 + 3016 1 3174 3175 3176 + 3017 1 3175 3176 3177 + 3018 1 3176 3177 3178 + 3019 1 3177 3178 3179 + 3020 1 3178 3179 3180 + 3021 1 3179 3180 3181 + 3022 1 3180 3181 3182 + 3023 1 3181 3182 3183 + 3024 1 3182 3183 3184 + 3025 1 3183 3184 3185 + 3026 1 3184 3185 3186 + 3027 1 3185 3186 3187 + 3028 1 3186 3187 3188 + 3029 1 3187 3188 3189 + 3030 1 3188 3189 3190 + 3031 1 3189 3190 3191 + 3032 1 3190 3191 3192 + 3033 1 3191 3192 3193 + 3034 1 3192 3193 3194 + 3035 1 3193 3194 3195 + 3036 1 3194 3195 3196 + 3037 1 3195 3196 3197 + 3038 1 3196 3197 3198 + 3039 1 3197 3198 3199 + 3040 1 3198 3199 3200 + 3041 1 3201 3202 3203 + 3042 1 3202 3203 3204 + 3043 1 3203 3204 3205 + 3044 1 3204 3205 3206 + 3045 1 3205 3206 3207 + 3046 1 3206 3207 3208 + 3047 1 3207 3208 3209 + 3048 1 3208 3209 3210 + 3049 1 3209 3210 3211 + 3050 1 3210 3211 3212 + 3051 1 3211 3212 3213 + 3052 1 3212 3213 3214 + 3053 1 3213 3214 3215 + 3054 1 3214 3215 3216 + 3055 1 3215 3216 3217 + 3056 1 3216 3217 3218 + 3057 1 3217 3218 3219 + 3058 1 3218 3219 3220 + 3059 1 3219 3220 3221 + 3060 1 3220 3221 3222 + 3061 1 3221 3222 3223 + 3062 1 3222 3223 3224 + 3063 1 3223 3224 3225 + 3064 1 3224 3225 3226 + 3065 1 3225 3226 3227 + 3066 1 3226 3227 3228 + 3067 1 3227 3228 3229 + 3068 1 3228 3229 3230 + 3069 1 3229 3230 3231 + 3070 1 3230 3231 3232 + 3071 1 3231 3232 3233 + 3072 1 3232 3233 3234 + 3073 1 3233 3234 3235 + 3074 1 3234 3235 3236 + 3075 1 3235 3236 3237 + 3076 1 3236 3237 3238 + 3077 1 3237 3238 3239 + 3078 1 3238 3239 3240 + 3079 1 3241 3242 3243 + 3080 1 3242 3243 3244 + 3081 1 3243 3244 3245 + 3082 1 3244 3245 3246 + 3083 1 3245 3246 3247 + 3084 1 3246 3247 3248 + 3085 1 3247 3248 3249 + 3086 1 3248 3249 3250 + 3087 1 3249 3250 3251 + 3088 1 3250 3251 3252 + 3089 1 3251 3252 3253 + 3090 1 3252 3253 3254 + 3091 1 3253 3254 3255 + 3092 1 3254 3255 3256 + 3093 1 3255 3256 3257 + 3094 1 3256 3257 3258 + 3095 1 3257 3258 3259 + 3096 1 3258 3259 3260 + 3097 1 3259 3260 3261 + 3098 1 3260 3261 3262 + 3099 1 3261 3262 3263 + 3100 1 3262 3263 3264 + 3101 1 3263 3264 3265 + 3102 1 3264 3265 3266 + 3103 1 3265 3266 3267 + 3104 1 3266 3267 3268 + 3105 1 3267 3268 3269 + 3106 1 3268 3269 3270 + 3107 1 3269 3270 3271 + 3108 1 3270 3271 3272 + 3109 1 3271 3272 3273 + 3110 1 3272 3273 3274 + 3111 1 3273 3274 3275 + 3112 1 3274 3275 3276 + 3113 1 3275 3276 3277 + 3114 1 3276 3277 3278 + 3115 1 3277 3278 3279 + 3116 1 3278 3279 3280 + 3117 1 3281 3282 3283 + 3118 1 3282 3283 3284 + 3119 1 3283 3284 3285 + 3120 1 3284 3285 3286 + 3121 1 3285 3286 3287 + 3122 1 3286 3287 3288 + 3123 1 3287 3288 3289 + 3124 1 3288 3289 3290 + 3125 1 3289 3290 3291 + 3126 1 3290 3291 3292 + 3127 1 3291 3292 3293 + 3128 1 3292 3293 3294 + 3129 1 3293 3294 3295 + 3130 1 3294 3295 3296 + 3131 1 3295 3296 3297 + 3132 1 3296 3297 3298 + 3133 1 3297 3298 3299 + 3134 1 3298 3299 3300 + 3135 1 3299 3300 3301 + 3136 1 3300 3301 3302 + 3137 1 3301 3302 3303 + 3138 1 3302 3303 3304 + 3139 1 3303 3304 3305 + 3140 1 3304 3305 3306 + 3141 1 3305 3306 3307 + 3142 1 3306 3307 3308 + 3143 1 3307 3308 3309 + 3144 1 3308 3309 3310 + 3145 1 3309 3310 3311 + 3146 1 3310 3311 3312 + 3147 1 3311 3312 3313 + 3148 1 3312 3313 3314 + 3149 1 3313 3314 3315 + 3150 1 3314 3315 3316 + 3151 1 3315 3316 3317 + 3152 1 3316 3317 3318 + 3153 1 3317 3318 3319 + 3154 1 3318 3319 3320 + 3155 1 3321 3322 3323 + 3156 1 3322 3323 3324 + 3157 1 3323 3324 3325 + 3158 1 3324 3325 3326 + 3159 1 3325 3326 3327 + 3160 1 3326 3327 3328 + 3161 1 3327 3328 3329 + 3162 1 3328 3329 3330 + 3163 1 3329 3330 3331 + 3164 1 3330 3331 3332 + 3165 1 3331 3332 3333 + 3166 1 3332 3333 3334 + 3167 1 3333 3334 3335 + 3168 1 3334 3335 3336 + 3169 1 3335 3336 3337 + 3170 1 3336 3337 3338 + 3171 1 3337 3338 3339 + 3172 1 3338 3339 3340 + 3173 1 3339 3340 3341 + 3174 1 3340 3341 3342 + 3175 1 3341 3342 3343 + 3176 1 3342 3343 3344 + 3177 1 3343 3344 3345 + 3178 1 3344 3345 3346 + 3179 1 3345 3346 3347 + 3180 1 3346 3347 3348 + 3181 1 3347 3348 3349 + 3182 1 3348 3349 3350 + 3183 1 3349 3350 3351 + 3184 1 3350 3351 3352 + 3185 1 3351 3352 3353 + 3186 1 3352 3353 3354 + 3187 1 3353 3354 3355 + 3188 1 3354 3355 3356 + 3189 1 3355 3356 3357 + 3190 1 3356 3357 3358 + 3191 1 3357 3358 3359 + 3192 1 3358 3359 3360 + 3193 1 3361 3362 3363 + 3194 1 3362 3363 3364 + 3195 1 3363 3364 3365 + 3196 1 3364 3365 3366 + 3197 1 3365 3366 3367 + 3198 1 3366 3367 3368 + 3199 1 3367 3368 3369 + 3200 1 3368 3369 3370 + 3201 1 3369 3370 3371 + 3202 1 3370 3371 3372 + 3203 1 3371 3372 3373 + 3204 1 3372 3373 3374 + 3205 1 3373 3374 3375 + 3206 1 3374 3375 3376 + 3207 1 3375 3376 3377 + 3208 1 3376 3377 3378 + 3209 1 3377 3378 3379 + 3210 1 3378 3379 3380 + 3211 1 3379 3380 3381 + 3212 1 3380 3381 3382 + 3213 1 3381 3382 3383 + 3214 1 3382 3383 3384 + 3215 1 3383 3384 3385 + 3216 1 3384 3385 3386 + 3217 1 3385 3386 3387 + 3218 1 3386 3387 3388 + 3219 1 3387 3388 3389 + 3220 1 3388 3389 3390 + 3221 1 3389 3390 3391 + 3222 1 3390 3391 3392 + 3223 1 3391 3392 3393 + 3224 1 3392 3393 3394 + 3225 1 3393 3394 3395 + 3226 1 3394 3395 3396 + 3227 1 3395 3396 3397 + 3228 1 3396 3397 3398 + 3229 1 3397 3398 3399 + 3230 1 3398 3399 3400 + 3231 1 3401 3402 3403 + 3232 1 3402 3403 3404 + 3233 1 3403 3404 3405 + 3234 1 3404 3405 3406 + 3235 1 3405 3406 3407 + 3236 1 3406 3407 3408 + 3237 1 3407 3408 3409 + 3238 1 3408 3409 3410 + 3239 1 3409 3410 3411 + 3240 1 3410 3411 3412 + 3241 1 3411 3412 3413 + 3242 1 3412 3413 3414 + 3243 1 3413 3414 3415 + 3244 1 3414 3415 3416 + 3245 1 3415 3416 3417 + 3246 1 3416 3417 3418 + 3247 1 3417 3418 3419 + 3248 1 3418 3419 3420 + 3249 1 3419 3420 3421 + 3250 1 3420 3421 3422 + 3251 1 3421 3422 3423 + 3252 1 3422 3423 3424 + 3253 1 3423 3424 3425 + 3254 1 3424 3425 3426 + 3255 1 3425 3426 3427 + 3256 1 3426 3427 3428 + 3257 1 3427 3428 3429 + 3258 1 3428 3429 3430 + 3259 1 3429 3430 3431 + 3260 1 3430 3431 3432 + 3261 1 3431 3432 3433 + 3262 1 3432 3433 3434 + 3263 1 3433 3434 3435 + 3264 1 3434 3435 3436 + 3265 1 3435 3436 3437 + 3266 1 3436 3437 3438 + 3267 1 3437 3438 3439 + 3268 1 3438 3439 3440 + 3269 1 3441 3442 3443 + 3270 1 3442 3443 3444 + 3271 1 3443 3444 3445 + 3272 1 3444 3445 3446 + 3273 1 3445 3446 3447 + 3274 1 3446 3447 3448 + 3275 1 3447 3448 3449 + 3276 1 3448 3449 3450 + 3277 1 3449 3450 3451 + 3278 1 3450 3451 3452 + 3279 1 3451 3452 3453 + 3280 1 3452 3453 3454 + 3281 1 3453 3454 3455 + 3282 1 3454 3455 3456 + 3283 1 3455 3456 3457 + 3284 1 3456 3457 3458 + 3285 1 3457 3458 3459 + 3286 1 3458 3459 3460 + 3287 1 3459 3460 3461 + 3288 1 3460 3461 3462 + 3289 1 3461 3462 3463 + 3290 1 3462 3463 3464 + 3291 1 3463 3464 3465 + 3292 1 3464 3465 3466 + 3293 1 3465 3466 3467 + 3294 1 3466 3467 3468 + 3295 1 3467 3468 3469 + 3296 1 3468 3469 3470 + 3297 1 3469 3470 3471 + 3298 1 3470 3471 3472 + 3299 1 3471 3472 3473 + 3300 1 3472 3473 3474 + 3301 1 3473 3474 3475 + 3302 1 3474 3475 3476 + 3303 1 3475 3476 3477 + 3304 1 3476 3477 3478 + 3305 1 3477 3478 3479 + 3306 1 3478 3479 3480 + 3307 1 3481 3482 3483 + 3308 1 3482 3483 3484 + 3309 1 3483 3484 3485 + 3310 1 3484 3485 3486 + 3311 1 3485 3486 3487 + 3312 1 3486 3487 3488 + 3313 1 3487 3488 3489 + 3314 1 3488 3489 3490 + 3315 1 3489 3490 3491 + 3316 1 3490 3491 3492 + 3317 1 3491 3492 3493 + 3318 1 3492 3493 3494 + 3319 1 3493 3494 3495 + 3320 1 3494 3495 3496 + 3321 1 3495 3496 3497 + 3322 1 3496 3497 3498 + 3323 1 3497 3498 3499 + 3324 1 3498 3499 3500 + 3325 1 3499 3500 3501 + 3326 1 3500 3501 3502 + 3327 1 3501 3502 3503 + 3328 1 3502 3503 3504 + 3329 1 3503 3504 3505 + 3330 1 3504 3505 3506 + 3331 1 3505 3506 3507 + 3332 1 3506 3507 3508 + 3333 1 3507 3508 3509 + 3334 1 3508 3509 3510 + 3335 1 3509 3510 3511 + 3336 1 3510 3511 3512 + 3337 1 3511 3512 3513 + 3338 1 3512 3513 3514 + 3339 1 3513 3514 3515 + 3340 1 3514 3515 3516 + 3341 1 3515 3516 3517 + 3342 1 3516 3517 3518 + 3343 1 3517 3518 3519 + 3344 1 3518 3519 3520 + 3345 1 3521 3522 3523 + 3346 1 3522 3523 3524 + 3347 1 3523 3524 3525 + 3348 1 3524 3525 3526 + 3349 1 3525 3526 3527 + 3350 1 3526 3527 3528 + 3351 1 3527 3528 3529 + 3352 1 3528 3529 3530 + 3353 1 3529 3530 3531 + 3354 1 3530 3531 3532 + 3355 1 3531 3532 3533 + 3356 1 3532 3533 3534 + 3357 1 3533 3534 3535 + 3358 1 3534 3535 3536 + 3359 1 3535 3536 3537 + 3360 1 3536 3537 3538 + 3361 1 3537 3538 3539 + 3362 1 3538 3539 3540 + 3363 1 3539 3540 3541 + 3364 1 3540 3541 3542 + 3365 1 3541 3542 3543 + 3366 1 3542 3543 3544 + 3367 1 3543 3544 3545 + 3368 1 3544 3545 3546 + 3369 1 3545 3546 3547 + 3370 1 3546 3547 3548 + 3371 1 3547 3548 3549 + 3372 1 3548 3549 3550 + 3373 1 3549 3550 3551 + 3374 1 3550 3551 3552 + 3375 1 3551 3552 3553 + 3376 1 3552 3553 3554 + 3377 1 3553 3554 3555 + 3378 1 3554 3555 3556 + 3379 1 3555 3556 3557 + 3380 1 3556 3557 3558 + 3381 1 3557 3558 3559 + 3382 1 3558 3559 3560 + 3383 1 3561 3562 3563 + 3384 1 3562 3563 3564 + 3385 1 3563 3564 3565 + 3386 1 3564 3565 3566 + 3387 1 3565 3566 3567 + 3388 1 3566 3567 3568 + 3389 1 3567 3568 3569 + 3390 1 3568 3569 3570 + 3391 1 3569 3570 3571 + 3392 1 3570 3571 3572 + 3393 1 3571 3572 3573 + 3394 1 3572 3573 3574 + 3395 1 3573 3574 3575 + 3396 1 3574 3575 3576 + 3397 1 3575 3576 3577 + 3398 1 3576 3577 3578 + 3399 1 3577 3578 3579 + 3400 1 3578 3579 3580 + 3401 1 3579 3580 3581 + 3402 1 3580 3581 3582 + 3403 1 3581 3582 3583 + 3404 1 3582 3583 3584 + 3405 1 3583 3584 3585 + 3406 1 3584 3585 3586 + 3407 1 3585 3586 3587 + 3408 1 3586 3587 3588 + 3409 1 3587 3588 3589 + 3410 1 3588 3589 3590 + 3411 1 3589 3590 3591 + 3412 1 3590 3591 3592 + 3413 1 3591 3592 3593 + 3414 1 3592 3593 3594 + 3415 1 3593 3594 3595 + 3416 1 3594 3595 3596 + 3417 1 3595 3596 3597 + 3418 1 3596 3597 3598 + 3419 1 3597 3598 3599 + 3420 1 3598 3599 3600 + 3421 1 3601 3602 3603 + 3422 1 3602 3603 3604 + 3423 1 3603 3604 3605 + 3424 1 3604 3605 3606 + 3425 1 3605 3606 3607 + 3426 1 3606 3607 3608 + 3427 1 3607 3608 3609 + 3428 1 3608 3609 3610 + 3429 1 3609 3610 3611 + 3430 1 3610 3611 3612 + 3431 1 3611 3612 3613 + 3432 1 3612 3613 3614 + 3433 1 3613 3614 3615 + 3434 1 3614 3615 3616 + 3435 1 3615 3616 3617 + 3436 1 3616 3617 3618 + 3437 1 3617 3618 3619 + 3438 1 3618 3619 3620 + 3439 1 3619 3620 3621 + 3440 1 3620 3621 3622 + 3441 1 3621 3622 3623 + 3442 1 3622 3623 3624 + 3443 1 3623 3624 3625 + 3444 1 3624 3625 3626 + 3445 1 3625 3626 3627 + 3446 1 3626 3627 3628 + 3447 1 3627 3628 3629 + 3448 1 3628 3629 3630 + 3449 1 3629 3630 3631 + 3450 1 3630 3631 3632 + 3451 1 3631 3632 3633 + 3452 1 3632 3633 3634 + 3453 1 3633 3634 3635 + 3454 1 3634 3635 3636 + 3455 1 3635 3636 3637 + 3456 1 3636 3637 3638 + 3457 1 3637 3638 3639 + 3458 1 3638 3639 3640 + 3459 1 3641 3642 3643 + 3460 1 3642 3643 3644 + 3461 1 3643 3644 3645 + 3462 1 3644 3645 3646 + 3463 1 3645 3646 3647 + 3464 1 3646 3647 3648 + 3465 1 3647 3648 3649 + 3466 1 3648 3649 3650 + 3467 1 3649 3650 3651 + 3468 1 3650 3651 3652 + 3469 1 3651 3652 3653 + 3470 1 3652 3653 3654 + 3471 1 3653 3654 3655 + 3472 1 3654 3655 3656 + 3473 1 3655 3656 3657 + 3474 1 3656 3657 3658 + 3475 1 3657 3658 3659 + 3476 1 3658 3659 3660 + 3477 1 3659 3660 3661 + 3478 1 3660 3661 3662 + 3479 1 3661 3662 3663 + 3480 1 3662 3663 3664 + 3481 1 3663 3664 3665 + 3482 1 3664 3665 3666 + 3483 1 3665 3666 3667 + 3484 1 3666 3667 3668 + 3485 1 3667 3668 3669 + 3486 1 3668 3669 3670 + 3487 1 3669 3670 3671 + 3488 1 3670 3671 3672 + 3489 1 3671 3672 3673 + 3490 1 3672 3673 3674 + 3491 1 3673 3674 3675 + 3492 1 3674 3675 3676 + 3493 1 3675 3676 3677 + 3494 1 3676 3677 3678 + 3495 1 3677 3678 3679 + 3496 1 3678 3679 3680 + 3497 1 3681 3682 3683 + 3498 1 3682 3683 3684 + 3499 1 3683 3684 3685 + 3500 1 3684 3685 3686 + 3501 1 3685 3686 3687 + 3502 1 3686 3687 3688 + 3503 1 3687 3688 3689 + 3504 1 3688 3689 3690 + 3505 1 3689 3690 3691 + 3506 1 3690 3691 3692 + 3507 1 3691 3692 3693 + 3508 1 3692 3693 3694 + 3509 1 3693 3694 3695 + 3510 1 3694 3695 3696 + 3511 1 3695 3696 3697 + 3512 1 3696 3697 3698 + 3513 1 3697 3698 3699 + 3514 1 3698 3699 3700 + 3515 1 3699 3700 3701 + 3516 1 3700 3701 3702 + 3517 1 3701 3702 3703 + 3518 1 3702 3703 3704 + 3519 1 3703 3704 3705 + 3520 1 3704 3705 3706 + 3521 1 3705 3706 3707 + 3522 1 3706 3707 3708 + 3523 1 3707 3708 3709 + 3524 1 3708 3709 3710 + 3525 1 3709 3710 3711 + 3526 1 3710 3711 3712 + 3527 1 3711 3712 3713 + 3528 1 3712 3713 3714 + 3529 1 3713 3714 3715 + 3530 1 3714 3715 3716 + 3531 1 3715 3716 3717 + 3532 1 3716 3717 3718 + 3533 1 3717 3718 3719 + 3534 1 3718 3719 3720 + 3535 1 3721 3722 3723 + 3536 1 3722 3723 3724 + 3537 1 3723 3724 3725 + 3538 1 3724 3725 3726 + 3539 1 3725 3726 3727 + 3540 1 3726 3727 3728 + 3541 1 3727 3728 3729 + 3542 1 3728 3729 3730 + 3543 1 3729 3730 3731 + 3544 1 3730 3731 3732 + 3545 1 3731 3732 3733 + 3546 1 3732 3733 3734 + 3547 1 3733 3734 3735 + 3548 1 3734 3735 3736 + 3549 1 3735 3736 3737 + 3550 1 3736 3737 3738 + 3551 1 3737 3738 3739 + 3552 1 3738 3739 3740 + 3553 1 3739 3740 3741 + 3554 1 3740 3741 3742 + 3555 1 3741 3742 3743 + 3556 1 3742 3743 3744 + 3557 1 3743 3744 3745 + 3558 1 3744 3745 3746 + 3559 1 3745 3746 3747 + 3560 1 3746 3747 3748 + 3561 1 3747 3748 3749 + 3562 1 3748 3749 3750 + 3563 1 3749 3750 3751 + 3564 1 3750 3751 3752 + 3565 1 3751 3752 3753 + 3566 1 3752 3753 3754 + 3567 1 3753 3754 3755 + 3568 1 3754 3755 3756 + 3569 1 3755 3756 3757 + 3570 1 3756 3757 3758 + 3571 1 3757 3758 3759 + 3572 1 3758 3759 3760 + 3573 1 3761 3762 3763 + 3574 1 3762 3763 3764 + 3575 1 3763 3764 3765 + 3576 1 3764 3765 3766 + 3577 1 3765 3766 3767 + 3578 1 3766 3767 3768 + 3579 1 3767 3768 3769 + 3580 1 3768 3769 3770 + 3581 1 3769 3770 3771 + 3582 1 3770 3771 3772 + 3583 1 3771 3772 3773 + 3584 1 3772 3773 3774 + 3585 1 3773 3774 3775 + 3586 1 3774 3775 3776 + 3587 1 3775 3776 3777 + 3588 1 3776 3777 3778 + 3589 1 3777 3778 3779 + 3590 1 3778 3779 3780 + 3591 1 3779 3780 3781 + 3592 1 3780 3781 3782 + 3593 1 3781 3782 3783 + 3594 1 3782 3783 3784 + 3595 1 3783 3784 3785 + 3596 1 3784 3785 3786 + 3597 1 3785 3786 3787 + 3598 1 3786 3787 3788 + 3599 1 3787 3788 3789 + 3600 1 3788 3789 3790 + 3601 1 3789 3790 3791 + 3602 1 3790 3791 3792 + 3603 1 3791 3792 3793 + 3604 1 3792 3793 3794 + 3605 1 3793 3794 3795 + 3606 1 3794 3795 3796 + 3607 1 3795 3796 3797 + 3608 1 3796 3797 3798 + 3609 1 3797 3798 3799 + 3610 1 3798 3799 3800 + 3611 1 3801 3802 3803 + 3612 1 3802 3803 3804 + 3613 1 3803 3804 3805 + 3614 1 3804 3805 3806 + 3615 1 3805 3806 3807 + 3616 1 3806 3807 3808 + 3617 1 3807 3808 3809 + 3618 1 3808 3809 3810 + 3619 1 3809 3810 3811 + 3620 1 3810 3811 3812 + 3621 1 3811 3812 3813 + 3622 1 3812 3813 3814 + 3623 1 3813 3814 3815 + 3624 1 3814 3815 3816 + 3625 1 3815 3816 3817 + 3626 1 3816 3817 3818 + 3627 1 3817 3818 3819 + 3628 1 3818 3819 3820 + 3629 1 3819 3820 3821 + 3630 1 3820 3821 3822 + 3631 1 3821 3822 3823 + 3632 1 3822 3823 3824 + 3633 1 3823 3824 3825 + 3634 1 3824 3825 3826 + 3635 1 3825 3826 3827 + 3636 1 3826 3827 3828 + 3637 1 3827 3828 3829 + 3638 1 3828 3829 3830 + 3639 1 3829 3830 3831 + 3640 1 3830 3831 3832 + 3641 1 3831 3832 3833 + 3642 1 3832 3833 3834 + 3643 1 3833 3834 3835 + 3644 1 3834 3835 3836 + 3645 1 3835 3836 3837 + 3646 1 3836 3837 3838 + 3647 1 3837 3838 3839 + 3648 1 3838 3839 3840 + 3649 1 3841 3842 3843 + 3650 1 3842 3843 3844 + 3651 1 3843 3844 3845 + 3652 1 3844 3845 3846 + 3653 1 3845 3846 3847 + 3654 1 3846 3847 3848 + 3655 1 3847 3848 3849 + 3656 1 3848 3849 3850 + 3657 1 3849 3850 3851 + 3658 1 3850 3851 3852 + 3659 1 3851 3852 3853 + 3660 1 3852 3853 3854 + 3661 1 3853 3854 3855 + 3662 1 3854 3855 3856 + 3663 1 3855 3856 3857 + 3664 1 3856 3857 3858 + 3665 1 3857 3858 3859 + 3666 1 3858 3859 3860 + 3667 1 3859 3860 3861 + 3668 1 3860 3861 3862 + 3669 1 3861 3862 3863 + 3670 1 3862 3863 3864 + 3671 1 3863 3864 3865 + 3672 1 3864 3865 3866 + 3673 1 3865 3866 3867 + 3674 1 3866 3867 3868 + 3675 1 3867 3868 3869 + 3676 1 3868 3869 3870 + 3677 1 3869 3870 3871 + 3678 1 3870 3871 3872 + 3679 1 3871 3872 3873 + 3680 1 3872 3873 3874 + 3681 1 3873 3874 3875 + 3682 1 3874 3875 3876 + 3683 1 3875 3876 3877 + 3684 1 3876 3877 3878 + 3685 1 3877 3878 3879 + 3686 1 3878 3879 3880 + 3687 1 3881 3882 3883 + 3688 1 3882 3883 3884 + 3689 1 3883 3884 3885 + 3690 1 3884 3885 3886 + 3691 1 3885 3886 3887 + 3692 1 3886 3887 3888 + 3693 1 3887 3888 3889 + 3694 1 3888 3889 3890 + 3695 1 3889 3890 3891 + 3696 1 3890 3891 3892 + 3697 1 3891 3892 3893 + 3698 1 3892 3893 3894 + 3699 1 3893 3894 3895 + 3700 1 3894 3895 3896 + 3701 1 3895 3896 3897 + 3702 1 3896 3897 3898 + 3703 1 3897 3898 3899 + 3704 1 3898 3899 3900 + 3705 1 3899 3900 3901 + 3706 1 3900 3901 3902 + 3707 1 3901 3902 3903 + 3708 1 3902 3903 3904 + 3709 1 3903 3904 3905 + 3710 1 3904 3905 3906 + 3711 1 3905 3906 3907 + 3712 1 3906 3907 3908 + 3713 1 3907 3908 3909 + 3714 1 3908 3909 3910 + 3715 1 3909 3910 3911 + 3716 1 3910 3911 3912 + 3717 1 3911 3912 3913 + 3718 1 3912 3913 3914 + 3719 1 3913 3914 3915 + 3720 1 3914 3915 3916 + 3721 1 3915 3916 3917 + 3722 1 3916 3917 3918 + 3723 1 3917 3918 3919 + 3724 1 3918 3919 3920 + 3725 1 3921 3922 3923 + 3726 1 3922 3923 3924 + 3727 1 3923 3924 3925 + 3728 1 3924 3925 3926 + 3729 1 3925 3926 3927 + 3730 1 3926 3927 3928 + 3731 1 3927 3928 3929 + 3732 1 3928 3929 3930 + 3733 1 3929 3930 3931 + 3734 1 3930 3931 3932 + 3735 1 3931 3932 3933 + 3736 1 3932 3933 3934 + 3737 1 3933 3934 3935 + 3738 1 3934 3935 3936 + 3739 1 3935 3936 3937 + 3740 1 3936 3937 3938 + 3741 1 3937 3938 3939 + 3742 1 3938 3939 3940 + 3743 1 3939 3940 3941 + 3744 1 3940 3941 3942 + 3745 1 3941 3942 3943 + 3746 1 3942 3943 3944 + 3747 1 3943 3944 3945 + 3748 1 3944 3945 3946 + 3749 1 3945 3946 3947 + 3750 1 3946 3947 3948 + 3751 1 3947 3948 3949 + 3752 1 3948 3949 3950 + 3753 1 3949 3950 3951 + 3754 1 3950 3951 3952 + 3755 1 3951 3952 3953 + 3756 1 3952 3953 3954 + 3757 1 3953 3954 3955 + 3758 1 3954 3955 3956 + 3759 1 3955 3956 3957 + 3760 1 3956 3957 3958 + 3761 1 3957 3958 3959 + 3762 1 3958 3959 3960 + 3763 1 3961 3962 3963 + 3764 1 3962 3963 3964 + 3765 1 3963 3964 3965 + 3766 1 3964 3965 3966 + 3767 1 3965 3966 3967 + 3768 1 3966 3967 3968 + 3769 1 3967 3968 3969 + 3770 1 3968 3969 3970 + 3771 1 3969 3970 3971 + 3772 1 3970 3971 3972 + 3773 1 3971 3972 3973 + 3774 1 3972 3973 3974 + 3775 1 3973 3974 3975 + 3776 1 3974 3975 3976 + 3777 1 3975 3976 3977 + 3778 1 3976 3977 3978 + 3779 1 3977 3978 3979 + 3780 1 3978 3979 3980 + 3781 1 3979 3980 3981 + 3782 1 3980 3981 3982 + 3783 1 3981 3982 3983 + 3784 1 3982 3983 3984 + 3785 1 3983 3984 3985 + 3786 1 3984 3985 3986 + 3787 1 3985 3986 3987 + 3788 1 3986 3987 3988 + 3789 1 3987 3988 3989 + 3790 1 3988 3989 3990 + 3791 1 3989 3990 3991 + 3792 1 3990 3991 3992 + 3793 1 3991 3992 3993 + 3794 1 3992 3993 3994 + 3795 1 3993 3994 3995 + 3796 1 3994 3995 3996 + 3797 1 3995 3996 3997 + 3798 1 3996 3997 3998 + 3799 1 3997 3998 3999 + 3800 1 3998 3999 4000 diff --git a/examples/gcmc/data.spce b/examples/mc/data.spce similarity index 100% rename from examples/gcmc/data.spce rename to examples/mc/data.spce diff --git a/examples/gcmc/data.widom.lj b/examples/mc/data.widom.lj similarity index 100% rename from examples/gcmc/data.widom.lj rename to examples/mc/data.widom.lj diff --git a/examples/gcmc/in.gcmc.co2 b/examples/mc/in.gcmc.co2 similarity index 100% rename from examples/gcmc/in.gcmc.co2 rename to examples/mc/in.gcmc.co2 diff --git a/examples/gcmc/in.gcmc.h2o b/examples/mc/in.gcmc.h2o similarity index 100% rename from examples/gcmc/in.gcmc.h2o rename to examples/mc/in.gcmc.h2o diff --git a/examples/gcmc/in.gcmc.lj b/examples/mc/in.gcmc.lj similarity index 100% rename from examples/gcmc/in.gcmc.lj rename to examples/mc/in.gcmc.lj diff --git a/examples/mc/in.mixed b/examples/mc/in.mixed new file mode 100755 index 0000000000..ddf42d4ca4 --- /dev/null +++ b/examples/mc/in.mixed @@ -0,0 +1,44 @@ +# test script for fix mol/swap +# initial system is 50/50 chains of type 1 and type 2 +# b/c epsilon12 is set to 1.02 (weakly same as 1/1 or 1/2) the +# system will stay in equilibrium as a mix of both chain types +# fix mol/swap helps this happen quickly +# see the last 2 columns of thermo output for counts of 2 chain types + +units lj +atom_style angle +neighbor 0.36 bin +neigh_modify delay 0 + +pair_style lj/cut 1.1224620483 +bond_style fene +angle_style cosine +special_bonds lj 0.0 1.0 1.0 + +read_data data.bead + +pair_coeff * * 1.0 1.0 1.1224620483 +pair_coeff 1 2 1.02 1.0 1.1224620483 +bond_coeff 1 30.0 1.5 1.0 1.0 +angle_coeff 1 1.500 +pair_modify shift yes + +variable vt1 atom type==1 +variable vt2 atom type==2 +group g1 dynamic all var vt1 every 100 +group g2 dynamic all var vt2 every 100 +variable count1 equal count(g1) +variable count2 equal count(g2) + +timestep 0.010 + +fix 1 all langevin 1.0 1.0 100.0 702547 +fix 2 all nve +fix 3 all mol/swap 100 1 1 2 482794 1.0 + +compute p all pressure thermo_temp +thermo 1000 +thermo_style custom step temp etotal press f_3[1] f_3[2] v_count1 v_count2 + +run 50000 + diff --git a/examples/mc/in.pure b/examples/mc/in.pure new file mode 100755 index 0000000000..a3796c979f --- /dev/null +++ b/examples/mc/in.pure @@ -0,0 +1,44 @@ +# test script for fix mol/swap +# initial system is 50/50 chains of type 1 and type 2 +# b/c epsilon12 is set to 1.1 (stronger than 1/1 or 2/2) the +# system will go to equilibrium as mostly one type or the other +# fix mol/swap helps this happen quickly +# see the last 2 columns of thermo output for counts of 2 chain types + +units lj +atom_style angle +neighbor 0.36 bin +neigh_modify delay 0 + +pair_style lj/cut 1.1224620483 +bond_style fene +angle_style cosine +special_bonds lj 0.0 1.0 1.0 + +read_data data.bead + +pair_coeff * * 1.0 1.0 1.1224620483 +pair_coeff 1 2 1.1 1.0 1.1224620483 +bond_coeff 1 30.0 1.5 1.0 1.0 +angle_coeff 1 1.500 +pair_modify shift yes + +variable vt1 atom type==1 +variable vt2 atom type==2 +group g1 dynamic all var vt1 every 100 +group g2 dynamic all var vt2 every 100 +variable count1 equal count(g1) +variable count2 equal count(g2) + +timestep 0.010 + +fix 1 all langevin 1.0 1.0 100.0 702547 +fix 2 all nve +fix 3 all mol/swap 100 1 1 2 482794 1.0 + +compute p all pressure thermo_temp +thermo 1000 +thermo_style custom step temp etotal press f_3[1] f_3[2] v_count1 v_count2 + +run 50000 + diff --git a/examples/gcmc/in.widom.lj b/examples/mc/in.widom.lj similarity index 100% rename from examples/gcmc/in.widom.lj rename to examples/mc/in.widom.lj diff --git a/examples/gcmc/in.widom.spce b/examples/mc/in.widom.spce similarity index 100% rename from examples/gcmc/in.widom.spce rename to examples/mc/in.widom.spce diff --git a/examples/mc/log.13Oct21.mixed.g++.4 b/examples/mc/log.13Oct21.mixed.g++.4 new file mode 100644 index 0000000000..3602a17827 --- /dev/null +++ b/examples/mc/log.13Oct21.mixed.g++.4 @@ -0,0 +1,164 @@ +LAMMPS (29 Sep 2021) +# test script for fix mol/swap +# initial system is 50/50 chains of type 1 and type 2 +# b/c epsilon12 is set to 1.02 (weakly same as 1/1 or 1/2) the +# system will stay in equilibrium as a mix of both chain types +# fix mol/swap helps this happen quickly +# see the last 2 columns of thermo output for counts of 2 chain types + +units lj +atom_style angle +neighbor 0.36 bin +neigh_modify delay 0 + +pair_style lj/cut 1.1224620483 +bond_style fene +angle_style cosine +special_bonds lj 0.0 1.0 1.0 + +read_data data.bead +Reading data file ... + orthogonal box = (-8.2115700 -8.2115700 -8.2115700) to (8.2115700 8.2115700 8.2115700) + 1 by 2 by 2 MPI processor grid + reading atoms ... + 4000 atoms + scanning bonds ... + 1 = max bonds/atom + scanning angles ... + 1 = max angles/atom + reading bonds ... + 3900 bonds + reading angles ... + 3800 angles +Finding 1-2 1-3 1-4 neighbors ... + special bond factors lj: 0 1 1 + special bond factors coul: 0 0 0 + 2 = max # of 1-2 neighbors + 2 = max # of 1-3 neighbors + 4 = max # of 1-4 neighbors + 6 = max # of special neighbors + special bonds CPU = 0.001 seconds + read_data CPU = 0.028 seconds + +pair_coeff * * 1.0 1.0 1.1224620483 +pair_coeff 1 2 1.02 1.0 1.1224620483 +bond_coeff 1 30.0 1.5 1.0 1.0 +angle_coeff 1 1.500 +pair_modify shift yes + +variable vt1 atom type==1 +variable vt2 atom type==2 +group g1 dynamic all var vt1 every 100 +dynamic group g1 defined +group g2 dynamic all var vt2 every 100 +dynamic group g2 defined +variable count1 equal count(g1) +variable count2 equal count(g2) + +timestep 0.010 + +fix 1 all langevin 1.0 1.0 100.0 702547 +fix 2 all nve +fix 3 all mol/swap 100 1 1 2 482794 1.0 + +compute p all pressure thermo_temp +thermo 1000 +thermo_style custom step temp etotal press f_3[1] f_3[2] v_count1 v_count2 + +run 50000 +Neighbor list info ... + update every 1 steps, delay 0 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 1.482462 + ghost atom cutoff = 1.482462 + binsize = 0.74123102, bins = 23 23 23 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair lj/cut, perpetual + attributes: half, newton on + pair build: half/bin/newton + stencil: half/bin/3d + bin: standard +WARNING: Communication cutoff 1.4824620483 is shorter than a bond length based estimate of 1.815. This may lead to errors. (../comm.cpp:728) +Per MPI rank memory allocation (min/avg/max) = 5.313 | 5.314 | 5.314 Mbytes +Step Temp TotEng Press f_3[1] f_3[2] v_count1 v_count2 + 0 0 21.451627 5.079399 0 0 2000 2000 + 1000 0.49011138 21.59359 4.2337989 10 10 2000 2000 + 2000 0.55288866 21.724374 4.4596786 20 20 2080 1920 + 3000 0.59299724 21.844178 4.6112243 30 29 2280 1720 + 4000 0.64746348 21.964318 4.9463669 40 39 2280 1720 + 5000 0.67853936 22.053147 5.1950218 50 48 2320 1680 + 6000 0.70751144 22.147453 5.0636869 60 58 2240 1760 + 7000 0.73570064 22.233705 5.4872622 70 68 2160 1840 + 8000 0.7677554 22.312938 5.4283736 80 77 2360 1640 + 9000 0.78493237 22.383155 5.8547233 90 87 2440 1560 + 10000 0.80634514 22.449402 5.8785731 100 96 2400 1600 + 11000 0.82563194 22.475286 5.8193738 110 104 2400 1600 + 12000 0.81684024 22.527492 6.0323967 120 114 2320 1680 + 13000 0.84497155 22.567888 6.0488755 130 122 2240 1760 + 14000 0.85452242 22.606908 6.1983634 140 132 2080 1920 + 15000 0.88109242 22.654336 6.1408279 150 141 1960 2040 + 16000 0.88925915 22.707597 6.1560975 160 150 2000 2000 + 17000 0.91598439 22.762791 6.1071728 170 160 2000 2000 + 18000 0.92453211 22.778304 6.3330693 180 170 2240 1760 + 19000 0.92839551 22.797316 6.2917909 190 180 2000 2000 + 20000 0.93054033 22.819289 6.091701 200 189 2200 1800 + 21000 0.93955351 22.844135 6.5833013 210 198 2000 2000 + 22000 0.94454858 22.856272 6.5661753 220 207 2200 1800 + 23000 0.95446407 22.878735 6.5957294 230 216 2160 1840 + 24000 0.94748257 22.894539 6.6187447 240 226 1920 2080 + 25000 0.95732202 22.912292 6.4795471 250 236 1680 2320 + 26000 0.96970172 22.908988 6.537366 260 245 1720 2280 + 27000 0.96032166 22.924899 6.6238248 270 255 1960 2040 + 28000 0.96197769 22.9358 6.8926097 280 264 1920 2080 + 29000 0.98745595 22.964694 6.5839025 290 271 2040 1960 + 30000 0.99264869 22.947884 6.3893499 300 280 1920 2080 + 31000 0.96953069 22.957927 6.6616047 310 289 1800 2200 + 32000 0.99955117 22.963979 6.5958456 320 298 1680 2320 + 33000 0.97090103 22.969029 6.9087296 330 307 1800 2200 + 34000 0.99818457 22.988477 6.6471994 340 316 1920 2080 + 35000 0.9965288 22.992883 6.9691785 350 325 2040 1960 + 36000 0.99533174 22.983774 6.6585089 360 334 2000 2000 + 37000 0.98819278 22.995387 6.618802 370 344 2080 1920 + 38000 0.99598576 22.991892 6.7536669 380 354 2080 1920 + 39000 0.99312702 22.989239 6.4028165 390 364 2080 1920 + 40000 1.0035821 23.001944 6.9307671 400 374 1920 2080 + 41000 0.99914733 23.00134 6.6251677 410 383 1880 2120 + 42000 0.98054536 22.981781 6.5918554 420 393 1880 2120 + 43000 0.99413829 23.008 6.7390795 430 403 1720 2280 + 44000 0.98867961 23.00521 6.8505543 440 412 1600 2400 + 45000 0.99626811 23.019995 6.827741 450 421 1640 2360 + 46000 1.0186043 23.020759 6.6195562 460 430 1680 2320 + 47000 1.0121335 23.019271 6.6022102 470 439 1800 2200 + 48000 0.99883756 23.013973 6.5255522 480 448 1920 2080 + 49000 0.99425223 23.022708 6.609746 490 458 2240 1760 + 50000 0.99505489 23.012641 6.4592863 500 468 2240 1760 +Loop time of 19.4175 on 4 procs for 50000 steps with 4000 atoms + +Performance: 2224796.830 tau/day, 2574.996 timesteps/s +95.0% CPU use with 4 MPI tasks x no OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 2.5467 | 2.6684 | 2.7896 | 6.3 | 13.74 +Bond | 2.3037 | 2.4117 | 2.5085 | 5.3 | 12.42 +Neigh | 7.3597 | 7.3633 | 7.3673 | 0.1 | 37.92 +Comm | 3.0482 | 3.2694 | 3.4997 | 10.2 | 16.84 +Output | 0.0014609 | 0.0017069 | 0.0021793 | 0.7 | 0.01 +Modify | 2.9624 | 3.0581 | 3.1424 | 4.7 | 15.75 +Other | | 0.6447 | | | 3.32 + +Nlocal: 1000.00 ave 1013 max 986 min +Histogram: 1 0 0 1 0 0 0 1 0 1 +Nghost: 1186.25 ave 1198 max 1178 min +Histogram: 2 0 0 0 0 0 1 0 0 1 +Neighs: 4927.00 ave 5028 max 4790 min +Histogram: 1 0 0 0 0 1 0 1 0 1 + +Total # of neighbors = 19708 +Ave neighs/atom = 4.9270000 +Ave special neighs/atom = 5.7000000 +Neighbor list builds = 10721 +Dangerous builds = 0 + +Total wall time: 0:00:19 diff --git a/examples/mc/log.13Oct21.pure.g++.4 b/examples/mc/log.13Oct21.pure.g++.4 new file mode 100644 index 0000000000..46f29bf6e4 --- /dev/null +++ b/examples/mc/log.13Oct21.pure.g++.4 @@ -0,0 +1,164 @@ +LAMMPS (29 Sep 2021) +# test script for fix mol/swap +# initial system is 50/50 chains of type 1 and type 2 +# b/c epsilon12 is set to 1.1 (stronger than 1/1 or 2/2) the +# system will go to equilibrium as mostly one type or the other +# fix mol/swap helps this happen quickly +# see the last 2 columns of thermo output for counts of 2 chain types + +units lj +atom_style angle +neighbor 0.36 bin +neigh_modify delay 0 + +pair_style lj/cut 1.1224620483 +bond_style fene +angle_style cosine +special_bonds lj 0.0 1.0 1.0 + +read_data data.bead +Reading data file ... + orthogonal box = (-8.2115700 -8.2115700 -8.2115700) to (8.2115700 8.2115700 8.2115700) + 1 by 2 by 2 MPI processor grid + reading atoms ... + 4000 atoms + scanning bonds ... + 1 = max bonds/atom + scanning angles ... + 1 = max angles/atom + reading bonds ... + 3900 bonds + reading angles ... + 3800 angles +Finding 1-2 1-3 1-4 neighbors ... + special bond factors lj: 0 1 1 + special bond factors coul: 0 0 0 + 2 = max # of 1-2 neighbors + 2 = max # of 1-3 neighbors + 4 = max # of 1-4 neighbors + 6 = max # of special neighbors + special bonds CPU = 0.001 seconds + read_data CPU = 0.034 seconds + +pair_coeff * * 1.0 1.0 1.1224620483 +pair_coeff 1 2 1.1 1.0 1.1224620483 +bond_coeff 1 30.0 1.5 1.0 1.0 +angle_coeff 1 1.500 +pair_modify shift yes + +variable vt1 atom type==1 +variable vt2 atom type==2 +group g1 dynamic all var vt1 every 100 +dynamic group g1 defined +group g2 dynamic all var vt2 every 100 +dynamic group g2 defined +variable count1 equal count(g1) +variable count2 equal count(g2) + +timestep 0.010 + +fix 1 all langevin 1.0 1.0 100.0 702547 +fix 2 all nve +fix 3 all mol/swap 100 1 1 2 482794 1.0 + +compute p all pressure thermo_temp +thermo 1000 +thermo_style custom step temp etotal press f_3[1] f_3[2] v_count1 v_count2 + +run 50000 +Neighbor list info ... + update every 1 steps, delay 0 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 1.482462 + ghost atom cutoff = 1.482462 + binsize = 0.74123102, bins = 23 23 23 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair lj/cut, perpetual + attributes: half, newton on + pair build: half/bin/newton + stencil: half/bin/3d + bin: standard +WARNING: Communication cutoff 1.4824620483 is shorter than a bond length based estimate of 1.815. This may lead to errors. (../comm.cpp:728) +Per MPI rank memory allocation (min/avg/max) = 5.313 | 5.314 | 5.314 Mbytes +Step Temp TotEng Press f_3[1] f_3[2] v_count1 v_count2 + 0 0 21.4699 5.230121 0 0 2000 2000 + 1000 0.50228459 21.61044 4.3659303 10 9 1960 2040 + 2000 0.55721903 21.75955 4.5695439 20 17 1960 2040 + 3000 0.61139287 21.892943 4.6514755 30 26 2240 1760 + 4000 0.65767189 22.002303 5.1854503 40 33 2280 1720 + 5000 0.69383416 22.110271 5.3803498 50 41 2280 1720 + 6000 0.72692038 22.205887 5.1756569 60 49 2280 1720 + 7000 0.77151336 22.306777 5.5743555 70 56 2240 1760 + 8000 0.78606858 22.37036 5.7745208 80 64 2560 1440 + 9000 0.79363653 22.420931 5.7369418 90 71 2680 1320 + 10000 0.82352629 22.488759 6.0238896 100 76 2720 1280 + 11000 0.83867685 22.534887 6.1263771 110 82 2800 1200 + 12000 0.85335127 22.590281 6.1499954 120 86 2800 1200 + 13000 0.86430985 22.632068 6.1654016 130 89 2760 1240 + 14000 0.88057592 22.680253 6.2162735 140 94 2800 1200 + 15000 0.89326694 22.719731 6.4789839 150 97 2760 1240 + 16000 0.90667644 22.737367 6.214481 160 101 2760 1240 + 17000 0.91190336 22.758572 6.2293336 170 105 2600 1400 + 18000 0.93182455 22.782019 6.2865382 180 111 2680 1320 + 19000 0.93002139 22.797048 6.5579988 190 117 2600 1400 + 20000 0.92396243 22.796108 6.6207461 200 122 2800 1200 + 21000 0.92949808 22.802813 6.3753268 210 125 2920 1080 + 22000 0.93415719 22.807112 6.4696121 220 130 3040 960 + 23000 0.9214833 22.82116 6.4146288 230 131 3080 920 + 24000 0.95693685 22.839738 6.4035728 240 135 2920 1080 + 25000 0.95421851 22.865199 6.4510751 250 138 2880 1120 + 26000 0.95476555 22.878082 6.4652888 260 145 3000 1000 + 27000 0.95773535 22.880671 6.757952 270 149 3000 1000 + 28000 0.95405332 22.896053 6.7425175 280 155 3080 920 + 29000 0.95955713 22.904144 6.6672832 290 161 3240 760 + 30000 0.95521498 22.886699 6.6197941 300 164 3360 640 + 31000 0.96431176 22.91094 6.6373887 310 168 3440 560 + 32000 0.96592495 22.903679 6.4245884 320 172 3520 480 + 33000 0.96457971 22.922681 6.6987987 330 175 3480 520 + 34000 0.96541889 22.92116 6.5992755 340 178 3600 400 + 35000 0.96892691 22.923361 6.7973298 350 178 3600 400 + 36000 0.97267726 22.923431 6.6577403 360 179 3640 360 + 37000 0.97514714 22.939979 6.4028068 370 183 3640 360 + 38000 0.98638599 22.952022 6.6518868 380 183 3640 360 + 39000 0.97864891 22.962534 6.3906837 390 184 3680 320 + 40000 0.9933016 22.975785 6.6819613 400 185 3720 280 + 41000 0.9861477 22.977271 6.6747347 410 187 3800 200 + 42000 0.98157369 22.963129 6.830028 420 187 3800 200 + 43000 0.98202452 22.966947 6.5257905 430 187 3800 200 + 44000 0.99540503 22.971262 6.5546513 440 187 3800 200 + 45000 0.98433653 22.978028 6.4316725 450 189 3800 200 + 46000 0.97912775 22.981328 6.9139851 460 189 3800 200 + 47000 0.9791927 22.981131 6.6417971 470 190 3840 160 + 48000 0.99601024 22.998536 6.6756953 480 191 3880 120 + 49000 0.99589958 22.998489 6.9262843 490 191 3880 120 + 50000 0.99294715 23.00399 6.6976013 500 192 3920 80 +Loop time of 19.5161 on 4 procs for 50000 steps with 4000 atoms + +Performance: 2213556.537 tau/day, 2561.987 timesteps/s +95.0% CPU use with 4 MPI tasks x no OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 2.6256 | 2.7183 | 2.8265 | 5.2 | 13.93 +Bond | 2.3363 | 2.4406 | 2.5197 | 4.8 | 12.51 +Neigh | 7.382 | 7.3884 | 7.3936 | 0.2 | 37.86 +Comm | 3.014 | 3.2136 | 3.3994 | 9.4 | 16.47 +Output | 0.0014574 | 0.0017086 | 0.0020613 | 0.5 | 0.01 +Modify | 3.0282 | 3.1295 | 3.2034 | 4.1 | 16.04 +Other | | 0.624 | | | 3.20 + +Nlocal: 1000.00 ave 1011 max 993 min +Histogram: 2 0 0 0 0 1 0 0 0 1 +Nghost: 1187.25 ave 1202 max 1179 min +Histogram: 2 0 0 1 0 0 0 0 0 1 +Neighs: 4939.25 ave 5067 max 4850 min +Histogram: 1 0 0 2 0 0 0 0 0 1 + +Total # of neighbors = 19757 +Ave neighs/atom = 4.9392500 +Ave special neighs/atom = 5.7000000 +Neighbor list builds = 10714 +Dangerous builds = 0 + +Total wall time: 0:00:19 diff --git a/examples/gcmc/log.27Nov18.gcmc.h2o.g++.1 b/examples/mc/log.27Nov18.gcmc.h2o.g++.1 similarity index 100% rename from examples/gcmc/log.27Nov18.gcmc.h2o.g++.1 rename to examples/mc/log.27Nov18.gcmc.h2o.g++.1 diff --git a/examples/gcmc/log.27Nov18.gcmc.lj.g++.1 b/examples/mc/log.27Nov18.gcmc.lj.g++.1 similarity index 100% rename from examples/gcmc/log.27Nov18.gcmc.lj.g++.1 rename to examples/mc/log.27Nov18.gcmc.lj.g++.1 diff --git a/examples/gcmc/log.27Nov18.gcmc.lj.g++.4 b/examples/mc/log.27Nov18.gcmc.lj.g++.4 similarity index 100% rename from examples/gcmc/log.27Nov18.gcmc.lj.g++.4 rename to examples/mc/log.27Nov18.gcmc.lj.g++.4 diff --git a/examples/gcmc/log.30Jun20.widom.lj.g++.1 b/examples/mc/log.30Jun20.widom.lj.g++.1 similarity index 100% rename from examples/gcmc/log.30Jun20.widom.lj.g++.1 rename to examples/mc/log.30Jun20.widom.lj.g++.1 diff --git a/examples/gcmc/log.30Jun20.widom.lj.g++.4 b/examples/mc/log.30Jun20.widom.lj.g++.4 similarity index 100% rename from examples/gcmc/log.30Jun20.widom.lj.g++.4 rename to examples/mc/log.30Jun20.widom.lj.g++.4 diff --git a/examples/gcmc/log.30Jun20.widom.spce.g++.1 b/examples/mc/log.30Jun20.widom.spce.g++.1 similarity index 100% rename from examples/gcmc/log.30Jun20.widom.spce.g++.1 rename to examples/mc/log.30Jun20.widom.spce.g++.1 diff --git a/examples/gcmc/log.31Mar21.gcmc.co2.g++.1 b/examples/mc/log.31Mar21.gcmc.co2.g++.1 similarity index 100% rename from examples/gcmc/log.31Mar21.gcmc.co2.g++.1 rename to examples/mc/log.31Mar21.gcmc.co2.g++.1 From 56ce880b32664c4643122653cc9a31effee65fb1 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Wed, 13 Oct 2021 18:06:49 -0400 Subject: [PATCH 174/372] update force-style test data with corrected efield strength computation --- .../atomic-pair-reaxff-acks2_efield.yaml | 268 +++++++++--------- 1 file changed, 134 insertions(+), 134 deletions(-) diff --git a/unittest/force-styles/tests/atomic-pair-reaxff-acks2_efield.yaml b/unittest/force-styles/tests/atomic-pair-reaxff-acks2_efield.yaml index c1ce9400df..295b343dea 100644 --- a/unittest/force-styles/tests/atomic-pair-reaxff-acks2_efield.yaml +++ b/unittest/force-styles/tests/atomic-pair-reaxff-acks2_efield.yaml @@ -1,6 +1,6 @@ --- lammps_version: 29 Sep 2021 -date_generated: Mon Oct 11 16:46:47 2021 +date_generated: Wed Oct 13 18:05:37 2021 epsilon: 5e-09 skip_tests: omp prerequisites: ! | @@ -36,141 +36,141 @@ pair_coeff: ! | extract: ! "" natoms: 64 init_vdwl: -1263.7843580276833 -init_coul: -241.77314680827783 +init_coul: -241.77421360301622 init_stress: ! |- - -1.0732860357525092e+03 -1.0969136803775482e+03 -8.9679213159248161e+02 -6.2188995258019281e+02 8.0978562087079951e+01 -3.3551831576810690e+02 + -1.0732687705180101e+03 -1.0968581855302236e+03 -8.9675214779212911e+02 -6.2181509337974205e+02 8.0965758549240192e+01 -3.3557256247328615e+02 init_forces: ! |2 - 1 1.6546391079420221e+01 1.8861758944082130e+01 2.0995653962315806e+01 - 2 1.4111235729849533e+01 1.1562148258279237e+01 1.7393710487932907e+01 - 3 -1.6239245832069577e+02 7.4190659084767430e-01 3.1265619190286909e+01 - 4 -3.7147367389925115e+01 -4.1363429018534575e+01 9.7478167060301875e+00 - 5 8.4659282359703411e+01 1.1715106080985931e+01 -2.0690183352373207e+01 - 6 -6.7208703993974851e+01 -1.0878565879924859e+02 -6.7593451962795870e+00 - 7 5.5853305658642057e+01 -3.6422472922878974e+01 -5.9874797494309583e+01 - 8 7.5561170694434864e+01 3.7223369080308792e+01 -9.1364575541097750e+01 - 9 9.1113045964459189e+01 -8.0419886829521925e+00 -5.4841050914075417e+01 - 10 -5.0531057477339854e+00 2.0267263384912127e+01 3.8892689633641368e+01 - 11 2.2657842431552653e+00 -5.5298191902892022e+01 -3.3353516245565721e+01 - 12 -8.6533251375363335e+01 -6.9397568715256767e+01 7.0612280239691444e+01 - 13 6.5590825624744852e+01 3.4684073618160760e+01 -1.0088972064790433e+02 - 14 -3.6414638133615385e+00 -2.4434713792657710e+01 -2.4468269138467015e+01 - 15 -1.8836775084082767e+01 4.6726736688341660e+01 4.0644108557999864e+01 - 16 -3.5136712133445607e+00 1.9615714188966621e+01 2.1986915731584052e+01 - 17 3.0824371211869405e+01 5.1089885717425695e+01 2.4230958400234169e+01 - 18 6.5771934884265013e+00 -1.4598753214559812e+01 -7.6858898006781873e+00 - 19 5.4540235029082325e+01 2.1142619067916439e+02 7.1057358369970970e+01 - 20 6.6708528716282673e+00 -1.2392272601416553e+02 6.2546545871386819e+01 - 21 -1.6666609705407143e+02 5.0056801608501580e+01 -1.1351203550116394e+02 - 22 3.1319343625822956e+01 -2.6662324063682341e+00 1.5282722081253391e+02 - 23 4.4088338782032970e+01 -3.6248640578688985e+01 -4.5807931438759610e+01 - 24 2.8719664790142112e+01 7.2185461686680000e+01 5.7351598630215889e+01 - 25 -5.5610872591149182e+01 -6.4673257000887105e+01 9.7717315948857106e+01 - 26 1.2973916394044352e+02 -7.5778756404718536e+01 -6.6518970704161163e+01 - 27 8.8164702916386332e+01 5.1469851565154613e+01 2.3429054646198193e+01 - 28 1.2513566503796572e+01 1.3636847850649245e+01 -9.4237710535076946e+00 - 29 -1.1778287928008122e+02 6.6008520363979073e+01 9.0942007689215728e+01 - 30 1.9895774651443908e+01 -1.1703379325605137e+02 1.5486512836678589e+01 - 31 -1.1144223051456871e+02 -4.6446802143393228e+01 -2.1365120190637104e+01 - 32 -1.1955194353501186e+01 9.5884384434641809e+00 2.7934876123981223e+01 - 33 8.7762452029606806e+01 -6.1321454451476200e+01 -7.1551836952995288e+01 - 34 1.2870204245733254e+02 8.7748454832710337e+01 6.8843559193971259e+01 - 35 1.6203316176079645e+02 2.8091514071105244e+01 -3.5725109788921301e+01 - 36 -5.1130756566408394e+01 -6.9911332800248374e+01 4.6487863327658971e+01 - 37 2.2171535358414413e+01 4.4736307132550174e+01 -6.8029263095734422e+01 - 38 -1.3241655767930430e+02 -9.8312099883057385e+01 -4.8856893029569278e+01 - 39 -1.4546426228549892e+01 7.1365335423723764e-01 -6.9702422766941021e+00 - 40 -6.3722500090376251e+00 3.6211509748499506e+00 -6.3458985069850442e+00 - 41 -1.2629253622575479e+02 -1.1405692399540031e+02 1.4218331875010282e+01 - 42 3.3358434665700187e+01 -1.2561452878299590e+02 -1.1708384236452427e+02 - 43 2.4830336012405912e+01 -3.4751800839253974e+01 1.1724278604113481e+02 - 44 4.0739838794800242e+01 -1.2075244716678061e+01 -2.3183983543542091e+01 - 45 -2.3234406593911050e+01 1.3605500661033898e+02 1.7647169504292015e+02 - 46 2.6928805859962801e+00 4.1722960257468902e+00 -3.8374276548778066e+00 - 47 -3.9484662269978024e+01 -4.3832898140787648e+01 -5.0167603663576394e+01 - 48 9.2976327582464933e+01 -8.8061956303819287e+01 -5.6621734881076151e+01 - 49 5.7430095442987628e+01 2.1766168325857529e+00 -4.3778654846221514e+01 - 50 5.0092312689801062e+01 2.7259262163626556e+01 1.0399919534071583e+02 - 51 1.8968555284562250e+01 -6.2777933487589088e+01 1.6721333807708328e+02 - 52 -1.0200522251473313e+02 1.0135184344278437e+02 -4.9665456998198394e+01 - 53 -8.9778493426390568e+01 1.0160863048539531e+02 -2.2023943337291072e+02 - 54 -3.0608459013902589e+01 -1.9047060692946193e+01 -2.5853851585912452e+01 - 55 -7.5154785044478212e-01 -9.6930202098147522e-01 1.2746916065701841e+00 - 56 -8.5202307337373000e+00 -1.4740487699669208e+01 1.0288507098119926e+01 - 57 4.7508701142140850e+01 1.6105934039988682e+02 1.0237730511392915e+02 - 58 -1.3163588317780638e+01 7.3223236334805449e+01 4.4745649920692188e+00 - 59 -6.4622043742400862e+01 9.6137126297415094e+01 1.5094617420501373e+02 - 60 3.0081992309898734e+01 1.7978124603531816e+02 -9.7551968747316934e+01 - 61 -5.1743981417993375e+01 -1.7194348937642167e+02 -1.2738608708730519e+02 - 62 5.7619427719052908e+01 5.3321960833662928e+01 -1.0989111220717433e+02 - 63 -2.5220226491307002e+01 -5.4636700274842710e+01 -5.0903166727478791e+01 - 64 -8.8046883187957562e+01 -3.0751522257501687e+01 3.1298488797042353e+01 -run_vdwl: -1263.7812226206759 -run_coul: -241.77324614099936 + 1 1.6544873233628813e+01 1.8862665510840209e+01 2.0996152926847120e+01 + 2 1.4107834931964554e+01 1.1562492571378540e+01 1.7399331363893921e+01 + 3 -1.6237159803722722e+02 7.3768611650058613e-01 3.1249313093594427e+01 + 4 -3.7132168139442896e+01 -4.1348791089422249e+01 9.7297469776452239e+00 + 5 8.4639020127616135e+01 1.1700543338567250e+01 -2.0669303202462331e+01 + 6 -6.7193803612931589e+01 -1.0878669861242204e+02 -6.7762372009491596e+00 + 7 5.5859023847810974e+01 -3.6423373006689900e+01 -5.9883505955638867e+01 + 8 7.5524936995194892e+01 3.7206352688917150e+01 -9.1328349315703619e+01 + 9 9.1130895600440979e+01 -8.0301316370963942e+00 -5.4852426195812804e+01 + 10 -5.0551266395515722e+00 2.0267717120929724e+01 3.8895863126909710e+01 + 11 2.2566658900909613e+00 -5.5304165456265110e+01 -3.3341598415342069e+01 + 12 -8.6535829138121315e+01 -6.9396569247311319e+01 7.0609040432477826e+01 + 13 6.5588331967798567e+01 3.4684525121633868e+01 -1.0088769226898077e+02 + 14 -3.6420201957516922e+00 -2.4435068124276075e+01 -2.4467648024146090e+01 + 15 -1.8836951424155945e+01 4.6726538059504868e+01 4.0645964870661466e+01 + 16 -3.5128322960337672e+00 1.9617147249697741e+01 2.1986616163791854e+01 + 17 3.0824371211950428e+01 5.1089885717446847e+01 2.4230958400273195e+01 + 18 6.5737244296448072e+00 -1.4597245806268733e+01 -7.6810211814524658e+00 + 19 5.4554598758648780e+01 2.1142177097216361e+02 7.1040683521812937e+01 + 20 6.6655564140916761e+00 -1.2392613251772549e+02 6.2549558370165414e+01 + 21 -1.6665361076208004e+02 5.0057857067631467e+01 -1.1352343180529587e+02 + 22 3.1292433219186524e+01 -2.6413949828022356e+00 1.5285607176899094e+02 + 23 4.4081782799617116e+01 -3.6246774449704979e+01 -4.5797722792608511e+01 + 24 2.8700709559300659e+01 7.2175615569147638e+01 5.7369098498268578e+01 + 25 -5.5580855024638424e+01 -6.4654228469645361e+01 9.7692246756652978e+01 + 26 1.2973493969999291e+02 -7.5778827402876644e+01 -6.6515328508133550e+01 + 27 8.8126716297991138e+01 5.1433527767092137e+01 2.3407077354386384e+01 + 28 1.2511253239242043e+01 1.3636132025181478e+01 -9.4253259151143549e+00 + 29 -1.1778606765410751e+02 6.6008522248248454e+01 9.0944536800011150e+01 + 30 1.9914163526214200e+01 -1.1702697898021106e+02 1.5464671145793428e+01 + 31 -1.1140631382104954e+02 -4.6409410482794783e+01 -2.1344928927691623e+01 + 32 -1.1955448702076986e+01 9.5875384658668636e+00 2.7935715319779696e+01 + 33 8.7786579760163562e+01 -6.1345188767581263e+01 -7.1583281055181686e+01 + 34 1.2872548655914446e+02 8.7759051883822295e+01 6.8846205973723400e+01 + 35 1.6202753364566260e+02 2.8107190316085855e+01 -3.5703982160947440e+01 + 36 -5.1138513989988184e+01 -6.9911430734306776e+01 4.6497683634936855e+01 + 37 2.2164674302914040e+01 4.4737593543364085e+01 -6.8023531826609343e+01 + 38 -1.3243129081970449e+02 -9.8322438904976408e+01 -4.8865871604589785e+01 + 39 -1.4539914202022622e+01 7.0254382906605883e-01 -6.9870852838183719e+00 + 40 -6.3757234386642994e+00 3.6220340490265279e+00 -6.3430626603811451e+00 + 41 -1.2630715661950779e+02 -1.1405926855800243e+02 1.4235856837032820e+01 + 42 3.3348455809719603e+01 -1.2561825182001029e+02 -1.1707774931406259e+02 + 43 2.4855608100273688e+01 -3.4752760572532353e+01 1.1721316758164591e+02 + 44 4.0739282283363146e+01 -1.2074985902270566e+01 -2.3182902503712622e+01 + 45 -2.3237992224046511e+01 1.3605501182748912e+02 1.7647506188220666e+02 + 46 2.6919517337707384e+00 4.1721320911687787e+00 -3.8364966679971597e+00 + 47 -3.9485981497722868e+01 -4.3831504145579089e+01 -5.0164524782887561e+01 + 48 9.2976340136280768e+01 -8.8061944561111218e+01 -5.6621723131204867e+01 + 49 5.7415986126026773e+01 2.1746462671254432e+00 -4.3765218912166020e+01 + 50 5.0097667749424950e+01 2.7265189853128518e+01 1.0400665840596920e+02 + 51 1.8957139639185641e+01 -6.2782103815444735e+01 1.6722596849835512e+02 + 52 -1.0201283330855033e+02 1.0135195584789010e+02 -4.9656402161283062e+01 + 53 -8.9760482392830099e+01 1.0161186676769185e+02 -2.2025992484840475e+02 + 54 -3.0614746621547880e+01 -1.9050762297562603e+01 -2.5859185152914435e+01 + 55 -7.5153564648369642e-01 -9.6902529050367114e-01 1.2743187960663205e+00 + 56 -8.4859544509025913e+00 -1.4740153224666239e+01 1.0257345367891229e+01 + 57 4.7507280968459092e+01 1.6105950569287401e+02 1.0237884790486045e+02 + 58 -1.3171330115126645e+01 7.3223243955129831e+01 4.4809585421873388e+00 + 59 -6.4621630782895465e+01 9.6129174704686022e+01 1.5093371796835154e+02 + 60 3.0088516319665583e+01 1.7978356604345029e+02 -9.7558160484741677e+01 + 61 -5.1750730839626343e+01 -1.7194405989348417e+02 -1.2738166548385770e+02 + 62 5.7609018186683649e+01 5.3316676874956656e+01 -1.0988014102420154e+02 + 63 -2.5215659343014210e+01 -5.4629420152948171e+01 -5.0894419130817056e+01 + 64 -8.8059251331362219e+01 -3.0748812251211561e+01 3.1311409613927594e+01 +run_vdwl: -1263.7812226205149 +run_coul: -241.77431297463355 run_stress: ! |- - -1.0732796522501428e+03 -1.0969076752471606e+03 -8.9678333828990594e+02 -6.2188877646006847e+02 8.0972532865788025e+01 -3.3552588986946586e+02 + -1.0732623865648388e+03 -1.0968521804966483e+03 -8.9674335342881352e+02 -6.2181391692244063e+02 8.0959729084010746e+01 -3.3558013691685204e+02 run_forces: ! |2 - 1 1.6545750410702723e+01 1.8861113401191805e+01 2.0994442903393846e+01 - 2 1.4110691180572175e+01 1.1561877963040637e+01 1.7393314544206305e+01 - 3 -1.6239301919906148e+02 7.3855000559847417e-01 3.1263225921497554e+01 - 4 -3.7147761185012214e+01 -4.1363750259083417e+01 9.7487511470707933e+00 - 5 8.4660121700500824e+01 1.1715898459427024e+01 -2.0690999101366469e+01 - 6 -6.7208079580142027e+01 -1.0878376489699417e+02 -6.7607282230465229e+00 - 7 5.5854561275701982e+01 -3.6423302592954123e+01 -5.9874535235164593e+01 - 8 7.5560183321470589e+01 3.7222860155773837e+01 -9.1364389866389061e+01 - 9 9.1114303832477532e+01 -8.0412585383406352e+00 -5.4842997886173436e+01 - 10 -5.0523230232091221e+00 2.0265114816391392e+01 3.8889234902462817e+01 - 11 2.2682084500174753e+00 -5.5300243188777230e+01 -3.3360687241514825e+01 - 12 -8.6527339565082087e+01 -6.9393955565083047e+01 7.0609176004266146e+01 - 13 6.5585323581384628e+01 3.4682825963120656e+01 -1.0088331890447535e+02 - 14 -3.6401983626224585e+00 -2.4434080310911735e+01 -2.4466299526168708e+01 - 15 -1.8835207169463239e+01 4.6725346047120468e+01 4.0642930096915499e+01 - 16 -3.5136833503612950e+00 1.9613471715481918e+01 2.1984172223983645e+01 - 17 3.0824498024156689e+01 5.1089866020486014e+01 2.4231024241397481e+01 - 18 6.5773821318963961e+00 -1.4598596987699596e+01 -7.6857506630241250e+00 - 19 5.4541406204381246e+01 2.1142618537301604e+02 7.1058174448787113e+01 - 20 6.6709902774729155e+00 -1.2392213884396607e+02 6.2546547527587968e+01 - 21 -1.6666622250066479e+02 5.0056313338937251e+01 -1.1351131816115038e+02 - 22 3.1321048691145066e+01 -2.6681645705183374e+00 1.5282695458202130e+02 - 23 4.4087430948134049e+01 -3.6249322023306590e+01 -4.5808853307740513e+01 - 24 2.8717522909333930e+01 7.2188487280775249e+01 5.7355323040480336e+01 - 25 -5.5610436653498105e+01 -6.4673047871720584e+01 9.7716804832152064e+01 - 26 1.2973924726955281e+02 -7.5779384583476443e+01 -6.6518000341450062e+01 - 27 8.8164274681988317e+01 5.1471828342380469e+01 2.3431269313907997e+01 - 28 1.2512427045148057e+01 1.3635647303149140e+01 -9.4236984785940923e+00 - 29 -1.1778204623771865e+02 6.6009611690159204e+01 9.0940682905069323e+01 - 30 1.9895674901179447e+01 -1.1703564889382272e+02 1.5487039408491238e+01 - 31 -1.1144317981145872e+02 -4.6447411753392025e+01 -2.1365901029536250e+01 - 32 -1.1956794481866662e+01 9.5915378370243225e+00 2.7941597377830124e+01 - 33 8.7762239116691802e+01 -6.1321651470311387e+01 -7.1551859613730457e+01 - 34 1.2870236947336866e+02 8.7747701115996051e+01 6.8843794503397135e+01 - 35 1.6203342004649303e+02 2.8091864263469084e+01 -3.5725640342886898e+01 - 36 -5.1129449444708399e+01 -6.9908957427379235e+01 4.6486707406834640e+01 - 37 2.2170233973697332e+01 4.4733230591592772e+01 -6.8025862410549607e+01 - 38 -1.3241705466224587e+02 -9.8311479029891444e+01 -4.8857095261564282e+01 - 39 -1.4546300180687089e+01 7.1364471389283324e-01 -6.9702724557850768e+00 - 40 -6.3724517405160075e+00 3.6210884893313926e+00 -6.3459482443210664e+00 - 41 -1.2629277180832160e+02 -1.1405812491188213e+02 1.4219145936240416e+01 - 42 3.3357518078041473e+01 -1.2561592086832152e+02 -1.1708313715896094e+02 - 43 2.4829915780145324e+01 -3.4751034438977314e+01 1.1724361875496233e+02 - 44 4.0737069875366871e+01 -1.2073429330880259e+01 -2.3182761440721762e+01 - 45 -2.3232685552250352e+01 1.3605750083199675e+02 1.7647096959432437e+02 - 46 2.6929261237120703e+00 4.1722813851353369e+00 -3.8373960275274004e+00 - 47 -3.9484993497373381e+01 -4.3833195666847651e+01 -5.0168111751763171e+01 - 48 9.2977986489867959e+01 -8.8063607405444969e+01 -5.6623455211101849e+01 - 49 5.7430372042316414e+01 2.1767674533857706e+00 -4.3778322457790196e+01 - 50 5.0090465125354598e+01 2.7259400687445599e+01 1.0399865192218491e+02 - 51 1.8972114009805686e+01 -6.2782389243897654e+01 1.6721827819210549e+02 - 52 -1.0200749905127171e+02 1.0135374142436632e+02 -4.9665839984636015e+01 - 53 -8.9781321286262951e+01 1.0161209980372010e+02 -2.2024444602788429e+02 - 54 -3.0607738454604608e+01 -1.9046344689624316e+01 -2.5853149278625938e+01 - 55 -7.5157878891494301e-01 -9.6931695447022925e-01 1.2746760307000604e+00 - 56 -8.5202678203603881e+00 -1.4739444281661580e+01 1.0288582198851518e+01 - 57 4.7508643680718777e+01 1.6105788487418164e+02 1.0237672411441389e+02 - 58 -1.3162790733545656e+01 7.3223345786153246e+01 4.4754768042828861e+00 - 59 -6.4623071331623692e+01 9.6138716327963948e+01 1.5094756474900402e+02 - 60 3.0082706223767062e+01 1.7978436266695135e+02 -9.7551180236422582e+01 - 61 -5.1743454564557908e+01 -1.7194144525253105e+02 -1.2738576727184436e+02 - 62 5.7618418018677232e+01 5.3320495190538324e+01 -1.0989178092048547e+02 - 63 -2.5220918836608899e+01 -5.4636462465362712e+01 -5.0902802955232808e+01 - 64 -8.8046806021226445e+01 -3.0753787001664563e+01 3.1297451388805559e+01 + 1 1.6544232553581971e+01 1.8862019986836589e+01 2.0994941865486204e+01 + 2 1.4107290444024050e+01 1.1562222232717577e+01 1.7398935380843948e+01 + 3 -1.6237215881974376e+02 7.3432961093932936e-01 3.1246919721674431e+01 + 4 -3.7132561907901767e+01 -4.1349112476812373e+01 9.7306813516100714e+00 + 5 8.4639859379463857e+01 1.1701335850556484e+01 -2.0670118889863986e+01 + 6 -6.7193179286828212e+01 -1.0878480473686349e+02 -6.7776201873383126e+00 + 7 5.5860279340002492e+01 -3.6424202640975622e+01 -5.9883243627543052e+01 + 8 7.5523949595969242e+01 3.7205843645225180e+01 -9.1328163429407269e+01 + 9 9.1132153498365000e+01 -8.0294015106958536e+00 -5.4854373254291879e+01 + 10 -5.0543438938869816e+00 2.0265568551370560e+01 3.8892408370645036e+01 + 11 2.2590900417619166e+00 -5.5306216756222348e+01 -3.3348769387388884e+01 + 12 -8.6529917311355064e+01 -6.9392956100368195e+01 7.0605936206703788e+01 + 13 6.5582829942500510e+01 3.4683277452110765e+01 -1.0088129053457016e+02 + 14 -3.6407547584093862e+00 -2.4434434655450158e+01 -2.4465678413828943e+01 + 15 -1.8835383504020545e+01 4.6725147451466299e+01 4.0644786358859363e+01 + 16 -3.5128444201904752e+00 1.9614904774654285e+01 2.1983872664041776e+01 + 17 3.0824498024574577e+01 5.1089866020602130e+01 2.4231024241605290e+01 + 18 6.5739130682327769e+00 -1.4597089579069062e+01 -7.6808820450601480e+00 + 19 5.4555769907347333e+01 2.1142176567824694e+02 7.1041499624047702e+01 + 20 6.6656938419689631e+00 -1.2392554538030720e+02 6.2549560025499467e+01 + 21 -1.6665373624470132e+02 5.0057368819337832e+01 -1.1352271444751825e+02 + 22 3.1294137972313312e+01 -2.6433268939701646e+00 1.5285580563663439e+02 + 23 4.4080875001871384e+01 -3.6247455920969131e+01 -4.5798644712663076e+01 + 24 2.8698567600094101e+01 7.2178641106694457e+01 5.7372823020059315e+01 + 25 -5.5580418986766084e+01 -6.4654019131590019e+01 9.7691735465611018e+01 + 26 1.2973502303885829e+02 -7.5779455574870099e+01 -6.6514358152908059e+01 + 27 8.8126287913796759e+01 5.1435504570072304e+01 2.3409291923481693e+01 + 28 1.2510113771398244e+01 1.3634931483058264e+01 -9.4252533397897764e+00 + 29 -1.1778523460931234e+02 6.6009613580347121e+01 9.0943212016746855e+01 + 30 1.9914063738336566e+01 -1.1702883459063344e+02 1.5465197779555830e+01 + 31 -1.1140726302354332e+02 -4.6410020081938136e+01 -2.1345709679555512e+01 + 32 -1.1957048806890009e+01 9.5906378303466582e+00 2.7942436601482576e+01 + 33 8.7786367176445452e+01 -6.1345385969144544e+01 -7.1583303703860352e+01 + 34 1.2872581367351663e+02 8.7758298153621197e+01 6.8846441344195767e+01 + 35 1.6202779191187562e+02 2.8107540424415969e+01 -3.5704512791568746e+01 + 36 -5.1137206842063968e+01 -6.9909055340457016e+01 4.6496527650762957e+01 + 37 2.2163372903721005e+01 4.4734516931542203e+01 -6.8020131205899546e+01 + 38 -1.3243178798824840e+02 -9.8321818047878409e+01 -4.8866073883159153e+01 + 39 -1.4539787995247799e+01 7.0253538717035013e-01 -6.9871154389387859e+00 + 40 -6.3759251823074372e+00 3.6219715809810360e+00 -6.3431123972910317e+00 + 41 -1.2630739214311127e+02 -1.1406046951535005e+02 1.4236670870575175e+01 + 42 3.3347539164801596e+01 -1.2561964397086489e+02 -1.1707704405287748e+02 + 43 2.4855187641070557e+01 -3.4751994200759135e+01 1.1721400031115856e+02 + 44 4.0736513361477975e+01 -1.2073170509775336e+01 -2.3181680396846534e+01 + 45 -2.3236271184767592e+01 1.3605750605535329e+02 1.7647433643140135e+02 + 46 2.6919972472205083e+00 4.1721174495610596e+00 -3.8364650402611424e+00 + 47 -3.9486312669643070e+01 -4.3831801629913109e+01 -5.0165032821803521e+01 + 48 9.2977999041840789e+01 -8.8063595664574294e+01 -5.6623443462956914e+01 + 49 5.7416262761079196e+01 2.1747968406494360e+00 -4.3764886460190468e+01 + 50 5.0095819904085424e+01 2.7265328004138762e+01 1.0400611458885135e+02 + 51 1.8960698364911142e+01 -6.2786559548989580e+01 1.6723090861991949e+02 + 52 -1.0201510984444386e+02 1.0135385381698417e+02 -4.9656785152734628e+01 + 53 -8.9763310205569240e+01 1.0161533612990944e+02 -2.2026493760153934e+02 + 54 -3.0614025776936483e+01 -1.9050045961497887e+01 -2.5858482423080094e+01 + 55 -7.5156660469712333e-01 -9.6904023224723745e-01 1.2743032380741282e+00 + 56 -8.4859915855388337e+00 -1.4739109817962941e+01 1.0257420490900687e+01 + 57 4.7507223485547648e+01 1.6105805016960610e+02 1.0237826693894539e+02 + 58 -1.3170532544205338e+01 7.3223353402828366e+01 4.4818703297184754e+00 + 59 -6.4622658207012819e+01 9.6130764940749344e+01 1.5093510874841516e+02 + 60 3.0089230627199072e+01 1.7978668287947750e+02 -9.7557372159122423e+01 + 61 -5.1750204112643075e+01 -1.7194201577527312e+02 -1.2738134561846734e+02 + 62 5.7608008441869174e+01 5.3315211268989366e+01 -1.0988080965709574e+02 + 63 -2.5216351744964118e+01 -5.4629182629703294e+01 -5.0894055553792974e+01 + 64 -8.8059174176173670e+01 -3.0751077235434341e+01 3.1310372105706474e+01 ... From 547b9850b997bab5bd8ba6807b8bff5d7212e74b Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Wed, 13 Oct 2021 18:18:58 -0400 Subject: [PATCH 175/372] tiny optimization --- src/REAXFF/fix_qeq_reaxff.cpp | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/src/REAXFF/fix_qeq_reaxff.cpp b/src/REAXFF/fix_qeq_reaxff.cpp index 551687f5e9..e125671b78 100644 --- a/src/REAXFF/fix_qeq_reaxff.cpp +++ b/src/REAXFF/fix_qeq_reaxff.cpp @@ -1091,12 +1091,9 @@ void FixQEqReaxFF::get_chi_field() const double * const *x = (const double * const *)atom->x; const int *mask = atom->mask; const imageint *image = atom->image; - - // efield energy is in real units of kcal/mol/angstrom, need to convert to eV - - const double factor = 1.0/force->qe2f; const int nlocal = atom->nlocal; + // update electric field region if necessary Region *region = nullptr; @@ -1105,7 +1102,11 @@ void FixQEqReaxFF::get_chi_field() region->prematch(); } - // currently only support constant efield + // efield energy is in real units of kcal/mol/angstrom, need to convert to eV + + const double factor = -1.0/force->qe2f; + + // currently we only support constant efield // atom selection is for the group of fix efield if (efield->varflag == FixEfield::CONSTANT) { @@ -1122,7 +1123,7 @@ void FixQEqReaxFF::get_chi_field() if (mask[i] & efgroupbit) { if (region && !region->match(x[i][0],x[i][1],x[i][2])) continue; domain->unmap(x[i],image[i],unwrap); - chi_field[i] = -factor*(fx*unwrap[0] + fy*unwrap[1] + fz*unwrap[2]); + chi_field[i] = factor*(fx*unwrap[0] + fy*unwrap[1] + fz*unwrap[2]); } } } From c8dc6c50109fabd5969f500b7e075ad255ca95df Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Wed, 13 Oct 2021 18:25:13 -0400 Subject: [PATCH 176/372] whitespace --- examples/reaxff/water/in.water.acks2 | 2 +- examples/reaxff/water/in.water.acks2.field | 4 ++-- examples/reaxff/water/in.water.qeq | 2 +- examples/reaxff/water/in.water.qeq.field | 6 +++--- 4 files changed, 7 insertions(+), 7 deletions(-) diff --git a/examples/reaxff/water/in.water.acks2 b/examples/reaxff/water/in.water.acks2 index 03a486a41b..54199b8044 100644 --- a/examples/reaxff/water/in.water.acks2 +++ b/examples/reaxff/water/in.water.acks2 @@ -24,6 +24,6 @@ fix 2 all nvt temp 300 300 50.0 timestep 0.5 thermo 10 -thermo_style custom step temp press density vol +thermo_style custom step temp press density vol run 20 diff --git a/examples/reaxff/water/in.water.acks2.field b/examples/reaxff/water/in.water.acks2.field index 6450d026f1..9b0678422e 100644 --- a/examples/reaxff/water/in.water.acks2.field +++ b/examples/reaxff/water/in.water.acks2.field @@ -22,10 +22,10 @@ velocity all create 300.0 4928459 rot yes dist gaussian fix 1 all acks2/reaxff 1 0.0 10.0 1.0e-6 reaxff maxiter 1000 fix 2 all nvt temp 300 300 50.0 fix 3 all efield 0.0 0.0 1.0 -fix 4 all wall/reflect zlo EDGE zhi EDGE +fix 4 all wall/reflect zlo EDGE zhi EDGE timestep 0.5 thermo 10 -thermo_style custom step temp press density vol +thermo_style custom step temp press density vol run 20 diff --git a/examples/reaxff/water/in.water.qeq b/examples/reaxff/water/in.water.qeq index dd8a50e59f..85a56a0e60 100644 --- a/examples/reaxff/water/in.water.qeq +++ b/examples/reaxff/water/in.water.qeq @@ -24,6 +24,6 @@ fix 2 all nvt temp 300 300 50.0 timestep 0.5 thermo 10 -thermo_style custom step temp press density vol +thermo_style custom step temp press density vol run 20 diff --git a/examples/reaxff/water/in.water.qeq.field b/examples/reaxff/water/in.water.qeq.field index 3a08e14083..54b68ea898 100644 --- a/examples/reaxff/water/in.water.qeq.field +++ b/examples/reaxff/water/in.water.qeq.field @@ -21,11 +21,11 @@ velocity all create 300.0 4928459 rot yes dist gaussian fix 1 all qeq/reaxff 1 0.0 10.0 1.0e-6 reaxff maxiter 400 fix 2 all nvt temp 300 300 50.0 -fix 3 all efield 0.0 0.0 1.0 -fix 4 all wall/reflect zlo EDGE zhi EDGE +fix 3 all efield 0.0 0.0 1.0 +fix 4 all wall/reflect zlo EDGE zhi EDGE timestep 0.5 thermo 10 -thermo_style custom step temp press density vol +thermo_style custom step temp press density vol run 20 From 06ef216e612bd7e46aa72b492b65da4d76d3547f Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Wed, 13 Oct 2021 18:26:09 -0400 Subject: [PATCH 177/372] protect against using multiple fix efield instances. improve error messages. --- src/REAXFF/fix_qeq_reaxff.cpp | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/src/REAXFF/fix_qeq_reaxff.cpp b/src/REAXFF/fix_qeq_reaxff.cpp index e125671b78..f0ba651a26 100644 --- a/src/REAXFF/fix_qeq_reaxff.cpp +++ b/src/REAXFF/fix_qeq_reaxff.cpp @@ -380,10 +380,19 @@ void FixQEqReaxFF::reallocate_matrix() void FixQEqReaxFF::init() { if (!atom->q_flag) - error->all(FLERR,"Fix qeq/reaxff requires atom attribute q"); + error->all(FLERR,"Fix {} requires atom attribute q", style); if (group->count(igroup) == 0) - error->all(FLERR,"Fix qeq/reaxff group has no atoms"); + error->all(FLERR,"Fix {} group has no atoms", style); + + // there may be only one instance of fix efield + + int num_efield = 0; + for (int ifix = 0; ifix < modify->nfix; ++ifix) { + if (utils::strmatch(modify->fix[ifix]->style, "^efield")) ++num_efield; + } + if (num_efield > 1) + error->all(FLERR, "There may be only one fix efield instance used with fix {}", style); efield = nullptr; int ifix = modify->find_fix_by_style("^efield"); @@ -393,9 +402,9 @@ void FixQEqReaxFF::init() if (efield) { efield->init(); if (strcmp(update->unit_style,"real") != 0) - error->all(FLERR,"Must use unit_style real with fix qeq/reax and external fields"); + error->all(FLERR,"Must use unit_style real with fix {} and external fields", style); if (efield->varflag != FixEfield::CONSTANT) - error->all(FLERR,"Cannot yet use fix qeq/reaxff with variable efield"); + error->all(FLERR,"Cannot (yet) use fix {} with variable efield", style); if (((fabs(efield->ex) > SMALL) && domain->xperiodic) || ((fabs(efield->ey) > SMALL) && domain->yperiodic) || From a922c91c1ac6c3a45f026bd0f5a101b34edad231 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Wed, 13 Oct 2021 18:53:09 -0400 Subject: [PATCH 178/372] document restrictions to using ReaxFF charge equilibration with fix efield --- doc/src/fix_acks2_reaxff.rst | 6 ++++++ doc/src/fix_qeq_reaxff.rst | 6 ++++++ 2 files changed, 12 insertions(+) diff --git a/doc/src/fix_acks2_reaxff.rst b/doc/src/fix_acks2_reaxff.rst index 4ba8c36ee6..b555f77a66 100644 --- a/doc/src/fix_acks2_reaxff.rst +++ b/doc/src/fix_acks2_reaxff.rst @@ -94,6 +94,12 @@ This fix does not correctly handle interactions involving multiple periodic images of the same atom. Hence, it should not be used for periodic cell dimensions less than 10 angstroms. +This fix may be used in combination with :doc:`fix efield ` +and will apply the external electric field during charge equilibration, +but there may be only one fix efield instance used, it may only use a +constant electric field, and the electric field vector may only have +components in non-periodic directions. + Related commands """""""""""""""" diff --git a/doc/src/fix_qeq_reaxff.rst b/doc/src/fix_qeq_reaxff.rst index ada9e22ed7..9c9dce7f89 100644 --- a/doc/src/fix_qeq_reaxff.rst +++ b/doc/src/fix_qeq_reaxff.rst @@ -116,6 +116,12 @@ This fix does not correctly handle interactions involving multiple periodic images of the same atom. Hence, it should not be used for periodic cell dimensions less than 10 angstroms. +This fix may be used in combination with :doc:`fix efield ` +and will apply the external electric field during charge equilibration, +but there may be only one fix efield instance used, it may only use a +constant electric field, and the electric field vector may only have +components in non-periodic directions. + Related commands """""""""""""""" From 69a3b5b215229eee495662023828c944c237e727 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Wed, 13 Oct 2021 18:54:10 -0400 Subject: [PATCH 179/372] move common init() code into base class. warn when used with fix efield --- doc/src/fix_qeq.rst | 5 ++++- src/QEQ/fix_qeq.cpp | 20 ++++++++++++++++++++ src/QEQ/fix_qeq.h | 4 ++-- src/QEQ/fix_qeq_dynamic.cpp | 12 +----------- src/QEQ/fix_qeq_fire.cpp | 11 +---------- src/QEQ/fix_qeq_point.cpp | 12 +----------- src/QEQ/fix_qeq_shielded.cpp | 12 +----------- src/QEQ/fix_qeq_slater.cpp | 11 +---------- 8 files changed, 31 insertions(+), 56 deletions(-) diff --git a/doc/src/fix_qeq.rst b/doc/src/fix_qeq.rst index eab35391b5..f4e4a2a5cc 100644 --- a/doc/src/fix_qeq.rst +++ b/doc/src/fix_qeq.rst @@ -230,7 +230,10 @@ These fixes are part of the QEQ package. They are only enabled if LAMMPS was built with that package. See the :doc:`Build package ` page for more info. -The qeq fixes are not compatible with the GPU and USER-INTEL packages. +These qeq fixes are not compatible with the GPU and USER-INTEL packages. + +These qeq fixes will ignore electric field contributions from +:doc:`fix efield `. Related commands """""""""""""""" diff --git a/src/QEQ/fix_qeq.cpp b/src/QEQ/fix_qeq.cpp index e2cae80dd4..79205f7c81 100644 --- a/src/QEQ/fix_qeq.cpp +++ b/src/QEQ/fix_qeq.cpp @@ -23,9 +23,12 @@ #include "comm.h" #include "error.h" #include "force.h" +#include "group.h" #include "memory.h" +#include "modify.h" #include "neigh_list.h" #include "pair.h" +#include "respa.h" #include "suffix.h" #include "text_file_reader.h" #include "update.h" @@ -291,6 +294,23 @@ double FixQEq::compute_scalar() /* ---------------------------------------------------------------------- */ +void FixQEq::init() +{ + if (!atom->q_flag) + error->all(FLERR,"Fix {} requires atom attribute q", style); + + ngroup = group->count(igroup); + if (ngroup == 0) error->all(FLERR,"Fix {} group has no atoms", style); + + if ((comm->me == 0) && (modify->find_fix_by_style("^efield") >= 0)) + error->warning(FLERR,"Fix efield is ignored during charge equilibration"); + + if (utils::strmatch(update->integrate_style,"^respa")) + nlevels_respa = ((Respa *) update->integrate)->nlevels; +} + +/* ---------------------------------------------------------------------- */ + void FixQEq::init_list(int /*id*/, NeighList *ptr) { list = ptr; diff --git a/src/QEQ/fix_qeq.h b/src/QEQ/fix_qeq.h index f2260cbf30..bd25628508 100644 --- a/src/QEQ/fix_qeq.h +++ b/src/QEQ/fix_qeq.h @@ -1,4 +1,4 @@ -/* -*- c++ -*- ---------------------------------------------------------- +/* -*- c++ -*- --------------------------------------------------------- LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator https://www.lammps.org/, Sandia National Laboratories Steve Plimpton, sjplimp@sandia.gov @@ -39,7 +39,7 @@ class FixQEq : public Fix { // derived child classes must provide these functions - virtual void init() = 0; + virtual void init(); virtual void pre_force(int) = 0; virtual int pack_forward_comm(int, int *, double *, int, int *); diff --git a/src/QEQ/fix_qeq_dynamic.cpp b/src/QEQ/fix_qeq_dynamic.cpp index 06cfe0d0bd..689ecfb026 100644 --- a/src/QEQ/fix_qeq_dynamic.cpp +++ b/src/QEQ/fix_qeq_dynamic.cpp @@ -22,12 +22,10 @@ #include "comm.h" #include "error.h" #include "force.h" -#include "group.h" #include "kspace.h" #include "neigh_list.h" #include "neigh_request.h" #include "neighbor.h" -#include "respa.h" #include "update.h" #include @@ -66,11 +64,7 @@ FixQEqDynamic::FixQEqDynamic(LAMMPS *lmp, int narg, char **arg) : void FixQEqDynamic::init() { - if (!atom->q_flag) - error->all(FLERR,"Fix qeq/dynamic requires atom attribute q"); - - ngroup = group->count(igroup); - if (ngroup == 0) error->all(FLERR,"Fix qeq/dynamic group has no atoms"); + FixQEq::init(); int irequest = neighbor->request(this,instance_me); neighbor->requests[irequest]->pair = 0; @@ -82,10 +76,6 @@ void FixQEqDynamic::init() if (comm->me == 0) error->warning(FLERR,"Fix qeq/dynamic tolerance may be too small" " for damped dynamics"); - - if (utils::strmatch(update->integrate_style,"^respa")) - nlevels_respa = ((Respa *) update->integrate)->nlevels; - } /* ---------------------------------------------------------------------- */ diff --git a/src/QEQ/fix_qeq_fire.cpp b/src/QEQ/fix_qeq_fire.cpp index 77a5ae36a1..4e42ebc05e 100644 --- a/src/QEQ/fix_qeq_fire.cpp +++ b/src/QEQ/fix_qeq_fire.cpp @@ -22,14 +22,12 @@ #include "comm.h" #include "error.h" #include "force.h" -#include "group.h" #include "kspace.h" #include "neigh_list.h" #include "neigh_request.h" #include "neighbor.h" #include "pair_comb.h" #include "pair_comb3.h" -#include "respa.h" #include "update.h" #include @@ -76,11 +74,7 @@ FixQEqFire::FixQEqFire(LAMMPS *lmp, int narg, char **arg) : void FixQEqFire::init() { - if (!atom->q_flag) - error->all(FLERR,"Fix qeq/fire requires atom attribute q"); - - ngroup = group->count(igroup); - if (ngroup == 0) error->all(FLERR,"Fix qeq/fire group has no atoms"); + FixQEq::init(); int irequest = neighbor->request(this,instance_me); neighbor->requests[irequest]->pair = 0; @@ -93,9 +87,6 @@ void FixQEqFire::init() error->warning(FLERR,"Fix qeq/fire tolerance may be too small" " for damped fires"); - if (utils::strmatch(update->integrate_style,"^respa")) - nlevels_respa = ((Respa *) update->integrate)->nlevels; - comb3 = (PairComb3 *) force->pair_match("^comb3",0); if (!comb3) comb = (PairComb *) force->pair_match("^comb",0); } diff --git a/src/QEQ/fix_qeq_point.cpp b/src/QEQ/fix_qeq_point.cpp index 3ad76b74d9..0c9115994c 100644 --- a/src/QEQ/fix_qeq_point.cpp +++ b/src/QEQ/fix_qeq_point.cpp @@ -22,13 +22,11 @@ #include "comm.h" #include "error.h" #include "force.h" -#include "group.h" #include "kspace.h" #include "memory.h" #include "neigh_list.h" #include "neigh_request.h" #include "neighbor.h" -#include "respa.h" #include "update.h" #include @@ -51,11 +49,7 @@ FixQEqPoint::FixQEqPoint(LAMMPS *lmp, int narg, char **arg) : void FixQEqPoint::init() { - if (!atom->q_flag) - error->all(FLERR,"Fix qeq/point requires atom attribute q"); - - ngroup = group->count(igroup); - if (ngroup == 0) error->all(FLERR,"Fix qeq/point group has no atoms"); + FixQEq::init(); int irequest = neighbor->request(this,instance_me); neighbor->requests[irequest]->pair = 0; @@ -65,10 +59,6 @@ void FixQEqPoint::init() int ntypes = atom->ntypes; memory->create(shld,ntypes+1,ntypes+1,"qeq:shielding"); - - if (utils::strmatch(update->integrate_style,"^respa")) - nlevels_respa = ((Respa *) update->integrate)->nlevels; - } /* ---------------------------------------------------------------------- */ diff --git a/src/QEQ/fix_qeq_shielded.cpp b/src/QEQ/fix_qeq_shielded.cpp index 8c1b95996b..f2738051e8 100644 --- a/src/QEQ/fix_qeq_shielded.cpp +++ b/src/QEQ/fix_qeq_shielded.cpp @@ -22,14 +22,12 @@ #include "comm.h" #include "error.h" #include "force.h" -#include "group.h" #include "kspace.h" #include "memory.h" #include "neigh_list.h" #include "neigh_request.h" #include "neighbor.h" #include "pair.h" -#include "respa.h" #include "update.h" #include @@ -53,11 +51,7 @@ FixQEqShielded::FixQEqShielded(LAMMPS *lmp, int narg, char **arg) : void FixQEqShielded::init() { - if (!atom->q_flag) - error->all(FLERR,"Fix qeq/shielded requires atom attribute q"); - - ngroup = group->count(igroup); - if (ngroup == 0) error->all(FLERR,"Fix qeq/shielded group has no atoms"); + FixQEq::init(); int irequest = neighbor->request(this,instance_me); neighbor->requests[irequest]->pair = 0; @@ -75,10 +69,6 @@ void FixQEqShielded::init() if (gamma[i] == 0.0) error->all(FLERR,"Invalid param file for fix qeq/shielded"); } - - if (utils::strmatch(update->integrate_style,"^respa")) - nlevels_respa = ((Respa *) update->integrate)->nlevels; - } /* ---------------------------------------------------------------------- */ diff --git a/src/QEQ/fix_qeq_slater.cpp b/src/QEQ/fix_qeq_slater.cpp index d491b301d5..e276727f01 100644 --- a/src/QEQ/fix_qeq_slater.cpp +++ b/src/QEQ/fix_qeq_slater.cpp @@ -22,14 +22,12 @@ #include "comm.h" #include "error.h" #include "force.h" -#include "group.h" #include "kspace.h" #include "math_const.h" #include "neigh_list.h" #include "neigh_request.h" #include "neighbor.h" #include "pair.h" -#include "respa.h" #include "update.h" #include @@ -67,11 +65,7 @@ FixQEqSlater::FixQEqSlater(LAMMPS *lmp, int narg, char **arg) : void FixQEqSlater::init() { - if (!atom->q_flag) - error->all(FLERR,"Fix qeq/slater requires atom attribute q"); - - ngroup = group->count(igroup); - if (ngroup == 0) error->all(FLERR,"Fix qeq/slater group has no atoms"); + FixQEq::init(); int irequest = neighbor->request(this,instance_me); neighbor->requests[irequest]->pair = 0; @@ -84,9 +78,6 @@ void FixQEqSlater::init() if (zeta[i] == 0.0) error->all(FLERR,"Invalid param file for fix qeq/slater"); } - - if (utils::strmatch(update->integrate_style,"^respa")) - nlevels_respa = ((Respa *) update->integrate)->nlevels; } /* ---------------------------------------------------------------------- */ From 660bced187f2784f62d4c32f0138e862dc0652cc Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Wed, 13 Oct 2021 19:17:42 -0400 Subject: [PATCH 180/372] whitespace, pointer initializer, and permission fixes --- examples/mc/data.bead | 0 examples/mc/in.mixed | 8 ++++---- examples/mc/in.pure | 8 ++++---- src/MC/fix_mol_swap.cpp | 8 ++++---- src/MC/fix_mol_swap.h | 2 +- 5 files changed, 13 insertions(+), 13 deletions(-) mode change 100755 => 100644 examples/mc/data.bead mode change 100755 => 100644 examples/mc/in.mixed mode change 100755 => 100644 examples/mc/in.pure diff --git a/examples/mc/data.bead b/examples/mc/data.bead old mode 100755 new mode 100644 diff --git a/examples/mc/in.mixed b/examples/mc/in.mixed old mode 100755 new mode 100644 index ddf42d4ca4..318bb1312c --- a/examples/mc/in.mixed +++ b/examples/mc/in.mixed @@ -13,7 +13,7 @@ neigh_modify delay 0 pair_style lj/cut 1.1224620483 bond_style fene angle_style cosine -special_bonds lj 0.0 1.0 1.0 +special_bonds lj 0.0 1.0 1.0 read_data data.bead @@ -21,7 +21,7 @@ pair_coeff * * 1.0 1.0 1.1224620483 pair_coeff 1 2 1.02 1.0 1.1224620483 bond_coeff 1 30.0 1.5 1.0 1.0 angle_coeff 1 1.500 -pair_modify shift yes +pair_modify shift yes variable vt1 atom type==1 variable vt2 atom type==2 @@ -30,8 +30,8 @@ group g2 dynamic all var vt2 every 100 variable count1 equal count(g1) variable count2 equal count(g2) -timestep 0.010 - +timestep 0.010 + fix 1 all langevin 1.0 1.0 100.0 702547 fix 2 all nve fix 3 all mol/swap 100 1 1 2 482794 1.0 diff --git a/examples/mc/in.pure b/examples/mc/in.pure old mode 100755 new mode 100644 index a3796c979f..b12d2f7891 --- a/examples/mc/in.pure +++ b/examples/mc/in.pure @@ -13,7 +13,7 @@ neigh_modify delay 0 pair_style lj/cut 1.1224620483 bond_style fene angle_style cosine -special_bonds lj 0.0 1.0 1.0 +special_bonds lj 0.0 1.0 1.0 read_data data.bead @@ -21,7 +21,7 @@ pair_coeff * * 1.0 1.0 1.1224620483 pair_coeff 1 2 1.1 1.0 1.1224620483 bond_coeff 1 30.0 1.5 1.0 1.0 angle_coeff 1 1.500 -pair_modify shift yes +pair_modify shift yes variable vt1 atom type==1 variable vt2 atom type==2 @@ -30,8 +30,8 @@ group g2 dynamic all var vt2 every 100 variable count1 equal count(g1) variable count2 equal count(g2) -timestep 0.010 - +timestep 0.010 + fix 1 all langevin 1.0 1.0 100.0 702547 fix 2 all nve fix 3 all mol/swap 100 1 1 2 482794 1.0 diff --git a/src/MC/fix_mol_swap.cpp b/src/MC/fix_mol_swap.cpp index cd4d9d3cb8..8d7c2bf367 100644 --- a/src/MC/fix_mol_swap.cpp +++ b/src/MC/fix_mol_swap.cpp @@ -40,7 +40,7 @@ using namespace FixConst; /* ---------------------------------------------------------------------- */ FixMolSwap::FixMolSwap(LAMMPS *lmp, int narg, char **arg) : - Fix(lmp, narg, arg) + Fix(lmp, narg, arg), random(nullptr), c_pe(nullptr) { if (narg < 9) error->all(FLERR,"Illegal fix mol/swap command"); @@ -83,7 +83,7 @@ FixMolSwap::FixMolSwap(LAMMPS *lmp, int narg, char **arg) : error->all(FLERR,"Fix mol/swap atom types are invalid"); if (seed <= 0) error->all(FLERR,"Illegal fix mol/swap command"); if (temperature <= 0.0) error->all(FLERR,"Illegal fix mol/swap command"); - if (ke_flag && atom->rmass) + if (ke_flag && atom->rmass) error->all(FLERR,"Cannot conserve kinetic energy with fix mol/swap " "unless per-type masses"); @@ -211,7 +211,7 @@ void FixMolSwap::init() MPI_Allreduce(&flag,&flagall,1,MPI_INT,MPI_MAX,world); if (flagall) qflag = 0; - if (!qflag && comm->me == 0) + if (!qflag && comm->me == 0) error->warning(FLERR,"Cannot swap charges in fix mol/swap"); } @@ -277,7 +277,7 @@ int FixMolSwap::attempt_swap() // pick a random molecule // swap properties of all its eligible itype & jtype atoms - tagint molID = + tagint molID = minmol + static_cast (random->uniform() * (maxmol-minmol+1)); if (molID > maxmol) molID = maxmol; diff --git a/src/MC/fix_mol_swap.h b/src/MC/fix_mol_swap.h index 6c91d27b91..3197cbd832 100644 --- a/src/MC/fix_mol_swap.h +++ b/src/MC/fix_mol_swap.h @@ -44,7 +44,7 @@ class FixMolSwap : public Fix { int ke_flag; // 1 if kinetic energy is also swapped double i2j_vscale; // scale factors for velocity to keep KE constant - double j2i_vscale; + double j2i_vscale; int qflag; // 1 if charge is also swapped double iq,jq; // charge values for all itype,jtype atoms From c5617dc006d34666acc0b4a1f0a037b677c31c22 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Wed, 13 Oct 2021 19:25:09 -0400 Subject: [PATCH 181/372] fix spelling and make consistent --- doc/src/fix_atom_swap.rst | 6 +-- doc/src/fix_mol_swap.rst | 42 ++++++++++----------- doc/utils/sphinx-config/false_positives.txt | 3 ++ 3 files changed, 27 insertions(+), 24 deletions(-) diff --git a/doc/src/fix_atom_swap.rst b/doc/src/fix_atom_swap.rst index 6d8c2cab57..8a81e32818 100644 --- a/doc/src/fix_atom_swap.rst +++ b/doc/src/fix_atom_swap.rst @@ -102,9 +102,9 @@ volume. The specified region must have been previously defined with a specified region. Swaps are not otherwise attempted. You should ensure you do not swap atoms belonging to a molecule, or -LAMMPS will soon generatean error when it tries to find those atoms. -LAMMPS will warn you if any of the atoms eligible for swapping have a -non-zero molecule ID, but does not check for this at the time of +LAMMPS will eventually generate an error when it tries to find those +atoms. LAMMPS will warn you if any of the atoms eligible for swapping +have a non-zero molecule ID, but does not check for this at the time of swapping. If not using *semi-grand* this fix checks to ensure all atoms of the diff --git a/doc/src/fix_mol_swap.rst b/doc/src/fix_mol_swap.rst index 099230b385..737536fa0d 100644 --- a/doc/src/fix_mol_swap.rst +++ b/doc/src/fix_mol_swap.rst @@ -8,13 +8,13 @@ Syntax .. parsed-literal:: - fix ID group-ID mol/swap N X Itype Jtype seed T keyword value ... + fix ID group-ID mol/swap N X itype jtype seed T keyword value ... * ID, group-ID are documented in :doc:`fix ` command * atom/swap = style name of this fix command * N = invoke this fix every N steps * X = number of swaps to attempt every N steps -* Itype,Jtype = two atom types to swap with each othher +* itype,jtype = two atom types to swap with each other * seed = random # seed (positive integer) * T = scaling temperature of the MC swaps (temperature units) * zero or more keyword/value pairs may be appended to args @@ -40,45 +40,45 @@ Description This fix performs Monte Carlo swaps of two specified atom types within a randomly selected molecule. Two possible use cases are as follows. -First, consider a mixture of some molecules with atoms of Itype and -other moleclules with atoms of Jtype. The fix will select a random -molecule and attempt to swap all the Itype atoms to Jtype for the -first kind of molecule, or all the Jtype atoms to Itype for the second +First, consider a mixture of some molecules with atoms of itype and +other molecules with atoms of jtype. The fix will select a random +molecule and attempt to swap all the itype atoms to jtype for the +first kind of molecule, or all the jtype atoms to itype for the second kind. Because the swap will only take place if it is energetically favorable, the fix can be used to determine the miscibility of 2 different kinds of molecules much more quickly than just dynamics would do it. -Second, consider diblock copolymers with two types of monomers Itype -and Jtype. The fix will select a random molecule and attempt to do a -Itype <--> Jtype swap of all those monomers within the molecule. Thus +Second, consider diblock co-polymers with two types of monomers itype +and jtype. The fix will select a random molecule and attempt to do a +itype <--> jtype swap of all those monomers within the molecule. Thus the fix can be used to find the energetically favorable fractions of -two flavors of diblock copolymers. +two flavors of diblock co-polymers. -Intra-molecular swaps of atom types are attemped every N timesteps. On +Intra-molecular swaps of atom types are attempted every N timesteps. On that timestep, X swaps are attempted. For each attempt a single molecule ID is randomly selected. The range of possible molecule IDs from loID to hiID is pre-computed before each run begins. The loID/hiID is set for the molecule with the smallest/largest ID which -has any Itype or Jtype atoms in it. Note that if you define a system -with many molecule IDs between loID and hiID which have no Itype or -Jtype atoms, then the fix will be inefficient at performing swaps. +has any itype or jtype atoms in it. Note that if you define a system +with many molecule IDs between loID and hiID which have no itype or +jtype atoms, then the fix will be inefficient at performing swaps. Also note that if atoms with molecule ID = 0 exist, they are not considered molecules by this fix; they are assumed to be solvent atoms or molecules. Candidate atoms for swapping must also be in the fix group. Atoms -within the selected molecule which are not Itype or Jtype are ignored. +within the selected molecule which are not itype or jtype are ignored. -When an atom is swapped from Itype to Jtype (or vice versa), if -charges are defined, the charge values for Itype versus Jtype atoms -are also swapped. This requires that all Itype atoms in the system -have the same charge value. Likewise all Jtype atoms in the system +When an atom is swapped from itype to jtype (or vice versa), if +charges are defined, the charge values for itype versus jtype atoms +are also swapped. This requires that all itype atoms in the system +have the same charge value. Likewise all jtype atoms in the system must have the same charge value. If this is not the case, LAMMPS issues a warning that it cannot swap charge values. If the *ke* keyword is set to yes, which is the default, and the -masses of Itype and Jtype atoms are different, then when a swap +masses of itype and jtype atoms are different, then when a swap occurs, the velocity of the swapped atom is rescaled by the sqrt of the mass ratio, so as to conserve the kinetic energy of the atom. @@ -114,7 +114,7 @@ should be done. .. note:: One comment on computational efficiency. If the cutoff lengths - defined for the pair style are different for Itype versus Jtype + defined for the pair style are different for itype versus jtype atoms (for any of their interactions with any other atom type), then a new neighbor list needs to be generated for every attempted swap. This is potentially expensive if N is small or X is large. diff --git a/doc/utils/sphinx-config/false_positives.txt b/doc/utils/sphinx-config/false_positives.txt index 5f64a4229c..73d3480395 100644 --- a/doc/utils/sphinx-config/false_positives.txt +++ b/doc/utils/sphinx-config/false_positives.txt @@ -685,6 +685,7 @@ diagonalized diagonalizers diagonalizing Diallo +diblock Dickel diel differentiable @@ -1278,6 +1279,7 @@ hgrid hhmrr Hibbs Higdon +hiID Hijazi Hilger Hinestrosa @@ -1774,6 +1776,7 @@ Loewen logfile logfreq logicals +loID Lomdahl Lond lookup From afad3f42d530f98b122939ad5e12542320ba6988 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Wed, 13 Oct 2021 21:15:16 -0400 Subject: [PATCH 182/372] Report only compatible GPU, i.e. no GPU if mixed/double precision is requested by the hardware does not support it --- lib/gpu/lal_device.cpp | 12 ++++++++++-- src/info.cpp | 6 ++++-- src/lammps.cpp | 2 +- 3 files changed, 15 insertions(+), 5 deletions(-) diff --git a/lib/gpu/lal_device.cpp b/lib/gpu/lal_device.cpp index 59eac78483..47e6d6e500 100644 --- a/lib/gpu/lal_device.cpp +++ b/lib/gpu/lal_device.cpp @@ -1039,10 +1039,18 @@ Device global_device; using namespace LAMMPS_AL; -bool lmp_has_gpu_device() +// check if a suitable GPU is present. +// for mixed and double precision GPU library compilation +// also the GPU needs to support double precision. +bool lmp_has_compatible_gpu_device() { UCL_Device gpu; - return (gpu.num_platforms() > 0); + bool compatible_gpu = gpu.num_platforms() > 0; + #if defined(_SINGLE_DOUBLE) || defined(_DOUBLE_DOUBLE) + if (!gpu.double_precision(0)) + compatible_gpu = false; + #endif + return compatible_gpu; } std::string lmp_gpu_device_info() diff --git a/src/info.cpp b/src/info.cpp index 3d24f9b56a..d5283a72c2 100644 --- a/src/info.cpp +++ b/src/info.cpp @@ -1146,12 +1146,14 @@ bool Info::has_package(const std::string &package_name) { #if defined(LMP_GPU) extern bool lmp_gpu_config(const std::string &, const std::string &); -extern bool lmp_has_gpu_device(); +extern bool lmp_has_compatible_gpu_device(); extern std::string lmp_gpu_device_info(); +// we will only report compatible GPUs, i.e. when a GPU device is +// available *and* supports the required floating point precision bool Info::has_gpu_device() { - return lmp_has_gpu_device(); + return lmp_has_compatible_gpu_device(); } std::string Info::get_gpu_device_info() diff --git a/src/lammps.cpp b/src/lammps.cpp index f4dd4e5708..7185074ab4 100644 --- a/src/lammps.cpp +++ b/src/lammps.cpp @@ -1340,7 +1340,7 @@ void LAMMPS::print_config(FILE *fp) fmt::print(fp,"Accelerator configuration:\n\n{}\n", Info::get_accelerator_info()); #if defined(LMP_GPU) - fmt::print(fp,"GPU present: {}\n\n",Info::has_gpu_device() ? "yes" : "no"); + fmt::print(fp,"Compatible GPU present: {}\n\n",Info::has_gpu_device() ? "yes" : "no"); #endif fputs("Active compile time flags:\n\n",fp); From f4851e9103f96f034e0f5bcd3cc0f836d76b4258 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Wed, 13 Oct 2021 21:54:18 -0400 Subject: [PATCH 183/372] change check for reset image flags to print messages only once per data file --- src/atom.cpp | 25 ++++--------------------- src/atom.h | 4 ++++ src/read_data.cpp | 20 ++++++++++++++++++++ 3 files changed, 28 insertions(+), 21 deletions(-) diff --git a/src/atom.cpp b/src/atom.cpp index 9fe115f5aa..796c0ba156 100644 --- a/src/atom.cpp +++ b/src/atom.cpp @@ -260,6 +260,7 @@ Atom::Atom(LAMMPS *lmp) : Pointers(lmp) map_hash = nullptr; unique_tags = nullptr; + reset_image_flag[0] = reset_image_flag[1] = reset_image_flag[2] = false; atom_style = nullptr; avec = nullptr; @@ -1134,7 +1135,6 @@ void Atom::data_atoms(int n, char *buf, tagint id_offset, tagint mol_offset, // remap atom into simulation box // if atom is in my sub-domain, unpack its values - int flagx = 0, flagy = 0, flagz = 0; for (int i = 0; i < n; i++) { next = strchr(buf,'\n'); @@ -1154,9 +1154,9 @@ void Atom::data_atoms(int n, char *buf, tagint id_offset, tagint mol_offset, imz = utils::inumeric(FLERR,values[iptr+2],false,lmp); if ((domain->dimension == 2) && (imz != 0)) error->all(FLERR,"Z-direction image flag must be 0 for 2d-systems"); - if ((!domain->xperiodic) && (imx != 0)) { flagx = 1; imx = 0; } - if ((!domain->yperiodic) && (imy != 0)) { flagy = 1; imy = 0; } - if ((!domain->zperiodic) && (imz != 0)) { flagz = 1; imz = 0; } + if ((!domain->xperiodic) && (imx != 0)) { reset_image_flag[0] = true; imx = 0; } + if ((!domain->yperiodic) && (imy != 0)) { reset_image_flag[1] = true; imy = 0; } + if ((!domain->zperiodic) && (imz != 0)) { reset_image_flag[2] = true; imz = 0; } } imagedata = ((imageint) (imx + IMGMAX) & IMGMASK) | (((imageint) (imy + IMGMAX) & IMGMASK) << IMGBITS) | @@ -1192,23 +1192,6 @@ void Atom::data_atoms(int n, char *buf, tagint id_offset, tagint mol_offset, buf = next + 1; } - - // warn if reading data with non-zero image flags for non-periodic boundaries. - // we may want to turn this into an error at some point, since this essentially - // creates invalid position information that works by accident most of the time. - - if (comm->me == 0) { - if (flagx) - error->warning(FLERR,"Non-zero imageflag(s) in x direction for " - "non-periodic boundary reset to zero"); - if (flagy) - error->warning(FLERR,"Non-zero imageflag(s) in y direction for " - "non-periodic boundary reset to zero"); - if (flagz) - error->warning(FLERR,"Non-zero imageflag(s) in z direction for " - "non-periodic boundary reset to zero"); - } - delete [] values; } diff --git a/src/atom.h b/src/atom.h index e196d2d135..25a56de1c4 100644 --- a/src/atom.h +++ b/src/atom.h @@ -270,6 +270,10 @@ class Atom : protected Pointers { int *sametag; // sametag[I] = next atom with same ID, -1 if no more + // true if image flags were reset to 0 during data_atoms() + + bool reset_image_flag[3]; + // AtomVec factory types and map typedef AtomVec *(*AtomVecCreator)(LAMMPS *); diff --git a/src/read_data.cpp b/src/read_data.cpp index c17ab97229..edbfc16696 100644 --- a/src/read_data.cpp +++ b/src/read_data.cpp @@ -312,6 +312,10 @@ void ReadData::command(int narg, char **arg) error->all(FLERR,fmt::format("Cannot open file {}: {}", arg[0], utils::getsyserror())); + // reset so we can warn about reset image flags exactly once per data file + + atom->reset_image_flag[0] = atom->reset_image_flag[1] = atom->reset_image_flag[2] = false; + // first time system initialization if (addflag == NONE) { @@ -1238,6 +1242,22 @@ void ReadData::atoms() nread += nchunk; } + // warn if we have read data with non-zero image flags for non-periodic boundaries. + // we may want to turn this into an error at some point, since this essentially + // creates invalid position information that works by accident most of the time. + + if (comm->me == 0) { + if (atom->reset_image_flag[0]) + error->warning(FLERR,"Non-zero imageflag(s) in x direction for " + "non-periodic boundary reset to zero"); + if (atom->reset_image_flag[1]) + error->warning(FLERR,"Non-zero imageflag(s) in y direction for " + "non-periodic boundary reset to zero"); + if (atom->reset_image_flag[2]) + error->warning(FLERR,"Non-zero imageflag(s) in z direction for " + "non-periodic boundary reset to zero"); + } + // check that all atoms were assigned correctly bigint n = atom->nlocal; From a1572ce9a55d3ce68e1cfc8f6bc9610e070adca5 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Wed, 13 Oct 2021 22:47:25 -0400 Subject: [PATCH 184/372] link with -ldl except on Windows for dlopen/dlclose/dlsym support --- cmake/CMakeLists.txt | 15 ++++++--------- doc/src/plugin.rst | 6 ++---- src/MAKE/MACHINES/Makefile.cygwin | 3 +++ src/MAKE/Makefile.mpi | 5 +++++ src/MAKE/Makefile.serial | 7 ++++++- src/Makefile | 5 +++-- 6 files changed, 25 insertions(+), 16 deletions(-) diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt index fc427acdc9..ec4a9c2eb7 100644 --- a/cmake/CMakeLists.txt +++ b/cmake/CMakeLists.txt @@ -617,15 +617,12 @@ foreach(PKG_WITH_INCL CORESHELL QEQ OPENMP DPD-SMOOTH KOKKOS OPT INTEL GPU) endforeach() if(PKG_PLUGIN) - if(BUILD_SHARED_LIBS) - target_compile_definitions(lammps PRIVATE -DLMP_PLUGIN) - else() - message(WARNING "Plugin loading will not work unless BUILD_SHARED_LIBS is enabled") - endif() - # link with -ldl or equivalent for plugin loading; except on Windows - if(NOT ${CMAKE_SYSTEM_NAME} STREQUAL "Windows") - target_link_libraries(lammps PRIVATE ${CMAKE_DL_LIBS}) - endif() + target_compile_definitions(lammps PRIVATE -DLMP_PLUGIN) +endif() + +# link with -ldl or equivalent for plugin loading; except on Windows +if(NOT ${CMAKE_SYSTEM_NAME} STREQUAL "Windows") + target_link_libraries(lammps PRIVATE ${CMAKE_DL_LIBS}) endif() ###################################################################### diff --git a/doc/src/plugin.rst b/doc/src/plugin.rst index 7995ddc369..5372dffc83 100644 --- a/doc/src/plugin.rst +++ b/doc/src/plugin.rst @@ -65,10 +65,8 @@ only enabled if LAMMPS was built with that package. See the :doc:`Build package ` page for more info. Plugins are not available on Windows. -For the loading of plugins to work the LAMMPS library must be -:ref:`compiled as a shared library `. If plugins -access functions or classes from a package, LAMMPS must have -been compiled with that package included. +If plugins access functions or classes from a package, LAMMPS must +have been compiled with that package included. Plugins are dependent on the LAMMPS binary interface (ABI) and particularly the MPI library used. So they are not guaranteed diff --git a/src/MAKE/MACHINES/Makefile.cygwin b/src/MAKE/MACHINES/Makefile.cygwin index 3d4a50a8ea..1af9cfe802 100644 --- a/src/MAKE/MACHINES/Makefile.cygwin +++ b/src/MAKE/MACHINES/Makefile.cygwin @@ -65,6 +65,9 @@ JPG_INC = JPG_PATH = JPG_LIB = +# library for loading shared objects (defaults to -ldl, but should be empty on Windows) + +override DYN_LIB = # --------------------------------------------------------------------- # build rules and dependencies # do not edit this section diff --git a/src/MAKE/Makefile.mpi b/src/MAKE/Makefile.mpi index 42f48b4e2c..cf796be69b 100644 --- a/src/MAKE/Makefile.mpi +++ b/src/MAKE/Makefile.mpi @@ -65,6 +65,11 @@ JPG_INC = JPG_PATH = JPG_LIB = +# library for loading shared objects (defaults to -ldl) +# uncomment to change the default + +# override DYN_LIB = + # --------------------------------------------------------------------- # build rules and dependencies # do not edit this section diff --git a/src/MAKE/Makefile.serial b/src/MAKE/Makefile.serial index b527919147..6dd8415ea9 100644 --- a/src/MAKE/Makefile.serial +++ b/src/MAKE/Makefile.serial @@ -65,6 +65,11 @@ JPG_INC = JPG_PATH = JPG_LIB = +# library for loading shared objects (defaults to -ldl, should be empty on Windows) +# uncomment to change the default + +# override DYN_LIB = + # --------------------------------------------------------------------- # build rules and dependencies # do not edit this section @@ -74,7 +79,7 @@ include Makefile.package EXTRA_INC = $(LMP_INC) $(PKG_INC) $(MPI_INC) $(FFT_INC) $(JPG_INC) $(PKG_SYSINC) EXTRA_PATH = $(PKG_PATH) $(MPI_PATH) $(FFT_PATH) $(JPG_PATH) $(PKG_SYSPATH) -EXTRA_LIB = $(PKG_LIB) $(MPI_LIB) $(FFT_LIB) $(JPG_LIB) $(PKG_SYSLIB) +EXTRA_LIB = $(PKG_LIB) $(MPI_LIB) $(FFT_LIB) $(JPG_LIB) $(PKG_SYSLIB) $(DYN_LIB) EXTRA_CPP_DEPENDS = $(PKG_CPP_DEPENDS) EXTRA_LINK_DEPENDS = $(PKG_LINK_DEPENDS) diff --git a/src/Makefile b/src/Makefile index 7f02c1e84b..2d651c4986 100644 --- a/src/Makefile +++ b/src/Makefile @@ -2,6 +2,7 @@ SHELL = /bin/bash PYTHON = python +DYN_LIB = -ldl #.IGNORE: @@ -400,14 +401,14 @@ ifeq ($(mode),static) @cd $(objdir); \ $(MAKE) $(MFLAGS) "OBJ = $(OBJLIB)" "INC = $(INC)" "SHFLAGS =" \ "LMPLIB = $(ARLIB)" "ARLIB = $(ARLIB)" "SHLIB = $(SHLIB)" \ - "LMPLINK = $(LMPLINK)" "EXE = ../$(EXE)" ../$(EXE) + "LMPLINK = $(LMPLINK)" "DYN_LIB = $(DYN_LIB)" "EXE = ../$(EXE)" ../$(EXE) @ln -s $(ARLIB) $(ARLINK) endif ifeq ($(mode),shared) @cd $(objdir); \ $(MAKE) $(MFLAGS) "OBJ = $(OBJLIB)" "INC = $(INC)" \ "LMPLIB = $(SHLIB)" "ARLIB = $(ARLIB)" "SHLIB = $(SHLIB)" \ - "LMPLINK = $(LMPLINK)" "EXE = ../$(EXE)" ../$(EXE) + "LMPLINK = $(LMPLINK)" "DYN_LIB = $(DYN_LIB)" "EXE = ../$(EXE)" ../$(EXE) @ln -s $(SHLIB) $(SHLINK) endif # backward compatibility From 3f3d44bc2500b1fe3a1c9b6c4e632c18c4a687a3 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Wed, 13 Oct 2021 22:47:37 -0400 Subject: [PATCH 185/372] add new files --- src/.gitignore | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/.gitignore b/src/.gitignore index 91990f77b8..7da6b7feb7 100644 --- a/src/.gitignore +++ b/src/.gitignore @@ -1395,6 +1395,8 @@ /fix_drude_transform.h /fix_langevin_drude.cpp /fix_langevin_drude.h +/fix_mol_swap.cpp +/fix_mol_swap.h /fix_pimd.cpp /fix_pimd.h /fix_qbmsst.cpp From 2fba6b44e43ea4ad04452bff11cc39f8eede7ed6 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Wed, 13 Oct 2021 23:59:05 -0400 Subject: [PATCH 186/372] use '= default' when default functions should be used --- lib/poems/body23joint.cpp | 3 +-- lib/poems/freebodyjoint.cpp | 3 +-- lib/poems/inertialframe.cpp | 3 +-- lib/poems/joint.cpp | 3 +-- lib/poems/mixedjoint.cpp | 6 ++---- lib/poems/particle.cpp | 6 ++---- lib/poems/point.cpp | 3 +-- lib/poems/prismaticjoint.cpp | 3 +-- lib/poems/revolutejoint.cpp | 3 +-- lib/poems/rigidbody.cpp | 6 ++---- lib/poems/solver.cpp | 7 ++----- lib/poems/sphericaljoint.cpp | 3 +-- src/CG-DNA/atom_vec_oxdna.cpp | 3 --- src/CG-DNA/atom_vec_oxdna.h | 2 +- src/COMPRESS/dump_atom_gz.cpp | 4 ---- src/COMPRESS/dump_atom_gz.h | 2 +- src/COMPRESS/dump_atom_zstd.cpp | 4 ---- src/COMPRESS/dump_atom_zstd.h | 2 +- src/COMPRESS/dump_cfg_gz.cpp | 4 ---- src/COMPRESS/dump_cfg_gz.h | 2 +- src/COMPRESS/dump_cfg_zstd.cpp | 4 ---- src/COMPRESS/dump_cfg_zstd.h | 2 +- src/COMPRESS/dump_custom_gz.cpp | 4 ---- src/COMPRESS/dump_custom_gz.h | 2 +- src/COMPRESS/dump_custom_zstd.cpp | 6 ------ src/COMPRESS/dump_custom_zstd.h | 2 +- src/COMPRESS/dump_local_gz.cpp | 4 ---- src/COMPRESS/dump_local_gz.h | 2 +- src/COMPRESS/dump_local_zstd.cpp | 4 ---- src/COMPRESS/dump_local_zstd.h | 2 +- src/COMPRESS/dump_xyz_gz.cpp | 4 ---- src/COMPRESS/dump_xyz_gz.h | 2 +- src/COMPRESS/dump_xyz_zstd.cpp | 4 ---- src/COMPRESS/dump_xyz_zstd.h | 2 +- src/DIELECTRIC/fix_polarize_bem_icc.cpp | 4 ---- src/DIELECTRIC/fix_polarize_bem_icc.h | 2 +- src/DPD-MESO/fix_edpd_source.cpp | 6 ------ src/DPD-MESO/fix_edpd_source.h | 2 +- src/DPD-MESO/fix_tdpd_source.cpp | 6 ------ src/DPD-MESO/fix_tdpd_source.h | 2 +- src/DPD-REACT/nbin_ssa.cpp | 4 ---- src/DPD-REACT/nbin_ssa.h | 2 +- src/KSPACE/ewald_dipole_spin.cpp | 6 ------ src/KSPACE/ewald_dipole_spin.h | 2 +- src/LATBOLTZ/fix_lb_viscous.cpp | 7 ------- src/LATBOLTZ/fix_lb_viscous.h | 2 +- src/MANIFOLD/manifold_thylakoid_shared.cpp | 5 ----- src/MANIFOLD/manifold_thylakoid_shared.h | 2 +- src/MESONT/pair_mesont_tpm.cpp | 2 +- src/ML-IAP/mliap_model_linear.cpp | 4 ---- src/ML-IAP/mliap_model_linear.h | 2 +- src/ML-IAP/mliap_model_quadratic.cpp | 4 ---- src/ML-IAP/mliap_model_quadratic.h | 2 +- src/OPENMP/pair_lj_cut_coul_cut_dielectric_omp.cpp | 4 ---- src/OPENMP/pair_lj_cut_coul_cut_dielectric_omp.h | 2 +- src/OPENMP/pair_lj_cut_coul_long_dielectric_omp.cpp | 4 ---- src/OPENMP/pair_lj_cut_coul_long_dielectric_omp.h | 2 +- src/OPENMP/pair_lubricate_omp.cpp | 5 ----- src/OPENMP/pair_lubricate_omp.h | 2 +- src/OPENMP/pair_lubricate_poly_omp.cpp | 5 ----- src/OPENMP/pair_lubricate_poly_omp.h | 2 +- src/SPIN/pair_spin.cpp | 4 ---- src/SPIN/pair_spin.h | 2 +- src/lmppython.cpp | 4 ---- src/lmppython.h | 2 +- src/table_file_reader.cpp | 3 --- src/table_file_reader.h | 2 +- src/tokenizer.cpp | 3 --- src/tokenizer.h | 2 +- unittest/c-library/test_library_commands.cpp | 6 +++--- unittest/c-library/test_library_config.cpp | 6 +++--- unittest/c-library/test_library_external.cpp | 4 ++-- unittest/c-library/test_library_open.cpp | 4 ++-- unittest/c-library/test_library_properties.cpp | 12 ++++++------ unittest/c-library/test_library_scatter_gather.cpp | 6 +++--- unittest/cplusplus/test_input_class.cpp | 2 +- 76 files changed, 65 insertions(+), 205 deletions(-) diff --git a/lib/poems/body23joint.cpp b/lib/poems/body23joint.cpp index 2f024a9a58..ef6d888aaf 100644 --- a/lib/poems/body23joint.cpp +++ b/lib/poems/body23joint.cpp @@ -30,8 +30,7 @@ Body23Joint::Body23Joint(){ DimQandU(4,2); } -Body23Joint::~Body23Joint(){ -} +Body23Joint::~Body23Joint() = default; JointType Body23Joint::GetType(){ return BODY23JOINT; diff --git a/lib/poems/freebodyjoint.cpp b/lib/poems/freebodyjoint.cpp index 113440bb08..84e47a25f6 100644 --- a/lib/poems/freebodyjoint.cpp +++ b/lib/poems/freebodyjoint.cpp @@ -30,8 +30,7 @@ FreeBodyJoint::FreeBodyJoint(){ DimQandU(7,6); } -FreeBodyJoint::~FreeBodyJoint(){ -} +FreeBodyJoint::~FreeBodyJoint() = default; JointType FreeBodyJoint::GetType(){ return FREEBODYJOINT; diff --git a/lib/poems/inertialframe.cpp b/lib/poems/inertialframe.cpp index d2939260b0..10d10f777c 100644 --- a/lib/poems/inertialframe.cpp +++ b/lib/poems/inertialframe.cpp @@ -33,8 +33,7 @@ InertialFrame::InertialFrame(){ alpha.Zeros(); alpha_t.Zeros(); } -InertialFrame::~InertialFrame(){ -} +InertialFrame::~InertialFrame() = default; BodyType InertialFrame::GetType(){ return INERTIALFRAME; diff --git a/lib/poems/joint.cpp b/lib/poems/joint.cpp index 6bd5029e1c..37028f3a97 100644 --- a/lib/poems/joint.cpp +++ b/lib/poems/joint.cpp @@ -33,8 +33,7 @@ Joint::Joint(){ pk_C_k.Identity(); } -Joint::~Joint(){ -} +Joint::~Joint() = default; void Joint::SetBodies(Body* b1, Body* b2){ body1 = b1; diff --git a/lib/poems/mixedjoint.cpp b/lib/poems/mixedjoint.cpp index 8597b3bb46..f9aad39615 100644 --- a/lib/poems/mixedjoint.cpp +++ b/lib/poems/mixedjoint.cpp @@ -26,11 +26,9 @@ -MixedJoint::MixedJoint(){ -} +MixedJoint::MixedJoint() = default; -MixedJoint::~MixedJoint(){ -} +MixedJoint::~MixedJoint() = default; JointType MixedJoint::GetType(){ return MIXEDJOINT; diff --git a/lib/poems/particle.cpp b/lib/poems/particle.cpp index 1993136923..0094a81ec0 100644 --- a/lib/poems/particle.cpp +++ b/lib/poems/particle.cpp @@ -19,11 +19,9 @@ #include "particle.h" #include "fixedpoint.h" -Particle::Particle(){ -} +Particle::Particle() = default; -Particle::~Particle(){ -} +Particle::~Particle() = default; BodyType Particle::GetType(){ return PARTICLE; diff --git a/lib/poems/point.cpp b/lib/poems/point.cpp index 680c30598e..a742473669 100644 --- a/lib/poems/point.cpp +++ b/lib/poems/point.cpp @@ -21,8 +21,7 @@ Point::Point(){ position.Zeros(); } -Point::~Point(){ -} +Point::~Point() = default; bool Point::ReadIn(std::istream& in){ return ReadInPointData(in); diff --git a/lib/poems/prismaticjoint.cpp b/lib/poems/prismaticjoint.cpp index e0a0e7b87a..b40705c8dc 100644 --- a/lib/poems/prismaticjoint.cpp +++ b/lib/poems/prismaticjoint.cpp @@ -27,8 +27,7 @@ PrismaticJoint::PrismaticJoint(){ u.Dim(1); udot.Dim(1); } -PrismaticJoint::~PrismaticJoint(){ -} +PrismaticJoint::~PrismaticJoint() = default; JointType PrismaticJoint::GetType(){ return PRISMATICJOINT; diff --git a/lib/poems/revolutejoint.cpp b/lib/poems/revolutejoint.cpp index eef83dc978..5a4ad3edfd 100644 --- a/lib/poems/revolutejoint.cpp +++ b/lib/poems/revolutejoint.cpp @@ -29,8 +29,7 @@ RevoluteJoint::RevoluteJoint(){ SetAxisPK(axis); } -RevoluteJoint::~RevoluteJoint(){ -} +RevoluteJoint::~RevoluteJoint() = default; JointType RevoluteJoint::GetType(){ return REVOLUTEJOINT; diff --git a/lib/poems/rigidbody.cpp b/lib/poems/rigidbody.cpp index 92963f93da..f5063df1e2 100644 --- a/lib/poems/rigidbody.cpp +++ b/lib/poems/rigidbody.cpp @@ -20,10 +20,8 @@ using namespace std; -RigidBody::RigidBody(){ -} -RigidBody::~RigidBody(){ -} +RigidBody::RigidBody() = default; +RigidBody::~RigidBody() = default; BodyType RigidBody::GetType(){ return RIGIDBODY; diff --git a/lib/poems/solver.cpp b/lib/poems/solver.cpp index 8380553d92..f6d0996d88 100644 --- a/lib/poems/solver.cpp +++ b/lib/poems/solver.cpp @@ -19,12 +19,9 @@ #include "system.h" #include "matrices.h" -Solver::Solver(){ +Solver::Solver() = default; -} - -Solver::~Solver(){ -} +Solver::~Solver() = default; void Solver::SetSystem(System* s){ system = s; diff --git a/lib/poems/sphericaljoint.cpp b/lib/poems/sphericaljoint.cpp index aadd3ebd67..e03ee77914 100644 --- a/lib/poems/sphericaljoint.cpp +++ b/lib/poems/sphericaljoint.cpp @@ -30,8 +30,7 @@ SphericalJoint::SphericalJoint(){ DimQandU(4,3); } -SphericalJoint::~SphericalJoint(){ -} +SphericalJoint::~SphericalJoint() = default; JointType SphericalJoint::GetType(){ return SPHERICALJOINT; diff --git a/src/CG-DNA/atom_vec_oxdna.cpp b/src/CG-DNA/atom_vec_oxdna.cpp index e1c99d7ca5..120fe5d9ac 100644 --- a/src/CG-DNA/atom_vec_oxdna.cpp +++ b/src/CG-DNA/atom_vec_oxdna.cpp @@ -52,9 +52,6 @@ AtomVecOxdna::AtomVecOxdna(LAMMPS *lmp) : AtomVec(lmp) error->warning(FLERR, "Write_data command requires newton on to preserve 3'->5' bond polarity"); } -/* ---------------------------------------------------------------------- */ -AtomVecOxdna::~AtomVecOxdna() {} - /* ---------------------------------------------------------------------- set local copies of all grow ptrs used by this class, except defaults needed in replicate when 2 atom classes exist and it calls pack_restart() diff --git a/src/CG-DNA/atom_vec_oxdna.h b/src/CG-DNA/atom_vec_oxdna.h index f05f6d2013..c100abdfff 100644 --- a/src/CG-DNA/atom_vec_oxdna.h +++ b/src/CG-DNA/atom_vec_oxdna.h @@ -27,7 +27,7 @@ namespace LAMMPS_NS { class AtomVecOxdna : public AtomVec { public: AtomVecOxdna(class LAMMPS *); - ~AtomVecOxdna(); + ~AtomVecOxdna() = default; void grow_pointers(); void data_atom_post(int); diff --git a/src/COMPRESS/dump_atom_gz.cpp b/src/COMPRESS/dump_atom_gz.cpp index 5f799054bb..8bdc025436 100644 --- a/src/COMPRESS/dump_atom_gz.cpp +++ b/src/COMPRESS/dump_atom_gz.cpp @@ -27,10 +27,6 @@ DumpAtomGZ::DumpAtomGZ(LAMMPS *lmp, int narg, char **arg) : DumpAtom(lmp, narg, if (!compressed) error->all(FLERR, "Dump atom/gz only writes compressed files"); } -/* ---------------------------------------------------------------------- */ - -DumpAtomGZ::~DumpAtomGZ() {} - /* ---------------------------------------------------------------------- generic opening of a dump file ASCII or binary or compressed diff --git a/src/COMPRESS/dump_atom_gz.h b/src/COMPRESS/dump_atom_gz.h index 777c34345a..2b87e36f1d 100644 --- a/src/COMPRESS/dump_atom_gz.h +++ b/src/COMPRESS/dump_atom_gz.h @@ -28,7 +28,7 @@ namespace LAMMPS_NS { class DumpAtomGZ : public DumpAtom { public: DumpAtomGZ(class LAMMPS *, int, char **); - virtual ~DumpAtomGZ(); + virtual ~DumpAtomGZ() = default; protected: GzFileWriter writer; diff --git a/src/COMPRESS/dump_atom_zstd.cpp b/src/COMPRESS/dump_atom_zstd.cpp index a23ea2025b..aa1c161d73 100644 --- a/src/COMPRESS/dump_atom_zstd.cpp +++ b/src/COMPRESS/dump_atom_zstd.cpp @@ -33,10 +33,6 @@ DumpAtomZstd::DumpAtomZstd(LAMMPS *lmp, int narg, char **arg) : DumpAtom(lmp, na if (!compressed) error->all(FLERR, "Dump atom/zstd only writes compressed files"); } -/* ---------------------------------------------------------------------- */ - -DumpAtomZstd::~DumpAtomZstd() {} - /* ---------------------------------------------------------------------- generic opening of a dump file ASCII or binary or compressed diff --git a/src/COMPRESS/dump_atom_zstd.h b/src/COMPRESS/dump_atom_zstd.h index 4a85089167..fb2da0c83b 100644 --- a/src/COMPRESS/dump_atom_zstd.h +++ b/src/COMPRESS/dump_atom_zstd.h @@ -34,7 +34,7 @@ namespace LAMMPS_NS { class DumpAtomZstd : public DumpAtom { public: DumpAtomZstd(class LAMMPS *, int, char **); - virtual ~DumpAtomZstd(); + virtual ~DumpAtomZstd() = default; protected: ZstdFileWriter writer; diff --git a/src/COMPRESS/dump_cfg_gz.cpp b/src/COMPRESS/dump_cfg_gz.cpp index 8d6347d978..8d85e8cf83 100644 --- a/src/COMPRESS/dump_cfg_gz.cpp +++ b/src/COMPRESS/dump_cfg_gz.cpp @@ -29,10 +29,6 @@ DumpCFGGZ::DumpCFGGZ(LAMMPS *lmp, int narg, char **arg) : DumpCFG(lmp, narg, arg if (!compressed) error->all(FLERR, "Dump cfg/gz only writes compressed files"); } -/* ---------------------------------------------------------------------- */ - -DumpCFGGZ::~DumpCFGGZ() {} - /* ---------------------------------------------------------------------- generic opening of a dump file ASCII or binary or compressed diff --git a/src/COMPRESS/dump_cfg_gz.h b/src/COMPRESS/dump_cfg_gz.h index ccd40141eb..153a4490c6 100644 --- a/src/COMPRESS/dump_cfg_gz.h +++ b/src/COMPRESS/dump_cfg_gz.h @@ -28,7 +28,7 @@ namespace LAMMPS_NS { class DumpCFGGZ : public DumpCFG { public: DumpCFGGZ(class LAMMPS *, int, char **); - virtual ~DumpCFGGZ(); + virtual ~DumpCFGGZ() = default; protected: GzFileWriter writer; diff --git a/src/COMPRESS/dump_cfg_zstd.cpp b/src/COMPRESS/dump_cfg_zstd.cpp index 73ee3e7e11..6d70749479 100644 --- a/src/COMPRESS/dump_cfg_zstd.cpp +++ b/src/COMPRESS/dump_cfg_zstd.cpp @@ -35,10 +35,6 @@ DumpCFGZstd::DumpCFGZstd(LAMMPS *lmp, int narg, char **arg) : DumpCFG(lmp, narg, if (!compressed) error->all(FLERR, "Dump cfg/zstd only writes compressed files"); } -/* ---------------------------------------------------------------------- */ - -DumpCFGZstd::~DumpCFGZstd() {} - /* ---------------------------------------------------------------------- generic opening of a dump file ASCII or binary or compressed diff --git a/src/COMPRESS/dump_cfg_zstd.h b/src/COMPRESS/dump_cfg_zstd.h index ddcb06f00e..32013b274e 100644 --- a/src/COMPRESS/dump_cfg_zstd.h +++ b/src/COMPRESS/dump_cfg_zstd.h @@ -33,7 +33,7 @@ namespace LAMMPS_NS { class DumpCFGZstd : public DumpCFG { public: DumpCFGZstd(class LAMMPS *, int, char **); - virtual ~DumpCFGZstd(); + virtual ~DumpCFGZstd() = default; protected: ZstdFileWriter writer; diff --git a/src/COMPRESS/dump_custom_gz.cpp b/src/COMPRESS/dump_custom_gz.cpp index f40cf8d3d1..a8ef1ffe7c 100644 --- a/src/COMPRESS/dump_custom_gz.cpp +++ b/src/COMPRESS/dump_custom_gz.cpp @@ -27,10 +27,6 @@ DumpCustomGZ::DumpCustomGZ(LAMMPS *lmp, int narg, char **arg) : DumpCustom(lmp, if (!compressed) error->all(FLERR, "Dump custom/gz only writes compressed files"); } -/* ---------------------------------------------------------------------- */ - -DumpCustomGZ::~DumpCustomGZ() {} - /* ---------------------------------------------------------------------- generic opening of a dump file ASCII or binary or compressed diff --git a/src/COMPRESS/dump_custom_gz.h b/src/COMPRESS/dump_custom_gz.h index 10455eb8db..660af8bfae 100644 --- a/src/COMPRESS/dump_custom_gz.h +++ b/src/COMPRESS/dump_custom_gz.h @@ -28,7 +28,7 @@ namespace LAMMPS_NS { class DumpCustomGZ : public DumpCustom { public: DumpCustomGZ(class LAMMPS *, int, char **); - virtual ~DumpCustomGZ(); + virtual ~DumpCustomGZ() = default; protected: GzFileWriter writer; diff --git a/src/COMPRESS/dump_custom_zstd.cpp b/src/COMPRESS/dump_custom_zstd.cpp index 347c9c08e2..c6c7e3592e 100644 --- a/src/COMPRESS/dump_custom_zstd.cpp +++ b/src/COMPRESS/dump_custom_zstd.cpp @@ -37,12 +37,6 @@ DumpCustomZstd::DumpCustomZstd(LAMMPS *lmp, int narg, char **arg) : error->all(FLERR,"Dump custom/zstd only writes compressed files"); } -/* ---------------------------------------------------------------------- */ - -DumpCustomZstd::~DumpCustomZstd() -{ -} - /* ---------------------------------------------------------------------- generic opening of a dump file ASCII or binary or compressed diff --git a/src/COMPRESS/dump_custom_zstd.h b/src/COMPRESS/dump_custom_zstd.h index a687cfb928..f179223265 100644 --- a/src/COMPRESS/dump_custom_zstd.h +++ b/src/COMPRESS/dump_custom_zstd.h @@ -34,7 +34,7 @@ namespace LAMMPS_NS { class DumpCustomZstd : public DumpCustom { public: DumpCustomZstd(class LAMMPS *, int, char **); - virtual ~DumpCustomZstd(); + virtual ~DumpCustomZstd() = default; protected: ZstdFileWriter writer; diff --git a/src/COMPRESS/dump_local_gz.cpp b/src/COMPRESS/dump_local_gz.cpp index a23fa1a1ac..c3669e6157 100644 --- a/src/COMPRESS/dump_local_gz.cpp +++ b/src/COMPRESS/dump_local_gz.cpp @@ -27,10 +27,6 @@ DumpLocalGZ::DumpLocalGZ(LAMMPS *lmp, int narg, char **arg) : DumpLocal(lmp, nar if (!compressed) error->all(FLERR, "Dump local/gz only writes compressed files"); } -/* ---------------------------------------------------------------------- */ - -DumpLocalGZ::~DumpLocalGZ() {} - /* ---------------------------------------------------------------------- generic opening of a dump file ASCII or binary or compressed diff --git a/src/COMPRESS/dump_local_gz.h b/src/COMPRESS/dump_local_gz.h index a6b1b118b7..e2e7a028aa 100644 --- a/src/COMPRESS/dump_local_gz.h +++ b/src/COMPRESS/dump_local_gz.h @@ -28,7 +28,7 @@ namespace LAMMPS_NS { class DumpLocalGZ : public DumpLocal { public: DumpLocalGZ(class LAMMPS *, int, char **); - virtual ~DumpLocalGZ(); + virtual ~DumpLocalGZ() = default; protected: GzFileWriter writer; diff --git a/src/COMPRESS/dump_local_zstd.cpp b/src/COMPRESS/dump_local_zstd.cpp index 1d3fc4756e..63af89afcc 100644 --- a/src/COMPRESS/dump_local_zstd.cpp +++ b/src/COMPRESS/dump_local_zstd.cpp @@ -33,10 +33,6 @@ DumpLocalZstd::DumpLocalZstd(LAMMPS *lmp, int narg, char **arg) : DumpLocal(lmp, if (!compressed) error->all(FLERR, "Dump local/zstd only writes compressed files"); } -/* ---------------------------------------------------------------------- */ - -DumpLocalZstd::~DumpLocalZstd() {} - /* ---------------------------------------------------------------------- generic opening of a dump file ASCII or binary or compressed diff --git a/src/COMPRESS/dump_local_zstd.h b/src/COMPRESS/dump_local_zstd.h index c14e58fd71..fb4f017b3d 100644 --- a/src/COMPRESS/dump_local_zstd.h +++ b/src/COMPRESS/dump_local_zstd.h @@ -34,7 +34,7 @@ namespace LAMMPS_NS { class DumpLocalZstd : public DumpLocal { public: DumpLocalZstd(class LAMMPS *, int, char **); - virtual ~DumpLocalZstd(); + virtual ~DumpLocalZstd() = default; protected: ZstdFileWriter writer; diff --git a/src/COMPRESS/dump_xyz_gz.cpp b/src/COMPRESS/dump_xyz_gz.cpp index 2d9548bf14..9d38c4673c 100644 --- a/src/COMPRESS/dump_xyz_gz.cpp +++ b/src/COMPRESS/dump_xyz_gz.cpp @@ -26,10 +26,6 @@ DumpXYZGZ::DumpXYZGZ(LAMMPS *lmp, int narg, char **arg) : DumpXYZ(lmp, narg, arg if (!compressed) error->all(FLERR, "Dump xyz/gz only writes compressed files"); } -/* ---------------------------------------------------------------------- */ - -DumpXYZGZ::~DumpXYZGZ() {} - /* ---------------------------------------------------------------------- generic opening of a dump file ASCII or binary or compressed diff --git a/src/COMPRESS/dump_xyz_gz.h b/src/COMPRESS/dump_xyz_gz.h index 5fe60ced6f..62a25cfc66 100644 --- a/src/COMPRESS/dump_xyz_gz.h +++ b/src/COMPRESS/dump_xyz_gz.h @@ -28,7 +28,7 @@ namespace LAMMPS_NS { class DumpXYZGZ : public DumpXYZ { public: DumpXYZGZ(class LAMMPS *, int, char **); - virtual ~DumpXYZGZ(); + virtual ~DumpXYZGZ() = default; protected: GzFileWriter writer; diff --git a/src/COMPRESS/dump_xyz_zstd.cpp b/src/COMPRESS/dump_xyz_zstd.cpp index b56488ec09..bcbdc08a24 100644 --- a/src/COMPRESS/dump_xyz_zstd.cpp +++ b/src/COMPRESS/dump_xyz_zstd.cpp @@ -32,10 +32,6 @@ DumpXYZZstd::DumpXYZZstd(LAMMPS *lmp, int narg, char **arg) : DumpXYZ(lmp, narg, if (!compressed) error->all(FLERR, "Dump xyz/zstd only writes compressed files"); } -/* ---------------------------------------------------------------------- */ - -DumpXYZZstd::~DumpXYZZstd() {} - /* ---------------------------------------------------------------------- generic opening of a dump file ASCII or binary or compressed diff --git a/src/COMPRESS/dump_xyz_zstd.h b/src/COMPRESS/dump_xyz_zstd.h index add279c4e7..110e27ab8f 100644 --- a/src/COMPRESS/dump_xyz_zstd.h +++ b/src/COMPRESS/dump_xyz_zstd.h @@ -34,7 +34,7 @@ namespace LAMMPS_NS { class DumpXYZZstd : public DumpXYZ { public: DumpXYZZstd(class LAMMPS *, int, char **); - virtual ~DumpXYZZstd(); + virtual ~DumpXYZZstd() = default; protected: ZstdFileWriter writer; diff --git a/src/DIELECTRIC/fix_polarize_bem_icc.cpp b/src/DIELECTRIC/fix_polarize_bem_icc.cpp index 35171c0a19..7bd6ff25bd 100644 --- a/src/DIELECTRIC/fix_polarize_bem_icc.cpp +++ b/src/DIELECTRIC/fix_polarize_bem_icc.cpp @@ -93,10 +93,6 @@ FixPolarizeBEMICC::FixPolarizeBEMICC(LAMMPS *lmp, int narg, char **arg) : Fix(lm /* ---------------------------------------------------------------------- */ -FixPolarizeBEMICC::~FixPolarizeBEMICC() {} - -/* ---------------------------------------------------------------------- */ - int FixPolarizeBEMICC::setmask() { int mask = 0; diff --git a/src/DIELECTRIC/fix_polarize_bem_icc.h b/src/DIELECTRIC/fix_polarize_bem_icc.h index 6ba6acb1a0..df04b52fdf 100644 --- a/src/DIELECTRIC/fix_polarize_bem_icc.h +++ b/src/DIELECTRIC/fix_polarize_bem_icc.h @@ -27,7 +27,7 @@ namespace LAMMPS_NS { class FixPolarizeBEMICC : public Fix { public: FixPolarizeBEMICC(class LAMMPS *, int, char **); - ~FixPolarizeBEMICC(); + ~FixPolarizeBEMICC() = default; virtual int setmask(); virtual void init(); virtual void setup(int); diff --git a/src/DPD-MESO/fix_edpd_source.cpp b/src/DPD-MESO/fix_edpd_source.cpp index 0ad303516a..83ff896ff9 100644 --- a/src/DPD-MESO/fix_edpd_source.cpp +++ b/src/DPD-MESO/fix_edpd_source.cpp @@ -61,12 +61,6 @@ FixEDPDSource::FixEDPDSource(LAMMPS *lmp, int narg, char **arg) : /* ---------------------------------------------------------------------- */ -FixEDPDSource::~FixEDPDSource() -{ -} - -/* ---------------------------------------------------------------------- */ - int FixEDPDSource::setmask() { int mask = 0; diff --git a/src/DPD-MESO/fix_edpd_source.h b/src/DPD-MESO/fix_edpd_source.h index 0d6fab1d9d..13eecc7c56 100644 --- a/src/DPD-MESO/fix_edpd_source.h +++ b/src/DPD-MESO/fix_edpd_source.h @@ -27,7 +27,7 @@ namespace LAMMPS_NS { class FixEDPDSource : public Fix { public: FixEDPDSource(class LAMMPS *, int, char **); - ~FixEDPDSource(); + ~FixEDPDSource() = default; int setmask(); void init(); void post_force(int); diff --git a/src/DPD-MESO/fix_tdpd_source.cpp b/src/DPD-MESO/fix_tdpd_source.cpp index 5eb7416d5b..80848d553d 100644 --- a/src/DPD-MESO/fix_tdpd_source.cpp +++ b/src/DPD-MESO/fix_tdpd_source.cpp @@ -62,12 +62,6 @@ FixTDPDSource::FixTDPDSource(LAMMPS *lmp, int narg, char **arg) : /* ---------------------------------------------------------------------- */ -FixTDPDSource::~FixTDPDSource() -{ -} - -/* ---------------------------------------------------------------------- */ - int FixTDPDSource::setmask() { int mask = 0; diff --git a/src/DPD-MESO/fix_tdpd_source.h b/src/DPD-MESO/fix_tdpd_source.h index fe0a806ac2..8bd9778ed0 100644 --- a/src/DPD-MESO/fix_tdpd_source.h +++ b/src/DPD-MESO/fix_tdpd_source.h @@ -27,7 +27,7 @@ namespace LAMMPS_NS { class FixTDPDSource : public Fix { public: FixTDPDSource(class LAMMPS *, int, char **); - ~FixTDPDSource(); + ~FixTDPDSource() = default; int setmask(); void init(); void post_force(int); diff --git a/src/DPD-REACT/nbin_ssa.cpp b/src/DPD-REACT/nbin_ssa.cpp index 993a41b356..c6ef22fe7d 100644 --- a/src/DPD-REACT/nbin_ssa.cpp +++ b/src/DPD-REACT/nbin_ssa.cpp @@ -34,10 +34,6 @@ NBinSSA::NBinSSA(LAMMPS *lmp) : NBinStandard(lmp) } } -NBinSSA::~NBinSSA() -{ -} - /* ---------------------------------------------------------------------- bin owned and ghost atoms for the Shardlow Splitting Algorithm (SSA) local atoms are in distinct bins (binhead[]) from the ghosts diff --git a/src/DPD-REACT/nbin_ssa.h b/src/DPD-REACT/nbin_ssa.h index c09ef7b692..5285c5b44d 100644 --- a/src/DPD-REACT/nbin_ssa.h +++ b/src/DPD-REACT/nbin_ssa.h @@ -41,7 +41,7 @@ class NBinSSA : public NBinStandard { int lbinzhi; // highest local bin z-dim coordinate NBinSSA(class LAMMPS *); - ~NBinSSA(); + virtual ~NBinSSA() = default; void bin_atoms_setup(int); void bin_atoms(); diff --git a/src/KSPACE/ewald_dipole_spin.cpp b/src/KSPACE/ewald_dipole_spin.cpp index 6f093d5d0a..1f08205f21 100644 --- a/src/KSPACE/ewald_dipole_spin.cpp +++ b/src/KSPACE/ewald_dipole_spin.cpp @@ -51,12 +51,6 @@ EwaldDipoleSpin::EwaldDipoleSpin(LAMMPS *lmp) : mub2mu0hbinv = mub2mu0 / hbar; // in rad.THz } -/* ---------------------------------------------------------------------- - free all memory -------------------------------------------------------------------------- */ - -EwaldDipoleSpin::~EwaldDipoleSpin() {} - /* ---------------------------------------------------------------------- called once before run ------------------------------------------------------------------------- */ diff --git a/src/KSPACE/ewald_dipole_spin.h b/src/KSPACE/ewald_dipole_spin.h index eb87c69ae2..4660dde987 100644 --- a/src/KSPACE/ewald_dipole_spin.h +++ b/src/KSPACE/ewald_dipole_spin.h @@ -27,7 +27,7 @@ namespace LAMMPS_NS { class EwaldDipoleSpin : public EwaldDipole { public: EwaldDipoleSpin(class LAMMPS *); - virtual ~EwaldDipoleSpin(); + virtual ~EwaldDipoleSpin() = default; void init(); void setup(); void compute(int, int); diff --git a/src/LATBOLTZ/fix_lb_viscous.cpp b/src/LATBOLTZ/fix_lb_viscous.cpp index 95e36a98a9..0873a0fc94 100644 --- a/src/LATBOLTZ/fix_lb_viscous.cpp +++ b/src/LATBOLTZ/fix_lb_viscous.cpp @@ -55,13 +55,6 @@ FixLbViscous::FixLbViscous(LAMMPS *lmp, int narg, char **arg) : } -} - -/* ---------------------------------------------------------------------- */ - -FixLbViscous::~FixLbViscous() -{ - } /* ---------------------------------------------------------------------- */ diff --git a/src/LATBOLTZ/fix_lb_viscous.h b/src/LATBOLTZ/fix_lb_viscous.h index 1d08a15463..8c86e47553 100644 --- a/src/LATBOLTZ/fix_lb_viscous.h +++ b/src/LATBOLTZ/fix_lb_viscous.h @@ -27,7 +27,7 @@ namespace LAMMPS_NS { class FixLbViscous : public Fix { public: FixLbViscous(class LAMMPS *, int, char **); - ~FixLbViscous(); + virtual ~FixLbViscous() = default; int setmask(); void init(); void setup(int); diff --git a/src/MANIFOLD/manifold_thylakoid_shared.cpp b/src/MANIFOLD/manifold_thylakoid_shared.cpp index b71cf23e5e..5efc20a298 100644 --- a/src/MANIFOLD/manifold_thylakoid_shared.cpp +++ b/src/MANIFOLD/manifold_thylakoid_shared.cpp @@ -90,11 +90,6 @@ thyla_part::thyla_part( int type, double *args, double xlo, double ylo, double z z0 = (type == THYLA_TYPE_SPHERE) ? params[3] : params[5]; } - - -thyla_part::~thyla_part() -{} - double thyla_part::g(const double *x) { switch(type) { diff --git a/src/MANIFOLD/manifold_thylakoid_shared.h b/src/MANIFOLD/manifold_thylakoid_shared.h index a90d5e8801..67909802b0 100644 --- a/src/MANIFOLD/manifold_thylakoid_shared.h +++ b/src/MANIFOLD/manifold_thylakoid_shared.h @@ -33,7 +33,7 @@ namespace user_manifold { thyla_part(int type, double *args, double xlo, double ylo, double zlo, double xhi, double yhi, double zhi); thyla_part() : type(-1), x0(-1337), y0(-1337), z0(-1337) {} - ~thyla_part(); + ~thyla_part() = default; double g(const double *x); void n(const double *x, double *n); diff --git a/src/MESONT/pair_mesont_tpm.cpp b/src/MESONT/pair_mesont_tpm.cpp index 64aeeeeadd..425722a569 100644 --- a/src/MESONT/pair_mesont_tpm.cpp +++ b/src/MESONT/pair_mesont_tpm.cpp @@ -38,7 +38,7 @@ using namespace LAMMPS_NS; class MESONTList { public: MESONTList(const Atom* atom, const NeighList* nblist); - ~MESONTList() {}; + ~MESONTList() = default;; //list of segments const std::vector>& get_segments() const; //list of triplets diff --git a/src/ML-IAP/mliap_model_linear.cpp b/src/ML-IAP/mliap_model_linear.cpp index 1323b95aa1..08654783d8 100644 --- a/src/ML-IAP/mliap_model_linear.cpp +++ b/src/ML-IAP/mliap_model_linear.cpp @@ -31,10 +31,6 @@ MLIAPModelLinear::MLIAPModelLinear(LAMMPS* lmp, char* coefffilename) : if (nparams > 0) ndescriptors = nparams - 1; } -/* ---------------------------------------------------------------------- */ - -MLIAPModelLinear::~MLIAPModelLinear() {} - /* ---------------------------------------------------------------------- get number of parameters ---------------------------------------------------------------------- */ diff --git a/src/ML-IAP/mliap_model_linear.h b/src/ML-IAP/mliap_model_linear.h index b485e58eff..d2abaec31e 100644 --- a/src/ML-IAP/mliap_model_linear.h +++ b/src/ML-IAP/mliap_model_linear.h @@ -21,7 +21,7 @@ namespace LAMMPS_NS { class MLIAPModelLinear : public MLIAPModelSimple { public: MLIAPModelLinear(LAMMPS *, char * = nullptr); - ~MLIAPModelLinear(); + ~MLIAPModelLinear() = default; virtual int get_nparams(); virtual int get_gamma_nnz(class MLIAPData *); virtual void compute_gradients(class MLIAPData *); diff --git a/src/ML-IAP/mliap_model_quadratic.cpp b/src/ML-IAP/mliap_model_quadratic.cpp index a881c7848c..10507adc91 100644 --- a/src/ML-IAP/mliap_model_quadratic.cpp +++ b/src/ML-IAP/mliap_model_quadratic.cpp @@ -34,10 +34,6 @@ MLIAPModelQuadratic::MLIAPModelQuadratic(LAMMPS* lmp, char* coefffilename) : nonlinearflag = 1; } -/* ---------------------------------------------------------------------- */ - -MLIAPModelQuadratic::~MLIAPModelQuadratic() {} - /* ---------------------------------------------------------------------- get number of parameters ---------------------------------------------------------------------- */ diff --git a/src/ML-IAP/mliap_model_quadratic.h b/src/ML-IAP/mliap_model_quadratic.h index c183178339..74234066c8 100644 --- a/src/ML-IAP/mliap_model_quadratic.h +++ b/src/ML-IAP/mliap_model_quadratic.h @@ -21,7 +21,7 @@ namespace LAMMPS_NS { class MLIAPModelQuadratic : public MLIAPModelSimple { public: MLIAPModelQuadratic(LAMMPS *, char * = nullptr); - ~MLIAPModelQuadratic(); + ~MLIAPModelQuadratic() = default; virtual int get_nparams(); virtual int get_gamma_nnz(class MLIAPData *); virtual void compute_gradients(class MLIAPData *); diff --git a/src/OPENMP/pair_lj_cut_coul_cut_dielectric_omp.cpp b/src/OPENMP/pair_lj_cut_coul_cut_dielectric_omp.cpp index 43e2fb15e4..6d013c5f7c 100644 --- a/src/OPENMP/pair_lj_cut_coul_cut_dielectric_omp.cpp +++ b/src/OPENMP/pair_lj_cut_coul_cut_dielectric_omp.cpp @@ -41,10 +41,6 @@ PairLJCutCoulCutDielectricOMP::PairLJCutCoulCutDielectricOMP(LAMMPS *lmp) : /* ---------------------------------------------------------------------- */ -PairLJCutCoulCutDielectricOMP::~PairLJCutCoulCutDielectricOMP() {} - -/* ---------------------------------------------------------------------- */ - void PairLJCutCoulCutDielectricOMP::compute(int eflag, int vflag) { ev_init(eflag, vflag); diff --git a/src/OPENMP/pair_lj_cut_coul_cut_dielectric_omp.h b/src/OPENMP/pair_lj_cut_coul_cut_dielectric_omp.h index 093d0a8a42..5f28aa4d17 100644 --- a/src/OPENMP/pair_lj_cut_coul_cut_dielectric_omp.h +++ b/src/OPENMP/pair_lj_cut_coul_cut_dielectric_omp.h @@ -28,7 +28,7 @@ namespace LAMMPS_NS { class PairLJCutCoulCutDielectricOMP : public PairLJCutCoulCutDielectric, public ThrOMP { public: PairLJCutCoulCutDielectricOMP(class LAMMPS *); - virtual ~PairLJCutCoulCutDielectricOMP(); + virtual ~PairLJCutCoulCutDielectricOMP() = default; virtual void compute(int, int); protected: diff --git a/src/OPENMP/pair_lj_cut_coul_long_dielectric_omp.cpp b/src/OPENMP/pair_lj_cut_coul_long_dielectric_omp.cpp index 6aa79e18a5..c076501d68 100644 --- a/src/OPENMP/pair_lj_cut_coul_long_dielectric_omp.cpp +++ b/src/OPENMP/pair_lj_cut_coul_long_dielectric_omp.cpp @@ -47,10 +47,6 @@ PairLJCutCoulLongDielectricOMP::PairLJCutCoulLongDielectricOMP(LAMMPS *lmp) : /* ---------------------------------------------------------------------- */ -PairLJCutCoulLongDielectricOMP::~PairLJCutCoulLongDielectricOMP() {} - -/* ---------------------------------------------------------------------- */ - void PairLJCutCoulLongDielectricOMP::compute(int eflag, int vflag) { ev_init(eflag, vflag); diff --git a/src/OPENMP/pair_lj_cut_coul_long_dielectric_omp.h b/src/OPENMP/pair_lj_cut_coul_long_dielectric_omp.h index 0d13c4a92e..f70809524f 100644 --- a/src/OPENMP/pair_lj_cut_coul_long_dielectric_omp.h +++ b/src/OPENMP/pair_lj_cut_coul_long_dielectric_omp.h @@ -29,7 +29,7 @@ class PairLJCutCoulLongDielectricOMP : public PairLJCutCoulLongDielectric, publi public: PairLJCutCoulLongDielectricOMP(class LAMMPS *); - virtual ~PairLJCutCoulLongDielectricOMP(); + virtual ~PairLJCutCoulLongDielectricOMP() = default; virtual void compute(int, int); protected: diff --git a/src/OPENMP/pair_lubricate_omp.cpp b/src/OPENMP/pair_lubricate_omp.cpp index 0233ea5a06..f2df1b3ee8 100644 --- a/src/OPENMP/pair_lubricate_omp.cpp +++ b/src/OPENMP/pair_lubricate_omp.cpp @@ -47,11 +47,6 @@ PairLubricateOMP::PairLubricateOMP(LAMMPS *lmp) : /* ---------------------------------------------------------------------- */ -PairLubricateOMP::~PairLubricateOMP() -{} - -/* ---------------------------------------------------------------------- */ - void PairLubricateOMP::compute(int eflag, int vflag) { ev_init(eflag,vflag); diff --git a/src/OPENMP/pair_lubricate_omp.h b/src/OPENMP/pair_lubricate_omp.h index 27dbe73dd8..1f5fc340bb 100644 --- a/src/OPENMP/pair_lubricate_omp.h +++ b/src/OPENMP/pair_lubricate_omp.h @@ -33,7 +33,7 @@ class PairLubricateOMP : public PairLubricate, public ThrOMP { public: PairLubricateOMP(class LAMMPS *); - virtual ~PairLubricateOMP(); + virtual ~PairLubricateOMP() = default; virtual void compute(int, int); virtual double memory_usage(); diff --git a/src/OPENMP/pair_lubricate_poly_omp.cpp b/src/OPENMP/pair_lubricate_poly_omp.cpp index d3ad6b926c..669b964c73 100644 --- a/src/OPENMP/pair_lubricate_poly_omp.cpp +++ b/src/OPENMP/pair_lubricate_poly_omp.cpp @@ -47,11 +47,6 @@ PairLubricatePolyOMP::PairLubricatePolyOMP(LAMMPS *lmp) : /* ---------------------------------------------------------------------- */ -PairLubricatePolyOMP::~PairLubricatePolyOMP() -{} - -/* ---------------------------------------------------------------------- */ - void PairLubricatePolyOMP::compute(int eflag, int vflag) { ev_init(eflag,vflag); diff --git a/src/OPENMP/pair_lubricate_poly_omp.h b/src/OPENMP/pair_lubricate_poly_omp.h index 7fdfed6c62..5a36d232b8 100644 --- a/src/OPENMP/pair_lubricate_poly_omp.h +++ b/src/OPENMP/pair_lubricate_poly_omp.h @@ -33,7 +33,7 @@ class PairLubricatePolyOMP : public PairLubricatePoly, public ThrOMP { public: PairLubricatePolyOMP(class LAMMPS *); - virtual ~PairLubricatePolyOMP(); + virtual ~PairLubricatePolyOMP() = default; virtual void compute(int, int); virtual double memory_usage(); diff --git a/src/SPIN/pair_spin.cpp b/src/SPIN/pair_spin.cpp index 9731a447a6..74f7aaaf77 100644 --- a/src/SPIN/pair_spin.cpp +++ b/src/SPIN/pair_spin.cpp @@ -53,10 +53,6 @@ PairSpin::PairSpin(LAMMPS *lmp) : Pair(lmp), emag(nullptr) lattice_flag = 0; } -/* ---------------------------------------------------------------------- */ - -PairSpin::~PairSpin() {} - /* ---------------------------------------------------------------------- global settings ------------------------------------------------------------------------- */ diff --git a/src/SPIN/pair_spin.h b/src/SPIN/pair_spin.h index 91262cdb5d..a9341bcb71 100644 --- a/src/SPIN/pair_spin.h +++ b/src/SPIN/pair_spin.h @@ -23,7 +23,7 @@ class PairSpin : public Pair { public: PairSpin(class LAMMPS *); - virtual ~PairSpin(); + virtual ~PairSpin() = default; virtual void settings(int, char **); virtual void coeff(int, char **) {} virtual void init_style(); diff --git a/src/lmppython.cpp b/src/lmppython.cpp index b7e65d1f02..daebf23c23 100644 --- a/src/lmppython.cpp +++ b/src/lmppython.cpp @@ -38,10 +38,6 @@ Python::~Python() /* ---------------------------------------------------------------------- */ -PythonInterface::~PythonInterface() {} - -/* ---------------------------------------------------------------------- */ - void Python::init() { #if defined(LMP_PYTHON) diff --git a/src/lmppython.h b/src/lmppython.h index 7ecee915e5..3f0ebecae5 100644 --- a/src/lmppython.h +++ b/src/lmppython.h @@ -20,7 +20,7 @@ namespace LAMMPS_NS { class PythonInterface { public: - virtual ~PythonInterface(); + virtual ~PythonInterface() = default; virtual void command(int, char **) = 0; virtual void invoke_function(int, char *) = 0; virtual int find(const char *) = 0; diff --git a/src/table_file_reader.cpp b/src/table_file_reader.cpp index bcd4e91886..bfbd466ae8 100644 --- a/src/table_file_reader.cpp +++ b/src/table_file_reader.cpp @@ -30,9 +30,6 @@ TableFileReader::TableFileReader(LAMMPS *lmp, { } -TableFileReader::~TableFileReader() { -} - char *TableFileReader::find_section_start(const std::string &keyword) { char *line = nullptr; while ((line = reader->next_line())) { diff --git a/src/table_file_reader.h b/src/table_file_reader.h index 643e1ce93c..832e68a34f 100644 --- a/src/table_file_reader.h +++ b/src/table_file_reader.h @@ -25,7 +25,7 @@ class TableFileReader : public PotentialFileReader { public: TableFileReader(class LAMMPS *lmp, const std::string &filename, const std::string &type, const int auto_convert = 0); - virtual ~TableFileReader(); + virtual ~TableFileReader() = default; char *find_section_start(const std::string &keyword); }; diff --git a/src/tokenizer.cpp b/src/tokenizer.cpp index 71b4ad610e..95aa175fdf 100644 --- a/src/tokenizer.cpp +++ b/src/tokenizer.cpp @@ -198,9 +198,6 @@ std::vector Tokenizer::as_vector() { ValueTokenizer::ValueTokenizer(const std::string &str, const std::string &separators) : tokens(str, separators) { } -ValueTokenizer::ValueTokenizer(const ValueTokenizer &rhs) : tokens(rhs.tokens) { -} - ValueTokenizer::ValueTokenizer(ValueTokenizer &&rhs) : tokens(std::move(rhs.tokens)) { } diff --git a/src/tokenizer.h b/src/tokenizer.h index ad4f0d3536..cacfc541a4 100644 --- a/src/tokenizer.h +++ b/src/tokenizer.h @@ -97,7 +97,7 @@ class ValueTokenizer { public: ValueTokenizer(const std::string &str, const std::string &separators = TOKENIZER_DEFAULT_SEPARATORS); - ValueTokenizer(const ValueTokenizer &); + ValueTokenizer(const ValueTokenizer &) = default; ValueTokenizer(ValueTokenizer &&); ValueTokenizer &operator=(const ValueTokenizer &); ValueTokenizer &operator=(ValueTokenizer &&); diff --git a/unittest/c-library/test_library_commands.cpp b/unittest/c-library/test_library_commands.cpp index 6c52232a8e..267ee6108e 100644 --- a/unittest/c-library/test_library_commands.cpp +++ b/unittest/c-library/test_library_commands.cpp @@ -19,8 +19,8 @@ const char *cont_input[] = {"create_atoms 1 single &", "0.2 0.1 0.1"}; class LibraryCommands : public ::testing::Test { protected: void *lmp; - LibraryCommands(){}; - ~LibraryCommands() override{}; + LibraryCommands() = default; + ~LibraryCommands() override = default; void SetUp() override { @@ -31,7 +31,7 @@ protected: int argc = sizeof(args) / sizeof(char *); ::testing::internal::CaptureStdout(); - lmp = lammps_open_no_mpi(argc, argv, NULL); + lmp = lammps_open_no_mpi(argc, argv, nullptr); std::string output = ::testing::internal::GetCapturedStdout(); if (verbose) std::cout << output; EXPECT_THAT(output, StartsWith("LAMMPS (")); diff --git a/unittest/c-library/test_library_config.cpp b/unittest/c-library/test_library_config.cpp index e5eb044d31..456faff06f 100644 --- a/unittest/c-library/test_library_config.cpp +++ b/unittest/c-library/test_library_config.cpp @@ -22,8 +22,8 @@ protected: void *lmp; std::string INPUT_DIR = STRINGIFY(TEST_INPUT_FOLDER); - LibraryConfig(){}; - ~LibraryConfig() override{}; + LibraryConfig() = default; + ~LibraryConfig() override = default; void SetUp() override { @@ -35,7 +35,7 @@ protected: int argc = sizeof(args) / sizeof(char *); ::testing::internal::CaptureStdout(); - lmp = lammps_open_no_mpi(argc, argv, NULL); + lmp = lammps_open_no_mpi(argc, argv, nullptr); lammps_command(lmp, "fix charge all property/atom q ghost yes"); lammps_command(lmp, "region box block 0 1 0 1 0 1"); lammps_command(lmp, "create_box 1 box"); diff --git a/unittest/c-library/test_library_external.cpp b/unittest/c-library/test_library_external.cpp index 15edd5f113..57d3bef080 100644 --- a/unittest/c-library/test_library_external.cpp +++ b/unittest/c-library/test_library_external.cpp @@ -69,7 +69,7 @@ TEST(lammps_external, callback) int argc = sizeof(args) / sizeof(char *); ::testing::internal::CaptureStdout(); - void *handle = lammps_open_no_mpi(argc, argv, NULL); + void *handle = lammps_open_no_mpi(argc, argv, nullptr); std::string output = ::testing::internal::GetCapturedStdout(); if (verbose) std::cout << output; @@ -136,7 +136,7 @@ TEST(lammps_external, array) int argc = sizeof(args) / sizeof(char *); ::testing::internal::CaptureStdout(); - void *handle = lammps_open_no_mpi(argc, argv, NULL); + void *handle = lammps_open_no_mpi(argc, argv, nullptr); std::string output = ::testing::internal::GetCapturedStdout(); if (verbose) std::cout << output; diff --git a/unittest/c-library/test_library_open.cpp b/unittest/c-library/test_library_open.cpp index b7a8016a1a..c75fd3738b 100644 --- a/unittest/c-library/test_library_open.cpp +++ b/unittest/c-library/test_library_open.cpp @@ -18,7 +18,7 @@ using ::testing::StartsWith; TEST(lammps_open, null_args) { ::testing::internal::CaptureStdout(); - void *handle = lammps_open(0, NULL, MPI_COMM_WORLD, NULL); + void *handle = lammps_open(0, nullptr, MPI_COMM_WORLD, nullptr); std::string output = ::testing::internal::GetCapturedStdout(); EXPECT_THAT(output, StartsWith("LAMMPS (")); if (verbose) std::cout << output; @@ -175,7 +175,7 @@ TEST(lammps_open_fortran, no_args) MPI_Comm_split(MPI_COMM_WORLD, 0, 1, &mycomm); int fcomm = MPI_Comm_c2f(mycomm); ::testing::internal::CaptureStdout(); - void *handle = lammps_open_fortran(0, NULL, fcomm); + void *handle = lammps_open_fortran(0, nullptr, fcomm); std::string output = ::testing::internal::GetCapturedStdout(); EXPECT_THAT(output, StartsWith("LAMMPS (")); if (verbose) std::cout << output; diff --git a/unittest/c-library/test_library_properties.cpp b/unittest/c-library/test_library_properties.cpp index 57c0153c65..754c6df77f 100644 --- a/unittest/c-library/test_library_properties.cpp +++ b/unittest/c-library/test_library_properties.cpp @@ -23,8 +23,8 @@ protected: void *lmp; std::string INPUT_DIR = STRINGIFY(TEST_INPUT_FOLDER); - LibraryProperties(){}; - ~LibraryProperties() override{}; + LibraryProperties() = default; + ~LibraryProperties() override = default; void SetUp() override { @@ -36,7 +36,7 @@ protected: int argc = sizeof(args) / sizeof(char *); ::testing::internal::CaptureStdout(); - lmp = lammps_open_no_mpi(argc, argv, NULL); + lmp = lammps_open_no_mpi(argc, argv, nullptr); std::string output = ::testing::internal::GetCapturedStdout(); if (verbose) std::cout << output; EXPECT_THAT(output, StartsWith("LAMMPS (")); @@ -436,8 +436,8 @@ class AtomProperties : public ::testing::Test { protected: void *lmp; - AtomProperties(){}; - ~AtomProperties() override{}; + AtomProperties()= default;; + ~AtomProperties() override= default;; void SetUp() override { @@ -447,7 +447,7 @@ protected: int argc = sizeof(args) / sizeof(char *); ::testing::internal::CaptureStdout(); - lmp = lammps_open_no_mpi(argc, argv, NULL); + lmp = lammps_open_no_mpi(argc, argv, nullptr); std::string output = ::testing::internal::GetCapturedStdout(); if (verbose) std::cout << output; EXPECT_THAT(output, StartsWith("LAMMPS (")); diff --git a/unittest/c-library/test_library_scatter_gather.cpp b/unittest/c-library/test_library_scatter_gather.cpp index 34022f617e..7ee1cfc9eb 100644 --- a/unittest/c-library/test_library_scatter_gather.cpp +++ b/unittest/c-library/test_library_scatter_gather.cpp @@ -23,8 +23,8 @@ protected: void *lmp; std::string INPUT_DIR = STRINGIFY(TEST_INPUT_FOLDER); - GatherProperties(){}; - ~GatherProperties() override{}; + GatherProperties() = default; + ~GatherProperties() override = default; void SetUp() override { @@ -36,7 +36,7 @@ protected: int argc = sizeof(args) / sizeof(char *); ::testing::internal::CaptureStdout(); - lmp = lammps_open_no_mpi(argc, argv, NULL); + lmp = lammps_open_no_mpi(argc, argv, nullptr); std::string output = ::testing::internal::GetCapturedStdout(); if (verbose) std::cout << output; EXPECT_THAT(output, StartsWith("LAMMPS (")); diff --git a/unittest/cplusplus/test_input_class.cpp b/unittest/cplusplus/test_input_class.cpp index db11a91d88..4af7450ed8 100644 --- a/unittest/cplusplus/test_input_class.cpp +++ b/unittest/cplusplus/test_input_class.cpp @@ -29,7 +29,7 @@ protected: MPI_Initialized(&flag); if (!flag) MPI_Init(&argc, &argv); } - ~Input_commands() override {} + ~Input_commands() override = default; void SetUp() override { From 3ad75c40ec631f070ce16fd9e1e732b75d118be0 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Wed, 13 Oct 2021 23:59:43 -0400 Subject: [PATCH 187/372] catch up on previous clang-tidy refactor for files that were skipped before --- src/QMMM/fix_qmmm.cpp | 2 +- src/REAXFF/fix_acks2_reaxff.cpp | 34 ++++++++++++++--------------- tools/lammps-shell/lammps-shell.cpp | 16 +++++++------- 3 files changed, 26 insertions(+), 26 deletions(-) diff --git a/src/QMMM/fix_qmmm.cpp b/src/QMMM/fix_qmmm.cpp index 4222a82247..8c59077c7d 100644 --- a/src/QMMM/fix_qmmm.cpp +++ b/src/QMMM/fix_qmmm.cpp @@ -822,7 +822,7 @@ void FixQMMM::post_force(int vflag) /* ---------------------------------------------------------------------- */ /* local memory usage. approximately. */ -double FixQMMM::memory_usage(void) +double FixQMMM::memory_usage() { double bytes; diff --git a/src/REAXFF/fix_acks2_reaxff.cpp b/src/REAXFF/fix_acks2_reaxff.cpp index f9a3b384bd..c54fffa9f1 100644 --- a/src/REAXFF/fix_acks2_reaxff.cpp +++ b/src/REAXFF/fix_acks2_reaxff.cpp @@ -66,28 +66,28 @@ static const char cite_fix_acks2_reax[] = FixACKS2ReaxFF::FixACKS2ReaxFF(LAMMPS *lmp, int narg, char **arg) : FixQEqReaxFF(lmp, narg, arg) { - bcut = NULL; + bcut = nullptr; - X_diag = NULL; - Xdia_inv = NULL; + X_diag = nullptr; + Xdia_inv = nullptr; // BiCGStab - g = NULL; - q_hat = NULL; - r_hat = NULL; - y = NULL; - z = NULL; + g = nullptr; + q_hat = nullptr; + r_hat = nullptr; + y = nullptr; + z = nullptr; // X matrix - X.firstnbr = NULL; - X.numnbrs = NULL; - X.jlist = NULL; - X.val = NULL; + X.firstnbr = nullptr; + X.numnbrs = nullptr; + X.jlist = nullptr; + X.val = nullptr; // Update comm sizes for this fix comm_forward = comm_reverse = 2; - s_hist_X = s_hist_last = NULL; + s_hist_X = s_hist_last = nullptr; last_rows_rank = 0; last_rows_flag = (comm->me == last_rows_rank); @@ -149,8 +149,8 @@ void FixACKS2ReaxFF::pertype_parameters(char *arg) bcut_acks2 = (double *) pair->extract("bcut_acks2",tmp); double* bond_softness_ptr = (double *) pair->extract("bond_softness",tmp); - if (chi == NULL || eta == NULL || gamma == NULL || - bcut_acks2 == NULL || bond_softness_ptr == NULL) + if (chi == nullptr || eta == nullptr || gamma == nullptr || + bcut_acks2 == nullptr || bond_softness_ptr == nullptr) error->all(FLERR, "Fix acks2/reaxff could not extract params from pair reaxff"); bond_softness = *bond_softness_ptr; @@ -303,7 +303,7 @@ void FixACKS2ReaxFF::init_bondcut() int ntypes; ntypes = atom->ntypes; - if (bcut == NULL) + if (bcut == nullptr) memory->create(bcut,ntypes+1,ntypes+1,"acks2:bondcut"); for (i = 1; i <= ntypes; ++i) @@ -856,7 +856,7 @@ void FixACKS2ReaxFF::more_reverse_comm(double *vec) if (last_rows_flag) MPI_Reduce(MPI_IN_PLACE,&vec[2*NN],2,MPI_DOUBLE,MPI_SUM,last_rows_rank,world); else - MPI_Reduce(&vec[2*NN],NULL,2,MPI_DOUBLE,MPI_SUM,last_rows_rank,world); + MPI_Reduce(&vec[2*NN],nullptr,2,MPI_DOUBLE,MPI_SUM,last_rows_rank,world); } /* ---------------------------------------------------------------------- diff --git a/tools/lammps-shell/lammps-shell.cpp b/tools/lammps-shell/lammps-shell.cpp index 936b539d43..df8d52bd33 100644 --- a/tools/lammps-shell/lammps-shell.cpp +++ b/tools/lammps-shell/lammps-shell.cpp @@ -21,7 +21,7 @@ #endif #include #else -#include +#include #endif #if defined(_OPENMP) @@ -153,14 +153,14 @@ static int save_history(std::string range, std::string file) std::size_t found = range.find_first_of("-"); if (found == std::string::npos) { // only a single number - int num = strtol(range.c_str(), NULL, 10); + int num = strtol(range.c_str(), nullptr, 10); if ((num >= from) && (num <= to)) { from = to = num; } else return 1; } else { // range of numbers if (found > 0) { // get number before '-' - int num = strtol(range.substr(0, found).c_str(), NULL, 10); + int num = strtol(range.substr(0, found).c_str(), nullptr, 10); if ((num >= from) && (num <= to)) { from = num; } else @@ -168,7 +168,7 @@ static int save_history(std::string range, std::string file) } if (range.size() > found + 1) { // get number after '-' - int num = strtol(range.substr(found + 1).c_str(), NULL, 10); + int num = strtol(range.substr(found + 1).c_str(), nullptr, 10); if ((num >= from) && (num <= to)) { to = num; } else @@ -340,13 +340,13 @@ static char *variable_expand_generator(const char *text, int state) static char *plugin_generator(const char *text, int state) { - const char *subcmd[] = {"load", "unload", "list", "clear", NULL}; + const char *subcmd[] = {"load", "unload", "list", "clear", nullptr}; const char *sub; static std::size_t idx=0, len; if (!state) idx = 0; len = strlen(text); - while ((sub = subcmd[idx]) != NULL) { + while ((sub = subcmd[idx]) != nullptr) { ++idx; if (strncmp(text,sub,len) == 0) return dupstring(sub); @@ -356,12 +356,12 @@ static char *plugin_generator(const char *text, int state) static char *plugin_style_generator(const char *text, int state) { - const char *styles[] = {"pair", "fix", "command", NULL}; + const char *styles[] = {"pair", "fix", "command", nullptr}; const char *s; static std::size_t idx=0, len; if (!state) idx = 0; len = strlen(text); - while ((s = styles[idx]) != NULL) { + while ((s = styles[idx]) != nullptr) { ++idx; if (strncmp(text,s,len) == 0) return dupstring(s); From 27145d27896c2bcfd52160d79f1c8785b7e62770 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Thu, 14 Oct 2021 01:12:04 -0400 Subject: [PATCH 188/372] catch up on refactoring default destructors that were missed previously --- lib/poems/fixedpoint.cpp | 5 ----- lib/poems/fixedpoint.h | 4 ++-- lib/poems/mat3x3.cpp | 2 -- lib/poems/mat3x3.h | 2 +- lib/poems/mat4x4.cpp | 2 -- lib/poems/mat4x4.h | 2 +- lib/poems/mat6x6.cpp | 2 -- lib/poems/mat6x6.h | 2 +- lib/poems/vect3.cpp | 2 -- lib/poems/vect3.h | 2 +- lib/poems/vect4.cpp | 2 -- lib/poems/vect4.h | 2 +- lib/poems/vect6.cpp | 2 -- lib/poems/vect6.h | 2 +- lib/poems/virtualcolmatrix.cpp | 3 --- lib/poems/virtualcolmatrix.h | 2 +- lib/poems/virtualmatrix.cpp | 3 +-- lib/poems/virtualrowmatrix.cpp | 3 --- lib/poems/virtualrowmatrix.h | 2 +- src/MACHDYN/fix_smd_move_triangulated_surface.cpp | 9 --------- src/MACHDYN/fix_smd_move_triangulated_surface.h | 2 +- src/OPENMP/thr_omp.cpp | 7 ------- src/OPENMP/thr_omp.h | 2 +- unittest/fortran/wrap_commands.cpp | 4 ++-- 24 files changed, 15 insertions(+), 55 deletions(-) diff --git a/lib/poems/fixedpoint.cpp b/lib/poems/fixedpoint.cpp index 54191622c0..58034989d5 100644 --- a/lib/poems/fixedpoint.cpp +++ b/lib/poems/fixedpoint.cpp @@ -22,11 +22,6 @@ using namespace std; -FixedPoint::FixedPoint(){ -} -FixedPoint::~FixedPoint(){ -} - FixedPoint::FixedPoint(double x, double y, double z){ position(1) = x; position(2) = y; diff --git a/lib/poems/fixedpoint.h b/lib/poems/fixedpoint.h index 4717f7dba9..cd9f7b8546 100644 --- a/lib/poems/fixedpoint.h +++ b/lib/poems/fixedpoint.h @@ -24,8 +24,8 @@ class FixedPoint : public Point { public: - FixedPoint(); - ~FixedPoint(); + FixedPoint() = default; + ~FixedPoint() = default; FixedPoint(double x, double y, double z); FixedPoint(Vect3& v); PointType GetType(); diff --git a/lib/poems/mat3x3.cpp b/lib/poems/mat3x3.cpp index f8dc8928bb..8f56e9e386 100644 --- a/lib/poems/mat3x3.cpp +++ b/lib/poems/mat3x3.cpp @@ -24,8 +24,6 @@ using namespace std; Mat3x3::Mat3x3(){ numrows = numcols = 3; } -Mat3x3::~Mat3x3(){ -} Mat3x3::Mat3x3(const Mat3x3& A){ numrows = numcols = 3; diff --git a/lib/poems/mat3x3.h b/lib/poems/mat3x3.h index b7c0e2dffa..43ce0f6eb9 100644 --- a/lib/poems/mat3x3.h +++ b/lib/poems/mat3x3.h @@ -30,7 +30,7 @@ class Mat3x3 : public VirtualMatrix { double elements[3][3]; public: Mat3x3(); - ~Mat3x3(); + ~Mat3x3() = default; Mat3x3(const Mat3x3& A); // copy constructor Mat3x3(const VirtualMatrix& A); // copy constructor diff --git a/lib/poems/mat4x4.cpp b/lib/poems/mat4x4.cpp index 086637282b..5ee621059d 100644 --- a/lib/poems/mat4x4.cpp +++ b/lib/poems/mat4x4.cpp @@ -23,8 +23,6 @@ using namespace std; Mat4x4::Mat4x4(){ numrows = numcols = 4; } -Mat4x4::~Mat4x4(){ -} Mat4x4::Mat4x4(const Mat4x4& A){ numrows = numcols = 4; diff --git a/lib/poems/mat4x4.h b/lib/poems/mat4x4.h index aac09a67af..7b0332153b 100644 --- a/lib/poems/mat4x4.h +++ b/lib/poems/mat4x4.h @@ -28,7 +28,7 @@ class Mat4x4 : public VirtualMatrix { double elements[4][4]; public: Mat4x4(); - ~Mat4x4(); + ~Mat4x4() = default; Mat4x4(const Mat4x4& A); // copy constructor Mat4x4(const VirtualMatrix& A); // copy constructor diff --git a/lib/poems/mat6x6.cpp b/lib/poems/mat6x6.cpp index b79c0490fc..f3998aa130 100644 --- a/lib/poems/mat6x6.cpp +++ b/lib/poems/mat6x6.cpp @@ -23,8 +23,6 @@ using namespace std; Mat6x6::Mat6x6(){ numrows = numcols = 6; } -Mat6x6::~Mat6x6(){ -} Mat6x6::Mat6x6(const Mat6x6& A){ numrows = numcols = 6; diff --git a/lib/poems/mat6x6.h b/lib/poems/mat6x6.h index 35f0974657..dd22032d46 100644 --- a/lib/poems/mat6x6.h +++ b/lib/poems/mat6x6.h @@ -29,7 +29,7 @@ class Mat6x6 : public VirtualMatrix { double elements[6][6]; public: Mat6x6(); - ~Mat6x6(); + ~Mat6x6() = default; Mat6x6(const Mat6x6& A); // copy constructor Mat6x6(const VirtualMatrix& A); // copy constructor diff --git a/lib/poems/vect3.cpp b/lib/poems/vect3.cpp index d0cb53ff15..2836c1a9d3 100644 --- a/lib/poems/vect3.cpp +++ b/lib/poems/vect3.cpp @@ -23,8 +23,6 @@ using namespace std; Vect3::Vect3(){ numrows = 3; numcols = 1; } -Vect3::~Vect3(){ -} Vect3::Vect3(const Vect3& A){ // copy constructor numrows = 3; numcols = 1; diff --git a/lib/poems/vect3.h b/lib/poems/vect3.h index 0eb4450174..041de608fb 100644 --- a/lib/poems/vect3.h +++ b/lib/poems/vect3.h @@ -30,7 +30,7 @@ class Vect3 : public VirtualColMatrix { double elements[3]; public: Vect3(); - ~Vect3(); + ~Vect3() = default; Vect3(const Vect3& A); // copy constructor Vect3(const VirtualMatrix& A); // copy constructor diff --git a/lib/poems/vect4.cpp b/lib/poems/vect4.cpp index 86b014d129..249eccf1e1 100644 --- a/lib/poems/vect4.cpp +++ b/lib/poems/vect4.cpp @@ -23,8 +23,6 @@ using namespace std; Vect4::Vect4(){ numrows = 4; numcols = 1; } -Vect4::~Vect4(){ -} Vect4::Vect4(const Vect4& A){ // copy constructor numrows = 4; numcols = 1; diff --git a/lib/poems/vect4.h b/lib/poems/vect4.h index 81a3c2143c..28d37313f1 100644 --- a/lib/poems/vect4.h +++ b/lib/poems/vect4.h @@ -28,7 +28,7 @@ class Vect4 : public VirtualColMatrix { double elements[4]; public: Vect4(); - ~Vect4(); + ~Vect4() = default; Vect4(const Vect4& A); // copy constructor Vect4(const VirtualMatrix& A); // copy constructor diff --git a/lib/poems/vect6.cpp b/lib/poems/vect6.cpp index e3fe07e1ea..611a701198 100644 --- a/lib/poems/vect6.cpp +++ b/lib/poems/vect6.cpp @@ -23,8 +23,6 @@ using namespace std; Vect6::Vect6(){ numrows = 6; numcols = 1; } -Vect6::~Vect6(){ -} Vect6::Vect6(const Vect6& A){ // copy constructor numrows = 6; numcols = 1; diff --git a/lib/poems/vect6.h b/lib/poems/vect6.h index 1127daf80e..16ed576ee8 100644 --- a/lib/poems/vect6.h +++ b/lib/poems/vect6.h @@ -29,7 +29,7 @@ class Vect6 : public VirtualColMatrix { double elements[6]; public: Vect6(); - ~Vect6(); + ~Vect6() = default; Vect6(const Vect6& A); // copy constructor Vect6(const VirtualMatrix& A); // copy constructor diff --git a/lib/poems/virtualcolmatrix.cpp b/lib/poems/virtualcolmatrix.cpp index e004458731..adf7bab3fb 100644 --- a/lib/poems/virtualcolmatrix.cpp +++ b/lib/poems/virtualcolmatrix.cpp @@ -25,9 +25,6 @@ VirtualColMatrix::VirtualColMatrix(){ numcols = 1; } -VirtualColMatrix::~VirtualColMatrix(){ -} - double& VirtualColMatrix::operator_2int(int i, int j){ if(j!=1){ cerr << "matrix index invalid in operator ()" << endl; diff --git a/lib/poems/virtualcolmatrix.h b/lib/poems/virtualcolmatrix.h index e0af8b4ae7..e8e348d9d1 100644 --- a/lib/poems/virtualcolmatrix.h +++ b/lib/poems/virtualcolmatrix.h @@ -25,7 +25,7 @@ class VirtualColMatrix : public VirtualMatrix { public: VirtualColMatrix(); - ~VirtualColMatrix(); + ~VirtualColMatrix() = default; double& operator_2int (int i, int j); // array access double Get_2int (int i, int j) const; void Set_2int (int i, int j, double value); diff --git a/lib/poems/virtualmatrix.cpp b/lib/poems/virtualmatrix.cpp index 938c69c037..89e595e648 100644 --- a/lib/poems/virtualmatrix.cpp +++ b/lib/poems/virtualmatrix.cpp @@ -26,8 +26,7 @@ VirtualMatrix::VirtualMatrix(){ numrows = numcols = 0; } -VirtualMatrix::~VirtualMatrix(){ -} +VirtualMatrix::~VirtualMatrix()= default; int VirtualMatrix::GetNumRows() const { return numrows; diff --git a/lib/poems/virtualrowmatrix.cpp b/lib/poems/virtualrowmatrix.cpp index 6d2976a584..9d52de73f4 100644 --- a/lib/poems/virtualrowmatrix.cpp +++ b/lib/poems/virtualrowmatrix.cpp @@ -26,9 +26,6 @@ VirtualRowMatrix::VirtualRowMatrix(){ numrows = 1; } -VirtualRowMatrix::~VirtualRowMatrix(){ -} - double& VirtualRowMatrix::operator_2int (int i, int j){ if(i!=1){ cerr << "matrix index invalid in operator ()" << endl; diff --git a/lib/poems/virtualrowmatrix.h b/lib/poems/virtualrowmatrix.h index 9b1a3bbc44..122ba910da 100644 --- a/lib/poems/virtualrowmatrix.h +++ b/lib/poems/virtualrowmatrix.h @@ -24,7 +24,7 @@ class VirtualRowMatrix : public VirtualMatrix { public: VirtualRowMatrix(); - ~VirtualRowMatrix(); + ~VirtualRowMatrix() = default; double& operator_2int (int i, int j); // array access double Get_2int(int i, int j) const; void Set_2int(int i, int j, double value); diff --git a/src/MACHDYN/fix_smd_move_triangulated_surface.cpp b/src/MACHDYN/fix_smd_move_triangulated_surface.cpp index c790720e99..6fc8a1dadc 100644 --- a/src/MACHDYN/fix_smd_move_triangulated_surface.cpp +++ b/src/MACHDYN/fix_smd_move_triangulated_surface.cpp @@ -215,15 +215,6 @@ FixSMDMoveTriSurf::FixSMDMoveTriSurf(LAMMPS *lmp, int narg, char **arg) : /* ---------------------------------------------------------------------- */ -FixSMDMoveTriSurf::~FixSMDMoveTriSurf() -{ - // unregister callbacks to this fix from Atom class - //atom->delete_callback(id,Atom::GROW); - //atom->delete_callback(id,Atom::RESTART); -} - -/* ---------------------------------------------------------------------- */ - int FixSMDMoveTriSurf::setmask() { int mask = 0; mask |= INITIAL_INTEGRATE; diff --git a/src/MACHDYN/fix_smd_move_triangulated_surface.h b/src/MACHDYN/fix_smd_move_triangulated_surface.h index aec2fcb688..e64d2fc409 100644 --- a/src/MACHDYN/fix_smd_move_triangulated_surface.h +++ b/src/MACHDYN/fix_smd_move_triangulated_surface.h @@ -39,7 +39,7 @@ namespace LAMMPS_NS { class FixSMDMoveTriSurf : public Fix { public: FixSMDMoveTriSurf(class LAMMPS *, int, char **); - ~FixSMDMoveTriSurf(); + ~FixSMDMoveTriSurf() = default; int setmask(); virtual void init(); virtual void initial_integrate(int); diff --git a/src/OPENMP/thr_omp.cpp b/src/OPENMP/thr_omp.cpp index 7f4bc95e8c..73a5f97ca2 100644 --- a/src/OPENMP/thr_omp.cpp +++ b/src/OPENMP/thr_omp.cpp @@ -53,13 +53,6 @@ ThrOMP::ThrOMP(LAMMPS *ptr, int style) fix = static_cast(lmp->modify->fix[ifix]); } -/* ---------------------------------------------------------------------- */ - -ThrOMP::~ThrOMP() -{ - // nothing to do? -} - /* ---------------------------------------------------------------------- Hook up per thread per atom arrays into the tally infrastructure ---------------------------------------------------------------------- */ diff --git a/src/OPENMP/thr_omp.h b/src/OPENMP/thr_omp.h index c35ca9a056..78d93bd55f 100644 --- a/src/OPENMP/thr_omp.h +++ b/src/OPENMP/thr_omp.h @@ -46,7 +46,7 @@ class ThrOMP { public: ThrOMP(LAMMPS *, int); - virtual ~ThrOMP(); + virtual ~ThrOMP() = default; double memory_usage_thr(); diff --git a/unittest/fortran/wrap_commands.cpp b/unittest/fortran/wrap_commands.cpp index bdf38144c5..2605cb7295 100644 --- a/unittest/fortran/wrap_commands.cpp +++ b/unittest/fortran/wrap_commands.cpp @@ -21,8 +21,8 @@ double f_lammps_get_natoms(); class LAMMPS_commands : public ::testing::Test { protected: LAMMPS_NS::LAMMPS *lmp; - LAMMPS_commands(){}; - ~LAMMPS_commands() override{}; + LAMMPS_commands() = default; + ~LAMMPS_commands() override = default; void SetUp() override { From e56cc9be005bc28f4236d9b47ea8edeb9eb5d59f Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Thu, 14 Oct 2021 01:12:44 -0400 Subject: [PATCH 189/372] use initializer list instead of explicit constructor --- src/info.cpp | 2 +- src/molecule.cpp | 2 +- src/platform.cpp | 6 +++--- src/utils.cpp | 4 ++-- 4 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/info.cpp b/src/info.cpp index 3d24f9b56a..41e4e5d63b 100644 --- a/src/info.cpp +++ b/src/info.cpp @@ -1011,7 +1011,7 @@ std::vector Info::get_available_styles(const std::string &category) } else if (category == "command") { return get_style_names(input->command_map); } - return std::vector(); + return {}; } template diff --git a/src/molecule.cpp b/src/molecule.cpp index 1a3acf53ba..2c9b03337d 100644 --- a/src/molecule.cpp +++ b/src/molecule.cpp @@ -2035,7 +2035,7 @@ std::string Molecule::parse_keyword(int flag, char *line) MPI_Bcast(&eof,1,MPI_INT,0,world); if (eof) { - return std::string(""); + return {""}; } // bcast keyword line to all procs diff --git a/src/platform.cpp b/src/platform.cpp index b057c6415b..555026b2ac 100644 --- a/src/platform.cpp +++ b/src/platform.cpp @@ -415,7 +415,7 @@ std::string platform::mpi_info(int &major, int &minor) major = 1; minor = 0; #endif - return std::string(version); + return {version}; } /* ---------------------------------------------------------------------- @@ -543,8 +543,8 @@ void *platform::dlopen(const std::string &fname) std::string platform::dlerror() { const char *errmesg = ::dlerror(); - if (errmesg) return std::string(errmesg); - else return ""; + if (errmesg) return {errmesg}; + else return {""}; } // close a shared object diff --git a/src/utils.cpp b/src/utils.cpp index dab56da8d3..25be3f3b02 100644 --- a/src/utils.cpp +++ b/src/utils.cpp @@ -143,7 +143,7 @@ void utils::fmtargs_logmesg(LAMMPS *lmp, fmt::string_view format, fmt::format_ar std::string utils::getsyserror() { - return std::string(strerror(errno)); + return {strerror(errno)}; } // read line into buffer. if line is too long keep reading until EOL or EOF @@ -738,7 +738,7 @@ std::string utils::trim_comment(const std::string &line) { auto end = line.find_first_of('#'); if (end != std::string::npos) { return line.substr(0, end); } - return std::string(line); + return {line}; } /* ---------------------------------------------------------------------- From 21060753209c9e785c3a54b225528a3d68b75199 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Thu, 14 Oct 2021 01:21:54 -0400 Subject: [PATCH 190/372] use call-by-value with std::move() function --- src/text_file_reader.cpp | 5 +++-- src/text_file_reader.h | 2 +- src/tokenizer.cpp | 4 ++-- src/tokenizer.h | 2 +- 4 files changed, 7 insertions(+), 6 deletions(-) diff --git a/src/text_file_reader.cpp b/src/text_file_reader.cpp index 8fc57d9283..ab1c81efb1 100644 --- a/src/text_file_reader.cpp +++ b/src/text_file_reader.cpp @@ -22,6 +22,7 @@ #include "utils.h" #include +#include using namespace LAMMPS_NS; @@ -68,8 +69,8 @@ This function is useful in combination with :cpp:func:`utils::open_potential`. * \param fp File descriptor of the already opened file * \param filetype Description of file type for error messages */ -TextFileReader::TextFileReader(FILE *fp, const std::string &filetype) : - filetype(filetype), closefp(false), fp(fp), ignore_comments(true) +TextFileReader::TextFileReader(FILE *fp, std::string filetype) : + filetype(std::move(filetype)), closefp(false), fp(fp), ignore_comments(true) { if (fp == nullptr) throw FileReaderException("Invalid file descriptor"); } diff --git a/src/text_file_reader.h b/src/text_file_reader.h index 826f470299..34556d7eb3 100644 --- a/src/text_file_reader.h +++ b/src/text_file_reader.h @@ -34,7 +34,7 @@ class TextFileReader { bool ignore_comments; //!< Controls whether comments are ignored TextFileReader(const std::string &filename, const std::string &filetype); - TextFileReader(FILE *fp, const std::string &filetype); + TextFileReader(FILE *fp, std::string filetype); ~TextFileReader(); diff --git a/src/tokenizer.cpp b/src/tokenizer.cpp index 95aa175fdf..35a313ab3d 100644 --- a/src/tokenizer.cpp +++ b/src/tokenizer.cpp @@ -49,8 +49,8 @@ TokenizerException::TokenizerException(const std::string &msg, const std::string * \param str string to be processed * \param _separators string with separator characters (default: " \t\r\n\f") */ -Tokenizer::Tokenizer(const std::string &str, const std::string &_separators) : - text(str), separators(_separators), start(0), ntokens(std::string::npos) +Tokenizer::Tokenizer(std::string str, std::string _separators) : + text(std::move(str)), separators(std::move(_separators)), start(0), ntokens(std::string::npos) { // replace known UTF-8 characters with ASCII equivalents if (utils::has_utf8(text)) text = utils::utf8_subst(text); diff --git a/src/tokenizer.h b/src/tokenizer.h index cacfc541a4..247afd0240 100644 --- a/src/tokenizer.h +++ b/src/tokenizer.h @@ -35,7 +35,7 @@ class Tokenizer { size_t ntokens; public: - Tokenizer(const std::string &str, const std::string &separators = TOKENIZER_DEFAULT_SEPARATORS); + Tokenizer(std::string str, std::string separators = TOKENIZER_DEFAULT_SEPARATORS); Tokenizer(Tokenizer &&); Tokenizer(const Tokenizer &); Tokenizer &operator=(const Tokenizer &); From d857685e74ee7ee17fbd2c90c6c4590225fec76b Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Thu, 14 Oct 2021 01:30:54 -0400 Subject: [PATCH 191/372] use emplace_back() instead of push_back() --- src/BOCS/fix_bocs.cpp | 2 +- src/MEAM/pair_meam.cpp | 2 +- src/ML-RANN/pair_rann.cpp | 2 +- tools/lammps-shell/lammps-shell.cpp | 22 ++++++++++---------- unittest/force-styles/test_config_reader.cpp | 4 ++-- unittest/force-styles/test_pair_style.cpp | 2 +- 6 files changed, 17 insertions(+), 17 deletions(-) diff --git a/src/BOCS/fix_bocs.cpp b/src/BOCS/fix_bocs.cpp index 786ff216b0..61339cd31a 100644 --- a/src/BOCS/fix_bocs.cpp +++ b/src/BOCS/fix_bocs.cpp @@ -637,7 +637,7 @@ int FixBocs::read_F_table( char *filename, int p_basis_type ) char line[MAX_F_TABLE_LINE_LENGTH]; std::vector inputLines; while (fgets(line, MAX_F_TABLE_LINE_LENGTH, fpi)) { - inputLines.push_back(std::string(line)); + inputLines.emplace_back(line); } fclose(fpi); diff --git a/src/MEAM/pair_meam.cpp b/src/MEAM/pair_meam.cpp index 2acf58f738..b69d17f0a9 100644 --- a/src/MEAM/pair_meam.cpp +++ b/src/MEAM/pair_meam.cpp @@ -255,7 +255,7 @@ void PairMEAM::coeff(int narg, char **arg) "'maxelt' in meam.h and recompile.", maxelt); for (int i = 0; i < nlibelements; i++) { - libelements.push_back(arg[i+3]); + libelements.emplace_back(arg[i+3]); mass.push_back(0.0); } diff --git a/src/ML-RANN/pair_rann.cpp b/src/ML-RANN/pair_rann.cpp index 60ed776c41..fbc54e745f 100644 --- a/src/ML-RANN/pair_rann.cpp +++ b/src/ML-RANN/pair_rann.cpp @@ -432,7 +432,7 @@ void PairRANN::read_atom_types(std::vector line,char *filename,int int nwords = line.size(); if (nwords < 1) error->one(filename,linenum,"Incorrect syntax for atom types"); nelements = nwords; - line.push_back("all"); + line.emplace_back("all"); allocate(line); } diff --git a/tools/lammps-shell/lammps-shell.cpp b/tools/lammps-shell/lammps-shell.cpp index df8d52bd33..d03e1da70b 100644 --- a/tools/lammps-shell/lammps-shell.cpp +++ b/tools/lammps-shell/lammps-shell.cpp @@ -563,24 +563,24 @@ static void init_commands() // store internal commands int ncmds = sizeof(cmdlist) / sizeof(const char *); for (int i = 0; i < ncmds; ++i) - commands.push_back(cmdlist[i]); + commands.emplace_back(cmdlist[i]); // store optional commands from command styles ncmds = lammps_style_count(lmp, "command"); for (int i = 0; i < ncmds; ++i) { - if (lammps_style_name(lmp, "command", i, buf, BUFLEN)) commands.push_back(buf); + if (lammps_style_name(lmp, "command", i, buf, BUFLEN)) commands.emplace_back(buf); } // store LAMMPS shell specific command names - commands.push_back("help"); - commands.push_back("exit"); - commands.push_back("pwd"); - commands.push_back("cd"); - commands.push_back("mem"); - commands.push_back("source"); - commands.push_back("history"); - commands.push_back("clear_history"); - commands.push_back("save_history"); + commands.emplace_back("help"); + commands.emplace_back("exit"); + commands.emplace_back("pwd"); + commands.emplace_back("cd"); + commands.emplace_back("mem"); + commands.emplace_back("source"); + commands.emplace_back("history"); + commands.emplace_back("clear_history"); + commands.emplace_back("save_history"); // set name so there can be specific entries in ~/.inputrc rl_readline_name = "lammps-shell"; diff --git a/unittest/force-styles/test_config_reader.cpp b/unittest/force-styles/test_config_reader.cpp index 726bd90a93..945c16c649 100644 --- a/unittest/force-styles/test_config_reader.cpp +++ b/unittest/force-styles/test_config_reader.cpp @@ -86,7 +86,7 @@ void TestConfigReader::prerequisites(const yaml_event_t &event) while (1) { data >> key >> value; if (data.eof()) break; - config.prerequisites.push_back(std::make_pair(key, value)); + config.prerequisites.emplace_back(key, value); } } @@ -141,7 +141,7 @@ void TestConfigReader::extract(const yaml_event_t &event) while (1) { data >> name >> value; if (data.eof()) break; - config.extract.push_back(make_pair(name, value)); + config.extract.emplace_back(name, value); } } diff --git a/unittest/force-styles/test_pair_style.cpp b/unittest/force-styles/test_pair_style.cpp index 2eda7bea9f..a2c8424024 100644 --- a/unittest/force-styles/test_pair_style.cpp +++ b/unittest/force-styles/test_pair_style.cpp @@ -1252,7 +1252,7 @@ TEST(PairStyle, single) int argc = sizeof(args) / sizeof(char *); // need to add this dependency - test_config.prerequisites.push_back(std::make_pair("atom", "full")); + test_config.prerequisites.emplace_back("atom", "full"); // create a LAMMPS instance with standard settings to detect the number of atom types if (!verbose) ::testing::internal::CaptureStdout(); From 267bc7ae2daed4d1c8e71d772e77ed29dd1dce77 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Thu, 14 Oct 2021 08:07:43 -0400 Subject: [PATCH 192/372] avoid (unlikely) integer overflows with very large systems --- src/REAXFF/fix_acks2_reaxff.cpp | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/src/REAXFF/fix_acks2_reaxff.cpp b/src/REAXFF/fix_acks2_reaxff.cpp index f9a3b384bd..0e26c3e115 100644 --- a/src/REAXFF/fix_acks2_reaxff.cpp +++ b/src/REAXFF/fix_acks2_reaxff.cpp @@ -866,15 +866,14 @@ void FixACKS2ReaxFF::more_reverse_comm(double *vec) double FixACKS2ReaxFF::memory_usage() { double bytes; - - int size = 2*nmax + 2; + const double size = 2.0*nmax + 2.0; bytes = size*nprev * sizeof(double); // s_hist - bytes += nmax*4 * sizeof(double); // storage - bytes += size*11 * sizeof(double); // storage - bytes += n_cap*4 * sizeof(int); // matrix... - bytes += m_cap*2 * sizeof(int); - bytes += m_cap*2 * sizeof(double); + bytes += nmax*4.0 * sizeof(double); // storage + bytes += size*11.0 * sizeof(double); // storage + bytes += n_cap*4.0 * sizeof(int); // matrix... + bytes += m_cap*2.0 * sizeof(int); + bytes += m_cap*2.0 * sizeof(double); return bytes; } From cd526ad54ca2e09cbface17a566fd1a5f76a67ff Mon Sep 17 00:00:00 2001 From: Yury Lysogorskiy Date: Thu, 14 Oct 2021 15:16:48 +0200 Subject: [PATCH 193/372] try to find system libyaml-cpp v.0.6.3 library, otherwise use downloaded one --- cmake/Modules/Packages/ML-PACE.cmake | 48 +++++++++++++++++++--------- 1 file changed, 33 insertions(+), 15 deletions(-) diff --git a/cmake/Modules/Packages/ML-PACE.cmake b/cmake/Modules/Packages/ML-PACE.cmake index f7ec16d370..6a5d07553d 100644 --- a/cmake/Modules/Packages/ML-PACE.cmake +++ b/cmake/Modules/Packages/ML-PACE.cmake @@ -1,22 +1,40 @@ -#set(PACELIB_URL "https://github.com/ICAMS/lammps-user-pace/archive/refs/tags/v.2021.9.28.tar.gz" CACHE STRING "URL for PACE evaluator library sources") -#set(PACELIB_MD5 "f98363bb98adc7295ea63974738c2a1b" CACHE STRING "MD5 checksum of PACE evaluator library tarball") -#mark_as_advanced(PACELIB_URL) -#mark_as_advanced(PACELIB_MD5) +set(PACELIB_URL "https://github.com/ICAMS/lammps-user-pace/archive/refs/tags/v.2021.9.28.upd1.tar.gz" CACHE STRING "URL for PACE evaluator library sources") +set(PACELIB_MD5 "ec75bc491edd75e10560cdbf129d91a7" CACHE STRING "MD5 checksum of PACE evaluator library tarball") +mark_as_advanced(PACELIB_URL) +mark_as_advanced(PACELIB_MD5) # download library sources to build folder -#file(DOWNLOAD ${PACELIB_URL} ${CMAKE_BINARY_DIR}/libpace.tar.gz SHOW_PROGRESS EXPECTED_HASH MD5=${PACELIB_MD5}) +file(DOWNLOAD ${PACELIB_URL} ${CMAKE_BINARY_DIR}/libpace.tar.gz SHOW_PROGRESS EXPECTED_HASH MD5=${PACELIB_MD5}) # uncompress downloaded sources -#execute_process( -# COMMAND ${CMAKE_COMMAND} -E remove_directory lammps-user-pace* -# COMMAND ${CMAKE_COMMAND} -E tar xzf libpace.tar.gz -# WORKING_DIRECTORY ${CMAKE_BINARY_DIR} -#) +execute_process( + COMMAND ${CMAKE_COMMAND} -E remove_directory lammps-user-pace* + COMMAND ${CMAKE_COMMAND} -E tar xzf libpace.tar.gz + WORKING_DIRECTORY ${CMAKE_BINARY_DIR} +) file(GLOB lib-pace ${CMAKE_BINARY_DIR}/lammps-user-pace-*) -add_subdirectory(${lib-pace}/yaml-cpp build-yaml-cpp) -set(YAML_CPP_INCLUDE_DIR ${lib-pace}/yaml-cpp/include) + +# try to find system libyaml-cpp v.0.6.3 library +find_package(yaml-cpp 0.6.3 QUIET) + +find_path(YAML_CPP_INCLUDE_DIR + NAMES yaml.h + PATHS ${YAML_CPP_INCLUDE_DIRS}) + +find_library(YAML_CPP_LIBRARY + NAMES yaml-cpp + PATHS ${YAML_CPP_LIBRARY_DIRS}) + +# if system library not found - using downloaded +if(${YAML_CPP_LIBRARY} STREQUAL "" OR ${YAML_CPP_INCLUDE_DIR} STREQUAL "" OR + ${YAML_CPP_INCLUDE_DIR} STREQUAL "YAML_CPP_INCLUDE_DIR-NOTFOUND") + message("-- Library yaml-fcc v0.6.3 not found, using downloaded copy") + add_subdirectory(${lib-pace}/yaml-cpp build-yaml-cpp) + set(YAML_CPP_INCLUDE_DIR ${lib-pace}/yaml-cpp/include) + set(YAML_CPP_LIBRARY yaml-cpp-pace) +endif() file(GLOB PACE_EVALUATOR_INCLUDE_DIR ${lib-pace}/ML-PACE) file(GLOB PACE_EVALUATOR_SOURCES ${lib-pace}/ML-PACE/*.cpp) @@ -24,8 +42,8 @@ list(FILTER PACE_EVALUATOR_SOURCES EXCLUDE REGEX pair_pace.cpp) add_library(pace STATIC ${PACE_EVALUATOR_SOURCES}) set_target_properties(pace PROPERTIES CXX_EXTENSIONS ON OUTPUT_NAME lammps_pace${LAMMPS_MACHINE}) -target_include_directories(pace PUBLIC ${PACE_EVALUATOR_INCLUDE_DIR} ${YAML_CPP_INCLUDE_DIR}) +target_include_directories(pace PRIVATE ${YAML_CPP_INCLUDE_DIR}) +target_include_directories(pace PUBLIC ${PACE_EVALUATOR_INCLUDE_DIR}) target_link_libraries(lammps PRIVATE pace) -target_link_libraries(lammps PRIVATE yaml-cpp-pace) - +target_link_libraries(lammps PRIVATE ${YAML_CPP_LIBRARY}) \ No newline at end of file From 98cdfa101636bab2884510483270b0360f7bd78d Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Fri, 15 Oct 2021 09:29:47 -0400 Subject: [PATCH 194/372] fix bug detected by coverity scan --- src/REAXFF/fix_acks2_reaxff.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/REAXFF/fix_acks2_reaxff.cpp b/src/REAXFF/fix_acks2_reaxff.cpp index 58656feb2b..f19b31f9ed 100644 --- a/src/REAXFF/fix_acks2_reaxff.cpp +++ b/src/REAXFF/fix_acks2_reaxff.cpp @@ -640,9 +640,10 @@ void FixACKS2ReaxFF::sparse_matvec_acks2(sparse_matrix *H, sparse_matrix *X, dou for (ii = nn; ii < NN; ++ii) { i = ilist[ii]; - if (atom->mask[i] & groupbit) + if (atom->mask[i] & groupbit) { b[i] = 0; b[NN + i] = 0; + } } // last two rows b[2*NN] = 0; From 5140d26748be4c4fdbdcd5b9be994be1f9c35253 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Fri, 15 Oct 2021 16:59:53 -0400 Subject: [PATCH 195/372] plug memory leaks --- src/compute_orientorder_atom.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/compute_orientorder_atom.cpp b/src/compute_orientorder_atom.cpp index d4291251b6..fd020e1865 100644 --- a/src/compute_orientorder_atom.cpp +++ b/src/compute_orientorder_atom.cpp @@ -181,6 +181,8 @@ void ComputeOrientOrderAtom::init() error->all(FLERR,"Compute orientorder/atom cutoff is " "longer than pairwise cutoff"); + memory->destroy(qnm_r); + memory->destroy(qnm_i); memory->create(qnm_r,nqlist,2*qmax+1,"orientorder/atom:qnm_r"); memory->create(qnm_i,nqlist,2*qmax+1,"orientorder/atom:qnm_i"); @@ -652,6 +654,7 @@ void ComputeOrientOrderAtom::init_clebsch_gordan() idxcg_count++; } idxcg_max = idxcg_count; + memory->destroy(cglist); memory->create(cglist, idxcg_max, "computeorientorderatom:cglist"); idxcg_count = 0; From 222063e5cfc7f07cf1e28a21d3a5ad5de053121a Mon Sep 17 00:00:00 2001 From: Stan Gerald Moore Date: Fri, 15 Oct 2021 17:32:37 -0600 Subject: [PATCH 196/372] Add preliminary support for Kokkos OpenMPTarget backend --- src/KOKKOS/kokkos.cpp | 10 +++++----- src/KOKKOS/kokkos.h | 10 +++++----- src/KOKKOS/kokkos_type.h | 15 ++++++++++++++- src/KOKKOS/npair_kokkos.cpp | 20 ++++++++++++-------- 4 files changed, 36 insertions(+), 19 deletions(-) diff --git a/src/KOKKOS/kokkos.cpp b/src/KOKKOS/kokkos.cpp index 63a18ec387..e26513a122 100644 --- a/src/KOKKOS/kokkos.cpp +++ b/src/KOKKOS/kokkos.cpp @@ -44,7 +44,7 @@ #define GPU_AWARE_UNKNOWN static int have_gpu_aware = -1; // TODO HIP: implement HIP-aware MPI support (UCX) detection -#if defined(KOKKOS_ENABLE_HIP) || defined(KOKKOS_ENABLE_SYCL) +#if defined(KOKKOS_ENABLE_HIP) || defined(KOKKOS_ENABLE_SYCL) || defined(KOKKOS_ENABLE_OPENMPTARGET) GPU_AWARE_UNKNOWN #elif defined(KOKKOS_ENABLE_CUDA) @@ -121,7 +121,7 @@ KokkosLMP::KokkosLMP(LAMMPS *lmp, int narg, char **arg) : Pointers(lmp) } else if (strcmp(arg[iarg],"g") == 0 || strcmp(arg[iarg],"gpus") == 0) { #ifndef LMP_KOKKOS_GPU - error->all(FLERR,"GPUs are requested but Kokkos has not been compiled for CUDA, HIP, or SYCL"); + error->all(FLERR,"GPUs are requested but Kokkos has not been compiled using a GPU-enabled backend"); #endif if (iarg+2 > narg) error->all(FLERR,"Invalid Kokkos command-line args"); ngpus = atoi(arg[iarg+1]); @@ -162,7 +162,7 @@ KokkosLMP::KokkosLMP(LAMMPS *lmp, int narg, char **arg) : Pointers(lmp) if (ngpus > 1 && !set_flag) error->all(FLERR,"Could not determine local MPI rank for multiple " - "GPUs with Kokkos CUDA, HIP, or SYCL because MPI library not recognized"); + "GPUs with Kokkos because MPI library not recognized"); } else if (strcmp(arg[iarg],"t") == 0 || strcmp(arg[iarg],"threads") == 0) { @@ -204,7 +204,7 @@ KokkosLMP::KokkosLMP(LAMMPS *lmp, int narg, char **arg) : Pointers(lmp) #ifdef LMP_KOKKOS_GPU if (ngpus <= 0) - error->all(FLERR,"Kokkos has been compiled for CUDA, HIP, or SYCL but no GPUs are requested"); + error->all(FLERR,"Kokkos has been compiled with GPU-enabled backend but no GPUs are requested"); #endif #ifndef KOKKOS_ENABLE_SERIAL @@ -311,7 +311,7 @@ KokkosLMP::KokkosLMP(LAMMPS *lmp, int narg, char **arg) : Pointers(lmp) error->warning(FLERR,"Detected MPICH. Disabling GPU-aware MPI"); #else if (me == 0) - error->warning(FLERR,"Kokkos with CUDA, HIP, or SYCL assumes CUDA-aware MPI is available," + error->warning(FLERR,"Kokkos with GPU-enabled backend assumes GPU-aware MPI is available," " but cannot determine if this is the case\n try" " '-pk kokkos gpu/aware off' if getting segmentation faults"); diff --git a/src/KOKKOS/kokkos.h b/src/KOKKOS/kokkos.h index fa5ff42a44..af35d95b9e 100644 --- a/src/KOKKOS/kokkos.h +++ b/src/KOKKOS/kokkos.h @@ -87,7 +87,7 @@ E: Invalid Kokkos command-line args Self-explanatory. See Section 2.7 of the manual for details. -E: Could not determine local MPI rank for multiple GPUs with Kokkos CUDA +E: Could not determine local MPI rank for multiple GPUs with Kokkos because MPI library not recognized The local MPI rank was not found in one of four supported environment variables. @@ -96,13 +96,13 @@ E: Invalid number of threads requested for Kokkos: must be 1 or greater Self-explanatory. -E: GPUs are requested but Kokkos has not been compiled for CUDA +E: GPUs are requested but Kokkos has not been compiled using GPU-enabled backend -Recompile Kokkos with CUDA support to use GPUs. +Recompile Kokkos with GPU-enabled backend to use GPUs. -E: Kokkos has been compiled for CUDA, HIP, or SYCL but no GPUs are requested +E: Kokkos has been compiled with GPU-enabled backend but no GPUs are requested -One or more GPUs must be used when Kokkos is compiled for CUDA/HIP/SYCL. +One or more GPUs must be used when Kokkos is compiled for CUDA/HIP/SYCL/OpenMPTarget. W: Kokkos package already initalized, cannot reinitialize with different parameters diff --git a/src/KOKKOS/kokkos_type.h b/src/KOKKOS/kokkos_type.h index cd829ec3e4..248435ba03 100644 --- a/src/KOKKOS/kokkos_type.h +++ b/src/KOKKOS/kokkos_type.h @@ -34,7 +34,7 @@ constexpr int HALF = 4; #define ISFINITE(x) std::isfinite(x) #endif -#if defined(KOKKOS_ENABLE_CUDA) || defined(KOKKOS_ENABLE_HIP) || defined(KOKKOS_ENABLE_SYCL) +#if defined(KOKKOS_ENABLE_CUDA) || defined(KOKKOS_ENABLE_HIP) || defined(KOKKOS_ENABLE_SYCL) || defined(KOKKOS_ENABLE_OPENMPTARGET) #define LMP_KOKKOS_GPU #endif @@ -222,6 +222,10 @@ struct ExecutionSpaceFromDevice { template<> struct ExecutionSpaceFromDevice { static const LAMMPS_NS::ExecutionSpace space = LAMMPS_NS::Device; +#elif defined(KOKKOS_ENABLE_OPENMPTARGET) +template<> +struct ExecutionSpaceFromDevice { + static const LAMMPS_NS::ExecutionSpace space = LAMMPS_NS::Device; }; #endif @@ -232,6 +236,8 @@ typedef Kokkos::CudaHostPinnedSpace LMPPinnedHostType; typedef Kokkos::Experimental::HIPHostPinnedSpace LMPPinnedHostType; #elif defined(KOKKOS_ENABLE_SYCL) typedef Kokkos::Experimental::SYCLSharedUSMSpace LMPPinnedHostType; +#elif defined(KOKKOS_ENABLE_OPENMPTARGET) +typedef Kokkos::Serial LMPPinnedHostType; #endif // create simple LMPDeviceSpace typedef for non CUDA-, HIP-, or SYCL-specific @@ -242,6 +248,8 @@ typedef Kokkos::Cuda LMPDeviceSpace; typedef Kokkos::Experimental::HIP LMPDeviceSpace; #elif defined(KOKKOS_ENABLE_SYCL) typedef Kokkos::Experimental::SYCL LMPDeviceSpace; +#elif defined(KOKKOS_ENABLE_OPENMPTARGET) +typedef Kokkos::Experimental::OpenMPTarget LMPDeviceSpace; #endif @@ -280,6 +288,11 @@ template<> struct AtomicDup { using value = Kokkos::Experimental::ScatterAtomic; }; +#elif defined(KOKKOS_ENABLE_OPENMPTARGET) +template<> +struct AtomicDup { + using value = Kokkos::Experimental::ScatterAtomic; +}; #endif #ifdef LMP_KOKKOS_USE_ATOMICS diff --git a/src/KOKKOS/npair_kokkos.cpp b/src/KOKKOS/npair_kokkos.cpp index 1110aef4a6..2ca16e7a60 100644 --- a/src/KOKKOS/npair_kokkos.cpp +++ b/src/KOKKOS/npair_kokkos.cpp @@ -240,7 +240,7 @@ void NPairKokkos::build(NeighList *list_) if (newton_pair) { if (SIZE) { NPairKokkosBuildFunctorSize f(data,atoms_per_bin * 5 * sizeof(X_FLOAT) * factor); -#ifdef LMP_KOKKOS_GPU +#if defined(LMP_KOKKOS_GPU) && !defined(KOKKOS_ENABLE_OPENMPTARGET) if (ExecutionSpaceFromDevice::space == Device) { int team_size = atoms_per_bin*factor; int team_size_max = Kokkos::TeamPolicy(team_size,Kokkos::AUTO).team_size_max(f,Kokkos::ParallelForTag()); @@ -258,7 +258,7 @@ void NPairKokkos::build(NeighList *list_) #endif } else { NPairKokkosBuildFunctor f(data,atoms_per_bin * 5 * sizeof(X_FLOAT) * factor); -#ifdef LMP_KOKKOS_GPU +#if defined(LMP_KOKKOS_GPU) && !defined(KOKKOS_ENABLE_OPENMPTARGET) if (ExecutionSpaceFromDevice::space == Device) { int team_size = atoms_per_bin*factor; int team_size_max = Kokkos::TeamPolicy(team_size,Kokkos::AUTO).team_size_max(f,Kokkos::ParallelForTag()); @@ -278,7 +278,7 @@ void NPairKokkos::build(NeighList *list_) } else { if (SIZE) { NPairKokkosBuildFunctorSize f(data,atoms_per_bin * 5 * sizeof(X_FLOAT) * factor); -#ifdef LMP_KOKKOS_GPU +#if defined(LMP_KOKKOS_GPU) && !defined(KOKKOS_ENABLE_OPENMPTARGET) if (ExecutionSpaceFromDevice::space == Device) { int team_size = atoms_per_bin*factor; int team_size_max = Kokkos::TeamPolicy(team_size,Kokkos::AUTO).team_size_max(f,Kokkos::ParallelForTag()); @@ -296,7 +296,7 @@ void NPairKokkos::build(NeighList *list_) #endif } else { NPairKokkosBuildFunctor f(data,atoms_per_bin * 5 * sizeof(X_FLOAT) * factor); -#ifdef LMP_KOKKOS_GPU +#if defined(LMP_KOKKOS_GPU) && !defined(KOKKOS_ENABLE_OPENMPTARGET) if (ExecutionSpaceFromDevice::space == Device) { int team_size = atoms_per_bin*factor; int team_size_max = Kokkos::TeamPolicy(team_size,Kokkos::AUTO).team_size_max(f,Kokkos::ParallelForTag()); @@ -605,14 +605,16 @@ void NeighborKokkosExecute::build_ItemGPU(typename Kokkos::TeamPolic other_x[MY_II + 3 * atoms_per_bin] = itype; } other_id[MY_II] = i; -#ifndef KOKKOS_ENABLE_SYCL +#if defined(KOKKOS_ENABLE_CUDA) || defined(KOKKOS_ENABLE_HIP) int test = (__syncthreads_count(i >= 0 && i <= nlocal) == 0); if (test) return; -#else +#elif defined(KOKKOS_ENABLE_SYCL) int not_done = (i >= 0 && i <= nlocal); dev.team_reduce(Kokkos::Max(not_done)); if(not_done == 0) return; +#elif defined(KOKKOS_ENABLE_OPENMPTARGET) + dev.team_barrier(); #endif if (i >= 0 && i < nlocal) { @@ -1055,14 +1057,16 @@ void NeighborKokkosExecute::build_ItemSizeGPU(typename Kokkos::TeamP other_x[MY_II + 4 * atoms_per_bin] = radi; } other_id[MY_II] = i; -#ifndef KOKKOS_ENABLE_SYCL +#if defined(KOKKOS_ENABLE_CUDA) || defined(KOKKOS_ENABLE_HIP) int test = (__syncthreads_count(i >= 0 && i <= nlocal) == 0); if (test) return; -#else +#elif defined(KOKKOS_ENABLE_SYCL) int not_done = (i >= 0 && i <= nlocal); dev.team_reduce(Kokkos::Max(not_done)); if(not_done == 0) return; +#elif defined(KOKKOS_ENABLE_OPENMPTARGET) + dev.team_barrier(); #endif if (i >= 0 && i < nlocal) { From 47523da16b889e45ae8174b4d46f3fd613352eea Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Fri, 15 Oct 2021 20:03:39 -0400 Subject: [PATCH 197/372] allow single precision FFT introspection --- src/info.cpp | 11 +++++++++++ src/info.h | 1 + src/lammps.cpp | 1 + 3 files changed, 13 insertions(+) diff --git a/src/info.cpp b/src/info.cpp index dc95f8a30f..bbc94fbccb 100644 --- a/src/info.cpp +++ b/src/info.cpp @@ -299,6 +299,7 @@ void Info::command(int narg, char **arg) if (has_png_support()) fputs("-DLAMMPS_PNG\n",out); if (has_jpeg_support()) fputs("-DLAMMPS_JPEG\n",out); if (has_ffmpeg_support()) fputs("-DLAMMPS_FFMPEG\n",out); + if (has_fft_single_support()) fputs("-DFFT_SINGLE\n",out); if (has_exceptions()) fputs("-DLAMMPS_EXCEPTIONS\n",out); #if defined(LAMMPS_BIGBIG) @@ -879,6 +880,8 @@ bool Info::is_available(const char *category, const char *name) return has_jpeg_support(); } else if (strcmp(name,"ffmpeg") == 0) { return has_ffmpeg_support(); + } else if (strcmp(name,"fft_single") == 0) { + return has_fft_single_support(); } else if (strcmp(name,"exceptions") == 0) { return has_exceptions(); } @@ -1127,6 +1130,14 @@ bool Info::has_ffmpeg_support() { #endif } +bool Info::has_fft_single_support() { +#ifdef FFT_SINGLE + return true; +#else + return false; +#endif +} + bool Info::has_exceptions() { #ifdef LAMMPS_EXCEPTIONS return true; diff --git a/src/info.h b/src/info.h index 0e7bfb68f3..c1e10a2336 100644 --- a/src/info.h +++ b/src/info.h @@ -42,6 +42,7 @@ class Info : public Command { static bool has_png_support(); static bool has_jpeg_support(); static bool has_ffmpeg_support(); + static bool has_fft_single_support(); static bool has_exceptions(); static bool has_package(const std::string &); static bool has_accelerator_feature(const std::string &, const std::string &, diff --git a/src/lammps.cpp b/src/lammps.cpp index 7185074ab4..8541011814 100644 --- a/src/lammps.cpp +++ b/src/lammps.cpp @@ -1348,6 +1348,7 @@ void LAMMPS::print_config(FILE *fp) if (Info::has_png_support()) fputs("-DLAMMPS_PNG\n",fp); if (Info::has_jpeg_support()) fputs("-DLAMMPS_JPEG\n",fp); if (Info::has_ffmpeg_support()) fputs("-DLAMMPS_FFMPEG\n",fp); + if (Info::has_fft_single_support()) fputs("-DFFT_SINGLE\n",fp); if (Info::has_exceptions()) fputs("-DLAMMPS_EXCEPTIONS\n",fp); #if defined(LAMMPS_BIGBIG) fputs("-DLAMMPS_BIGBIG\n",fp); From 6827f71f26874e1a23879a57e9652da838ea6311 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Fri, 15 Oct 2021 20:04:16 -0400 Subject: [PATCH 198/372] pppm kspace styles also require -DFFT_SINGLE when using GPUs in single precision --- unittest/force-styles/test_pair_style.cpp | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/unittest/force-styles/test_pair_style.cpp b/unittest/force-styles/test_pair_style.cpp index a2c8424024..898fb8e412 100644 --- a/unittest/force-styles/test_pair_style.cpp +++ b/unittest/force-styles/test_pair_style.cpp @@ -858,6 +858,13 @@ TEST(PairStyle, gpu) if (!Info::has_gpu_device()) GTEST_SKIP(); if (test_config.skip_tests.count(test_info_->name())) GTEST_SKIP(); + // when testing PPPM styles with GPUs and GPU support is compiled with single precision + // we also must have single precision FFTs; otherwise skip since the test would abort + if (utils::strmatch(test_config.basename, ".*pppm.*") && + (Info::has_accelerator_feature("GPU", "precision", "single")) && + (!Info::has_fft_single_support())) + GTEST_SKIP(); + const char *args_neigh[] = {"PairStyle", "-log", "none", "-echo", "screen", "-nocite", "-sf", "gpu"}; const char *args_noneigh[] = {"PairStyle", "-log", "none", "-echo", "screen", "-nocite", "-sf", From 83e58eadb7b31974cf347e622615dc428da080ea Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Fri, 15 Oct 2021 20:23:31 -0400 Subject: [PATCH 199/372] correct expansion of fix/compute/variable arguments to avoid bogus thermo outpu --- src/utils.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/utils.cpp b/src/utils.cpp index 25be3f3b02..507500f116 100644 --- a/src/utils.cpp +++ b/src/utils.cpp @@ -661,7 +661,10 @@ int utils::expand_args(const char *file, int line, int narg, char **arg, int mod } for (int index = nlo; index <= nhi; index++) { - earg[newarg] = utils::strdup(fmt::format("{}2_{}[{}]{}", word[0], id, index, tail)); + if (word[1] == '2') + earg[newarg] = utils::strdup(fmt::format("{}2_{}[{}]{}", word[0], id, index, tail)); + else + earg[newarg] = utils::strdup(fmt::format("{}_{}[{}]{}", word[0], id, index, tail)); newarg++; } } else { From ab30ed4ca9f2a1a00188adcd14a17cd47f8bea6a Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sat, 16 Oct 2021 05:35:24 -0400 Subject: [PATCH 200/372] modernize --- src/GRANULAR/fix_pour.cpp | 13 +++---------- 1 file changed, 3 insertions(+), 10 deletions(-) diff --git a/src/GRANULAR/fix_pour.cpp b/src/GRANULAR/fix_pour.cpp index a2f4d91840..b73593b1d7 100644 --- a/src/GRANULAR/fix_pour.cpp +++ b/src/GRANULAR/fix_pour.cpp @@ -268,16 +268,9 @@ FixPour::FixPour(LAMMPS *lmp, int narg, char **arg) : // print stats - if (me == 0) { - if (screen) - fprintf(screen, - "Particle insertion: %d every %d steps, %d by step %d\n", - nper,nfreq,ninsert,nfinal); - if (logfile) - fprintf(logfile, - "Particle insertion: %d every %d steps, %d by step %d\n", - nper,nfreq,ninsert,nfinal); - } + if (me == 0) + utils::logmesg(lmp, "Particle insertion: {} every {} steps, {} by step {}\n", + nper,nfreq,ninsert,nfinal); } /* ---------------------------------------------------------------------- */ From 5b40e4cb38bc5e008a5b8c427eaa52311cb64cfc Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sun, 8 Aug 2021 17:25:06 -0400 Subject: [PATCH 201/372] new accessor APIs for fixes and computes in Modify plus a few applications --- src/GRANULAR/fix_pour.cpp | 57 +++---- src/KOKKOS/fix_gravity_kokkos.cpp | 2 - src/OPENMP/fix_gravity_omp.cpp | 1 - src/atom.cpp | 11 +- src/balance.cpp | 7 +- src/change_box.cpp | 25 ++- src/compute_angmom_chunk.cpp | 75 +++++---- src/compute_centroid_stress_atom.cpp | 229 +++++++++++++-------------- src/compute_chunk_atom.cpp | 72 ++++----- src/domain.cpp | 30 ++-- src/dump.cpp | 4 +- src/finish.cpp | 5 +- src/fix_gravity.cpp | 1 - src/fix_gravity.h | 1 + src/modify.cpp | 78 +++++++++ src/modify.h | 17 ++ src/variable.cpp | 122 +++++--------- src/velocity.cpp | 42 +++-- src/velocity.h | 3 +- src/verlet.cpp | 3 +- 20 files changed, 397 insertions(+), 388 deletions(-) diff --git a/src/GRANULAR/fix_pour.cpp b/src/GRANULAR/fix_pour.cpp index a2f4d91840..063efda351 100644 --- a/src/GRANULAR/fix_pour.cpp +++ b/src/GRANULAR/fix_pour.cpp @@ -41,7 +41,6 @@ using namespace MathConst; enum{ATOM,MOLECULE}; enum{ONE,RANGE,POLY}; -enum{CONSTANT,EQUAL}; // same as FixGravity #define EPSILON 0.001 #define SMALL 1.0e-10 @@ -186,10 +185,12 @@ FixPour::FixPour(LAMMPS *lmp, int narg, char **arg) : // grav = gravity in distance/time^2 units // assume grav = -magnitude at this point, enforce in init() - int ifix = modify->find_fix_by_style("^gravity"); - if (ifix == -1) - error->all(FLERR,"No fix gravity defined for fix pour"); - grav = - ((FixGravity *) modify->fix[ifix])->magnitude * force->ftm2v; + auto fixlist = modify->get_fix_by_style("^gravity"); + if (fixlist.size() != 1) + error->all(FLERR,"There must be exactly one fix gravity defined for fix pour"); + auto fixgrav = (FixGravity *)fixlist.front(); + + grav = -fixgrav->magnitude * force->ftm2v; // nfreq = timesteps between insertions // should be time for a particle to fall from top of insertion region @@ -208,9 +209,8 @@ FixPour::FixPour(LAMMPS *lmp, int narg, char **arg) : v_relative = vy - rate; delta = yhi - ylo; } - double t = - (-v_relative - sqrt(v_relative*v_relative - 2.0*grav*delta)) / grav; - nfreq = static_cast (t/update->dt + 0.5); + double t = (-v_relative - sqrt(v_relative*v_relative - 2.0*grav*delta)) / grav; + nfreq = static_cast(t/update->dt + 0.5); // 1st insertion on next timestep @@ -316,17 +316,16 @@ void FixPour::init() // for 3d must point in -z, for 2d must point in -y // else insertion cannot work - int ifix = modify->find_fix_by_style("^gravity"); - if (ifix == -1) - error->all(FLERR,"No fix gravity defined for fix pour"); - - int varflag = ((FixGravity *) modify->fix[ifix])->varflag; - if (varflag != CONSTANT) + auto fixlist = modify->get_fix_by_style("^gravity"); + if (fixlist.size() != 1) + error->all(FLERR,"There must be exactly one fix gravity defined for fix pour"); + auto fixgrav = (FixGravity *)fixlist.front(); + if (fixgrav->varflag != FixGravity::CONSTANT) error->all(FLERR,"Fix gravity for fix pour must be constant"); - double xgrav = ((FixGravity *) modify->fix[ifix])->xgrav; - double ygrav = ((FixGravity *) modify->fix[ifix])->ygrav; - double zgrav = ((FixGravity *) modify->fix[ifix])->zgrav; + double xgrav = fixgrav->xgrav; + double ygrav = fixgrav->ygrav; + double zgrav = fixgrav->zgrav; if (domain->dimension == 3) { if (fabs(xgrav) > EPSILON || fabs(ygrav) > EPSILON || @@ -338,37 +337,29 @@ void FixPour::init() error->all(FLERR,"Gravity must point in -y to use with fix pour in 2d"); } - double gnew = - ((FixGravity *) modify->fix[ifix])->magnitude * force->ftm2v; - if (gnew != grav) - error->all(FLERR,"Gravity changed since fix pour was created"); + double gnew = -fixgrav->magnitude * force->ftm2v; + if (gnew != grav) error->all(FLERR,"Gravity changed since fix pour was created"); // if rigidflag defined, check for rigid/small fix // its molecule template must be same as this one - fixrigid = nullptr; + fixrigid = modify->get_fix_by_id(idrigid); if (rigidflag) { - int ifix = modify->find_fix(idrigid); - if (ifix < 0) error->all(FLERR,"Fix pour rigid fix does not exist"); - fixrigid = modify->fix[ifix]; + if (!fixrigid) error->all(FLERR,"Fix pour rigid fix does not exist"); int tmp; if (onemols != (Molecule **) fixrigid->extract("onemol",tmp)) - error->all(FLERR, - "Fix pour and fix rigid/small not using " - "same molecule template ID"); + error->all(FLERR,"Fix pour and fix rigid/small not using same molecule template ID"); } // if shakeflag defined, check for SHAKE fix // its molecule template must be same as this one - fixshake = nullptr; + fixshake = modify->get_fix_by_id(idshake); if (shakeflag) { - int ifix = modify->find_fix(idshake); - if (ifix < 0) error->all(FLERR,"Fix pour shake fix does not exist"); - fixshake = modify->fix[ifix]; + if (!fixshake) error->all(FLERR,"Fix pour shake fix does not exist"); int tmp; if (onemols != (Molecule **) fixshake->extract("onemol",tmp)) - error->all(FLERR,"Fix pour and fix shake not using " - "same molecule template ID"); + error->all(FLERR,"Fix pour and fix shake not using same molecule template ID"); } } diff --git a/src/KOKKOS/fix_gravity_kokkos.cpp b/src/KOKKOS/fix_gravity_kokkos.cpp index ec6afbc133..63ac87a786 100644 --- a/src/KOKKOS/fix_gravity_kokkos.cpp +++ b/src/KOKKOS/fix_gravity_kokkos.cpp @@ -24,8 +24,6 @@ using namespace LAMMPS_NS; -enum{CONSTANT,EQUAL}; - /* ---------------------------------------------------------------------- */ template diff --git a/src/OPENMP/fix_gravity_omp.cpp b/src/OPENMP/fix_gravity_omp.cpp index 7354ec2aa4..72d2fdc59b 100644 --- a/src/OPENMP/fix_gravity_omp.cpp +++ b/src/OPENMP/fix_gravity_omp.cpp @@ -30,7 +30,6 @@ using namespace LAMMPS_NS; using namespace FixConst; enum{CHUTE,SPHERICAL,GRADIENT,VECTOR}; -enum{CONSTANT,EQUAL}; /* ---------------------------------------------------------------------- */ diff --git a/src/atom.cpp b/src/atom.cpp index 796c0ba156..68eedd6eaa 100644 --- a/src/atom.cpp +++ b/src/atom.cpp @@ -1700,8 +1700,7 @@ void Atom::data_bodies(int n, char *buf, AtomVec *avec_body, tagint id_offset) void Atom::data_fix_compute_variable(int nprev, int nnew) { - for (int m = 0; m < modify->nfix; m++) { - Fix *fix = modify->fix[m]; + for (const auto &fix : modify->get_fix_list()) { if (fix->create_attribute) for (int i = nprev; i < nnew; i++) fix->set_arrays(i); @@ -2238,15 +2237,13 @@ void Atom::setup_sort_bins() #ifdef LMP_GPU if (userbinsize == 0.0) { - int ifix = modify->find_fix("package_gpu"); - if (ifix >= 0) { + FixGPU *fix = (FixGPU *)modify->get_fix_by_id("package_gpu"); + if (fix) { const double subx = domain->subhi[0] - domain->sublo[0]; const double suby = domain->subhi[1] - domain->sublo[1]; const double subz = domain->subhi[2] - domain->sublo[2]; - FixGPU *fix = static_cast(modify->fix[ifix]); - binsize = fix->binsize(subx, suby, subz, atom->nlocal, - neighbor->cutneighmax); + binsize = fix->binsize(subx, suby, subz, atom->nlocal,neighbor->cutneighmax); bininv = 1.0 / binsize; nbinx = static_cast (ceil(subx * bininv)); diff --git a/src/balance.cpp b/src/balance.cpp index bd3ba007ef..0543de9971 100644 --- a/src/balance.cpp +++ b/src/balance.cpp @@ -496,11 +496,8 @@ void Balance::weight_storage(char *prefix) if (prefix) cmd = prefix; cmd += "IMBALANCE_WEIGHTS"; - int ifix = modify->find_fix(cmd); - if (ifix < 1) { - cmd += " all STORE peratom 0 1"; - fixstore = (FixStore *) modify->add_fix(cmd); - } else fixstore = (FixStore *) modify->fix[ifix]; + fixstore = (FixStore *) modify->get_fix_by_id(cmd); + if (!fixstore) fixstore = (FixStore *) modify->add_fix(cmd + " all STORE peratom 0 1"); // do not carry weights with atoms during normal atom migration diff --git a/src/change_box.cpp b/src/change_box.cpp index 91d65bfcad..bbac78ab3d 100644 --- a/src/change_box.cpp +++ b/src/change_box.cpp @@ -291,16 +291,12 @@ void ChangeBox::command(int narg, char **arg) } else if (ops[m].style == ORTHO) { if (domain->xy != 0.0 || domain->yz != 0.0 || domain->xz != 0.0) - error->all(FLERR, - "Cannot change box to orthogonal when tilt is non-zero"); + error->all(FLERR,"Cannot change box to orthogonal when tilt is non-zero"); if (output->ndump) - error->all(FLERR, - "Cannot change box ortho/triclinic with dumps defined"); - for (i = 0; i < modify->nfix; i++) - if (modify->fix[i]->no_change_box) - error->all(FLERR, - "Cannot change box ortho/triclinic with " - "certain fixes defined"); + error->all(FLERR,"Cannot change box ortho/triclinic with dumps defined"); + for (const auto &fix : modify->get_fix_list()) + if (fix->no_change_box) + error->all(FLERR,"Cannot change box ortho/triclinic with certain fixes defined"); domain->triclinic = 0; domain->set_initial_box(); domain->set_global_box(); @@ -309,13 +305,10 @@ void ChangeBox::command(int narg, char **arg) } else if (ops[m].style == TRICLINIC) { if (output->ndump) - error->all(FLERR, - "Cannot change box ortho/triclinic with dumps defined"); - for (i = 0; i < modify->nfix; i++) - if (modify->fix[i]->no_change_box) - error->all(FLERR, - "Cannot change box ortho/triclinic with " - "certain fixes defined"); + error->all(FLERR,"Cannot change box ortho/triclinic with dumps defined"); + for (const auto &fix : modify->get_fix_list()) + if (fix->no_change_box) + error->all(FLERR,"Cannot change box ortho/triclinic with certain fixes defined"); domain->triclinic = 1; domain->set_lamda_box(); domain->set_initial_box(); diff --git a/src/compute_angmom_chunk.cpp b/src/compute_angmom_chunk.cpp index 787dc43fc6..1351d379b7 100644 --- a/src/compute_angmom_chunk.cpp +++ b/src/compute_angmom_chunk.cpp @@ -1,4 +1,3 @@ -// clang-format off /* ---------------------------------------------------------------------- LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator https://www.lammps.org/, Sandia National Laboratories @@ -29,10 +28,10 @@ using namespace LAMMPS_NS; /* ---------------------------------------------------------------------- */ ComputeAngmomChunk::ComputeAngmomChunk(LAMMPS *lmp, int narg, char **arg) : - Compute(lmp, narg, arg), - idchunk(nullptr), massproc(nullptr), masstotal(nullptr), com(nullptr), comall(nullptr), angmom(nullptr), angmomall(nullptr) + Compute(lmp, narg, arg), idchunk(nullptr), massproc(nullptr), masstotal(nullptr), com(nullptr), + comall(nullptr), angmom(nullptr), angmomall(nullptr) { - if (narg != 4) error->all(FLERR,"Illegal compute angmom/chunk command"); + if (narg != 4) error->all(FLERR, "Illegal compute angmom/chunk command"); array_flag = 1; size_array_cols = 3; @@ -57,7 +56,7 @@ ComputeAngmomChunk::ComputeAngmomChunk(LAMMPS *lmp, int narg, char **arg) : ComputeAngmomChunk::~ComputeAngmomChunk() { - delete [] idchunk; + delete[] idchunk; memory->destroy(massproc); memory->destroy(masstotal); memory->destroy(com); @@ -70,21 +69,18 @@ ComputeAngmomChunk::~ComputeAngmomChunk() void ComputeAngmomChunk::init() { - int icompute = modify->find_compute(idchunk); - if (icompute < 0) - error->all(FLERR,"Chunk/atom compute does not exist for " - "compute angmom/chunk"); - cchunk = (ComputeChunkAtom *) modify->compute[icompute]; - if (strcmp(cchunk->style,"chunk/atom") != 0) - error->all(FLERR,"Compute angmom/chunk does not use chunk/atom compute"); + cchunk = (ComputeChunkAtom *) modify->get_compute_by_id(idchunk); + if (!cchunk) error->all(FLERR, "Chunk/atom compute does not exist for compute angmom/chunk"); + if (strcmp(cchunk->style, "chunk/atom") != 0) + error->all(FLERR, "Compute angmom/chunk does not use chunk/atom compute"); } /* ---------------------------------------------------------------------- */ void ComputeAngmomChunk::compute_array() { - int i,index; - double dx,dy,dz,massone; + int i, index; + double dx, dy, dz, massone; double unwrap[3]; invoked_array = update->ntimestep; @@ -120,19 +116,21 @@ void ComputeAngmomChunk::compute_array() for (i = 0; i < nlocal; i++) if (mask[i] & groupbit) { - index = ichunk[i]-1; + index = ichunk[i] - 1; if (index < 0) continue; - if (rmass) massone = rmass[i]; - else massone = mass[type[i]]; - domain->unmap(x[i],image[i],unwrap); + if (rmass) + massone = rmass[i]; + else + massone = mass[type[i]]; + domain->unmap(x[i], image[i], unwrap); massproc[index] += massone; com[index][0] += unwrap[0] * massone; com[index][1] += unwrap[1] * massone; com[index][2] += unwrap[2] * massone; } - MPI_Allreduce(massproc,masstotal,nchunk,MPI_DOUBLE,MPI_SUM,world); - MPI_Allreduce(&com[0][0],&comall[0][0],3*nchunk,MPI_DOUBLE,MPI_SUM,world); + MPI_Allreduce(massproc, masstotal, nchunk, MPI_DOUBLE, MPI_SUM, world); + MPI_Allreduce(&com[0][0], &comall[0][0], 3 * nchunk, MPI_DOUBLE, MPI_SUM, world); for (i = 0; i < nchunk; i++) { if (masstotal[i] > 0.0) { @@ -148,21 +146,22 @@ void ComputeAngmomChunk::compute_array() for (i = 0; i < nlocal; i++) if (mask[i] & groupbit) { - index = ichunk[i]-1; + index = ichunk[i] - 1; if (index < 0) continue; - domain->unmap(x[i],image[i],unwrap); + domain->unmap(x[i], image[i], unwrap); dx = unwrap[0] - comall[index][0]; dy = unwrap[1] - comall[index][1]; dz = unwrap[2] - comall[index][2]; - if (rmass) massone = rmass[i]; - else massone = mass[type[i]]; - angmom[index][0] += massone * (dy*v[i][2] - dz*v[i][1]); - angmom[index][1] += massone * (dz*v[i][0] - dx*v[i][2]); - angmom[index][2] += massone * (dx*v[i][1] - dy*v[i][0]); + if (rmass) + massone = rmass[i]; + else + massone = mass[type[i]]; + angmom[index][0] += massone * (dy * v[i][2] - dz * v[i][1]); + angmom[index][1] += massone * (dz * v[i][0] - dx * v[i][2]); + angmom[index][2] += massone * (dx * v[i][1] - dy * v[i][0]); } - MPI_Allreduce(&angmom[0][0],&angmomall[0][0],3*nchunk, - MPI_DOUBLE,MPI_SUM,world); + MPI_Allreduce(&angmom[0][0], &angmomall[0][0], 3 * nchunk, MPI_DOUBLE, MPI_SUM, world); } /* ---------------------------------------------------------------------- @@ -209,7 +208,7 @@ int ComputeAngmomChunk::lock_length() void ComputeAngmomChunk::lock(Fix *fixptr, bigint startstep, bigint stopstep) { - cchunk->lock(fixptr,startstep,stopstep); + cchunk->lock(fixptr, startstep, stopstep); } /* ---------------------------------------------------------------------- @@ -234,12 +233,12 @@ void ComputeAngmomChunk::allocate() memory->destroy(angmom); memory->destroy(angmomall); maxchunk = nchunk; - memory->create(massproc,maxchunk,"angmom/chunk:massproc"); - memory->create(masstotal,maxchunk,"angmom/chunk:masstotal"); - memory->create(com,maxchunk,3,"angmom/chunk:com"); - memory->create(comall,maxchunk,3,"angmom/chunk:comall"); - memory->create(angmom,maxchunk,3,"angmom/chunk:angmom"); - memory->create(angmomall,maxchunk,3,"angmom/chunk:angmomall"); + memory->create(massproc, maxchunk, "angmom/chunk:massproc"); + memory->create(masstotal, maxchunk, "angmom/chunk:masstotal"); + memory->create(com, maxchunk, 3, "angmom/chunk:com"); + memory->create(comall, maxchunk, 3, "angmom/chunk:comall"); + memory->create(angmom, maxchunk, 3, "angmom/chunk:angmom"); + memory->create(angmomall, maxchunk, 3, "angmom/chunk:angmomall"); array = angmomall; } @@ -250,7 +249,7 @@ void ComputeAngmomChunk::allocate() double ComputeAngmomChunk::memory_usage() { double bytes = (bigint) maxchunk * 2 * sizeof(double); - bytes += (double) maxchunk * 2*3 * sizeof(double); - bytes += (double) maxchunk * 2*3 * sizeof(double); + bytes += (double) maxchunk * 2 * 3 * sizeof(double); + bytes += (double) maxchunk * 2 * 3 * sizeof(double); return bytes; } diff --git a/src/compute_centroid_stress_atom.cpp b/src/compute_centroid_stress_atom.cpp index c35b6a63e7..a050c8bb6a 100644 --- a/src/compute_centroid_stress_atom.cpp +++ b/src/compute_centroid_stress_atom.cpp @@ -1,4 +1,3 @@ -// clang-format off /* ---------------------------------------------------------------------- LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator https://www.lammps.org/, Sandia National Laboratories @@ -13,33 +12,34 @@ ------------------------------------------------------------------------- */ #include "compute_centroid_stress_atom.h" -#include -#include "atom.h" -#include "update.h" -#include "comm.h" -#include "force.h" -#include "pair.h" -#include "bond.h" + #include "angle.h" +#include "atom.h" +#include "bond.h" +#include "comm.h" #include "dihedral.h" +#include "error.h" +#include "fix.h" +#include "force.h" #include "improper.h" #include "kspace.h" -#include "modify.h" -#include "fix.h" #include "memory.h" -#include "error.h" +#include "modify.h" +#include "pair.h" +#include "update.h" + +#include using namespace LAMMPS_NS; -enum{NOBIAS,BIAS}; +enum { NOBIAS, BIAS }; /* ---------------------------------------------------------------------- */ ComputeCentroidStressAtom::ComputeCentroidStressAtom(LAMMPS *lmp, int narg, char **arg) : - Compute(lmp, narg, arg), - id_temp(nullptr), stress(nullptr) + Compute(lmp, narg, arg), id_temp(nullptr), stress(nullptr) { - if (narg < 4) error->all(FLERR,"Illegal compute centroid/stress/atom command"); + if (narg < 4) error->all(FLERR, "Illegal compute centroid/stress/atom command"); peratom_flag = 1; size_peratom_cols = 9; @@ -50,17 +50,16 @@ ComputeCentroidStressAtom::ComputeCentroidStressAtom(LAMMPS *lmp, int narg, char // store temperature ID used by stress computation // insure it is valid for temperature computation - if (strcmp(arg[3],"NULL") == 0) id_temp = nullptr; + if (strcmp(arg[3], "NULL") == 0) + id_temp = nullptr; else { id_temp = utils::strdup(arg[3]); - int icompute = modify->find_compute(id_temp); - if (icompute < 0) - error->all(FLERR,"Could not find compute centroid/stress/atom temperature ID"); - if (modify->compute[icompute]->tempflag == 0) - error->all(FLERR, - "Compute centroid/stress/atom temperature ID does not " - "compute temperature"); + auto compute = modify->get_compute_by_id(id_temp); + if (!compute) + error->all(FLERR, "Could not find compute centroid/stress/atom temperature ID {}", id_temp); + if (compute->tempflag == 0) + error->all(FLERR, "Compute centroid/stress/atom temperature ID does not compute temperature"); } // process optional args @@ -79,19 +78,28 @@ ComputeCentroidStressAtom::ComputeCentroidStressAtom(LAMMPS *lmp, int narg, char fixflag = 0; int iarg = 4; while (iarg < narg) { - if (strcmp(arg[iarg],"ke") == 0) keflag = 1; - else if (strcmp(arg[iarg],"pair") == 0) pairflag = 1; - else if (strcmp(arg[iarg],"bond") == 0) bondflag = 1; - else if (strcmp(arg[iarg],"angle") == 0) angleflag = 1; - else if (strcmp(arg[iarg],"dihedral") == 0) dihedralflag = 1; - else if (strcmp(arg[iarg],"improper") == 0) improperflag = 1; - else if (strcmp(arg[iarg],"kspace") == 0) kspaceflag = 1; - else if (strcmp(arg[iarg],"fix") == 0) fixflag = 1; - else if (strcmp(arg[iarg],"virial") == 0) { + if (strcmp(arg[iarg], "ke") == 0) + keflag = 1; + else if (strcmp(arg[iarg], "pair") == 0) + pairflag = 1; + else if (strcmp(arg[iarg], "bond") == 0) + bondflag = 1; + else if (strcmp(arg[iarg], "angle") == 0) + angleflag = 1; + else if (strcmp(arg[iarg], "dihedral") == 0) + dihedralflag = 1; + else if (strcmp(arg[iarg], "improper") == 0) + improperflag = 1; + else if (strcmp(arg[iarg], "kspace") == 0) + kspaceflag = 1; + else if (strcmp(arg[iarg], "fix") == 0) + fixflag = 1; + else if (strcmp(arg[iarg], "virial") == 0) { pairflag = 1; bondflag = angleflag = dihedralflag = improperflag = 1; kspaceflag = fixflag = 1; - } else error->all(FLERR,"Illegal compute centroid/stress/atom command"); + } else + error->all(FLERR, "Illegal compute centroid/stress/atom command"); iarg++; } } @@ -103,7 +111,7 @@ ComputeCentroidStressAtom::ComputeCentroidStressAtom(LAMMPS *lmp, int narg, char ComputeCentroidStressAtom::~ComputeCentroidStressAtom() { - delete [] id_temp; + delete[] id_temp; memory->destroy(stress); } @@ -115,13 +123,15 @@ void ComputeCentroidStressAtom::init() // fixes could have changed or compute_modify could have changed it if (id_temp) { - int icompute = modify->find_compute(id_temp); - if (icompute < 0) - error->all(FLERR,"Could not find compute centroid/stress/atom temperature ID"); - temperature = modify->compute[icompute]; - if (temperature->tempbias) biasflag = BIAS; - else biasflag = NOBIAS; - } else biasflag = NOBIAS; + temperature = modify->get_compute_by_id(id_temp); + if (!temperature) + error->all(FLERR, "Could not find compute centroid/stress/atom temperature ID {}",id_temp); + if (temperature->tempbias) + biasflag = BIAS; + else + biasflag = NOBIAS; + } else + biasflag = NOBIAS; // check if force components and fixes support centroid atom stress // all bond styles support it as CENTROID_SAME @@ -158,12 +168,12 @@ void ComputeCentroidStressAtom::init() void ComputeCentroidStressAtom::compute_peratom() { - int i,j; + int i, j; double onemass; invoked_peratom = update->ntimestep; if (update->vflag_atom != invoked_peratom) - error->all(FLERR,"Per-atom virial was not tallied on needed timestep"); + error->all(FLERR, "Per-atom virial was not tallied on needed timestep"); // grow local stress array if necessary // needs to be atom->nmax in length @@ -171,7 +181,7 @@ void ComputeCentroidStressAtom::compute_peratom() if (atom->nmax > nmax) { memory->destroy(stress); nmax = atom->nmax; - memory->create(stress,nmax,9,"centroid/stress/atom:stress"); + memory->create(stress, nmax, 9, "centroid/stress/atom:stress"); array_atom = stress; } @@ -194,8 +204,7 @@ void ComputeCentroidStressAtom::compute_peratom() // clear local stress array for (i = 0; i < ntotal; i++) - for (j = 0; j < 9; j++) - stress[i][j] = 0.0; + for (j = 0; j < 9; j++) stress[i][j] = 0.0; // add in per-atom contributions from all force components and fixes @@ -205,15 +214,12 @@ void ComputeCentroidStressAtom::compute_peratom() if (force->pair->centroidstressflag == CENTROID_AVAIL) { double **cvatom = force->pair->cvatom; for (i = 0; i < npair; i++) - for (j = 0; j < 9; j++) - stress[i][j] += cvatom[i][j]; + for (j = 0; j < 9; j++) stress[i][j] += cvatom[i][j]; } else { double **vatom = force->pair->vatom; for (i = 0; i < npair; i++) { - for (j = 0; j < 6; j++) - stress[i][j] += vatom[i][j]; - for (j = 6; j < 9; j++) - stress[i][j] += vatom[i][j-3]; + for (j = 0; j < 6; j++) stress[i][j] += vatom[i][j]; + for (j = 6; j < 9; j++) stress[i][j] += vatom[i][j - 3]; } } } @@ -226,41 +232,34 @@ void ComputeCentroidStressAtom::compute_peratom() if (bondflag && force->bond) { double **vatom = force->bond->vatom; for (i = 0; i < nbond; i++) { - for (j = 0; j < 6; j++) - stress[i][j] += vatom[i][j]; - for (j = 6; j < 9; j++) - stress[i][j] += vatom[i][j-3]; + for (j = 0; j < 6; j++) stress[i][j] += vatom[i][j]; + for (j = 6; j < 9; j++) stress[i][j] += vatom[i][j - 3]; } } if (angleflag && force->angle) { double **cvatom = force->angle->cvatom; for (i = 0; i < nbond; i++) - for (j = 0; j < 9; j++) - stress[i][j] += cvatom[i][j]; + for (j = 0; j < 9; j++) stress[i][j] += cvatom[i][j]; } if (dihedralflag && force->dihedral) { double **cvatom = force->dihedral->cvatom; for (i = 0; i < nbond; i++) - for (j = 0; j < 9; j++) - stress[i][j] += cvatom[i][j]; + for (j = 0; j < 9; j++) stress[i][j] += cvatom[i][j]; } if (improperflag && force->improper) { double **cvatom = force->improper->cvatom; for (i = 0; i < nbond; i++) - for (j = 0; j < 9; j++) - stress[i][j] += cvatom[i][j]; + for (j = 0; j < 9; j++) stress[i][j] += cvatom[i][j]; } if (kspaceflag && force->kspace && force->kspace->compute_flag) { double **vatom = force->kspace->vatom; for (i = 0; i < nkspace; i++) { - for (j = 0; j < 6; j++) - stress[i][j] += vatom[i][j]; - for (j = 6; j < 9; j++) - stress[i][j] += vatom[i][j-3]; + for (j = 0; j < 6; j++) stress[i][j] += vatom[i][j]; + for (j = 6; j < 9; j++) stress[i][j] += vatom[i][j - 3]; } } @@ -279,18 +278,15 @@ void ComputeCentroidStressAtom::compute_peratom() double **vatom = fix[ifix]->vatom; if (vatom) for (i = 0; i < nlocal; i++) { - for (j = 0; j < 6; j++) - stress[i][j] += vatom[i][j]; - for (j = 6; j < 9; j++) - stress[i][j] += vatom[i][j-3]; + for (j = 0; j < 6; j++) stress[i][j] += vatom[i][j]; + for (j = 6; j < 9; j++) stress[i][j] += vatom[i][j - 3]; } } } // communicate ghost virials between neighbor procs - if (force->newton || - (force->kspace && force->kspace->tip4pflag && force->kspace->compute_flag)) + if (force->newton || (force->kspace && force->kspace->tip4pflag && force->kspace->compute_flag)) comm->reverse_comm_compute(this); // zero virial of atoms not in group @@ -327,30 +323,30 @@ void ComputeCentroidStressAtom::compute_peratom() for (i = 0; i < nlocal; i++) if (mask[i] & groupbit) { onemass = mvv2e * rmass[i]; - stress[i][0] += onemass*v[i][0]*v[i][0]; - stress[i][1] += onemass*v[i][1]*v[i][1]; - stress[i][2] += onemass*v[i][2]*v[i][2]; - stress[i][3] += onemass*v[i][0]*v[i][1]; - stress[i][4] += onemass*v[i][0]*v[i][2]; - stress[i][5] += onemass*v[i][1]*v[i][2]; - stress[i][6] += onemass*v[i][1]*v[i][0]; - stress[i][7] += onemass*v[i][2]*v[i][0]; - stress[i][8] += onemass*v[i][2]*v[i][1]; + stress[i][0] += onemass * v[i][0] * v[i][0]; + stress[i][1] += onemass * v[i][1] * v[i][1]; + stress[i][2] += onemass * v[i][2] * v[i][2]; + stress[i][3] += onemass * v[i][0] * v[i][1]; + stress[i][4] += onemass * v[i][0] * v[i][2]; + stress[i][5] += onemass * v[i][1] * v[i][2]; + stress[i][6] += onemass * v[i][1] * v[i][0]; + stress[i][7] += onemass * v[i][2] * v[i][0]; + stress[i][8] += onemass * v[i][2] * v[i][1]; } } else { for (i = 0; i < nlocal; i++) if (mask[i] & groupbit) { onemass = mvv2e * mass[type[i]]; - stress[i][0] += onemass*v[i][0]*v[i][0]; - stress[i][1] += onemass*v[i][1]*v[i][1]; - stress[i][2] += onemass*v[i][2]*v[i][2]; - stress[i][3] += onemass*v[i][0]*v[i][1]; - stress[i][4] += onemass*v[i][0]*v[i][2]; - stress[i][5] += onemass*v[i][1]*v[i][2]; - stress[i][6] += onemass*v[i][1]*v[i][0]; - stress[i][7] += onemass*v[i][2]*v[i][0]; - stress[i][8] += onemass*v[i][2]*v[i][1]; + stress[i][0] += onemass * v[i][0] * v[i][0]; + stress[i][1] += onemass * v[i][1] * v[i][1]; + stress[i][2] += onemass * v[i][2] * v[i][2]; + stress[i][3] += onemass * v[i][0] * v[i][1]; + stress[i][4] += onemass * v[i][0] * v[i][2]; + stress[i][5] += onemass * v[i][1] * v[i][2]; + stress[i][6] += onemass * v[i][1] * v[i][0]; + stress[i][7] += onemass * v[i][2] * v[i][0]; + stress[i][8] += onemass * v[i][2] * v[i][1]; } } @@ -359,41 +355,40 @@ void ComputeCentroidStressAtom::compute_peratom() // invoke temperature if it hasn't been already // this insures bias factor is pre-computed - if (keflag && temperature->invoked_scalar != update->ntimestep) - temperature->compute_scalar(); + if (keflag && temperature->invoked_scalar != update->ntimestep) temperature->compute_scalar(); if (rmass) { for (i = 0; i < nlocal; i++) if (mask[i] & groupbit) { - temperature->remove_bias(i,v[i]); + temperature->remove_bias(i, v[i]); onemass = mvv2e * rmass[i]; - stress[i][0] += onemass*v[i][0]*v[i][0]; - stress[i][1] += onemass*v[i][1]*v[i][1]; - stress[i][2] += onemass*v[i][2]*v[i][2]; - stress[i][3] += onemass*v[i][0]*v[i][1]; - stress[i][4] += onemass*v[i][0]*v[i][2]; - stress[i][5] += onemass*v[i][1]*v[i][2]; - stress[i][6] += onemass*v[i][1]*v[i][0]; - stress[i][7] += onemass*v[i][2]*v[i][0]; - stress[i][8] += onemass*v[i][2]*v[i][1]; - temperature->restore_bias(i,v[i]); + stress[i][0] += onemass * v[i][0] * v[i][0]; + stress[i][1] += onemass * v[i][1] * v[i][1]; + stress[i][2] += onemass * v[i][2] * v[i][2]; + stress[i][3] += onemass * v[i][0] * v[i][1]; + stress[i][4] += onemass * v[i][0] * v[i][2]; + stress[i][5] += onemass * v[i][1] * v[i][2]; + stress[i][6] += onemass * v[i][1] * v[i][0]; + stress[i][7] += onemass * v[i][2] * v[i][0]; + stress[i][8] += onemass * v[i][2] * v[i][1]; + temperature->restore_bias(i, v[i]); } } else { for (i = 0; i < nlocal; i++) if (mask[i] & groupbit) { - temperature->remove_bias(i,v[i]); + temperature->remove_bias(i, v[i]); onemass = mvv2e * mass[type[i]]; - stress[i][0] += onemass*v[i][0]*v[i][0]; - stress[i][1] += onemass*v[i][1]*v[i][1]; - stress[i][2] += onemass*v[i][2]*v[i][2]; - stress[i][3] += onemass*v[i][0]*v[i][1]; - stress[i][4] += onemass*v[i][0]*v[i][2]; - stress[i][5] += onemass*v[i][1]*v[i][2]; - stress[i][6] += onemass*v[i][1]*v[i][0]; - stress[i][7] += onemass*v[i][2]*v[i][0]; - stress[i][8] += onemass*v[i][2]*v[i][1]; - temperature->restore_bias(i,v[i]); + stress[i][0] += onemass * v[i][0] * v[i][0]; + stress[i][1] += onemass * v[i][1] * v[i][1]; + stress[i][2] += onemass * v[i][2] * v[i][2]; + stress[i][3] += onemass * v[i][0] * v[i][1]; + stress[i][4] += onemass * v[i][0] * v[i][2]; + stress[i][5] += onemass * v[i][1] * v[i][2]; + stress[i][6] += onemass * v[i][1] * v[i][0]; + stress[i][7] += onemass * v[i][2] * v[i][0]; + stress[i][8] += onemass * v[i][2] * v[i][1]; + temperature->restore_bias(i, v[i]); } } } @@ -420,7 +415,7 @@ void ComputeCentroidStressAtom::compute_peratom() int ComputeCentroidStressAtom::pack_reverse_comm(int n, int first, double *buf) { - int i,m,last; + int i, m, last; m = 0; last = first + n; @@ -442,7 +437,7 @@ int ComputeCentroidStressAtom::pack_reverse_comm(int n, int first, double *buf) void ComputeCentroidStressAtom::unpack_reverse_comm(int n, int *list, double *buf) { - int i,j,m; + int i, j, m; m = 0; for (i = 0; i < n; i++) { @@ -465,6 +460,6 @@ void ComputeCentroidStressAtom::unpack_reverse_comm(int n, int *list, double *bu double ComputeCentroidStressAtom::memory_usage() { - double bytes = (double)nmax*9 * sizeof(double); + double bytes = (double) nmax * 9 * sizeof(double); return bytes; } diff --git a/src/compute_chunk_atom.cpp b/src/compute_chunk_atom.cpp index fc4f17e53a..daa8fc64e7 100644 --- a/src/compute_chunk_atom.cpp +++ b/src/compute_chunk_atom.cpp @@ -316,40 +316,30 @@ ComputeChunkAtom::ComputeChunkAtom(LAMMPS *lmp, int narg, char **arg) : } if (which == ArgInfo::COMPUTE) { - int icompute = modify->find_compute(cfvid); - if (icompute < 0) - error->all(FLERR,"Compute ID for compute chunk /atom does not exist"); - if (modify->compute[icompute]->peratom_flag == 0) - error->all(FLERR, - "Compute chunk/atom compute does not calculate " - "per-atom values"); - if (argindex == 0 && - modify->compute[icompute]->size_peratom_cols != 0) - error->all(FLERR,"Compute chunk/atom compute does not " - "calculate a per-atom vector"); - if (argindex && modify->compute[icompute]->size_peratom_cols == 0) - error->all(FLERR,"Compute chunk/atom compute does not " - "calculate a per-atom array"); - if (argindex && - argindex > modify->compute[icompute]->size_peratom_cols) - error->all(FLERR,"Compute chunk/atom compute array is " - "accessed out-of-range"); + cchunk = modify->get_compute_by_id(cfvid); + if (!cchunk) + error->all(FLERR,"Compute ID {} for compute chunk /atom does not exist",cfvid); + if (cchunk->peratom_flag == 0) + error->all(FLERR,"Compute chunk/atom compute does not calculate per-atom values"); + if ((argindex == 0) && (cchunk->size_peratom_cols != 0)) + error->all(FLERR,"Compute chunk/atom compute does not calculate a per-atom vector"); + if (argindex && (cchunk->size_peratom_cols == 0)) + error->all(FLERR,"Compute chunk/atom compute does not calculate a per-atom array"); + if (argindex && argindex > cchunk->size_peratom_cols) + error->all(FLERR,"Compute chunk/atom compute array is accessed out-of-range"); } if (which == ArgInfo::FIX) { - int ifix = modify->find_fix(cfvid); - if (ifix < 0) - error->all(FLERR,"Fix ID for compute chunk/atom does not exist"); - if (modify->fix[ifix]->peratom_flag == 0) - error->all(FLERR,"Compute chunk/atom fix does not calculate " - "per-atom values"); - if (argindex == 0 && modify->fix[ifix]->size_peratom_cols != 0) - error->all(FLERR, - "Compute chunk/atom fix does not calculate a per-atom vector"); - if (argindex && modify->fix[ifix]->size_peratom_cols == 0) - error->all(FLERR, - "Compute chunk/atom fix does not calculate a per-atom array"); - if (argindex && argindex > modify->fix[ifix]->size_peratom_cols) + fchunk = modify->get_fix_by_id(cfvid); + if (!fchunk) + error->all(FLERR,"Fix ID {} for compute chunk/atom does not exist",cfvid); + if (fchunk->peratom_flag == 0) + error->all(FLERR,"Compute chunk/atom fix does not calculate per-atom values"); + if (argindex == 0 && fchunk->size_peratom_cols != 0) + error->all(FLERR,"Compute chunk/atom fix does not calculate a per-atom vector"); + if (argindex && fchunk->size_peratom_cols == 0) + error->all(FLERR,"Compute chunk/atom fix does not calculate a per-atom array"); + if (argindex && argindex > fchunk->size_peratom_cols) error->all(FLERR,"Compute chunk/atom fix array is accessed out-of-range"); } @@ -358,16 +348,14 @@ ComputeChunkAtom::ComputeChunkAtom(LAMMPS *lmp, int narg, char **arg) : if (ivariable < 0) error->all(FLERR,"Variable name for compute chunk/atom does not exist"); if (input->variable->atomstyle(ivariable) == 0) - error->all(FLERR,"Compute chunk/atom variable is not " - "atom-style variable"); + error->all(FLERR,"Compute chunk/atom variable is not atom-style variable"); } // setup scaling if (binflag) { if (domain->triclinic == 1 && scaleflag != REDUCED) - error->all(FLERR,"Compute chunk/atom for triclinic boxes " - "requires units reduced"); + error->all(FLERR,"Compute chunk/atom for triclinic boxes requires units reduced"); } if (scaleflag == LATTICE) { @@ -501,15 +489,13 @@ void ComputeChunkAtom::init() // set compute,fix,variable if (which == ArgInfo::COMPUTE) { - int icompute = modify->find_compute(cfvid); - if (icompute < 0) - error->all(FLERR,"Compute ID for compute chunk/atom does not exist"); - cchunk = modify->compute[icompute]; + cchunk = modify->get_compute_by_id(cfvid); + if (!cchunk) + error->all(FLERR,"Compute ID {} for compute chunk/atom does not exist",cfvid); } else if (which == ArgInfo::FIX) { - int ifix = modify->find_fix(cfvid); - if (ifix < 0) - error->all(FLERR,"Fix ID for compute chunk/atom does not exist"); - fchunk = modify->fix[ifix]; + fchunk = modify->get_fix_by_id(cfvid); + if (!fchunk) + error->all(FLERR,"Fix ID {} for compute chunk/atom does not exist",cfvid); } else if (which == ArgInfo::VARIABLE) { int ivariable = input->variable->find(cfvid); if (ivariable < 0) diff --git a/src/domain.cpp b/src/domain.cpp index daaf41338f..4759490ae8 100644 --- a/src/domain.cpp +++ b/src/domain.cpp @@ -140,19 +140,19 @@ void Domain::init() int box_change_x=0, box_change_y=0, box_change_z=0; int box_change_yz=0, box_change_xz=0, box_change_xy=0; - Fix **fixes = modify->fix; + const auto &fixes = modify->get_fix_list(); if (nonperiodic == 2) box_change_size = 1; - for (int i = 0; i < modify->nfix; i++) { - if (fixes[i]->box_change & Fix::BOX_CHANGE_SIZE) box_change_size = 1; - if (fixes[i]->box_change & Fix::BOX_CHANGE_SHAPE) box_change_shape = 1; - if (fixes[i]->box_change & Fix::BOX_CHANGE_DOMAIN) box_change_domain = 1; - if (fixes[i]->box_change & Fix::BOX_CHANGE_X) box_change_x++; - if (fixes[i]->box_change & Fix::BOX_CHANGE_Y) box_change_y++; - if (fixes[i]->box_change & Fix::BOX_CHANGE_Z) box_change_z++; - if (fixes[i]->box_change & Fix::BOX_CHANGE_YZ) box_change_yz++; - if (fixes[i]->box_change & Fix::BOX_CHANGE_XZ) box_change_xz++; - if (fixes[i]->box_change & Fix::BOX_CHANGE_XY) box_change_xy++; + for (const auto &fix : fixes) { + if (fix->box_change & Fix::BOX_CHANGE_SIZE) box_change_size = 1; + if (fix->box_change & Fix::BOX_CHANGE_SHAPE) box_change_shape = 1; + if (fix->box_change & Fix::BOX_CHANGE_DOMAIN) box_change_domain = 1; + if (fix->box_change & Fix::BOX_CHANGE_X) box_change_x++; + if (fix->box_change & Fix::BOX_CHANGE_Y) box_change_y++; + if (fix->box_change & Fix::BOX_CHANGE_Z) box_change_z++; + if (fix->box_change & Fix::BOX_CHANGE_YZ) box_change_yz++; + if (fix->box_change & Fix::BOX_CHANGE_XZ) box_change_xz++; + if (fix->box_change & Fix::BOX_CHANGE_XY) box_change_xy++; } std::string mesg = "Must not have multiple fixes change box parameter "; @@ -174,12 +174,12 @@ void Domain::init() // check for fix deform deform_flag = deform_vremap = deform_groupbit = 0; - for (int i = 0; i < modify->nfix; i++) - if (utils::strmatch(modify->fix[i]->style,"^deform")) { + for (const auto &fix : fixes) + if (utils::strmatch(fix->style,"^deform")) { deform_flag = 1; - if (((FixDeform *) modify->fix[i])->remapflag == Domain::V_REMAP) { + if (((FixDeform *) fix)->remapflag == Domain::V_REMAP) { deform_vremap = 1; - deform_groupbit = modify->fix[i]->groupbit; + deform_groupbit = fix->groupbit; } } diff --git a/src/dump.cpp b/src/dump.cpp index d00c42086d..4c02aa3070 100644 --- a/src/dump.cpp +++ b/src/dump.cpp @@ -248,8 +248,8 @@ void Dump::init() reorderflag = 0; int gcmcflag = 0; - for (int i = 0; i < modify->nfix; i++) - if ((strcmp(modify->fix[i]->style,"gcmc") == 0)) + for (const auto &fix : modify->get_fix_list()) + if (utils::strmatch(fix->style,"^gcmc")) gcmcflag = 1; if (sortcol == 0 && atom->tag_consecutive() && !gcmcflag) { diff --git a/src/finish.cpp b/src/finish.cpp index 81ba59c1df..f3dbc83498 100644 --- a/src/finish.cpp +++ b/src/finish.cpp @@ -364,14 +364,13 @@ void Finish::end(int flag) } #ifdef LMP_OPENMP - int ifix = modify->find_fix("package_omp"); + FixOMP *fixomp = (FixOMP *) modify->get_fix_by_id("package_omp"); // print thread breakdown only with full timer detail - if ((ifix >= 0) && timer->has_full() && me == 0) { + if (fixomp && timer->has_full() && me == 0) { double thr_total = 0.0; ThrData *td; - FixOMP *fixomp = static_cast(lmp->modify->fix[ifix]); for (i=0; i < nthreads; ++i) { td = fixomp->get_thr(i); thr_total += td->get_time(Timer::ALL); diff --git a/src/fix_gravity.cpp b/src/fix_gravity.cpp index 743fc705d2..16cd97469d 100644 --- a/src/fix_gravity.cpp +++ b/src/fix_gravity.cpp @@ -32,7 +32,6 @@ using namespace FixConst; using namespace MathConst; enum{CHUTE,SPHERICAL,VECTOR}; -enum{CONSTANT,EQUAL}; // same as FixPour /* ---------------------------------------------------------------------- */ diff --git a/src/fix_gravity.h b/src/fix_gravity.h index 31b6eb3478..389c5a1af1 100644 --- a/src/fix_gravity.h +++ b/src/fix_gravity.h @@ -37,6 +37,7 @@ class FixGravity : public Fix { virtual void post_force_respa(int, int, int); double compute_scalar(); void *extract(const char *, int &); + enum { CONSTANT, EQUAL }; protected: int style, disable; diff --git a/src/modify.cpp b/src/modify.cpp index 89a26025af..07301c4779 100644 --- a/src/modify.cpp +++ b/src/modify.cpp @@ -1103,6 +1103,45 @@ int Modify::find_fix_by_style(const char *style) return -1; } +/* ---------------------------------------------------------------------- + look up pointer to Fix class by fix-ID + return null pointer if ID not found +------------------------------------------------------------------------- */ + +Fix *Modify::get_fix_by_id(const std::string &id) const +{ + if (id.empty()) return nullptr; + for (int ifix = 0; ifix < nfix; ifix++) + if (id == fix[ifix]->id) return fix[ifix]; + return nullptr; +} + +/* ---------------------------------------------------------------------- + look up pointer to fixes by fix style name + return vector of matching pointers +------------------------------------------------------------------------- */ + +const std::vector Modify::get_fix_by_style(const std::string &style) const +{ + std::vector matches; + if (style.empty()) return matches; + + for (int ifix = 0; ifix < nfix; ifix++) + if (utils::strmatch(fix[ifix]->style,style)) matches.push_back(fix[ifix]); + + return matches; +} + +/* ---------------------------------------------------------------------- + return list of fixes as vector +------------------------------------------------------------------------- */ + +const std::vector &Modify::get_fix_list() +{ + fix_list = std::vector(fix, fix+nfix); + return fix_list; +} + /* ---------------------------------------------------------------------- check for fix associated with package name in compiled list return 1 if found else 0 @@ -1359,6 +1398,45 @@ int Modify::find_compute_by_style(const char *style) return -1; } +/* ---------------------------------------------------------------------- + look up pointer to Compute class by compute-ID + return null pointer if ID not found +------------------------------------------------------------------------- */ + +Compute *Modify::get_compute_by_id(const std::string &id) const +{ + if (id.empty()) return nullptr; + for (int icompute = 0; icompute < ncompute; icompute++) + if (id == compute[icompute]->id) return compute[icompute]; + return nullptr; +} + +/* ---------------------------------------------------------------------- + look up pointer to compute by compute style name + return null pointer if style not used +------------------------------------------------------------------------- */ + +const std::vector Modify::get_compute_by_style(const std::string &style) const +{ + std::vector matches; + if (style.empty()) return matches; + + for (int icompute = 0; icompute < ncompute; icompute++) + if (utils::strmatch(compute[icompute]->style,style)) matches.push_back(compute[icompute]); + + return matches; +} + +/* ---------------------------------------------------------------------- + return vector with Computes +------------------------------------------------------------------------- */ + +const std::vector &Modify::get_compute_list() +{ + compute_list = std::vector(compute, compute+ncompute); + return compute_list; +} + /* ---------------------------------------------------------------------- clear invoked flag of all computes called everywhere that computes are used, before computes are invoked diff --git a/src/modify.h b/src/modify.h index 9446f285e7..0ea3bc2c7c 100644 --- a/src/modify.h +++ b/src/modify.h @@ -17,6 +17,7 @@ #include "pointers.h" #include +#include namespace LAMMPS_NS { @@ -107,16 +108,28 @@ class Modify : protected Pointers { void modify_fix(int, char **); void delete_fix(const std::string &); void delete_fix(int); + + // deprecated API int find_fix(const std::string &); int find_fix_by_style(const char *); + // new API + Fix *get_fix_by_id(const std::string &) const; + const std::vector get_fix_by_style(const std::string &) const; + const std::vector &get_fix_list(); Compute *add_compute(int, char **, int trysuffix = 1); Compute *add_compute(const std::string &, int trysuffix = 1); void modify_compute(int, char **); void delete_compute(const std::string &); void delete_compute(int); + + // deprecated API int find_compute(const std::string &); int find_compute_by_style(const char *); + // new API + Compute *get_compute_by_id(const std::string &) const; + const std::vector get_compute_by_style(const std::string &) const; + const std::vector &get_compute_list(); void clearstep_compute(); void addstep_compute(bigint); @@ -165,6 +178,10 @@ class Modify : protected Pointers { int index_permanent; // fix/compute index returned to library call + // vectors to be used for new-API accessors as wrapper + std::vectorfix_list; + std::vectorcompute_list; + void list_init(int, int &, int *&); void list_init_end_of_step(int, int &, int *&); void list_init_energy_couple(int &, int *&); diff --git a/src/variable.cpp b/src/variable.cpp index 22f792b5ec..125793a2d7 100644 --- a/src/variable.cpp +++ b/src/variable.cpp @@ -963,8 +963,7 @@ double Variable::compute_equal(int ivar) else if (style[ivar] == PYTHON) { int ifunc = python->find(data[ivar][0]); if (ifunc < 0) - print_var_error(FLERR,fmt::format("cannot find python function {}", - data[ivar][0]),ivar); + print_var_error(FLERR,fmt::format("cannot find python function {}",data[ivar][0]),ivar); python->invoke_function(ifunc,data[ivar][1]); value = atof(data[ivar][1]); } @@ -1324,10 +1323,9 @@ double Variable::evaluate(char *str, Tree **tree, int ivar) // compute // ---------------- - if (strncmp(word,"c_",2) == 0 || strncmp(word,"C_",2) == 0) { + if (utils::strmatch(word,"^[Cc]_")) { if (domain->box_exist == 0) - print_var_error(FLERR,"Variable evaluation before " - "simulation box is defined",ivar); + print_var_error(FLERR,"Variable evaluation before simulation box is defined",ivar); // uppercase used to force access of // global vector vs global scalar, and global array vs global vector @@ -1335,14 +1333,10 @@ double Variable::evaluate(char *str, Tree **tree, int ivar) int lowercase = 1; if (word[0] == 'C') lowercase = 0; - int icompute = modify->find_compute(word+2); - if (icompute < 0) { - std::string mesg = "Invalid compute ID '"; - mesg += (word+2); - mesg += "' in variable formula"; - print_var_error(FLERR,mesg,ivar); - } - Compute *compute = modify->compute[icompute]; + Compute *compute = modify->get_compute_by_id(word+2); + if (!compute) + print_var_error(FLERR,fmt::format("Invalid compute ID '{}' in variable formula", word+2),ivar); + // parse zero or one or two trailing brackets // point i beyond last bracket @@ -1371,8 +1365,7 @@ double Variable::evaluate(char *str, Tree **tree, int ivar) if (update->whichflag == 0) { if (compute->invoked_scalar != update->ntimestep) - print_var_error(FLERR,"Compute used in variable between " - "runs is not current",ivar); + print_var_error(FLERR,"Compute used in variable between runs is not current",ivar); } else if (!(compute->invoked_flag & Compute::INVOKED_SCALAR)) { compute->compute_scalar(); compute->invoked_flag |= Compute::INVOKED_SCALAR; @@ -1392,12 +1385,10 @@ double Variable::evaluate(char *str, Tree **tree, int ivar) if (index1 > compute->size_vector && compute->size_vector_variable == 0) - print_var_error(FLERR,"Variable formula compute vector " - "is accessed out-of-range",ivar,0); + print_var_error(FLERR,"Variable formula compute vector is accessed out-of-range",ivar,0); if (update->whichflag == 0) { if (compute->invoked_vector != update->ntimestep) - print_var_error(FLERR,"Compute used in variable between runs " - "is not current",ivar); + print_var_error(FLERR,"Compute used in variable between runs is not current",ivar); } else if (!(compute->invoked_flag & Compute::INVOKED_VECTOR)) { compute->compute_vector(); compute->invoked_flag |= Compute::INVOKED_VECTOR; @@ -1419,15 +1410,12 @@ double Variable::evaluate(char *str, Tree **tree, int ivar) if (index1 > compute->size_array_rows && compute->size_array_rows_variable == 0) - print_var_error(FLERR,"Variable formula compute array " - "is accessed out-of-range",ivar,0); + print_var_error(FLERR,"Variable formula compute array is accessed out-of-range",ivar,0); if (index2 > compute->size_array_cols) - print_var_error(FLERR,"Variable formula compute array " - "is accessed out-of-range",ivar,0); + print_var_error(FLERR,"Variable formula compute array is accessed out-of-range",ivar,0); if (update->whichflag == 0) { if (compute->invoked_array != update->ntimestep) - print_var_error(FLERR,"Compute used in variable between runs " - "is not current",ivar); + print_var_error(FLERR,"Compute used in variable between runs is not current",ivar); } else if (!(compute->invoked_flag & Compute::INVOKED_ARRAY)) { compute->compute_array(); compute->invoked_flag |= Compute::INVOKED_ARRAY; @@ -1448,18 +1436,14 @@ double Variable::evaluate(char *str, Tree **tree, int ivar) } else if (nbracket == 0 && compute->vector_flag) { if (tree == nullptr) - print_var_error(FLERR,"Compute global vector in " - "equal-style variable formula",ivar); + print_var_error(FLERR,"Compute global vector in equal-style variable formula",ivar); if (treetype == ATOM) - print_var_error(FLERR,"Compute global vector in " - "atom-style variable formula",ivar); + print_var_error(FLERR,"Compute global vector in atom-style variable formula",ivar); if (compute->size_vector == 0) - print_var_error(FLERR,"Variable formula compute " - "vector is zero length",ivar); + print_var_error(FLERR,"Variable formula compute vector is zero length",ivar); if (update->whichflag == 0) { if (compute->invoked_vector != update->ntimestep) - print_var_error(FLERR,"Compute used in variable between " - "runs is not current",ivar); + print_var_error(FLERR,"Compute used in variable between runs is not current",ivar); } else if (!(compute->invoked_flag & Compute::INVOKED_VECTOR)) { compute->compute_vector(); compute->invoked_flag |= Compute::INVOKED_VECTOR; @@ -1477,18 +1461,14 @@ double Variable::evaluate(char *str, Tree **tree, int ivar) } else if (nbracket == 1 && compute->array_flag) { if (tree == nullptr) - print_var_error(FLERR,"Compute global vector in " - "equal-style variable formula",ivar); + print_var_error(FLERR,"Compute global vector in equal-style variable formula",ivar); if (treetype == ATOM) - print_var_error(FLERR,"Compute global vector in " - "atom-style variable formula",ivar); + print_var_error(FLERR,"Compute global vector in atom-style variable formula",ivar); if (compute->size_array_rows == 0) - print_var_error(FLERR,"Variable formula compute array " - "is zero length",ivar); + print_var_error(FLERR,"Variable formula compute array is zero length",ivar); if (update->whichflag == 0) { if (compute->invoked_array != update->ntimestep) - print_var_error(FLERR,"Compute used in variable between " - "runs is not current",ivar); + print_var_error(FLERR,"Compute used in variable between runs is not current",ivar); } else if (!(compute->invoked_flag & Compute::INVOKED_ARRAY)) { compute->compute_array(); compute->invoked_flag |= Compute::INVOKED_ARRAY; @@ -1508,8 +1488,7 @@ double Variable::evaluate(char *str, Tree **tree, int ivar) if (update->whichflag == 0) { if (compute->invoked_peratom != update->ntimestep) - print_var_error(FLERR,"Compute used in variable " - "between runs is not current",ivar); + print_var_error(FLERR,"Compute used in variable between runs is not current",ivar); } else if (!(compute->invoked_flag & Compute::INVOKED_PERATOM)) { compute->compute_peratom(); compute->invoked_flag |= Compute::INVOKED_PERATOM; @@ -1550,15 +1529,12 @@ double Variable::evaluate(char *str, Tree **tree, int ivar) compute->size_peratom_cols == 0) { if (tree == nullptr) - print_var_error(FLERR,"Per-atom compute in " - "equal-style variable formula",ivar); + print_var_error(FLERR,"Per-atom compute in equal-style variable formula",ivar); if (treetype == VECTOR) - print_var_error(FLERR,"Per-atom compute in " - "vector-style variable formula",ivar); + print_var_error(FLERR,"Per-atom compute in vector-style variable formula",ivar); if (update->whichflag == 0) { if (compute->invoked_peratom != update->ntimestep) - print_var_error(FLERR,"Compute used in variable " - "between runs is not current",ivar); + print_var_error(FLERR,"Compute used in variable between runs is not current",ivar); } else if (!(compute->invoked_flag & Compute::INVOKED_PERATOM)) { compute->compute_peratom(); compute->invoked_flag |= Compute::INVOKED_PERATOM; @@ -1576,18 +1552,14 @@ double Variable::evaluate(char *str, Tree **tree, int ivar) compute->size_peratom_cols > 0) { if (tree == nullptr) - print_var_error(FLERR,"Per-atom compute in " - "equal-style variable formula",ivar); + print_var_error(FLERR,"Per-atom compute in equal-style variable formula",ivar); if (treetype == VECTOR) - print_var_error(FLERR,"Per-atom compute in " - "vector-style variable formula",ivar); + print_var_error(FLERR,"Per-atom compute in vector-style variable formula",ivar); if (index1 > compute->size_peratom_cols) - print_var_error(FLERR,"Variable formula compute array " - "is accessed out-of-range",ivar,0); + print_var_error(FLERR,"Variable formula compute array is accessed out-of-range",ivar,0); if (update->whichflag == 0) { if (compute->invoked_peratom != update->ntimestep) - print_var_error(FLERR,"Compute used in variable " - "between runs is not current",ivar); + print_var_error(FLERR,"Compute used in variable between runs is not current",ivar); } else if (!(compute->invoked_flag & Compute::INVOKED_PERATOM)) { compute->compute_peratom(); compute->invoked_flag |= Compute::INVOKED_PERATOM; @@ -1602,17 +1574,15 @@ double Variable::evaluate(char *str, Tree **tree, int ivar) } else if (nbracket == 1 && compute->local_flag) { print_var_error(FLERR,"Cannot access local data via indexing",ivar); - } else print_var_error(FLERR, - "Mismatched compute in variable formula",ivar); + } else print_var_error(FLERR,"Mismatched compute in variable formula",ivar); // ---------------- // fix // ---------------- - } else if (strncmp(word,"f_",2) == 0 || strncmp(word,"F_",2) == 0) { + } else if (utils::strmatch(word,"^[fF]_")) { if (domain->box_exist == 0) - print_var_error(FLERR,"Variable evaluation before " - "simulation box is defined",ivar); + print_var_error(FLERR,"Variable evaluation before simulation box is defined",ivar); // uppercase used to force access of // global vector vs global scalar, and global array vs global vector @@ -1620,11 +1590,10 @@ double Variable::evaluate(char *str, Tree **tree, int ivar) int lowercase = 1; if (word[0] == 'F') lowercase = 0; - int ifix = modify->find_fix(word+2); - if (ifix < 0) - print_var_error(FLERR,fmt::format("Invalid fix ID '{}' in variable" - " formula",word+2),ivar); - Fix *fix = modify->fix[ifix]; + Fix *fix = modify->get_fix_by_id(word+2); + if (!fix) + print_var_error(FLERR,fmt::format("Invalid fix ID '{}' in variable formula",word+2),ivar); + // parse zero or one or two trailing brackets // point i beyond last bracket @@ -4057,19 +4026,17 @@ int Variable::special_function(char *word, char *contents, Tree **tree, *ptr1 = '\0'; } else index = 0; - int icompute = modify->find_compute(&args[0][2]); - if (icompute < 0) { + compute = modify->get_compute_by_id(&args[0][2]); + if (!compute) { std::string mesg = "Invalid compute ID '"; mesg += (args[0]+2); mesg += "' in variable formula"; print_var_error(FLERR,mesg,ivar); } - compute = modify->compute[icompute]; if (index == 0 && compute->vector_flag) { if (update->whichflag == 0) { if (compute->invoked_vector != update->ntimestep) - print_var_error(FLERR,"Compute used in variable between runs " - "is not current",ivar); + print_var_error(FLERR,"Compute used in variable between runs is not current",ivar); } else if (!(compute->invoked_flag & Compute::INVOKED_VECTOR)) { compute->compute_vector(); compute->invoked_flag |= Compute::INVOKED_VECTOR; @@ -4078,12 +4045,10 @@ int Variable::special_function(char *word, char *contents, Tree **tree, nstride = 1; } else if (index && compute->array_flag) { if (index > compute->size_array_cols) - print_var_error(FLERR,"Variable formula compute array " - "is accessed out-of-range",ivar,0); + print_var_error(FLERR,"Variable formula compute array is accessed out-of-range",ivar,0); if (update->whichflag == 0) { if (compute->invoked_array != update->ntimestep) - print_var_error(FLERR,"Compute used in variable between runs " - "is not current",ivar); + print_var_error(FLERR,"Compute used in variable between runs is not current",ivar); } else if (!(compute->invoked_flag & Compute::INVOKED_ARRAY)) { compute->compute_array(); compute->invoked_flag |= Compute::INVOKED_ARRAY; @@ -4102,14 +4067,13 @@ int Variable::special_function(char *word, char *contents, Tree **tree, *ptr1 = '\0'; } else index = 0; - int ifix = modify->find_fix(&args[0][2]); - if (ifix < 0) { + fix = modify->get_fix_by_id(&args[0][2]); + if (!fix) { std::string mesg = "Invalid fix ID '"; mesg += (args[0]+2); mesg += "' in variable formula"; print_var_error(FLERR,mesg,ivar); } - fix = modify->fix[ifix]; if (index == 0 && fix->vector_flag) { if (update->whichflag > 0 && update->ntimestep % fix->global_freq) { std::string mesg = "Fix with ID '"; diff --git a/src/velocity.cpp b/src/velocity.cpp index 4a449d00e7..34b8d5a700 100644 --- a/src/velocity.cpp +++ b/src/velocity.cpp @@ -43,7 +43,7 @@ enum{NONE,CONSTANT,EQUAL,ATOM}; /* ---------------------------------------------------------------------- */ -Velocity::Velocity(LAMMPS *lmp) : Command(lmp) {} +Velocity::Velocity(LAMMPS *lmp) : Command(lmp), rigid_fix(nullptr), temperature(nullptr) {} /* ---------------------------------------------------------------------- */ @@ -91,7 +91,6 @@ void Velocity::command(int narg, char **arg) bias_flag = 0; loop_flag = ALL; scale_flag = 1; - rfix = -1; // read options from end of input line // change defaults as options specify @@ -108,8 +107,7 @@ void Velocity::command(int narg, char **arg) // b/c methods invoked in the compute/fix perform forward/reverse comm int initcomm = 0; - if (style == ZERO && rfix >= 0 && - utils::strmatch(modify->fix[rfix]->style,"^rigid.*/small.*")) initcomm = 1; + if (style == ZERO && rigid_fix && utils::strmatch(rigid_fix->style,"^rigid.*/small.*")) initcomm = 1; if ((style == CREATE || style == SET) && temperature && strcmp(temperature->style,"temp/cs") == 0) initcomm = 1; @@ -154,7 +152,6 @@ void Velocity::init_external(const char *extgroup) momentum_flag = 1; rotation_flag = 0; loop_flag = ALL; - rfix = -1; scale_flag = 1; bias_flag = 0; } @@ -692,21 +689,21 @@ void Velocity::ramp(int /*narg*/, char **arg) void Velocity::zero(int /*narg*/, char **arg) { if (strcmp(arg[0],"linear") == 0) { - if (rfix < 0) zero_momentum(); - else if (utils::strmatch(modify->fix[rfix]->style,"^rigid/small")) { - modify->fix[rfix]->setup_pre_neighbor(); - modify->fix[rfix]->zero_momentum(); - } else if (utils::strmatch(modify->fix[rfix]->style,"^rigid")) { - modify->fix[rfix]->zero_momentum(); + if (!rigid_fix) zero_momentum(); + else if (utils::strmatch(rigid_fix->style,"^rigid/small")) { + rigid_fix->setup_pre_neighbor(); + rigid_fix->zero_momentum(); + } else if (utils::strmatch(rigid_fix->style,"^rigid")) { + rigid_fix->zero_momentum(); } else error->all(FLERR,"Velocity rigid used with non-rigid fix-ID"); } else if (strcmp(arg[0],"angular") == 0) { - if (rfix < 0) zero_rotation(); - else if (utils::strmatch(modify->fix[rfix]->style,"^rigid/small")) { - modify->fix[rfix]->setup_pre_neighbor(); - modify->fix[rfix]->zero_rotation(); - } else if (utils::strmatch(modify->fix[rfix]->style,"^rigid")) { - modify->fix[rfix]->zero_rotation(); + if (!rigid_fix) zero_rotation(); + else if (utils::strmatch(rigid_fix->style,"^rigid/small")) { + rigid_fix->setup_pre_neighbor(); + rigid_fix->zero_rotation(); + } else if (utils::strmatch(rigid_fix->style,"^rigid")) { + rigid_fix->zero_rotation(); } else error->all(FLERR,"Velocity rigid used with non-rigid fix-ID"); } else error->all(FLERR,"Illegal velocity command"); @@ -843,11 +840,10 @@ void Velocity::options(int narg, char **arg) iarg += 2; } else if (strcmp(arg[iarg],"temp") == 0) { if (iarg+2 > narg) error->all(FLERR,"Illegal velocity command"); - int icompute = modify->find_compute(arg[iarg+1]); - if (icompute < 0) error->all(FLERR,"Could not find velocity temperature ID"); - temperature = modify->compute[icompute]; + temperature = modify->get_compute_by_id(arg[iarg+1]); + if (!temperature) error->all(FLERR,"Could not find velocity temperature compute ID"); if (temperature->tempflag == 0) - error->all(FLERR,"Velocity temperature ID does not compute temperature"); + error->all(FLERR,"Velocity temperature compute {} does not compute temperature", arg[iarg+1]); iarg += 2; } else if (strcmp(arg[iarg],"bias") == 0) { if (iarg+2 > narg) error->all(FLERR,"Illegal velocity command"); @@ -862,8 +858,8 @@ void Velocity::options(int narg, char **arg) iarg += 2; } else if (strcmp(arg[iarg],"rigid") == 0) { if (iarg+2 > narg) error->all(FLERR,"Illegal velocity command"); - rfix = modify->find_fix(arg[iarg+1]); - if (rfix < 0) error->all(FLERR,"Fix ID for velocity does not exist"); + rigid_fix = modify->get_fix_by_id(arg[iarg+1]); + if (!rigid_fix) error->all(FLERR,"Fix ID {} for velocity does not exist", arg[iarg+1]); iarg += 2; } else if (strcmp(arg[iarg],"units") == 0) { if (iarg+2 > narg) error->all(FLERR,"Illegal velocity command"); diff --git a/src/velocity.h b/src/velocity.h index f0a756350c..cce8508021 100644 --- a/src/velocity.h +++ b/src/velocity.h @@ -36,8 +36,9 @@ class Velocity : public Command { int igroup, groupbit; int style; int dist_flag, sum_flag, momentum_flag, rotation_flag; - int bias_flag, loop_flag, scale_flag, rfix; + int bias_flag, loop_flag, scale_flag; double xscale, yscale, zscale; + class Fix *rigid_fix; class Compute *temperature; void set(int, char **); diff --git a/src/verlet.cpp b/src/verlet.cpp index b9b0b392e1..3ea9d72a9e 100644 --- a/src/verlet.cpp +++ b/src/verlet.cpp @@ -68,8 +68,7 @@ void Verlet::init() // detect if fix omp is present for clearing force arrays - int ifix = modify->find_fix("package_omp"); - if (ifix >= 0) external_force_clear = 1; + if (modify->get_fix_by_id("package_omp")) external_force_clear = 1; // set flags for arrays to clear in force_clear() From 59d79ce1762e6c9248af308e9dacba67eff6b6be Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sat, 16 Oct 2021 07:16:40 -0400 Subject: [PATCH 202/372] update googletest to version 1.11 --- cmake/Modules/GTest.cmake | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/cmake/Modules/GTest.cmake b/cmake/Modules/GTest.cmake index 211b506d2f..e012e61ea9 100644 --- a/cmake/Modules/GTest.cmake +++ b/cmake/Modules/GTest.cmake @@ -7,8 +7,8 @@ else() endif() include(ExternalProject) -set(GTEST_URL "https://github.com/google/googletest/archive/release-1.10.0.tar.gz" CACHE STRING "URL for GTest tarball") -set(GTEST_MD5 "ecd1fa65e7de707cd5c00bdac56022cd" CACHE STRING "MD5 checksum of GTest tarball") +set(GTEST_URL "https://github.com/google/googletest/archive/release-1.11.0.tar.gz" CACHE STRING "URL of googletest source") +set(GTEST_MD5 "e8a8df240b6938bb6384155d4c37d937" CACHE STRING "MD5 sum for googletest source") mark_as_advanced(GTEST_URL) mark_as_advanced(GTEST_MD5) ExternalProject_Add(googletest From 8cf030e476d06eadc9cb4994d9dc0d1079d8eeef Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sat, 16 Oct 2021 07:28:16 -0400 Subject: [PATCH 203/372] small tweak for mixed precision GPU runs --- unittest/force-styles/tests/mol-pair-coul_long.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/unittest/force-styles/tests/mol-pair-coul_long.yaml b/unittest/force-styles/tests/mol-pair-coul_long.yaml index 61e038af54..5746877cc3 100644 --- a/unittest/force-styles/tests/mol-pair-coul_long.yaml +++ b/unittest/force-styles/tests/mol-pair-coul_long.yaml @@ -1,7 +1,7 @@ --- lammps_version: 10 Feb 2021 date_generated: Fri Feb 26 23:08:42 2021 -epsilon: 1.5e-13 +epsilon: 2.0e-13 prerequisites: ! | atom full pair coul/long From e990a1cf616b2e9d740f9ab271737e75dbf8ce65 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sat, 16 Oct 2021 21:07:04 -0400 Subject: [PATCH 204/372] remove ambiguity between "double_precision" class member variable and function --- lib/gpu/geryon/ocl_device.h | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/lib/gpu/geryon/ocl_device.h b/lib/gpu/geryon/ocl_device.h index df53aff5b8..2cb06999d9 100644 --- a/lib/gpu/geryon/ocl_device.h +++ b/lib/gpu/geryon/ocl_device.h @@ -88,7 +88,7 @@ struct OCLProperties { cl_uint clock; size_t work_group_size; size_t work_item_size[3]; - bool double_precision; + bool has_double_precision; int preferred_vector_width32, preferred_vector_width64; int alignment; size_t timer_resolution; @@ -226,7 +226,7 @@ class UCL_Device { inline bool double_precision() { return double_precision(_device); } /// Returns true if double precision is support for the device inline bool double_precision(const int i) - {return _properties[i].double_precision;} + {return _properties[i].has_double_precision;} /// Get the number of compute units on the current device inline unsigned cus() { return cus(_device); } @@ -569,9 +569,9 @@ void UCL_Device::add_properties(cl_device_id device_list) { CL_SAFE_CALL(clGetDeviceInfo(device_list,CL_DEVICE_DOUBLE_FP_CONFIG, sizeof(double_avail),&double_avail,nullptr)); if ((double_avail & double_mask) == double_mask) - op.double_precision=true; + op.has_double_precision=true; else - op.double_precision=false; + op.has_double_precision=false; CL_SAFE_CALL(clGetDeviceInfo(device_list, CL_DEVICE_PROFILING_TIMER_RESOLUTION, From cfdf9cee5dd45f6385072131a7793cd55e3b27b4 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sat, 16 Oct 2021 21:28:18 -0400 Subject: [PATCH 205/372] modernize --- src/DPD-REACT/fix_rx.cpp | 153 ++++++++++++++------------------------- 1 file changed, 54 insertions(+), 99 deletions(-) diff --git a/src/DPD-REACT/fix_rx.cpp b/src/DPD-REACT/fix_rx.cpp index b14831ee8d..f21914e2d5 100644 --- a/src/DPD-REACT/fix_rx.cpp +++ b/src/DPD-REACT/fix_rx.cpp @@ -84,7 +84,7 @@ FixRX::FixRX(LAMMPS *lmp, int narg, char **arg) : id_fix_species = nullptr; id_fix_species_old = nullptr; - const int Verbosity = 1; + constexpr int Verbosity = 1; // Keep track of the argument list. int iarg = 3; @@ -101,13 +101,10 @@ FixRX::FixRX(LAMMPS *lmp, int narg, char **arg) : if (strcmp(word,"none") == 0) { wtFlag = 0; localTempFlag = NONE; - } - else if (strcmp(word,"lucy") == 0) { + } else if (strcmp(word,"lucy") == 0) { wtFlag = LUCY; localTempFlag = HARMONIC; - } - else - error->all(FLERR,"Illegal fix rx local temperature weighting technique"); + } else error->all(FLERR,"Illegal fix rx local temperature weighting technique"); } // Select either sparse and dense matrix @@ -120,21 +117,11 @@ FixRX::FixRX(LAMMPS *lmp, int narg, char **arg) : useSparseKinetics = true; else if (strcmp(word,"dense") == 0) useSparseKinetics = false; - else { - std::string errmsg = "Illegal command " + std::string(word) - + " expected \"sparse\" or \"dense\"\n"; - error->all(FLERR, errmsg); - } + else error->all(FLERR, "Illegal command " + std::string(word) + + " expected \"sparse\" or \"dense\"\n"); - if (comm->me == 0 && Verbosity > 1) { - std::string msg = "FixRX: matrix format is "; - if (useSparseKinetics) - msg += std::string("sparse"); - else - msg += std::string("dense"); - - error->message(FLERR, msg); - } + if (comm->me == 0 && Verbosity > 1) + error->message(FLERR, fmt::format("FixRX: matrix format is {}",word)); } // Determine the ODE solver/stepper strategy in arg[6]. @@ -169,40 +156,32 @@ FixRX::FixRX(LAMMPS *lmp, int narg, char **arg) : } if (odeIntegrationFlag == ODE_LAMMPS_RK4 && narg==8) { - char *word = arg[iarg++]; - minSteps = atoi( word ); + minSteps = utils::inumeric(FLERR,arg[iarg++],false,lmp); - if (comm->me == 0 && Verbosity > 1) { - char msg[128]; - sprintf(msg, "FixRX: RK4 numSteps= %d", minSteps); - error->message(FLERR, msg); - } - } - else if (odeIntegrationFlag == ODE_LAMMPS_RK4 && narg>8) { + if (comm->me == 0 && Verbosity > 1) + error->message(FLERR,fmt::format("FixRX: RK4 numSteps= {}", minSteps)); + } else if (odeIntegrationFlag == ODE_LAMMPS_RK4 && narg>8) { error->all(FLERR,"Illegal fix rx command. Too many arguments for RK4 solver."); - } - else if (odeIntegrationFlag == ODE_LAMMPS_RKF45) { + } else if (odeIntegrationFlag == ODE_LAMMPS_RKF45) { // Must have four options. if (narg < 11) error->all(FLERR,"Illegal fix rx command. Too few arguments for RKF45 solver."); - minSteps = atoi( arg[iarg++] ); - maxIters = atoi( arg[iarg++] ); - relTol = strtod( arg[iarg++], nullptr); - absTol = strtod( arg[iarg++], nullptr); + minSteps = utils::inumeric(FLERR,arg[iarg++],false,lmp); + maxIters = utils::inumeric(FLERR,arg[iarg++],false,lmp); + relTol = utils::numeric(FLERR,arg[iarg++],false,lmp); + absTol = utils::numeric(FLERR,arg[iarg++],false,lmp); if (iarg < narg) - diagnosticFrequency = atoi( arg[iarg++] ); + diagnosticFrequency = utils::inumeric(FLERR,arg[iarg++],false,lmp); // maxIters must be at least minSteps. maxIters = std::max( minSteps, maxIters ); - if (comm->me == 0 && Verbosity > 1) { - //printf("FixRX: RKF45 minSteps= %d maxIters= %d absTol= %e relTol= %e\n", minSteps, maxIters, absTol, relTol); - char msg[128]; - sprintf(msg, "FixRX: RKF45 minSteps= %d maxIters= %d relTol= %.1e absTol= %.1e diagnosticFrequency= %d", minSteps, maxIters, relTol, absTol, diagnosticFrequency); - error->message(FLERR, msg); - } + if (comm->me == 0 && Verbosity > 1) + error->message(FLERR, fmt::format("FixRX: RKF45 minSteps= {} maxIters= {} " + "relTol= {:.1e} absTol= {:.1e} diagnosticFrequency= {}", + minSteps, maxIters, relTol, absTol, diagnosticFrequency)); } // Initialize/Create the sparse matrix database. @@ -265,11 +244,8 @@ void FixRX::post_constructor() fp = nullptr; if (comm->me == 0) { fp = utils::open_potential(kineticsFile,lmp,nullptr); - if (fp == nullptr) { - char str[128]; - snprintf(str,128,"Cannot open rx file %s",kineticsFile); - error->one(FLERR,str); - } + if (fp == nullptr) + error->one(FLERR,"Cannot open rx file {}: {}",kineticsFile,utils::getsyserror()); } // Assign species names to tmpspecies array and determine the number of unique species @@ -358,7 +334,7 @@ void FixRX::post_constructor() read_file( kineticsFile ); if (useSparseKinetics) - this->initSparse(); + initSparse(); // set comm size needed by this Pair comm_forward = nspecies*2; @@ -369,7 +345,7 @@ void FixRX::post_constructor() void FixRX::initSparse() { - const int Verbosity = 1; + constexpr int Verbosity = 1; if (comm->me == 0 && Verbosity > 1) { for (int k = 0; k < nspecies; ++k) @@ -449,7 +425,8 @@ void FixRX::initSparse() } } if (comm->me == 0 && Verbosity > 1) - printf("rx%3d: %d %d %d ... %s %s %s\n", i, nreac_i, nprod_i, allAreIntegral, rstr.c_str(), /*reversible[i]*/ (false) ? "<=>" : "=", pstr.c_str()); + utils::logmesg(lmp,"rx{:3d}: {} {} {} ... {} = {}\n", + i, nreac_i, nprod_i, allAreIntegral, rstr, pstr); mxreac = std::max( mxreac, nreac_i ); mxprod = std::max( mxprod, nprod_i ); @@ -458,8 +435,12 @@ void FixRX::initSparse() } if (comm->me == 0 && Verbosity > 1) { - char msg[256]; - sprintf(msg, "FixRX: Sparsity of Stoichiometric Matrix= %.1f%% non-zeros= %d nspecies= %d nreactions= %d maxReactants= %d maxProducts= %d maxSpecies= %d integralReactions= %d", 100*(double(nzeros) / (nspecies * nreactions)), nzeros, nspecies, nreactions, mxreac, mxprod, (mxreac + mxprod), SparseKinetics_enableIntegralReactions); + auto msg = fmt::format("FixRX: Sparsity of Stoichiometric Matrix= {:.1f}% non-zeros= {} " + "nspecies= {} nreactions= {} maxReactants= {} maxProducts= {} " + "maxSpecies= {} integralReactions= {}", + 100*(double(nzeros) / (nspecies * nreactions)), nzeros, nspecies, + nreactions, mxreac, mxprod, (mxreac + mxprod), + SparseKinetics_enableIntegralReactions); error->message(FLERR, msg); } @@ -774,18 +755,9 @@ void FixRX::pre_force(int /*vflag*/) double time_ODE = getElapsedTime(timer_localTemperature, timer_ODE); - //printf("me= %d total= %g temp= %g ode= %g comm= %g nlocal= %d nfc= %d %d\n", comm->me, - // getElapsedTime(timer_start, timer_stop), - // getElapsedTime(timer_start, timer_localTemperature), - // getElapsedTime(timer_localTemperature, timer_ODE), - // getElapsedTime(timer_ODE, timer_stop), nlocal, nFuncs, nSteps); - // Warn the user if a failure was detected in the ODE solver. - if (nFails > 0) { - char sbuf[128]; - sprintf(sbuf,"in FixRX::pre_force, ODE solver failed for %d atoms.", nFails); - error->warning(FLERR, sbuf); - } + if (nFails > 0) + error->warning(FLERR, fmt::format("FixRX::pre_force ODE solver failed for {} atoms.", nFails)); // Compute and report ODE diagnostics, if requested. if (odeIntegrationFlag == ODE_LAMMPS_RKF45 && diagnosticFrequency != 0) { @@ -1422,17 +1394,9 @@ void FixRX::odeDiagnostics() double time_local = getElapsedTime( timer_start, timer_stop ); if (comm->me == 0) { - char smesg[128]; - -#define print_mesg(smesg) {\ - if (screen) fprintf(screen,"%s\n", smesg); \ - if (logfile) fprintf(logfile,"%s\n", smesg); } - - sprintf(smesg, "FixRX::ODE Diagnostics: # of iters |# of rhs evals| run-time (sec) | # atoms"); - print_mesg(smesg); - - sprintf(smesg, " AVG per ODE : %-12.5g | %-12.5g | %-12.5g", avg_per_atom[0], avg_per_atom[1], avg_per_atom[2]); - print_mesg(smesg); + utils::logmesg(lmp,"FixRX::ODE Diagnostics: # of iters |# of rhs evals| run-time (sec) | # atoms\n"); + utils::logmesg(lmp," AVG per ODE : {:>12.5g} | {:>12.5g} | {:>12.5g}\n", + avg_per_atom[0], avg_per_atom[1], avg_per_atom[2]); // only valid for single time-step! if (diagnosticFrequency == 1) { @@ -1440,41 +1404,32 @@ void FixRX::odeDiagnostics() for (int i = 0; i < numCounters; ++i) rms_per_ODE[i] = sqrt( sum_sq[i+numCounters] / nODEs ); - sprintf(smesg, " RMS per ODE : %-12.5g | %-12.5g ", rms_per_ODE[0], rms_per_ODE[1]); - print_mesg(smesg); - - sprintf(smesg, " MAX per ODE : %-12.5g | %-12.5g ", max_per_ODE[0], max_per_ODE[1]); - print_mesg(smesg); - - sprintf(smesg, " MIN per ODE : %-12.5g | %-12.5g ", min_per_ODE[0], min_per_ODE[1]); - print_mesg(smesg); + utils::logmesg(lmp, " RMS per ODE : {:>12.5g} | {:>12.5g}\n", + rms_per_ODE[0], rms_per_ODE[1]); + utils::logmesg(lmp, " MAX per ODE : {:>12.5g} | {:>12.5g}\n", + max_per_ODE[0], max_per_ODE[1]); + utils::logmesg(lmp, " MIN per ODE : {:>12.5g} | {:>12.5g}\n", + min_per_ODE[0], min_per_ODE[1]); } - sprintf(smesg, " AVG per Proc : %-12.5g | %-12.5g | %-12.5g | %-12.5g", avg_per_proc[StepSum], avg_per_proc[FuncSum], avg_per_proc[TimeSum], avg_per_proc[AtomSum]); - print_mesg(smesg); + utils::logmesg(lmp," AVG per Proc : {:>12.5g} | {:>12.5g} | {:>12.5g} | {:>12.5g}\n", + avg_per_proc[StepSum], avg_per_proc[FuncSum], avg_per_proc[TimeSum], avg_per_proc[AtomSum]); if (comm->nprocs > 1) { double rms_per_proc[numCounters]; for (int i = 0; i < numCounters; ++i) rms_per_proc[i] = sqrt( sum_sq[i] / comm->nprocs ); - sprintf(smesg, " RMS per Proc : %-12.5g | %-12.5g | %-12.5g | %-12.5g", rms_per_proc[0], rms_per_proc[1], rms_per_proc[2], rms_per_proc[AtomSum]); - print_mesg(smesg); - - sprintf(smesg, " MAX per Proc : %-12.5g | %-12.5g | %-12.5g | %-12.5g", max_per_proc[0], max_per_proc[1], max_per_proc[2], max_per_proc[AtomSum]); - print_mesg(smesg); - - sprintf(smesg, " MIN per Proc : %-12.5g | %-12.5g | %-12.5g | %-12.5g", min_per_proc[0], min_per_proc[1], min_per_proc[2], min_per_proc[AtomSum]); - print_mesg(smesg); + utils::logmesg(lmp," RMS per Proc : {:>12.5g} | {:>12.5g} | {:>12.5g} | {:>12.5g}\n", + rms_per_proc[0], rms_per_proc[1], rms_per_proc[2], rms_per_proc[AtomSum]); + utils::logmesg(lmp," MAX per Proc : {:>12.5g} | {:>12.5g} | {:>12.5g} | {:>12.5g}\n", + max_per_proc[0], max_per_proc[1], max_per_proc[2], max_per_proc[AtomSum]); + utils::logmesg(lmp," MIN per Proc : {:>12.5g} | {:>12.5g} | {:>12.5g} | {:>12.5g}\n", + min_per_proc[0], min_per_proc[1], min_per_proc[2], min_per_proc[AtomSum]); } - sprintf(smesg, " AVG'd over %d time-steps", nTimes); - print_mesg(smesg); - sprintf(smesg, " AVG'ing took %g sec", time_local); - print_mesg(smesg); - -#undef print_mesg - + utils::logmesg(lmp, " AVG'd over {} time-steps\n", nTimes); + utils::logmesg(lmp, " AVG'ing took {} sec", time_local); } // Reset the counters. From f392b089a4241751618f5287a6bd43f4ae0fb99c Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sat, 16 Oct 2021 21:40:17 -0400 Subject: [PATCH 206/372] modernize --- src/DPD-REACT/fix_shardlow.cpp | 9 +++------ src/REPLICA/fix_pimd.cpp | 15 +++++---------- src/REPLICA/tad.cpp | 8 +++----- 3 files changed, 11 insertions(+), 21 deletions(-) diff --git a/src/DPD-REACT/fix_shardlow.cpp b/src/DPD-REACT/fix_shardlow.cpp index 65fa14daeb..955f1ddd0a 100644 --- a/src/DPD-REACT/fix_shardlow.cpp +++ b/src/DPD-REACT/fix_shardlow.cpp @@ -549,12 +549,9 @@ void FixShardlow::initial_integrate(int /*vflag*/) error->all(FLERR,"Fix shardlow does not yet support triclinic geometries"); if (rcut >= bbx || rcut >= bby || rcut>= bbz ) - { - char fmt[] = {"Shardlow algorithm requires sub-domain length > 2*(rcut+skin). Either reduce the number of processors requested, or change the cutoff/skin: rcut= %e bbx= %e bby= %e bbz= %e\n"}; - char *msg = (char *) malloc(sizeof(fmt) + 4*15); - sprintf(msg, fmt, rcut, bbx, bby, bbz); - error->one(FLERR, msg); - } + error->one(FLERR,"Shardlow algorithm requires sub-domain length > 2*(rcut+skin). " + "Either reduce the number of processors requested, or change the cutoff/skin: " + "rcut= {} bbx= {} bby= {} bbz= {}\n", rcut, bbx, bby, bbz); NPairHalfBinNewtonSSA *np_ssa = dynamic_cast(list->np); if (!np_ssa) error->one(FLERR, "NPair wasn't a NPairHalfBinNewtonSSA object"); diff --git a/src/REPLICA/fix_pimd.cpp b/src/REPLICA/fix_pimd.cpp index bb4af16f1b..d4b3447f15 100644 --- a/src/REPLICA/fix_pimd.cpp +++ b/src/REPLICA/fix_pimd.cpp @@ -676,16 +676,11 @@ void FixPIMD::comm_exec(double **ptr) int index = atom->map(tag_send[i]); if (index < 0) { - char error_line[256]; - - sprintf(error_line, - "Atom " TAGINT_FORMAT " is missing at world [%d] " - "rank [%d] required by rank [%d] (" TAGINT_FORMAT ", " TAGINT_FORMAT - ", " TAGINT_FORMAT ").\n", - tag_send[i], universe->iworld, comm->me, plan_recv[iplan], atom->tag[0], - atom->tag[1], atom->tag[2]); - - error->universe_one(FLERR, error_line); + auto mesg = fmt::format("Atom {} is missing at world [{}] rank [{}] " + "required by rank [{}] ({}, {}, {}).\n", + tag_send[i], universe->iworld, comm->me, + plan_recv[iplan], atom->tag[0], atom->tag[1], atom->tag[2]); + error->universe_one(FLERR, mesg); } memcpy(wrap_ptr, ptr[index], ncpy); diff --git a/src/REPLICA/tad.cpp b/src/REPLICA/tad.cpp index 881ec1604c..0b1cc915c6 100644 --- a/src/REPLICA/tad.cpp +++ b/src/REPLICA/tad.cpp @@ -840,11 +840,9 @@ void TAD::initialize_event_list() { void TAD::delete_event_list() { - for (int i = 0; i < n_event_list; i++) { - char str[128]; - sprintf(str,"tad_event_%d",i); - modify->delete_fix(str); - } + for (int i = 0; i < n_event_list; i++) + modify->delete_fix(fmt::format("tad_event_{}",i)); + memory->sfree(fix_event_list); fix_event_list = nullptr; n_event_list = 0; From 064e7fde2fe5a8e69cae12e9e53201e4e2eea289 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sat, 16 Oct 2021 22:30:38 -0400 Subject: [PATCH 207/372] must not dereference null pointer --- src/GRANULAR/fix_pour.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/GRANULAR/fix_pour.cpp b/src/GRANULAR/fix_pour.cpp index 063efda351..bf32dcf86f 100644 --- a/src/GRANULAR/fix_pour.cpp +++ b/src/GRANULAR/fix_pour.cpp @@ -343,8 +343,8 @@ void FixPour::init() // if rigidflag defined, check for rigid/small fix // its molecule template must be same as this one - fixrigid = modify->get_fix_by_id(idrigid); if (rigidflag) { + fixrigid = modify->get_fix_by_id(idrigid); if (!fixrigid) error->all(FLERR,"Fix pour rigid fix does not exist"); int tmp; if (onemols != (Molecule **) fixrigid->extract("onemol",tmp)) @@ -354,8 +354,8 @@ void FixPour::init() // if shakeflag defined, check for SHAKE fix // its molecule template must be same as this one - fixshake = modify->get_fix_by_id(idshake); if (shakeflag) { + fixshake = modify->get_fix_by_id(idshake); if (!fixshake) error->all(FLERR,"Fix pour shake fix does not exist"); int tmp; if (onemols != (Molecule **) fixshake->extract("onemol",tmp)) From 702d861a586a8f4107d9704c2f12fd8640471eca Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sat, 16 Oct 2021 22:31:23 -0400 Subject: [PATCH 208/372] update to use new accessor APIs --- src/GRANULAR/pair_gran_hooke_history.cpp | 41 +++++++++++-------- src/GRANULAR/pair_granular.cpp | 52 +++++++++++++----------- 2 files changed, 52 insertions(+), 41 deletions(-) diff --git a/src/GRANULAR/pair_gran_hooke_history.cpp b/src/GRANULAR/pair_gran_hooke_history.cpp index 9bf2ae12d2..f212bdf97a 100644 --- a/src/GRANULAR/pair_gran_hooke_history.cpp +++ b/src/GRANULAR/pair_gran_hooke_history.cpp @@ -451,24 +451,29 @@ void PairGranHookeHistory::init_style() // check for FixFreeze and set freeze_group_bit - int ifreeze = modify->find_fix_by_style("^freeze"); - if (ifreeze < 0) + auto fixlist = modify->get_fix_by_style("^freeze"); + if (fixlist.size() == 0) freeze_group_bit = 0; + else if (fixlist.size() > 1) + error->all(FLERR, "Only one fix freeze command at a time allowed"); else - freeze_group_bit = modify->fix[ifreeze]->groupbit; + freeze_group_bit = fixlist.front()->groupbit; // check for FixRigid so can extract rigid body masses - // FIXME: this only catches the first rigid fix, there may be multiple. fix_rigid = nullptr; - for (i = 0; i < modify->nfix; i++) - if (modify->fix[i]->rigid_flag) break; - if (i < modify->nfix) fix_rigid = modify->fix[i]; + for (const auto &ifix : modify->get_fix_list()) { + if (ifix->rigid_flag) { + if (fix_rigid) + error->all(FLERR, "Only one fix rigid command at a time allowed"); + else fix_rigid = ifix; + } + } // check for FixPour and FixDeposit so can extract particle radii - int ipour = modify->find_fix_by_style("^pour"); - int idep = modify->find_fix_by_style("^deposit"); + auto pours = modify->get_fix_by_style("^pour"); + auto deps = modify->get_fix_by_style("^deposit"); // set maxrad_dynamic and maxrad_frozen for each type // include future FixPour and FixDeposit particles as dynamic @@ -476,13 +481,15 @@ void PairGranHookeHistory::init_style() int itype; for (i = 1; i <= atom->ntypes; i++) { onerad_dynamic[i] = onerad_frozen[i] = 0.0; - if (ipour >= 0) { + for (auto ipour : pours) { itype = i; - onerad_dynamic[i] = *((double *) modify->fix[ipour]->extract("radius", itype)); + double maxrad = *((double *) ipour->extract("radius", itype)); + if (maxrad > 0.0) onerad_dynamic[i] = maxrad; } - if (idep >= 0) { + for (auto idep : deps) { itype = i; - onerad_dynamic[i] = *((double *) modify->fix[idep]->extract("radius", itype)); + double maxrad = *((double *) idep->extract("radius", itype)); + if (maxrad > 0.0) onerad_dynamic[i] = maxrad; } } @@ -491,11 +498,12 @@ void PairGranHookeHistory::init_style() int *type = atom->type; int nlocal = atom->nlocal; - for (i = 0; i < nlocal; i++) + 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); @@ -503,9 +511,8 @@ void PairGranHookeHistory::init_style() // set fix which stores history info if (history) { - int ifix = modify->find_fix("NEIGH_HISTORY_HH" + std::to_string(instance_me)); - if (ifix < 0) error->all(FLERR, "Could not find pair fix neigh history ID"); - fix_history = (FixNeighHistory *) modify->fix[ifix]; + fix_history = (FixNeighHistory *) modify->get_fix_by_id("NEIGH_HISTORY_HH" + std::to_string(instance_me)); + if (!fix_history) error->all(FLERR,"Could not find pair fix neigh history ID"); } } diff --git a/src/GRANULAR/pair_granular.cpp b/src/GRANULAR/pair_granular.cpp index 2846403e4c..fc18d3f521 100644 --- a/src/GRANULAR/pair_granular.cpp +++ b/src/GRANULAR/pair_granular.cpp @@ -1130,22 +1130,29 @@ void PairGranular::init_style() // check for FixFreeze and set freeze_group_bit - int ifix = modify->find_fix_by_style("^freeze"); - if (ifix < 0) freeze_group_bit = 0; - else freeze_group_bit = modify->fix[ifix]->groupbit; + auto fixlist = modify->get_fix_by_style("^freeze"); + if (fixlist.size() == 0) + freeze_group_bit = 0; + else if (fixlist.size() > 1) + error->all(FLERR, "Only one fix freeze command at a time allowed"); + else + freeze_group_bit = fixlist.front()->groupbit; // check for FixRigid so can extract rigid body masses - // FIXME: this only catches the first rigid fix, there may be multiple. fix_rigid = nullptr; - for (i = 0; i < modify->nfix; i++) - if (modify->fix[i]->rigid_flag) break; - if (i < modify->nfix) fix_rigid = modify->fix[i]; + for (const auto &ifix : modify->get_fix_list()) { + if (ifix->rigid_flag) { + if (fix_rigid) + error->all(FLERR, "Only one fix rigid command at a time allowed"); + else fix_rigid = ifix; + } + } // check for FixPour and FixDeposit so can extract particle radii - int ipour = modify->find_fix_by_style("^pour"); - int idep = modify->find_fix_by_style("^deposit"); + auto pours = modify->get_fix_by_style("^pour"); + auto deps = modify->get_fix_by_style("^deposit"); // set maxrad_dynamic and maxrad_frozen for each type // include future FixPour and FixDeposit particles as dynamic @@ -1153,15 +1160,15 @@ void PairGranular::init_style() int itype; for (i = 1; i <= atom->ntypes; i++) { onerad_dynamic[i] = onerad_frozen[i] = 0.0; - if (ipour >= 0) { + for (auto ipour : pours) { itype = i; - double radmax = *((double *) modify->fix[ipour]->extract("radius",itype)); - onerad_dynamic[i] = radmax; + double maxrad = *((double *) ipour->extract("radius", itype)); + if (maxrad > 0.0) onerad_dynamic[i] = maxrad; } - if (idep >= 0) { + for (auto idep : deps) { itype = i; - double radmax = *((double *) modify->fix[idep]->extract("radius",itype)); - onerad_dynamic[i] = radmax; + double maxrad = *((double *) idep->extract("radius", itype)); + if (maxrad > 0.0) onerad_dynamic[i] = maxrad; } } @@ -1171,12 +1178,10 @@ void PairGranular::init_style() int nlocal = atom->nlocal; for (i = 0; i < nlocal; i++) { - double radius_cut = radius[i]; - if (mask[i] & freeze_group_bit) { - onerad_frozen[type[i]] = MAX(onerad_frozen[type[i]],radius_cut); - } else { - onerad_dynamic[type[i]] = MAX(onerad_dynamic[type[i]],radius_cut); - } + 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); @@ -1185,9 +1190,8 @@ void PairGranular::init_style() // set fix which stores history info if (size_history > 0) { - int ifix = modify->find_fix("NEIGH_HISTORY_GRANULAR"); - if (ifix < 0) error->all(FLERR,"Could not find pair fix neigh history ID"); - fix_history = (FixNeighHistory *) modify->fix[ifix]; + fix_history = (FixNeighHistory *) modify->get_fix_by_id("NEIGH_HISTORY_GRANULAR"); + if (!fix_history) error->all(FLERR,"Could not find pair fix neigh history ID"); } } From 6145ef9cd241ac49c31f71563f3b1b93e5bbec3a Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sun, 17 Oct 2021 09:43:25 -0400 Subject: [PATCH 209/372] fix bugs related to custom per-atom properties in dump style custom --- src/dump_custom.cpp | 78 +++++++++++++++++---------------------------- 1 file changed, 30 insertions(+), 48 deletions(-) diff --git a/src/dump_custom.cpp b/src/dump_custom.cpp index b2acdbfc51..0e47671bb9 100644 --- a/src/dump_custom.cpp +++ b/src/dump_custom.cpp @@ -131,7 +131,7 @@ DumpCustom::DumpCustom(LAMMPS *lmp, int narg, char **arg) : if (ioptional < nfield && strcmp(style,"image") != 0 && strcmp(style,"movie") != 0) - error->all(FLERR,"Invalid attribute in dump custom command"); + error->all(FLERR,"Invalid attribute {} in dump {} command",earg[ioptional],style); // noptional = # of optional args // reset nfield to subtract off optional args @@ -238,9 +238,8 @@ DumpCustom::~DumpCustom() for (int i = 0; i < ncustom; i++) delete[] id_custom[i]; memory->sfree(id_custom); - delete [] custom; - delete [] custom_flag; - + memory->sfree(custom); + memory->sfree(custom_flag); memory->destroy(choose); memory->destroy(dchoose); memory->destroy(clist); @@ -909,32 +908,27 @@ int DumpCustom::count() } else if (thresh_array[ithresh] == Q) { if (!atom->q_flag) - error->all(FLERR, - "Threshold for an atom property that isn't allocated"); + error->all(FLERR,"Threshold for an atom property that isn't allocated"); ptr = atom->q; nstride = 1; } else if (thresh_array[ithresh] == MUX) { if (!atom->mu_flag) - error->all(FLERR, - "Threshold for an atom property that isn't allocated"); + error->all(FLERR,"Threshold for an atom property that isn't allocated"); ptr = &atom->mu[0][0]; nstride = 4; } else if (thresh_array[ithresh] == MUY) { if (!atom->mu_flag) - error->all(FLERR, - "Threshold for an atom property that isn't allocated"); + error->all(FLERR,"Threshold for an atom property that isn't allocated"); ptr = &atom->mu[0][1]; nstride = 4; } else if (thresh_array[ithresh] == MUZ) { if (!atom->mu_flag) - error->all(FLERR, - "Threshold for an atom property that isn't allocated"); + error->all(FLERR,"Threshold for an atom property that isn't allocated"); ptr = &atom->mu[0][2]; nstride = 4; } else if (thresh_array[ithresh] == MU) { if (!atom->mu_flag) - error->all(FLERR, - "Threshold for an atom property that isn't allocated"); + error->all(FLERR,"Threshold for an atom property that isn't allocated"); ptr = &atom->mu[0][3]; nstride = 4; @@ -1521,7 +1515,7 @@ int DumpCustom::parse_fields(int narg, char **arg) field2index[iarg] = add_variable(name); break; - // custom per-atom floating point vector or array + // custom per-atom floating point vector or array = d_ID d2_ID case ArgInfo::DNAME: pack_choice[iarg] = &DumpCustom::pack_custom; @@ -1533,18 +1527,18 @@ int DumpCustom::parse_fields(int narg, char **arg) error->all(FLERR,"Could not find custom per-atom property ID: {}", name); if (argindex[iarg] == 0) { if (!flag || cols) - error->all(FLERR,"Property double vector for dump custom does not exist"); + error->all(FLERR,"Property double vector {} for dump custom does not exist",name); } else { if (!flag || !cols) - error->all(FLERR,"Property double array for dump custom does not exist"); + error->all(FLERR,"Property double array {} for dump custom does not exist",name); if (argindex[iarg] > atom->dcols[n]) - error->all(FLERR,"Dump custom property array is accessed out-of-range"); + error->all(FLERR,"Dump custom property array {} is accessed out-of-range",name); } field2index[iarg] = add_custom(name,1); break; - // custom per-atom integer vector or array + // custom per-atom integer vector or array = i_ID or i2_ID case ArgInfo::INAME: pack_choice[iarg] = &DumpCustom::pack_custom; @@ -1556,15 +1550,12 @@ int DumpCustom::parse_fields(int narg, char **arg) error->all(FLERR,"Could not find custom per-atom property ID: {}", name); if (argindex[iarg] == 0) { if (flag || cols) - error->all(FLERR, - "Property integer vector for dump custom does not exist"); + error->all(FLERR,"Property integer vector {} for dump custom does not exist",name); } else { if (flag || !cols) - error->all(FLERR, - "Property integer array for dump custom does not exist"); + error->all(FLERR,"Property integer array {} for dump custom does not exist",name); if (argindex[iarg] > atom->icols[n]) - error->all(FLERR, - "Dump custom property array is accessed out-of-range"); + error->all(FLERR,"Dump custom property array {} is accessed out-of-range",name); } field2index[iarg] = add_custom(name,0); @@ -1574,6 +1565,7 @@ int DumpCustom::parse_fields(int narg, char **arg) default: return iarg; + break; } } } @@ -1667,13 +1659,9 @@ int DumpCustom::add_custom(const char *id, int flag) if (strcmp(id,id_custom[icustom]) == 0) break; if (icustom < ncustom) return icustom; - id_custom = (char **) - memory->srealloc(id_custom,(ncustom+1)*sizeof(char *),"dump:id_custom"); - - delete [] custom; - custom = new int[ncustom+1]; - delete [] custom_flag; - custom_flag = new int[ncustom+1]; + id_custom = (char **) memory->srealloc(id_custom,(ncustom+1)*sizeof(char *),"dump:id_custom"); + custom = (int *) memory->srealloc(custom,(ncustom+1)*sizeof(int),"dump:custom"); + custom_flag = (int *) memory->srealloc(custom_flag,(ncustom+1)*sizeof(int),"dump:custom_flag"); id_custom[ncustom] = utils::strdup(id); custom_flag[ncustom] = flag; @@ -1962,21 +1950,18 @@ int DumpCustom::modify_param(int narg, char **arg) if (n < 0) error->all(FLERR,"Could not find custom per-atom property ID: {}", name); if (argindex[nfield+nthresh] == 0) { - if (flag || cols) - error->all(FLERR, - "Property double vector for dump custom does not exist"); + if (!flag || cols) + error->all(FLERR,"Property double vector for dump custom does not exist"); thresh_array[nthresh] = DVEC; } else { - if (flag || !cols) - error->all(FLERR, - "Property double array for dump custom does not exist"); + if (!flag || !cols) + error->all(FLERR,"Property double array for dump custom does not exist"); if (argindex[nfield+nthresh] > atom->dcols[n]) - error->all(FLERR, - "Dump custom property array is accessed out-of-range"); + error->all(FLERR,"Dump custom property array is accessed out-of-range"); thresh_array[nthresh] = DARRAY; } - field2index[nfield+nthresh] = add_custom(name,0); + field2index[nfield+nthresh] = add_custom(name,thresh_array[nthresh]); break; // custom per atom integer vector or array @@ -1988,20 +1973,17 @@ int DumpCustom::modify_param(int narg, char **arg) error->all(FLERR,"Could not find custom per-atom property ID: {}", name); if (argindex[nfield+nthresh] == 0) { if (flag || cols) - error->all(FLERR, - "Property integer vector for dump custom does not exist"); + error->all(FLERR,"Property integer vector for dump custom does not exist"); thresh_array[nthresh] = IVEC; } else { if (flag || !cols) - error->all(FLERR, - "Property integer array for dump custom does not exist"); + error->all(FLERR,"Property integer array for dump custom does not exist"); if (argindex[nfield+nthresh] > atom->icols[n]) - error->all(FLERR, - "Dump custom property array is accessed out-of-range"); + error->all(FLERR,"Dump custom property array is accessed out-of-range"); thresh_array[nthresh] = IARRAY; } - field2index[nfield+nthresh] = add_custom(name,0); + field2index[nfield+nthresh] = add_custom(name,thresh_array[nthresh]); break; // no match From 1e9da5a25b5e410d31c787c4bfb3db5d6340ec11 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sun, 17 Oct 2021 10:58:33 -0400 Subject: [PATCH 210/372] port dump vtk to correctly support custom per-atom arrays and fix some bugs --- src/VTK/dump_vtk.cpp | 610 +++++++++++++++++++++++++------------------ 1 file changed, 360 insertions(+), 250 deletions(-) diff --git a/src/VTK/dump_vtk.cpp b/src/VTK/dump_vtk.cpp index a7aabe3f51..54dc0d4b0e 100644 --- a/src/VTK/dump_vtk.cpp +++ b/src/VTK/dump_vtk.cpp @@ -31,6 +31,7 @@ #include "domain.h" #include "error.h" #include "fix.h" +#include "fix_store.h" #include "force.h" #include "group.h" #include "input.h" @@ -87,9 +88,9 @@ enum{X,Y,Z, // required for vtk, must come first Q,MUX,MUY,MUZ,MU,RADIUS,DIAMETER, OMEGAX,OMEGAY,OMEGAZ,ANGMOMX,ANGMOMY,ANGMOMZ, TQX,TQY,TQZ, - VARIABLE,COMPUTE,FIX,INAME,DNAME, + COMPUTE,FIX,VARIABLE,IVEC,DVEC,IARRAY,DARRAY, ATTRIBUTES}; // must come last -enum{LT,LE,GT,GE,EQ,NEQ}; +enum{LT,LE,GT,GE,EQ,NEQ,XOR}; enum{VTK,VTP,VTU,PVTP,PVTU}; // file formats #define ONEFIELD 32 @@ -119,11 +120,10 @@ DumpVTK::DumpVTK(LAMMPS *lmp, int narg, char **arg) : // ioptional = start of additional optional args // only dump image and dump movie styles process optional args - ioptional = parse_fields(narg,arg); + ioptional = parse_fields(nargnew,earg); - if (ioptional < narg && - strcmp(style,"image") != 0 && strcmp(style,"movie") != 0) - error->all(FLERR,"Invalid attribute in dump vtk command"); + if (ioptional < nargnew) + error->all(FLERR,"Invalid attribute {} in dump vtk command", earg[ioptional]); size_one = pack_choice.size(); current_pack_choice_key = -1; @@ -210,38 +210,40 @@ void DumpVTK::init_style() else write_choice = &DumpVTK::write_vtk; - // find current ptr for each compute,fix,variable + // find current ptr for each compute,fix,variable and custom atom property // check that fix frequency is acceptable - int icompute; for (int i = 0; i < ncompute; i++) { - icompute = modify->find_compute(id_compute[i]); + int icompute = modify->find_compute(id_compute[i]); if (icompute < 0) error->all(FLERR,"Could not find dump vtk compute ID"); compute[i] = modify->compute[icompute]; } - int ifix; for (int i = 0; i < nfix; i++) { - ifix = modify->find_fix(id_fix[i]); + int ifix = modify->find_fix(id_fix[i]); if (ifix < 0) error->all(FLERR,"Could not find dump vtk fix ID"); fix[i] = modify->fix[ifix]; if (nevery % modify->fix[ifix]->peratom_freq) error->all(FLERR,"Dump vtk and fix not computed at compatible times"); } - int ivariable; for (int i = 0; i < nvariable; i++) { - ivariable = input->variable->find(id_variable[i]); + int ivariable = input->variable->find(id_variable[i]); if (ivariable < 0) error->all(FLERR,"Could not find dump vtk variable name"); variable[i] = ivariable; } - int icustom; + int icustom,flag,cols; for (int i = 0; i < ncustom; i++) { - icustom = atom->find_custom(id_custom[i],flag_custom[i]); + icustom = atom->find_custom(id_custom[i],flag,cols); if (icustom < 0) error->all(FLERR,"Could not find custom per-atom property ID"); + custom[i] = icustom; + if (!flag && !cols) custom_flag[i] = IVEC; + else if (flag && !cols) custom_flag[i] = DVEC; + else if (!flag && cols) custom_flag[i] = IARRAY; + else if (flag && cols) custom_flag[i] = DARRAY; } // set index and check validity of region @@ -275,7 +277,7 @@ int DumpVTK::count() // grow choose and variable vbuf arrays if needed - int nlocal = atom->nlocal; + const int nlocal = atom->nlocal; if (atom->nmax > maxlocal) { maxlocal = atom->nmax; @@ -345,10 +347,10 @@ int DumpVTK::count() // un-choose if any threshold criterion isn't met if (nthresh) { - double *ptr; + double *ptr,*ptrhold; + double *values; double value; - int nstride; - int nlocal = atom->nlocal; + int nstride,lastflag; for (int ithresh = 0; ithresh < nthresh; ithresh++) { @@ -635,26 +637,22 @@ int DumpVTK::count() nstride = 1; } else if (thresh_array[ithresh] == MUX) { if (!atom->mu_flag) - error->all(FLERR, - "Threshold for an atom property that isn't allocated"); + error->all(FLERR,"Threshold for an atom property that isn't allocated"); ptr = &atom->mu[0][0]; nstride = 4; } else if (thresh_array[ithresh] == MUY) { if (!atom->mu_flag) - error->all(FLERR, - "Threshold for an atom property that isn't allocated"); + error->all(FLERR,"Threshold for an atom property that isn't allocated"); ptr = &atom->mu[0][1]; nstride = 4; } else if (thresh_array[ithresh] == MUZ) { if (!atom->mu_flag) - error->all(FLERR, - "Threshold for an atom property that isn't allocated"); + error->all(FLERR,"Threshold for an atom property that isn't allocated"); ptr = &atom->mu[0][2]; nstride = 4; } else if (thresh_array[ithresh] == MU) { if (!atom->mu_flag) - error->all(FLERR, - "Threshold for an atom property that isn't allocated"); + error->all(FLERR,"Threshold for an atom property that isn't allocated"); ptr = &atom->mu[0][3]; nstride = 4; @@ -753,9 +751,8 @@ int DumpVTK::count() nstride = 1; } else if (thresh_array[ithresh] == IVEC) { - int iwhich,flag,cols i = ATTRIBUTES + nfield + ithresh; - iwhich = atom->find_custom(id_custom[field2index[i]],flag,cols); + int iwhich = custom[field2index[i]]; int *ivector = atom->ivector[iwhich]; for (i = 0; i < nlocal; i++) dchoose[i] = ivector[i]; @@ -763,16 +760,14 @@ int DumpVTK::count() nstride = 1; } else if (thresh_array[ithresh] == DVEC) { - int iwhich,flag,cols; i = ATTRIBUTES + nfield + ithresh; - iwhich = atom->find_custom(id_custom[field2index[i]],flag,cols); + int iwhich = custom[field2index[i]]; ptr = atom->dvector[iwhich]; nstride = 1; } else if (thresh_array[ithresh] == IARRAY) { - int iwhich,flag,cols; i = ATTRIBUTES + nfield + ithresh; - iwhich = atom->find_custom(id_custom[field2index[i]],flag,cols); + int iwhich = custom[field2index[i]]; int **iarray = atom->iarray[iwhich]; int icol = argindex[i] - 1; for (i = 0; i < nlocal; i++) @@ -781,43 +776,99 @@ int DumpVTK::count() nstride = 1; } else if (thresh_array[ithresh] == DARRAY) { - int iwhich,flag,cols; i = ATTRIBUTES + nfield + ithresh; - iwhich = atom->find_custom(id_custom[field2index[i]],flag,cols) + int iwhich = custom[field2index[i]]; double **darray = atom->darray[iwhich]; ptr = &darray[0][argindex[i]-1]; nstride = atom->dcols[iwhich]; } // unselect atoms that don't meet threshold criterion + // compare to single value or values stored in threshfix + // copy ptr attribute into thresh_fix if this is first comparison - value = thresh_value[ithresh]; + if (thresh_last[ithresh] < 0) { + lastflag = 0; + value = thresh_value[ithresh]; + } else { + lastflag = 1; + int ilast = thresh_last[ithresh]; + values = thresh_fix[ilast]->vstore; + ptrhold = ptr; + if (thresh_first[ilast]) { + thresh_first[ilast] = 0; + for (i = 0; i < nlocal; i++, ptr += nstride) values[i] = *ptr; + ptr = ptrhold; + } + } - switch (thresh_op[ithresh]) { - case LT: - for (i = 0; i < nlocal; i++, ptr += nstride) - if (choose[i] && *ptr >= value) choose[i] = 0; - break; - case LE: - for (i = 0; i < nlocal; i++, ptr += nstride) - if (choose[i] && *ptr > value) choose[i] = 0; - break; - case GT: - for (i = 0; i < nlocal; i++, ptr += nstride) - if (choose[i] && *ptr <= value) choose[i] = 0; - break; - case GE: - for (i = 0; i < nlocal; i++, ptr += nstride) - if (choose[i] && *ptr < value) choose[i] = 0; - break; - case EQ: - for (i = 0; i < nlocal; i++, ptr += nstride) - if (choose[i] && *ptr != value) choose[i] = 0; - break; - case NEQ: - for (i = 0; i < nlocal; i++, ptr += nstride) - if (choose[i] && *ptr == value) choose[i] = 0; - break; + if (thresh_op[ithresh] == LT) { + if (lastflag) { + for (i = 0; i < nlocal; i++, ptr += nstride) + if (choose[i] && *ptr >= values[i]) choose[i] = 0; + } else { + for (i = 0; i < nlocal; i++, ptr += nstride) + if (choose[i] && *ptr >= value) choose[i] = 0; + } + } else if (thresh_op[ithresh] == LE) { + if (lastflag) { + for (i = 0; i < nlocal; i++, ptr += nstride) + if (choose[i] && *ptr > values[i]) choose[i] = 0; + } else { + for (i = 0; i < nlocal; i++, ptr += nstride) + if (choose[i] && *ptr > value) choose[i] = 0; + } + } else if (thresh_op[ithresh] == GT) { + if (lastflag) { + for (i = 0; i < nlocal; i++, ptr += nstride) + if (choose[i] && *ptr <= values[i]) choose[i] = 0; + } else { + for (i = 0; i < nlocal; i++, ptr += nstride) + if (choose[i] && *ptr <= value) choose[i] = 0; + } + } else if (thresh_op[ithresh] == GE) { + if (lastflag) { + for (i = 0; i < nlocal; i++, ptr += nstride) + if (choose[i] && *ptr < values[i]) choose[i] = 0; + } else { + for (i = 0; i < nlocal; i++, ptr += nstride) + if (choose[i] && *ptr < value) choose[i] = 0; + } + } else if (thresh_op[ithresh] == EQ) { + if (lastflag) { + for (i = 0; i < nlocal; i++, ptr += nstride) + if (choose[i] && *ptr != values[i]) choose[i] = 0; + } else { + for (i = 0; i < nlocal; i++, ptr += nstride) + if (choose[i] && *ptr != value) choose[i] = 0; + } + } else if (thresh_op[ithresh] == NEQ) { + if (lastflag) { + for (i = 0; i < nlocal; i++, ptr += nstride) + if (choose[i] && *ptr == values[i]) choose[i] = 0; + } else { + for (i = 0; i < nlocal; i++, ptr += nstride) + if (choose[i] && *ptr == value) choose[i] = 0; + } + } else if (thresh_op[ithresh] == XOR) { + if (lastflag) { + for (i = 0; i < nlocal; i++, ptr += nstride) + if ((choose[i] && *ptr == 0.0 && values[i] == 0.0) || + (*ptr != 0.0 && values[i] != 0.0)) + choose[i] = 0; + } else { + for (i = 0; i < nlocal; i++, ptr += nstride) + if ((choose[i] && *ptr == 0.0 && value == 0.0) || + (*ptr != 0.0 && value != 0.0)) + choose[i] = 0; + } + } + + // update values stored in threshfix + + if (lastflag) { + ptr = ptrhold; + for (i = 0; i < nlocal; i++, ptr += nstride) values[i] = *ptr; } } } @@ -1754,15 +1805,16 @@ int DumpVTK::parse_fields(int narg, char **arg) } else { - int n,tmp; + int n,flag,cols; ArgInfo argi(arg[iarg],ArgInfo::COMPUTE|ArgInfo::FIX|ArgInfo::VARIABLE - |ArgInfo::DVEC|ArgInfo::IVEC); + |ArgInfo::DNAME|ArgInfo::INAME); argindex[ATTRIBUTES+i] = argi.get_index1(); + auto aname = argi.get_name(); switch (argi.get_type()) { case ArgInfo::UNKNOWN: - error->all(FLERR,"Invalid attribute in dump vtk command"); + error->all(FLERR,"Invalid attribute in dump vtk command: {}",arg[iarg]); break; // compute value = c_ID @@ -1772,21 +1824,19 @@ int DumpVTK::parse_fields(int narg, char **arg) pack_choice[ATTRIBUTES+i] = &DumpVTK::pack_compute; vtype[ATTRIBUTES+i] = Dump::DOUBLE; - n = modify->find_compute(argi.get_name()); - if (n < 0) error->all(FLERR,"Could not find dump vtk compute ID"); + n = modify->find_compute(aname); + if (n < 0) error->all(FLERR,"Could not find dump vtk compute ID: {}",aname); if (modify->compute[n]->peratom_flag == 0) - error->all(FLERR,"Dump vtk compute does not compute per-atom info"); + error->all(FLERR,"Dump vtk compute {} does not compute per-atom info",aname); if (argi.get_dim() == 0 && modify->compute[n]->size_peratom_cols > 0) - error->all(FLERR, - "Dump vtk compute does not calculate per-atom vector"); + error->all(FLERR,"Dump vtk compute {} does not calculate per-atom vector",aname); if (argi.get_dim() > 0 && modify->compute[n]->size_peratom_cols == 0) - error->all(FLERR, - "Dump vtk compute does not calculate per-atom array"); + error->all(FLERR,"Dump vtk compute {} does not calculate per-atom array",aname); if (argi.get_dim() > 0 && argi.get_index1() > modify->compute[n]->size_peratom_cols) - error->all(FLERR,"Dump vtk compute vector is accessed out-of-range"); + error->all(FLERR,"Dump vtk compute {} vector is accessed out-of-range",aname); - field2index[ATTRIBUTES+i] = add_compute(argi.get_name()); + field2index[ATTRIBUTES+i] = add_compute(aname); name[ATTRIBUTES+i] = arg[iarg]; break; @@ -1797,19 +1847,19 @@ int DumpVTK::parse_fields(int narg, char **arg) pack_choice[ATTRIBUTES+i] = &DumpVTK::pack_fix; vtype[ATTRIBUTES+i] = Dump::DOUBLE; - n = modify->find_fix(argi.get_name()); - if (n < 0) error->all(FLERR,"Could not find dump vtk fix ID"); + n = modify->find_fix(aname); + if (n < 0) error->all(FLERR,"Could not find dump vtk fix ID: {}",aname); if (modify->fix[n]->peratom_flag == 0) - error->all(FLERR,"Dump vtk fix does not compute per-atom info"); + error->all(FLERR,"Dump vtk fix {} does not compute per-atom info",aname); if (argi.get_dim() == 0 && modify->fix[n]->size_peratom_cols > 0) - error->all(FLERR,"Dump vtk fix does not compute per-atom vector"); + error->all(FLERR,"Dump vtk fix {} does not compute per-atom vector",aname); if (argi.get_dim() > 0 && modify->fix[n]->size_peratom_cols == 0) - error->all(FLERR,"Dump vtk fix does not compute per-atom array"); + error->all(FLERR,"Dump vtk fix {} does not compute per-atom array",aname); if (argi.get_dim() > 0 && argi.get_index1() > modify->fix[n]->size_peratom_cols) - error->all(FLERR,"Dump vtk fix vector is accessed out-of-range"); + error->all(FLERR,"Dump vtk fix {} vector is accessed out-of-range",aname); - field2index[ATTRIBUTES+i] = add_fix(argi.get_name()); + field2index[ATTRIBUTES+i] = add_fix(aname); name[ATTRIBUTES+i] = arg[iarg]; break; @@ -1819,61 +1869,62 @@ int DumpVTK::parse_fields(int narg, char **arg) pack_choice[ATTRIBUTES+i] = &DumpVTK::pack_variable; vtype[ATTRIBUTES+i] = Dump::DOUBLE; - n = input->variable->find(argi.get_name()); - if (n < 0) error->all(FLERR,"Could not find dump vtk variable name"); + n = input->variable->find(aname); + if (n < 0) error->all(FLERR,"Could not find dump vtk variable name {}",aname); if (input->variable->atomstyle(n) == 0) - error->all(FLERR,"Dump vtk variable is not atom-style variable"); + error->all(FLERR,"Dump vtk variable {} is not atom-style variable",aname); - field2index[ATTRIBUTES+i] = add_variable(argi.get_name()); + field2index[ATTRIBUTES+i] = add_variable(aname); name[ATTRIBUTES+i] = arg[iarg]; break; - // custom per-atom integer vector = i_ID - - case ArgInfo::INAME: - pack_choice[ATTRIBUTES+i] = &DumpVTK::pack_custom; - vtype[ATTRIBUTES+i] = Dump::INT; - - tmp = -1; - n = atom->find_custom(argi.get_name(),tmp); - if (n < 0) - error->all(FLERR,"Could not find custom per-atom property ID"); - - if (tmp != 0) - error->all(FLERR,"Custom per-atom property ID is not integer"); - - field2index[ATTRIBUTES+i] = add_custom(argi.get_name(),0); - name[ATTRIBUTES+i] = arg[iarg]; - break; - - // custom per-atom floating point vector = d_ID + // custom per-atom floating point vector or array = d_ID d2_ID case ArgInfo::DNAME: pack_choice[ATTRIBUTES+i] = &DumpVTK::pack_custom; vtype[ATTRIBUTES+i] = Dump::DOUBLE; - tmp = -1; - n = atom->find_custom(argi.get_name(),tmp); + n = atom->find_custom(aname,flag,cols); + if (n < 0) - error->all(FLERR,"Could not find custom per-atom property ID"); - - if (tmp != 1) - error->all(FLERR,"Custom per-atom property ID is not floating point"); - - field2index[ATTRIBUTES+i] = add_custom(argi.get_name(),1); + error->all(FLERR,"Could not find custom per-atom property ID: {}", aname); + if (argindex[ATTRIBUTES+i] == 0) { + if (!flag || cols) + error->all(FLERR,"Property double vector {} for dump vtk does not exist",aname); + } else { + if (!flag || !cols) + error->all(FLERR,"Property double array {} for dump vtk does not exist",aname); + if (argindex[ATTRIBUTES+i] > atom->dcols[n]) + error->all(FLERR,"Dump vtk property array {} is accessed out-of-range",aname); + } + field2index[ATTRIBUTES+i] = add_custom(aname,1); name[ATTRIBUTES+i] = arg[iarg]; break; - // NEWSTYLE - // custom per-atom integer array = i2_ID + // custom per-atom integer vector or array = i_ID or i2_ID - case ArgInfo::IARRAY: - return iarg; + case ArgInfo::INAME: + pack_choice[ATTRIBUTES+i] = &DumpVTK::pack_custom; + vtype[ATTRIBUTES+i] = Dump::INT; - // custom per-atom floating point array = d2_ID + n = atom->find_custom(aname,flag,cols); - case ArgInfo::DARRAY: - return iarg; + if (n < 0) + error->all(FLERR,"Could not find custom per-atom property ID: {}", aname); + if (argindex[ATTRIBUTES+i] == 0) { + if (flag || cols) + error->all(FLERR,"Property integer vector {} for dump vtk does not exist",aname); + } else { + if (flag || !cols) + error->all(FLERR,"Property integer array {} for dump vtk does not exist",aname); + if (argindex[ATTRIBUTES+i] > atom->icols[n]) + error->all(FLERR,"Dump vtk property array {} is accessed out-of-range",aname); + } + field2index[ATTRIBUTES+i] = add_custom(aname,0); + name[ATTRIBUTES+i] = arg[iarg]; + break; + + // no match default: return iarg; @@ -1948,12 +1999,10 @@ int DumpVTK::add_compute(const char *id) id_compute = (char **) memory->srealloc(id_compute,(ncompute+1)*sizeof(char *),"dump:id_compute"); - delete [] compute; + delete[] compute; compute = new Compute*[ncompute+1]; - int n = strlen(id) + 1; - id_compute[ncompute] = new char[n]; - strcpy(id_compute[ncompute],id); + id_compute[ncompute] = utils::strdup(id); ncompute++; return ncompute-1; } @@ -1973,12 +2022,10 @@ int DumpVTK::add_fix(const char *id) id_fix = (char **) memory->srealloc(id_fix,(nfix+1)*sizeof(char *),"dump:id_fix"); - delete [] fix; + delete[] fix; fix = new Fix*[nfix+1]; - int n = strlen(id) + 1; - id_fix[nfix] = new char[n]; - strcpy(id_fix[nfix],id); + id_fix[nfix] = utils::strdup(id); nfix++; return nfix-1; } @@ -1999,22 +2046,20 @@ int DumpVTK::add_variable(const char *id) id_variable = (char **) memory->srealloc(id_variable,(nvariable+1)*sizeof(char *), "dump:id_variable"); - delete [] variable; + delete[] variable; variable = new int[nvariable+1]; - delete [] vbuf; + delete[] vbuf; vbuf = new double*[nvariable+1]; for (int i = 0; i <= nvariable; i++) vbuf[i] = nullptr; - int n = strlen(id) + 1; - id_variable[nvariable] = new char[n]; - strcpy(id_variable[nvariable],id); + id_variable[nvariable] = utils::strdup(id); nvariable++; return nvariable-1; } /* ---------------------------------------------------------------------- add custom atom property to list used by dump - return index of where this property is in list + return index of where this property is in Atom class custom lists if already in list, do not add, just return index, else add to list ------------------------------------------------------------------------- */ @@ -2022,21 +2067,17 @@ int DumpVTK::add_custom(const char *id, int flag) { int icustom; for (icustom = 0; icustom < ncustom; icustom++) - if ((strcmp(id,id_custom[icustom]) == 0) - && (flag == flag_custom[icustom])) break; + if (strcmp(id,id_custom[icustom]) == 0) break; if (icustom < ncustom) return icustom; - id_custom = (char **) - memory->srealloc(id_custom,(ncustom+1)*sizeof(char *),"dump:id_custom"); - flag_custom = (int *) - memory->srealloc(flag_custom,(ncustom+1)*sizeof(int),"dump:flag_custom"); - - int n = strlen(id) + 1; - id_custom[ncustom] = new char[n]; - strcpy(id_custom[ncustom],id); - flag_custom[ncustom] = flag; + id_custom = (char **) memory->srealloc(id_custom,(ncustom+1)*sizeof(char *),"dump:id_custom"); + custom = (int *) memory->srealloc(custom,(ncustom+1)*sizeof(int),"dump:custom"); + custom_flag = (int *) memory->srealloc(custom_flag,(ncustom+1)*sizeof(int),"dump:custom_flag"); + id_custom[ncustom] = utils::strdup(id); + custom_flag[ncustom] = flag; ncustom++; + return ncustom-1; } @@ -2050,21 +2091,17 @@ int DumpVTK::modify_param(int narg, char **arg) else { iregion = domain->find_region(arg[1]); if (iregion == -1) - error->all(FLERR,"Dump_modify region ID does not exist"); - delete [] idregion; - int n = strlen(arg[1]) + 1; - idregion = new char[n]; - strcpy(idregion,arg[1]); + error->all(FLERR,"Dump_modify region ID {} does not exist",arg[1]); + delete[] idregion; + idregion = utils::strdup(arg[1]); } return 2; } if (strcmp(arg[0],"label") == 0) { if (narg < 2) error->all(FLERR,"Illegal dump_modify command [label]"); - delete [] label; - int n = strlen(arg[1]) + 1; - label = new char[n]; - strcpy(label,arg[1]); + delete[] label; + label = utils::strdup(arg[1]); return 2; } @@ -2076,23 +2113,29 @@ int DumpVTK::modify_param(int narg, char **arg) if (strcmp(arg[0],"element") == 0) { if (narg < ntypes+1) - error->all(FLERR,"Dump modify: number of element names do not match atom types"); - - if (typenames) { - for (int i = 1; i <= ntypes; i++) delete [] typenames[i]; - delete [] typenames; - typenames = nullptr; - } + error->all(FLERR,"Number of dump_modify element names does not match number of atom types"); + for (int i = 1; i <= ntypes; i++) delete[] typenames[i]; + delete[] typenames; typenames = new char*[ntypes+1]; for (int itype = 1; itype <= ntypes; itype++) { - int n = strlen(arg[itype]) + 1; - typenames[itype] = new char[n]; - strcpy(typenames[itype],arg[itype]); + typenames[itype] = utils::strdup(arg[itype]); } return ntypes+1; } + if (strcmp(arg[0],"refresh") == 0) { + if (narg < 2) error->all(FLERR,"Illegal dump_modify command"); + ArgInfo argi(arg[1],ArgInfo::COMPUTE); + if ((argi.get_type() != ArgInfo::COMPUTE) || (argi.get_dim() != 0)) + error->all(FLERR,"Illegal dump_modify command"); + if (refreshflag) error->all(FLERR,"Dump_modify can only have one refresh"); + + refreshflag = 1; + refresh = argi.copy_name(); + return 2; + } + if (strcmp(arg[0],"thresh") == 0) { if (narg < 2) error->all(FLERR,"Illegal dump_modify command"); if (strcmp(arg[1],"none") == 0) { @@ -2103,8 +2146,16 @@ int DumpVTK::modify_param(int narg, char **arg) thresh_array = nullptr; thresh_op = nullptr; thresh_value = nullptr; + thresh_last = nullptr; + for (int i = 0; i < nthreshlast; i++) { + modify->delete_fix(thresh_fixID[i]); + delete[] thresh_fixID[i]; + } + thresh_fix = nullptr; + thresh_fixID = nullptr; + thresh_first = nullptr; } - nthresh = 0; + nthresh = nthreshlast = 0; return 2; } @@ -2115,6 +2166,7 @@ int DumpVTK::modify_param(int narg, char **arg) memory->grow(thresh_array,nthresh+1,"dump:thresh_array"); memory->grow(thresh_op,(nthresh+1),"dump:thresh_op"); memory->grow(thresh_value,(nthresh+1),"dump:thresh_value"); + memory->grow(thresh_last,(nthresh+1),"dump:thresh_last"); // set attribute type of threshold // customize by adding to if statement @@ -2197,98 +2249,125 @@ int DumpVTK::modify_param(int narg, char **arg) else if (strcmp(arg[1],"tqy") == 0) thresh_array[nthresh] = TQY; else if (strcmp(arg[1],"tqz") == 0) thresh_array[nthresh] = TQZ; - // compute value = c_ID - // if no trailing [], then arg is set to 0, else arg is between [] + // compute or fix or variable or custom vector/array - else if (strncmp(arg[1],"c_",2) == 0) { - thresh_array[nthresh] = COMPUTE; - int n = strlen(arg[1]); - char *suffix = new char[n]; - strcpy(suffix,&arg[1][2]); + else { + int n,flag,cols; + ArgInfo argi(arg[1],ArgInfo::COMPUTE|ArgInfo::FIX|ArgInfo::VARIABLE + |ArgInfo::DNAME|ArgInfo::INAME); + argindex[ATTRIBUTES+nfield+nthresh] = argi.get_index1(); + auto aname = argi.get_name(); - char *ptr = strchr(suffix,'['); - if (ptr) { - if (suffix[strlen(suffix)-1] != ']') - error->all(FLERR,"Invalid attribute in dump modify command"); - argindex[ATTRIBUTES+nfield+nthresh] = atoi(ptr+1); - *ptr = '\0'; - } else argindex[ATTRIBUTES+nfield+nthresh] = 0; + switch (argi.get_type()) { - n = modify->find_compute(suffix); - if (n < 0) error->all(FLERR,"Could not find dump modify compute ID"); + case ArgInfo::UNKNOWN: + error->all(FLERR,"Invalid attribute in dump modify command"); + break; - if (modify->compute[n]->peratom_flag == 0) - error->all(FLERR, - "Dump modify compute ID does not compute per-atom info"); - if (argindex[ATTRIBUTES+nfield+nthresh] == 0 && - modify->compute[n]->size_peratom_cols > 0) - error->all(FLERR, - "Dump modify compute ID does not compute per-atom vector"); - if (argindex[ATTRIBUTES+nfield+nthresh] > 0 && - modify->compute[n]->size_peratom_cols == 0) - error->all(FLERR, - "Dump modify compute ID does not compute per-atom array"); - if (argindex[ATTRIBUTES+nfield+nthresh] > 0 && - argindex[ATTRIBUTES+nfield+nthresh] > modify->compute[n]->size_peratom_cols) - error->all(FLERR,"Dump modify compute ID vector is not large enough"); + // compute value = c_ID + // if no trailing [], then arg is set to 0, else arg is between [] - field2index[ATTRIBUTES+nfield+nthresh] = add_compute(suffix); - delete [] suffix; + case ArgInfo::COMPUTE: + thresh_array[nthresh] = COMPUTE; + n = modify->find_compute(aname); + if (n < 0) error->all(FLERR,"Could not find dump modify compute ID: {}",aname); - // fix value = f_ID - // if no trailing [], then arg is set to 0, else arg is between [] + if (modify->compute[n]->peratom_flag == 0) + error->all(FLERR,"Dump modify compute ID {} does not compute per-atom info",aname); + if (argi.get_dim() == 0 && modify->compute[n]->size_peratom_cols > 0) + error->all(FLERR,"Dump modify compute ID {} does not compute per-atom vector",aname); + if (argi.get_index1() > 0 && modify->compute[n]->size_peratom_cols == 0) + error->all(FLERR,"Dump modify compute ID {} does not compute per-atom array",aname); + if (argi.get_index1() > 0 && + argi.get_index1() > modify->compute[n]->size_peratom_cols) + error->all(FLERR,"Dump modify compute ID {} vector is not large enough",aname); - } else if (strncmp(arg[1],"f_",2) == 0) { - thresh_array[nthresh] = FIX; - int n = strlen(arg[1]); - char *suffix = new char[n]; - strcpy(suffix,&arg[1][2]); + field2index[ATTRIBUTES+nfield+nthresh] = add_compute(aname); + break; - char *ptr = strchr(suffix,'['); - if (ptr) { - if (suffix[strlen(suffix)-1] != ']') - error->all(FLERR,"Invalid attribute in dump modify command"); - argindex[ATTRIBUTES+nfield+nthresh] = atoi(ptr+1); - *ptr = '\0'; - } else argindex[ATTRIBUTES+nfield+nthresh] = 0; + // fix value = f_ID + // if no trailing [], then arg is set to 0, else arg is between [] - n = modify->find_fix(suffix); - if (n < 0) error->all(FLERR,"Could not find dump modify fix ID"); + case ArgInfo::FIX: + thresh_array[nthresh] = FIX; + n = modify->find_fix(aname); + if (n < 0) error->all(FLERR,"Could not find dump modify fix ID: {}",aname); - if (modify->fix[n]->peratom_flag == 0) - error->all(FLERR,"Dump modify fix ID does not compute per-atom info"); - if (argindex[ATTRIBUTES+nfield+nthresh] == 0 && - modify->fix[n]->size_peratom_cols > 0) - error->all(FLERR,"Dump modify fix ID does not compute per-atom vector"); - if (argindex[ATTRIBUTES+nfield+nthresh] > 0 && - modify->fix[n]->size_peratom_cols == 0) - error->all(FLERR,"Dump modify fix ID does not compute per-atom array"); - if (argindex[ATTRIBUTES+nfield+nthresh] > 0 && - argindex[ATTRIBUTES+nfield+nthresh] > modify->fix[n]->size_peratom_cols) - error->all(FLERR,"Dump modify fix ID vector is not large enough"); + if (modify->fix[n]->peratom_flag == 0) + error->all(FLERR,"Dump modify fix ID {} does not compute per-atom info",aname); + if (argi.get_dim() == 0 && modify->fix[n]->size_peratom_cols > 0) + error->all(FLERR,"Dump modify fix ID {} does not compute per-atom vector",aname); + if (argi.get_index1() > 0 && modify->fix[n]->size_peratom_cols == 0) + error->all(FLERR,"Dump modify fix ID {} does not compute per-atom array",aname); + if (argi.get_index1() > 0 && argi.get_index1() > modify->fix[n]->size_peratom_cols) + error->all(FLERR,"Dump modify fix ID {} vector is not large enough",aname); - field2index[ATTRIBUTES+nfield+nthresh] = add_fix(suffix); - delete [] suffix; + field2index[ATTRIBUTES+nfield+nthresh] = add_fix(aname); + break; - // variable value = v_ID + // variable value = v_ID - } else if (strncmp(arg[1],"v_",2) == 0) { - thresh_array[nthresh] = VARIABLE; - int n = strlen(arg[1]); - char *suffix = new char[n]; - strcpy(suffix,&arg[1][2]); + case ArgInfo::VARIABLE: + thresh_array[nthresh] = VARIABLE; + n = input->variable->find(aname); + if (n < 0) error->all(FLERR,"Could not find dump modify variable name: {}",aname); + if (input->variable->atomstyle(n) == 0) + error->all(FLERR,"Dump modify variable {} is not atom-style variable",aname); - argindex[ATTRIBUTES+nfield+nthresh] = 0; + field2index[ATTRIBUTES+nfield+nthresh] = add_variable(aname); + break; - n = input->variable->find(suffix); - if (n < 0) error->all(FLERR,"Could not find dump modify variable name"); - if (input->variable->atomstyle(n) == 0) - error->all(FLERR,"Dump modify variable is not atom-style variable"); + // custom per atom floating point vector or array - field2index[ATTRIBUTES+nfield+nthresh] = add_variable(suffix); - delete [] suffix; + case ArgInfo::DNAME: + n = atom->find_custom(aname,flag,cols); - } else error->all(FLERR,"Invalid dump_modify threshold operator"); + if (n < 0) + error->all(FLERR,"Could not find custom per-atom property ID: {}", aname); + if (argindex[ATTRIBUTES+nfield+nthresh] == 0) { + if (!flag || cols) + error->all(FLERR,"Property double vector for dump custom does not exist"); + thresh_array[nthresh] = DVEC; + } else { + if (!flag || !cols) + error->all(FLERR,"Property double array for dump custom does not exist"); + if (argindex[ATTRIBUTES+nfield+nthresh] > atom->dcols[n]) + error->all(FLERR,"Dump custom property array is accessed out-of-range"); + thresh_array[nthresh] = DARRAY; + } + + field2index[ATTRIBUTES+nfield+nthresh] = add_custom(aname,thresh_array[nthresh]); + break; + + // custom per atom integer vector or array + + case ArgInfo::INAME: + n = atom->find_custom(aname,flag,cols); + + if (n < 0) + error->all(FLERR,"Could not find custom per-atom property ID: {}", aname); + if (argindex[ATTRIBUTES+nfield+nthresh] == 0) { + if (flag || cols) + error->all(FLERR,"Property integer vector for dump custom does not exist"); + thresh_array[nthresh] = IVEC; + } else { + if (flag || !cols) + error->all(FLERR,"Property integer array for dump custom does not exist"); + if (argindex[ATTRIBUTES+nfield+nthresh] > atom->icols[n]) + error->all(FLERR,"Dump custom property array is accessed out-of-range"); + thresh_array[nthresh] = IARRAY; + } + + field2index[ATTRIBUTES+nfield+nthresh] = add_custom(aname,thresh_array[nthresh]); + break; + + // no match + + default: + error->all(FLERR,"Invalid dump_modify thresh attribute: {}",aname); + break; + } + } // set operation type of threshold @@ -2298,11 +2377,32 @@ int DumpVTK::modify_param(int narg, char **arg) else if (strcmp(arg[2],">=") == 0) thresh_op[nthresh] = GE; else if (strcmp(arg[2],"==") == 0) thresh_op[nthresh] = EQ; else if (strcmp(arg[2],"!=") == 0) thresh_op[nthresh] = NEQ; - else error->all(FLERR,"Invalid dump_modify threshold operator"); + else if (strcmp(arg[2],"|^") == 0) thresh_op[nthresh] = XOR; + else error->all(FLERR,"Invalid dump_modify thresh operator"); - // set threshold value + // set threshold value as number or special LAST keyword + // create FixStore to hold LAST values, should work with restart + // id = dump-ID + nthreshlast + DUMP_STORE, fix group = dump group - thresh_value[nthresh] = utils::numeric(FLERR,arg[3],false,lmp); + if (strcmp(arg[3],"LAST") != 0) { + thresh_value[nthresh] = utils::numeric(FLERR,arg[3],false,lmp); + thresh_last[nthresh] = -1; + } else { + thresh_fix = (FixStore **) + memory->srealloc(thresh_fix,(nthreshlast+1)*sizeof(FixStore *),"dump:thresh_fix"); + thresh_fixID = (char **) + memory->srealloc(thresh_fixID,(nthreshlast+1)*sizeof(char *),"dump:thresh_fixID"); + memory->grow(thresh_first,(nthreshlast+1),"dump:thresh_first"); + + std::string threshid = fmt::format("{}{}_DUMP_STORE",id,nthreshlast); + thresh_fixID[nthreshlast] = utils::strdup(threshid); + threshid += fmt::format(" {} STORE peratom 1 1", group->names[igroup]); + thresh_fix[nthreshlast] = (FixStore *) modify->add_fix(threshid); + + thresh_last[nthreshlast] = nthreshlast; + thresh_first[nthreshlast] = 1; + nthreshlast++; + } nthresh++; return 4; @@ -2387,25 +2487,35 @@ void DumpVTK::pack_variable(int n) void DumpVTK::pack_custom(int n) { - int index = field2index[n]; - - if (flag_custom[index] == 0) { // integer - int iwhich,tmp; - iwhich = atom->find_custom(id_custom[index],tmp); + int flag = custom_flag[field2index[current_pack_choice_key]]; + int iwhich = custom[field2index[current_pack_choice_key]]; + int index = argindex[current_pack_choice_key]; + if (flag == IVEC) { int *ivector = atom->ivector[iwhich]; for (int i = 0; i < nchoose; i++) { buf[n] = ivector[clist[i]]; n += size_one; } - } else if (flag_custom[index] == 1) { // double - int iwhich,tmp; - iwhich = atom->find_custom(id_custom[index],tmp); - + } else if (flag == DVEC) { double *dvector = atom->dvector[iwhich]; for (int i = 0; i < nchoose; i++) { buf[n] = dvector[clist[i]]; n += size_one; } + } else if (flag == IARRAY) { + index--; + int **iarray = atom->iarray[iwhich]; + for (int i = 0; i < nchoose; i++) { + buf[n] = iarray[clist[i]][index]; + n += size_one; + } + } else if (flag == DARRAY) { + index--; + double **darray = atom->darray[iwhich]; + for (int i = 0; i < nchoose; i++) { + buf[n] = darray[clist[i]][index]; + n += size_one; + } } } From 26b368848b2ca09a6a0040985f92d32a2242595e Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sun, 17 Oct 2021 18:05:29 -0400 Subject: [PATCH 211/372] Add support for an "Update #" appendix to the version string This is for informative output only, so that any code depending on the LAMMPS_VERSION define will not have to be changed and no warnings will be printed etc. --- src/lammps.cpp | 12 +++++++++--- unittest/CMakeLists.txt | 2 +- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/src/lammps.cpp b/src/lammps.cpp index 8541011814..f186615424 100644 --- a/src/lammps.cpp +++ b/src/lammps.cpp @@ -59,6 +59,12 @@ #include "lmpinstalledpkgs.h" #include "lmpgitversion.h" +#if defined(LAMMPS_UPDATE) +#define UPDATE_STRING " - " LAMMPS_UPDATE +#else +#define UPDATE_STRING "" +#endif + static void print_style(FILE *fp, const char *str, int &pos); struct LAMMPS_NS::package_styles_lists { @@ -509,7 +515,7 @@ LAMMPS::LAMMPS(int narg, char **arg, MPI_Comm communicator) : } if ((universe->me == 0) && !helpflag) - utils::logmesg(this,fmt::format("LAMMPS ({})\n",version)); + utils::logmesg(this,fmt::format("LAMMPS ({}{})\n",version,UPDATE_STRING)); // universe is one or more worlds, as setup by partition switch // split universe communicator into separate world communicators @@ -1137,10 +1143,10 @@ void _noopt LAMMPS::help() if (has_git_info) { fprintf(fp,"\nLarge-scale Atomic/Molecular Massively Parallel Simulator - " - LAMMPS_VERSION "\nGit info (%s / %s)\n\n",git_branch, git_descriptor); + LAMMPS_VERSION UPDATE_STRING "\nGit info (%s / %s)\n\n",git_branch, git_descriptor); } else { fprintf(fp,"\nLarge-scale Atomic/Molecular Massively Parallel Simulator - " - LAMMPS_VERSION "\n\n"); + LAMMPS_VERSION UPDATE_STRING "\n\n"); } fprintf(fp, "Usage example: %s -var t 300 -echo screen -in in.alloy\n\n" diff --git a/unittest/CMakeLists.txt b/unittest/CMakeLists.txt index 2491c26796..46f1865989 100644 --- a/unittest/CMakeLists.txt +++ b/unittest/CMakeLists.txt @@ -8,7 +8,7 @@ add_test(NAME RunLammps WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}) set_tests_properties(RunLammps PROPERTIES ENVIRONMENT "TSAN_OPTIONS=ignore_noninstrumented_modules=1;HWLOC_HIDE_ERRORS=1" - PASS_REGULAR_EXPRESSION "^LAMMPS \\([0-9]+ [A-Za-z]+ 2[0-9][0-9][0-9]\\)") + PASS_REGULAR_EXPRESSION "LAMMPS \\([0-9]+ [A-Za-z]+ 2[0-9][0-9][0-9]( - Update [0-9]+)?\\)") # check if the compiled executable will print the help message add_test(NAME HelpMessage From f6fb392c4dc6e5ce2c928a05578e67539e6242f1 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sun, 17 Oct 2021 19:07:45 -0400 Subject: [PATCH 212/372] convert some more styles to use the new APIs --- src/KOKKOS/pair_reaxff_kokkos.cpp | 24 +++++++++--------------- src/MISC/pair_tracker.cpp | 7 ++++--- src/OPENMP/pair_reaxff_omp.cpp | 18 ++++++++++-------- src/PLUGIN/plugin.cpp | 16 ++++++++++------ src/REAXFF/pair_reaxff.cpp | 31 +++++++++++++------------------ 5 files changed, 46 insertions(+), 50 deletions(-) diff --git a/src/KOKKOS/pair_reaxff_kokkos.cpp b/src/KOKKOS/pair_reaxff_kokkos.cpp index 43a650efb2..8d9c498005 100644 --- a/src/KOKKOS/pair_reaxff_kokkos.cpp +++ b/src/KOKKOS/pair_reaxff_kokkos.cpp @@ -144,18 +144,15 @@ void PairReaxFFKokkos::init_style() acks2_flag = api->system->acks2_flag; if (acks2_flag) { - int ifix = modify->find_fix_by_style("^acks2/reax"); - Fix* fix = modify->fix[ifix]; - if (!fix->kokkosable) + auto ifix = modify->get_fix_by_style("^acks2/reax").front(); + if (!ifix->kokkosable) error->all(FLERR,"Must use Kokkos version of acks2/reaxff with pair reaxff/kk"); - if (fix->execution_space == Host) { - FixACKS2ReaxFFKokkos* acks2_fix = (FixACKS2ReaxFFKokkos*) modify->fix[ifix]; - auto k_s = acks2_fix->get_s(); + if (ifix->execution_space == Host) { + auto k_s = ((FixACKS2ReaxFFKokkos*) ifix)->get_s(); k_s.sync(); d_s = k_s.view(); } else { - FixACKS2ReaxFFKokkos* acks2_fix = (FixACKS2ReaxFFKokkos*) modify->fix[ifix]; - auto k_s = acks2_fix->get_s(); + auto k_s = ((FixACKS2ReaxFFKokkos*) ifix)->get_s(); k_s.sync(); d_s = k_s.view(); } @@ -726,16 +723,13 @@ void PairReaxFFKokkos::compute(int eflag_in, int vflag_in) d_ilist = k_list->d_ilist; if (acks2_flag) { - int ifix = modify->find_fix_by_style("^acks2/reax"); - Fix* fix = modify->fix[ifix]; - if (fix->execution_space == Host) { - FixACKS2ReaxFFKokkos* acks2_fix = (FixACKS2ReaxFFKokkos*) modify->fix[ifix]; - auto k_s = acks2_fix->get_s(); + auto ifix = modify->get_fix_by_style("^acks2/reax").front(); + if (ifix->execution_space == Host) { + auto k_s = ((FixACKS2ReaxFFKokkos*) ifix)->get_s(); k_s.sync(); d_s = k_s.view(); } else { - FixACKS2ReaxFFKokkos* acks2_fix = (FixACKS2ReaxFFKokkos*) modify->fix[ifix]; - auto k_s = acks2_fix->get_s(); + auto k_s = ((FixACKS2ReaxFFKokkos*) ifix)->get_s(); k_s.sync(); d_s = k_s.view(); } diff --git a/src/MISC/pair_tracker.cpp b/src/MISC/pair_tracker.cpp index 0e55cf367d..43e65d6af7 100644 --- a/src/MISC/pair_tracker.cpp +++ b/src/MISC/pair_tracker.cpp @@ -346,9 +346,10 @@ void PairTracker::init_style() if (ifix < 0) error->all(FLERR, "Could not find pair fix neigh history ID"); fix_history = (FixNeighHistory *) modify->fix[ifix]; - ifix = modify->find_fix_by_style("pair/tracker"); - if (ifix < 0) error->all(FLERR, "Cannot use pair tracker without fix pair/tracker"); - fix_pair_tracker = (FixPairTracker *) modify->fix[ifix]; + auto trackfixes = modify->get_fix_by_style("pair/tracker"); + if (trackfixes.size() != 1) + error->all(FLERR, "Must use exactly one fix pair/tracker command with pair style tracker"); + fix_pair_tracker = (FixPairTracker *) trackfixes.front(); } /* ---------------------------------------------------------------------- diff --git a/src/OPENMP/pair_reaxff_omp.cpp b/src/OPENMP/pair_reaxff_omp.cpp index d39672f09b..454f56c55f 100644 --- a/src/OPENMP/pair_reaxff_omp.cpp +++ b/src/OPENMP/pair_reaxff_omp.cpp @@ -101,15 +101,17 @@ PairReaxFFOMP::~PairReaxFFOMP() void PairReaxFFOMP::init_style() { - bool have_qeq = ((modify->find_fix_by_style("^qeq/reax") != -1) - || (modify->find_fix_by_style("^qeq/shielded") != -1) - || (modify->find_fix_by_style("^acks2/reax") != -1)); - if (!have_qeq && qeqflag == 1) - error->all(FLERR,"Pair reaxff/omp requires use of fix qeq/reaxff or qeq/shielded" - " or fix acks2/reaxff"); + if (!atom->q_flag) error->all(FLERR,"Pair style reaxff/omp requires atom attribute q"); - int have_acks2 = (modify->find_fix_by_style("^acks2/reax") != -1); - api->system->acks2_flag = have_acks2; + auto acks2_fixes = modify->get_fix_by_style("^acks2/reax"); + int have_qeq = modify->get_fix_by_style("^qeq/reax").size() + + modify->get_fix_by_style("^qeq/shielded").size() + acks2_fixes.size(); + + if (qeqflag && (have_qeq != 1)) + error->all(FLERR,"Pair style reaxff/omp requires use of exactly one of the " + "fix qeq/reaxff or fix qeq/shielded or fix acks2/reaxff commands"); + + api->system->acks2_flag = acks2_fixes.size(); if (api->system->acks2_flag) error->all(FLERR,"Cannot (yet) use ACKS2 with OPENMP ReaxFF"); diff --git a/src/PLUGIN/plugin.cpp b/src/PLUGIN/plugin.cpp index 443fecc99f..7a47903946 100644 --- a/src/PLUGIN/plugin.cpp +++ b/src/PLUGIN/plugin.cpp @@ -15,8 +15,10 @@ #include "plugin.h" #include "comm.h" +#include "compute.h" #include "domain.h" #include "error.h" +#include "fix.h" #include "input.h" #include "force.h" #include "modify.h" @@ -365,9 +367,10 @@ namespace LAMMPS_NS auto found = compute_map->find(name); if (found != compute_map->end()) compute_map->erase(name); - for (int icompute = lmp->modify->find_compute_by_style(name); - icompute >= 0; icompute = lmp->modify->find_compute_by_style(name)) - lmp->modify->delete_compute(icompute); + // must delete all compute instances using this compute style + + for (auto icompute : lmp->modify->get_compute_by_style(name)) + lmp->modify->delete_compute(icompute->id); } else if (pstyle == "fix") { @@ -375,9 +378,10 @@ namespace LAMMPS_NS auto found = fix_map->find(name); if (found != fix_map->end()) fix_map->erase(name); - for (int ifix = lmp->modify->find_fix_by_style(name); - ifix >= 0; ifix = lmp->modify->find_fix_by_style(name)) - lmp->modify->delete_fix(ifix); + // must delete all fix instances using this fix style + + for (auto ifix : lmp->modify->get_fix_by_style(name)) + lmp->modify->delete_fix(ifix->id); } else if (pstyle == "region") { diff --git a/src/REAXFF/pair_reaxff.cpp b/src/REAXFF/pair_reaxff.cpp index 1c6665b604..9a3bdf2f79 100644 --- a/src/REAXFF/pair_reaxff.cpp +++ b/src/REAXFF/pair_reaxff.cpp @@ -332,23 +332,19 @@ void PairReaxFF::coeff(int nargs, char **args) void PairReaxFF::init_style() { - if (!atom->q_flag) - error->all(FLERR,"Pair style reaxff requires atom attribute q"); + if (!atom->q_flag) error->all(FLERR,"Pair style reaxff requires atom attribute q"); - bool have_qeq = ((modify->find_fix_by_style("^qeq/reax") != -1) - || (modify->find_fix_by_style("^qeq/shielded") != -1) - || (modify->find_fix_by_style("^acks2/reax") != -1)); - if (!have_qeq && qeqflag == 1) - error->all(FLERR,"Pair reax/c requires use of fix qeq/reax or qeq/shielded" - " or fix acks2/reax"); + auto acks2_fixes = modify->get_fix_by_style("^acks2/reax"); + int have_qeq = modify->get_fix_by_style("^qeq/reax").size() + + modify->get_fix_by_style("^qeq/shielded").size() + acks2_fixes.size(); - int have_acks2 = (modify->find_fix_by_style("^acks2/reax") != -1); - api->system->acks2_flag = have_acks2; - if (api->system->acks2_flag) { - int ifix = modify->find_fix_by_style("^acks2/reax"); - FixACKS2ReaxFF* acks2_fix = (FixACKS2ReaxFF*) modify->fix[ifix]; - api->workspace->s = acks2_fix->get_s(); - } + if (qeqflag && (have_qeq != 1)) + error->all(FLERR,"Pair style reaxff requires use of exactly one of the " + "fix qeq/reaxff or fix qeq/shielded or fix acks2/reaxff commands"); + + api->system->acks2_flag = acks2_fixes.size(); + if (api->system->acks2_flag) + api->workspace->s = ((FixACKS2ReaxFF *)acks2_fixes.front())->get_s(); api->system->n = atom->nlocal; // my atoms api->system->N = atom->nlocal + atom->nghost; // mine + ghosts @@ -476,9 +472,8 @@ void PairReaxFF::compute(int eflag, int vflag) api->system->bigN = static_cast (atom->natoms); // all atoms in the system if (api->system->acks2_flag) { - int ifix = modify->find_fix_by_style("^acks2/reax"); - FixACKS2ReaxFF* acks2_fix = (FixACKS2ReaxFF*) modify->fix[ifix]; - api->workspace->s = acks2_fix->get_s(); + auto ifix = modify->get_fix_by_style("^acks2/reax").front(); + api->workspace->s = ((FixACKS2ReaxFF*) ifix)->get_s(); } // setup data structures From 11a4920b30e121fb81dee3817459814a0a476165 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Mon, 18 Oct 2021 06:35:29 -0400 Subject: [PATCH 213/372] refactor PERI package pair styles to use new accessors and to increase code sharing --- src/.gitignore | 2 + src/OPENMP/pair_peri_lps_omp.cpp | 99 +------- src/OPENMP/pair_peri_lps_omp.h | 3 - src/OPENMP/pair_peri_pmb_omp.cpp | 6 +- src/PERI/compute_damage_atom.cpp | 30 +-- src/PERI/compute_damage_atom.h | 2 +- src/PERI/compute_dilatation_atom.cpp | 35 +-- src/PERI/compute_dilatation_atom.h | 6 - src/PERI/compute_plasticity_atom.cpp | 27 ++- src/PERI/compute_plasticity_atom.h | 2 +- src/PERI/fix_peri_neigh.cpp | 5 +- src/PERI/fix_peri_neigh.h | 1 + src/PERI/pair_peri.cpp | 261 +++++++++++++++++++++ src/PERI/pair_peri.h | 58 +++++ src/PERI/pair_peri_eps.cpp | 330 +++------------------------ src/PERI/pair_peri_eps.h | 33 +-- src/PERI/pair_peri_lps.cpp | 258 +-------------------- src/PERI/pair_peri_lps.h | 35 +-- src/PERI/pair_peri_pmb.cpp | 120 +--------- src/PERI/pair_peri_pmb.h | 23 +- src/PERI/pair_peri_ves.cpp | 277 +--------------------- src/PERI/pair_peri_ves.h | 35 +-- 22 files changed, 450 insertions(+), 1198 deletions(-) create mode 100644 src/PERI/pair_peri.cpp create mode 100644 src/PERI/pair_peri.h diff --git a/src/.gitignore b/src/.gitignore index 7da6b7feb7..5c6d732a69 100644 --- a/src/.gitignore +++ b/src/.gitignore @@ -1174,6 +1174,8 @@ /pair_oxrna2_*.cpp /pair_oxrna2_*.h /mf_oxdna.h +/pair_peri.cpp +/pair_peri.h /pair_peri_eps.cpp /pair_peri_eps.h /pair_peri_lps.cpp diff --git a/src/OPENMP/pair_peri_lps_omp.cpp b/src/OPENMP/pair_peri_lps_omp.cpp index b88794e274..0eefe8d55c 100644 --- a/src/OPENMP/pair_peri_lps_omp.cpp +++ b/src/OPENMP/pair_peri_lps_omp.cpp @@ -113,10 +113,10 @@ void PairPeriLPSOMP::eval(int iifrom, int iito, ThrData * const thr) double *vfrac = atom->vfrac; double *s0 = atom->s0; double **x0 = atom->x0; - double **r0 = ((FixPeriNeigh *) modify->fix[ifix_peri])->r0; - tagint **partner = ((FixPeriNeigh *) modify->fix[ifix_peri])->partner; - int *npartner = ((FixPeriNeigh *) modify->fix[ifix_peri])->npartner; - double *wvolume = ((FixPeriNeigh *) modify->fix[ifix_peri])->wvolume; + double **r0 = fix_peri_neigh->r0; + tagint **partner = fix_peri_neigh->partner; + int *npartner = fix_peri_neigh->npartner; + double *wvolume = fix_peri_neigh->wvolume; // lc = lattice constant // init_style guarantees it's the same in x, y, and z @@ -225,7 +225,7 @@ void PairPeriLPSOMP::eval(int iifrom, int iito, ThrData * const thr) // Compute the dilatation on each particle if (iifrom < nlocal) - compute_dilatation_thr(iifrom, iito); + compute_dilatation(iifrom, iito); // wait until all threads are done before communication sync_threads(); @@ -237,7 +237,7 @@ void PairPeriLPSOMP::eval(int iifrom, int iito, ThrData * const thr) comm->forward_comm_pair(this); // communicate weighted volume (wvolume) upon every reneighbor if (neighbor->ago == 0) - comm->forward_comm_fix(modify->fix[ifix_peri]); + comm->forward_comm_fix(fix_peri_neigh); } sync_threads(); @@ -363,93 +363,6 @@ void PairPeriLPSOMP::eval(int iifrom, int iito, ThrData * const thr) /* ---------------------------------------------------------------------- */ -void PairPeriLPSOMP::compute_dilatation_thr(int ifrom, int ito) -{ - int i,j,jj,jnum,itype,jtype; - double xtmp,ytmp,ztmp,delx,dely,delz; - double xtmp0,ytmp0,ztmp0,delx0,dely0,delz0; - double rsq,r,dr; - double delta; - - double **x = atom->x; - int *type = atom->type; - double **x0 = atom->x0; - double *vfrac = atom->vfrac; - double vfrac_scale = 1.0; - - double lc = domain->lattice->xlattice; - double half_lc = 0.5*lc; - - double **r0 = ((FixPeriNeigh *) modify->fix[ifix_peri])->r0; - tagint **partner = ((FixPeriNeigh *) modify->fix[ifix_peri])->partner; - int *npartner = ((FixPeriNeigh *) modify->fix[ifix_peri])->npartner; - double *wvolume = ((FixPeriNeigh *) modify->fix[ifix_peri])->wvolume; - - int periodic = domain->xperiodic || domain->yperiodic || domain->zperiodic; - - // compute the dilatation theta - - for (i = ifrom; i < ito; i++) { - xtmp = x[i][0]; - ytmp = x[i][1]; - ztmp = x[i][2]; - xtmp0 = x0[i][0]; - ytmp0 = x0[i][1]; - ztmp0 = x0[i][2]; - jnum = npartner[i]; - theta[i] = 0.0; - itype = type[i]; - - for (jj = 0; jj < jnum; jj++) { - - // if bond already broken, skip this partner - if (partner[i][jj] == 0) continue; - - // Look up local index of this partner particle - j = atom->map(partner[i][jj]); - - // Skip if particle is "lost" - if (j < 0) continue; - - // Compute force density and add to PD equation of motion - delx = xtmp - x[j][0]; - dely = ytmp - x[j][1]; - delz = ztmp - x[j][2]; - if (periodic) domain->minimum_image(delx,dely,delz); - rsq = delx*delx + dely*dely + delz*delz; - delx0 = xtmp0 - x0[j][0]; - dely0 = ytmp0 - x0[j][1]; - delz0 = ztmp0 - x0[j][2]; - if (periodic) domain->minimum_image(delx0,dely0,delz0); - - r = sqrt(rsq); - dr = r - r0[i][jj]; - if (fabs(dr) < 2.2204e-016) dr = 0.0; - - jtype = type[j]; - delta = cut[itype][jtype]; - - // scale vfrac[j] if particle j near the horizon - - if ((fabs(r0[i][jj] - delta)) <= half_lc) - vfrac_scale = (-1.0/(2*half_lc))*(r0[i][jj]) + - (1.0 + ((delta - half_lc)/(2*half_lc) ) ); - else vfrac_scale = 1.0; - - theta[i] += influence_function(delx0, dely0, delz0) * r0[i][jj] * dr * - vfrac[j] * vfrac_scale; - } - - // if wvolume[i] is zero, then particle i has no bonds - // therefore, the dilatation is set to - - if (wvolume[i] != 0.0) theta[i] = (3.0/wvolume[i]) * theta[i]; - else theta[i] = 0; - } -} - -/* ---------------------------------------------------------------------- */ - double PairPeriLPSOMP::memory_usage() { double bytes = memory_usage_thr(); diff --git a/src/OPENMP/pair_peri_lps_omp.h b/src/OPENMP/pair_peri_lps_omp.h index 4bb71bbe5f..758e17bcf3 100644 --- a/src/OPENMP/pair_peri_lps_omp.h +++ b/src/OPENMP/pair_peri_lps_omp.h @@ -37,9 +37,6 @@ class PairPeriLPSOMP : public PairPeriLPS, public ThrOMP { virtual void compute(int, int); virtual double memory_usage(); - protected: - void compute_dilatation_thr(int ifrom, int ito); - private: template void eval(int ifrom, int ito, ThrData *const thr); diff --git a/src/OPENMP/pair_peri_pmb_omp.cpp b/src/OPENMP/pair_peri_pmb_omp.cpp index 73abf1c7e9..54d5969d8f 100644 --- a/src/OPENMP/pair_peri_pmb_omp.cpp +++ b/src/OPENMP/pair_peri_pmb_omp.cpp @@ -109,9 +109,9 @@ void PairPeriPMBOMP::eval(int iifrom, int iito, ThrData * const thr) double *vfrac = atom->vfrac; double *s0 = atom->s0; double **x0 = atom->x0; - double **r0 = ((FixPeriNeigh *) modify->fix[ifix_peri])->r0; - tagint **partner = ((FixPeriNeigh *) modify->fix[ifix_peri])->partner; - int *npartner = ((FixPeriNeigh *) modify->fix[ifix_peri])->npartner; + double **r0 = fix_peri_neigh->r0; + tagint **partner = fix_peri_neigh->partner; + int *npartner = fix_peri_neigh->npartner; // lc = lattice constant // init_style guarantees it's the same in x, y, and z diff --git a/src/PERI/compute_damage_atom.cpp b/src/PERI/compute_damage_atom.cpp index 1e5a6102dc..6349d324b2 100644 --- a/src/PERI/compute_damage_atom.cpp +++ b/src/PERI/compute_damage_atom.cpp @@ -17,21 +17,23 @@ ------------------------------------------------------------------------- */ #include "compute_damage_atom.h" -#include + #include "atom.h" -#include "update.h" -#include "modify.h" #include "comm.h" +#include "error.h" #include "fix_peri_neigh.h" #include "memory.h" -#include "error.h" +#include "modify.h" +#include "update.h" + +#include using namespace LAMMPS_NS; /* ---------------------------------------------------------------------- */ ComputeDamageAtom::ComputeDamageAtom(LAMMPS *lmp, int narg, char **arg) : - Compute(lmp, narg, arg), damage(nullptr) + Compute(lmp, narg, arg), damage(nullptr), fix_peri_neigh(nullptr) { if (narg != 3) error->all(FLERR,"Illegal compute damage/atom command"); @@ -52,17 +54,15 @@ ComputeDamageAtom::~ComputeDamageAtom() void ComputeDamageAtom::init() { - int count = 0; - for (int i = 0; i < modify->ncompute; i++) - if (strcmp(modify->compute[i]->style,"damage/peri") == 0) count++; - if (count > 1 && comm->me == 0) - error->warning(FLERR,"More than one compute damage/atom"); + if ((comm->me == 0) && (modify->get_compute_by_style("damage/atom").size() > 1)) + error->warning(FLERR,"More than one compute dilatation/atom"); // find associated PERI_NEIGH fix that must exist - ifix_peri = modify->find_fix_by_style("PERI_NEIGH"); - if (ifix_peri == -1) + auto fixes = modify->get_fix_by_style("PERI_NEIGH"); + if (fixes.size() == 0) error->all(FLERR,"Compute damage/atom requires a peridynamic potential"); + else fix_peri_neigh = (FixPeriNeigh *)fixes.front(); } /* ---------------------------------------------------------------------- */ @@ -85,9 +85,9 @@ void ComputeDamageAtom::compute_peratom() int nlocal = atom->nlocal; int *mask = atom->mask; double *vfrac = atom->vfrac; - double *vinter = ((FixPeriNeigh *) modify->fix[ifix_peri])->vinter; - tagint **partner = ((FixPeriNeigh *) modify->fix[ifix_peri])->partner; - int *npartner = ((FixPeriNeigh *) modify->fix[ifix_peri])->npartner; + double *vinter = fix_peri_neigh->vinter; + tagint **partner = fix_peri_neigh->partner; + int *npartner = fix_peri_neigh->npartner; int i,j,jj,jnum; double damage_temp; diff --git a/src/PERI/compute_damage_atom.h b/src/PERI/compute_damage_atom.h index 7530a1cb02..43b28c3794 100644 --- a/src/PERI/compute_damage_atom.h +++ b/src/PERI/compute_damage_atom.h @@ -35,7 +35,7 @@ class ComputeDamageAtom : public Compute { private: int nmax; double *damage; - int ifix_peri; + class FixPeriNeigh *fix_peri_neigh; }; } // namespace LAMMPS_NS diff --git a/src/PERI/compute_dilatation_atom.cpp b/src/PERI/compute_dilatation_atom.cpp index 7735bbbaac..fe78bc76bf 100644 --- a/src/PERI/compute_dilatation_atom.cpp +++ b/src/PERI/compute_dilatation_atom.cpp @@ -24,9 +24,7 @@ #include "force.h" #include "memory.h" #include "modify.h" -#include "pair_peri_eps.h" -#include "pair_peri_lps.h" -#include "pair_peri_ves.h" +#include "pair.h" #include "update.h" #include @@ -59,28 +57,13 @@ ComputeDilatationAtom::~ComputeDilatationAtom() void ComputeDilatationAtom::init() { - int count = 0; - for (int i = 0; i < modify->ncompute; i++) - if (strcmp(modify->compute[i]->style,"dilatation/peri") == 0) count++; - if (count > 1 && comm->me == 0) + if ((comm->me == 0) && (modify->get_compute_by_style("dilatation/atom").size() > 1)) error->warning(FLERR,"More than one compute dilatation/atom"); - // check PD pair style + // check for compatible pair style - isPMB = isLPS = isVES = isEPS = 0; - if (force->pair_match("^peri/pmb",0)) isPMB = 1; - if (force->pair_match("^peri/lps",0)) isLPS = 1; - if (force->pair_match("^peri/ves",0)) isVES = 1; - if (force->pair_match("^peri/eps",0)) isEPS = 1; - - if (isPMB) - error->all(FLERR,"Compute dilatation/atom cannot be used " - "with this pair style"); - - // find associated PERI_NEIGH fix that must exist - - if (modify->find_fix_by_style("^PERI_NEIGH") == -1) - error->all(FLERR,"Compute dilatation/atom requires Peridynamic pair style"); + if ((force->pair_match("^peri",0) == nullptr) || force->pair_match("^peri/pmb",0)) + error->all(FLERR,"Compute dilatation/atom cannot be used with this pair style"); } /* ---------------------------------------------------------------------- */ @@ -100,11 +83,9 @@ void ComputeDilatationAtom::compute_peratom() // extract dilatation for each atom in group - double *theta; - Pair *anypair = force->pair_match("peri",0); - if (isLPS) theta = ((PairPeriLPS *) anypair)->theta; - if (isVES) theta = ((PairPeriVES *) anypair)->theta; - if (isEPS) theta = ((PairPeriEPS *) anypair)->theta; + int tmp; + auto anypair = force->pair_match("^peri",0); + double *theta = (double *)anypair->extract("theta",tmp); int *mask = atom->mask; int nlocal = atom->nlocal; diff --git a/src/PERI/compute_dilatation_atom.h b/src/PERI/compute_dilatation_atom.h index ee675c0bb7..476634753d 100644 --- a/src/PERI/compute_dilatation_atom.h +++ b/src/PERI/compute_dilatation_atom.h @@ -25,11 +25,6 @@ ComputeStyle(dilatation/atom,ComputeDilatationAtom); namespace LAMMPS_NS { class ComputeDilatationAtom : public Compute { - friend class PairPeriPMB; - friend class PairPeriLPS; - friend class PairPeriVES; - friend class PairPeriEPS; - public: ComputeDilatationAtom(class LAMMPS *, int, char **); ~ComputeDilatationAtom(); @@ -40,7 +35,6 @@ class ComputeDilatationAtom : public Compute { private: int nmax; double *dilatation; - int isPMB, isLPS, isVES, isEPS; }; } // namespace LAMMPS_NS diff --git a/src/PERI/compute_plasticity_atom.cpp b/src/PERI/compute_plasticity_atom.cpp index 74d4b298a7..11ecdfb7ec 100644 --- a/src/PERI/compute_plasticity_atom.cpp +++ b/src/PERI/compute_plasticity_atom.cpp @@ -17,22 +17,23 @@ ------------------------------------------------------------------------- */ #include "compute_plasticity_atom.h" -#include + #include "atom.h" -#include "update.h" -#include "modify.h" #include "comm.h" +#include "error.h" #include "fix_peri_neigh.h" #include "force.h" #include "memory.h" -#include "error.h" +#include "modify.h" +#include "update.h" + +#include using namespace LAMMPS_NS; /* ---------------------------------------------------------------------- */ -ComputePlasticityAtom:: -ComputePlasticityAtom(LAMMPS *lmp, int narg, char **arg) : +ComputePlasticityAtom::ComputePlasticityAtom(LAMMPS *lmp, int narg, char **arg) : Compute(lmp, narg, arg) { if (narg != 3) error->all(FLERR,"Illegal compute plasticity/atom command"); @@ -59,17 +60,15 @@ ComputePlasticityAtom::~ComputePlasticityAtom() void ComputePlasticityAtom::init() { - int count = 0; - for (int i = 0; i < modify->ncompute; i++) - if (strcmp(modify->compute[i]->style,"plasticity/peri") == 0) count++; - if (count > 1 && comm->me == 0) + if ((comm->me == 0) && (modify->get_compute_by_style("plasticity/atom").size() > 1)) error->warning(FLERR,"More than one compute plasticity/atom"); // find associated PERI_NEIGH fix that must exist - ifix_peri = modify->find_fix_by_style("^PERI_NEIGH"); - if (ifix_peri == -1) - error->all(FLERR,"Compute plasticity/atom requires a Peridynamics pair style"); + auto fixes = modify->get_fix_by_style("PERI_NEIGH"); + if (fixes.size() == 0) + error->all(FLERR,"Compute plasticity/atom requires a peridynamic potential"); + else fix_peri_neigh = (FixPeriNeigh *)fixes.front(); } /* ---------------------------------------------------------------------- */ @@ -89,7 +88,7 @@ void ComputePlasticityAtom::compute_peratom() // extract plasticity for each atom in group - double *lambdaValue = ((FixPeriNeigh *) modify->fix[ifix_peri])->lambdaValue; + double *lambdaValue = fix_peri_neigh->lambdaValue; int *mask = atom->mask; int nlocal = atom->nlocal; diff --git a/src/PERI/compute_plasticity_atom.h b/src/PERI/compute_plasticity_atom.h index b77182d251..cbb1182dee 100644 --- a/src/PERI/compute_plasticity_atom.h +++ b/src/PERI/compute_plasticity_atom.h @@ -35,7 +35,7 @@ class ComputePlasticityAtom : public Compute { private: int nmax; double *plasticity; - int ifix_peri; + class FixPeriNeigh *fix_peri_neigh; }; } // namespace LAMMPS_NS diff --git a/src/PERI/fix_peri_neigh.cpp b/src/PERI/fix_peri_neigh.cpp index 74b192b70f..47cb183a7d 100644 --- a/src/PERI/fix_peri_neigh.cpp +++ b/src/PERI/fix_peri_neigh.cpp @@ -18,7 +18,6 @@ #include "fix_peri_neigh.h" -#include #include "pair_peri_lps.h" #include "pair_peri_ves.h" #include "pair_peri_eps.h" @@ -34,6 +33,9 @@ #include "memory.h" #include "error.h" +#include +#include + using namespace LAMMPS_NS; using namespace FixConst; @@ -68,6 +70,7 @@ FixPeriNeigh::FixPeriNeigh(LAMMPS *lmp,int narg, char **arg) : wvolume = nullptr; grow_arrays(atom->nmax); + memset(wvolume,0,atom->nmax*sizeof(double)); atom->add_callback(Atom::GROW); atom->add_callback(Atom::RESTART); diff --git a/src/PERI/fix_peri_neigh.h b/src/PERI/fix_peri_neigh.h index ac9784f6e6..bde8f3f2da 100644 --- a/src/PERI/fix_peri_neigh.h +++ b/src/PERI/fix_peri_neigh.h @@ -25,6 +25,7 @@ FixStyle(PERI_NEIGH,FixPeriNeigh); namespace LAMMPS_NS { class FixPeriNeigh : public Fix { + friend class PairPeri; friend class PairPeriPMB; friend class PairPeriPMBOMP; friend class PairPeriLPS; diff --git a/src/PERI/pair_peri.cpp b/src/PERI/pair_peri.cpp new file mode 100644 index 0000000000..9c920dd63f --- /dev/null +++ b/src/PERI/pair_peri.cpp @@ -0,0 +1,261 @@ +/* ---------------------------------------------------------------------- + LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator + https://www.lammps.org/, Sandia National Laboratories + Steve Plimpton, sjplimp@sandia.gov + + Copyright (2003) Sandia Corporation. Under the terms of Contract + DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains + certain rights in this software. This software is distributed under + the GNU General Public License. + + See the README file in the top-level LAMMPS directory. +------------------------------------------------------------------------- */ + +#include "pair_peri.h" + +#include "atom.h" +#include "domain.h" +#include "error.h" +#include "fix_peri_neigh.h" +#include "lattice.h" +#include "memory.h" +#include "modify.h" +#include "neigh_request.h" +#include "neighbor.h" + +#include + +using namespace LAMMPS_NS; + +/* ---------------------------------------------------------------------- */ + +PairPeri::PairPeri(LAMMPS *_lmp) : + Pair(_lmp), fix_peri_neigh(nullptr), bulkmodulus(nullptr), shearmodulus(nullptr), + m_lambdai(nullptr), m_taubi(nullptr), m_yieldstress(nullptr), s00(nullptr), alpha(nullptr), + cut(nullptr), kspring(nullptr), s0_new(nullptr), theta(nullptr), elastic_energy(nullptr) +{ + for (int i = 0; i < 6; i++) virial[i] = 0.0; + no_virial_fdotr_compute = 1; + single_enable = 0; + nmax = -1; +} + +/* ---------------------------------------------------------------------- */ + +PairPeri::~PairPeri() +{ + if (fix_peri_neigh) modify->delete_fix(fix_peri_neigh->id); + + if (allocated) { + memory->destroy(bulkmodulus); + memory->destroy(shearmodulus); + memory->destroy(m_lambdai); + memory->destroy(m_taubi); + memory->destroy(m_yieldstress); + memory->destroy(s00); + memory->destroy(alpha); + memory->destroy(cut); + memory->destroy(kspring); + + memory->destroy(s0_new); + memory->destroy(theta); + memory->destroy(elastic_energy); + } +} + +/* ---------------------------------------------------------------------- + allocate all arrays +------------------------------------------------------------------------- */ + +void PairPeri::allocate() +{ + allocated = 1; + int n = atom->ntypes + 1; + + memory->create(setflag, n, n, "pair:setflag"); + for (int i = 0; i < n; i++) + for (int j = 0; j < n; j++) setflag[i][j] = 0; + + memory->create(cutsq, n, n, "pair:cutsq"); + memory->create(bulkmodulus, n, n, "pair:bulkmodulus"); + memory->create(shearmodulus, n, n, "pair:shearmodulus"); + memory->create(s00, n, n, "pair:s00"); + memory->create(alpha, n, n, "pair:alpha"); + memory->create(cut, n, n, "pair:cut"); + memory->create(m_yieldstress, n, n, "pair:m_yieldstress"); + memory->create(m_lambdai, n, n, "pair:m_lambdai"); + memory->create(m_taubi, n, n, "pair:m_taubi"); + memory->create(kspring, n, n, "pair:m_taubi"); +} + +/* ---------------------------------------------------------------------- + memory usage of local arrays +------------------------------------------------------------------------- */ + +double PairPeri::memory_usage() +{ + double bytes = 2.0 * (double) nmax * sizeof(double); + bytes += 10.0 * (double) atom->ntypes * atom->ntypes * sizeof(double); + return bytes; +} + +/* ---------------------------------------------------------------------- + global settings +------------------------------------------------------------------------- */ + +void PairPeri::settings(int narg, char **/*arg*/) +{ + if (narg) error->all(FLERR,"Illegal pair_style command"); +} + +/* ---------------------------------------------------------------------- + init common to all peridynamics pair styles +------------------------------------------------------------------------- */ + +void PairPeri::init_style() +{ + // error checks + + if (!atom->peri_flag) error->all(FLERR, "Pair style peri requires atom style peri"); + if (atom->map_style == Atom::MAP_NONE) + error->all(FLERR, "Pair peri requires an atom map, see atom_modify"); + + if (domain->lattice == nullptr) error->all(FLERR, "Pair peri requires a lattice be defined"); + if (domain->lattice->xlattice != domain->lattice->ylattice || + domain->lattice->xlattice != domain->lattice->zlattice || + domain->lattice->ylattice != domain->lattice->zlattice) + error->all(FLERR, "Pair peri lattice is not identical in x, y, and z"); + + // if first init, create Fix needed for storing fixed neighbors + + if (!fix_peri_neigh) + fix_peri_neigh = (FixPeriNeigh *) modify->add_fix("PERI_NEIGH all PERI_NEIGH"); + + neighbor->request(this, instance_me); +} + +/* ---------------------------------------------------------------------- */ + +void PairPeri::compute_dilatation(int ifrom, int ito) +{ + int i, j, jj, jnum, itype, jtype; + double xtmp, ytmp, ztmp, delx, dely, delz; + double xtmp0, ytmp0, ztmp0, delx0, dely0, delz0; + double rsq, r, dr; + double delta; + + double **x = atom->x; + int *type = atom->type; + double **x0 = atom->x0; + double *vfrac = atom->vfrac; + double vfrac_scale = 1.0; + + double lc = domain->lattice->xlattice; + double half_lc = 0.5 * lc; + + double **r0 = fix_peri_neigh->r0; + tagint **partner = fix_peri_neigh->partner; + int *npartner = fix_peri_neigh->npartner; + double *wvolume = fix_peri_neigh->wvolume; + + int periodic = domain->xperiodic || domain->yperiodic || domain->zperiodic; + + // compute the dilatation theta + + for (i = ifrom; i < ito; i++) { + xtmp = x[i][0]; + ytmp = x[i][1]; + ztmp = x[i][2]; + xtmp0 = x0[i][0]; + ytmp0 = x0[i][1]; + ztmp0 = x0[i][2]; + jnum = npartner[i]; + theta[i] = 0.0; + itype = type[i]; + + for (jj = 0; jj < jnum; jj++) { + + // if bond already broken, skip this partner + if (partner[i][jj] == 0) continue; + + // look up local index of this partner particle + j = atom->map(partner[i][jj]); + + // skip if particle is "lost" + if (j < 0) continue; + + // compute force density and add to PD equation of motion + delx = xtmp - x[j][0]; + dely = ytmp - x[j][1]; + delz = ztmp - x[j][2]; + if (periodic) domain->minimum_image(delx, dely, delz); + rsq = delx * delx + dely * dely + delz * delz; + delx0 = xtmp0 - x0[j][0]; + dely0 = ytmp0 - x0[j][1]; + delz0 = ztmp0 - x0[j][2]; + if (periodic) domain->minimum_image(delx0, dely0, delz0); + + r = sqrt(rsq); + dr = r - r0[i][jj]; + if (fabs(dr) < NEAR_ZERO) dr = 0.0; + + jtype = type[j]; + delta = cut[itype][jtype]; + + // scale vfrac[j] if particle j near the horizon + + if ((fabs(r0[i][jj] - delta)) <= half_lc) + vfrac_scale = + (-1.0 / (2 * half_lc)) * (r0[i][jj]) + (1.0 + ((delta - half_lc) / (2 * half_lc))); + else + vfrac_scale = 1.0; + + theta[i] += influence_function(delx0, dely0, delz0) * r0[i][jj] * dr * vfrac[j] * vfrac_scale; + } + + // if wvolume[i] is zero, then particle i has no bonds + // therefore, the dilatation is set to zero + + if (wvolume[i] != 0.0) + theta[i] = (3.0 / wvolume[i]) * theta[i]; + else + theta[i] = 0; + } +} + +/* ---------------------------------------------------------------------- + communication routines +---------------------------------------------------------------------- */ + +int PairPeri::pack_forward_comm(int n, int *list, double *buf, int /*pbc_flag*/, int * /*pbc*/) +{ + int i, j, m; + + m = 0; + for (i = 0; i < n; i++) { + j = list[i]; + buf[m++] = theta[j]; + } + return m; +} + +/* ---------------------------------------------------------------------- */ + +void PairPeri::unpack_forward_comm(int n, int first, double *buf) +{ + int i, m, last; + + m = 0; + last = first + n; + for (i = first; i < last; i++) { theta[i] = buf[m++]; } +} + +/* ---------------------------------------------------------------------- */ + +void *PairPeri::extract(const char *name, int &dim) +{ + dim = 1; + if (strcmp(name, "theta") == 0) return (void *) theta; + if (strcmp(name, "elastic_energy") == 0) return (void *) elastic_energy; + return nullptr; +} diff --git a/src/PERI/pair_peri.h b/src/PERI/pair_peri.h new file mode 100644 index 0000000000..f3b41de4f5 --- /dev/null +++ b/src/PERI/pair_peri.h @@ -0,0 +1,58 @@ +/* -*- c++ -*- ---------------------------------------------------------- + LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator + https://www.lammps.org/, 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_PAIR_PERI_H +#define LMP_PAIR_PERI_H + +#include "pair.h" +#include + +namespace LAMMPS_NS { + +class PairPeri : public Pair { + public: + PairPeri(class LAMMPS *); + virtual ~PairPeri(); + + virtual int pack_forward_comm(int, int *, double *, int, int *); + virtual void unpack_forward_comm(int, int, double *); + + virtual void init_style(); + virtual void settings(int, char **); + static constexpr double NEAR_ZERO = 2.2204e-16; + + double influence_function(const double &xi_x, const double &xi_y, const double &xi_z) const + { + const double r = sqrt((xi_x * xi_x) + (xi_y * xi_y) + (xi_z * xi_z)); + return (fabs(r) < NEAR_ZERO) ? 1.0 / NEAR_ZERO : (1.0 / r); + } + void compute_dilatation(int, int); + + double memory_usage(); + virtual void *extract(const char *, int &); + + protected: + class FixPeriNeigh *fix_peri_neigh; + double **bulkmodulus, **shearmodulus, **m_lambdai, **m_taubi, **m_yieldstress; + double **s00, **alpha, **cut, **kspring; + double *s0_new, *theta, *elastic_energy; + + int nmax; + + protected: + void allocate(); +}; + +} // namespace LAMMPS_NS + +#endif diff --git a/src/PERI/pair_peri_eps.cpp b/src/PERI/pair_peri_eps.cpp index f6e99332b3..8d1aa9b49f 100644 --- a/src/PERI/pair_peri_eps.cpp +++ b/src/PERI/pair_peri_eps.cpp @@ -26,6 +26,7 @@ #include "force.h" #include "lattice.h" #include "math_const.h" +#include "math_special.h" #include "memory.h" #include "modify.h" #include "neigh_list.h" @@ -36,27 +37,12 @@ using namespace LAMMPS_NS; using namespace MathConst; +using MathSpecial::powint; /* ---------------------------------------------------------------------- */ -PairPeriEPS::PairPeriEPS(LAMMPS *lmp) : Pair(lmp) +PairPeriEPS::PairPeriEPS(LAMMPS *_lmp) : PairPeri(_lmp) { - for (int i = 0; i < 6; i++) virial[i] = 0.0; - no_virial_fdotr_compute = 1; - single_enable = 0; - - ifix_peri = -1; - - nmax = -1; - s0_new = nullptr; - theta = nullptr; - - bulkmodulus = nullptr; - shearmodulus = nullptr; - s00 = alpha = nullptr; - cut = nullptr; - m_yieldstress = nullptr; - // set comm size needed by this Pair // comm_reverse not needed @@ -65,26 +51,6 @@ PairPeriEPS::PairPeriEPS(LAMMPS *lmp) : Pair(lmp) /* ---------------------------------------------------------------------- */ -PairPeriEPS::~PairPeriEPS() -{ - if (ifix_peri >= 0) modify->delete_fix("PERI_NEIGH"); - - if (allocated) { - memory->destroy(setflag); - memory->destroy(cutsq); - memory->destroy(bulkmodulus); - memory->destroy(shearmodulus); - memory->destroy(s00); - memory->destroy(alpha); - memory->destroy(cut); - memory->destroy(m_yieldstress); - memory->destroy(theta); - memory->destroy(s0_new); - } -} - -/* ---------------------------------------------------------------------- */ - void PairPeriEPS::compute(int eflag, int vflag) { int i,j,ii,jj,inum,jnum,itype,jtype; @@ -107,13 +73,12 @@ void PairPeriEPS::compute(int eflag, int vflag) double *vfrac = atom->vfrac; double *s0 = atom->s0; double **x0 = atom->x0; - double **r0 = ((FixPeriNeigh *) modify->fix[ifix_peri])->r0; - double **deviatorPlasticextension = - ((FixPeriNeigh *) modify->fix[ifix_peri])->deviatorPlasticextension; - tagint **partner = ((FixPeriNeigh *) modify->fix[ifix_peri])->partner; - int *npartner = ((FixPeriNeigh *) modify->fix[ifix_peri])->npartner; - double *wvolume = ((FixPeriNeigh *) modify->fix[ifix_peri])->wvolume; - double *lambdaValue = ((FixPeriNeigh *) modify->fix[ifix_peri])->lambdaValue; + double **r0 = fix_peri_neigh->r0; + double **deviatorPlasticextension = fix_peri_neigh->deviatorPlasticextension; + tagint **partner = fix_peri_neigh->partner; + int *npartner = fix_peri_neigh->npartner; + double *wvolume = fix_peri_neigh->wvolume; + double *lambdaValue = fix_peri_neigh->lambdaValue; // lc = lattice constant // init_style guarantees it's the same in x, y, and z @@ -208,14 +173,12 @@ void PairPeriEPS::compute(int eflag, int vflag) int maxpartner = 0; for (i = 0; i < nlocal; i++) maxpartner = MAX(maxpartner,npartner[i]); - if (nlocal > nmax) { memory->destroy(s0_new); memory->destroy(theta); nmax = atom->nmax; memory->create(s0_new,nmax,"pair:s0_new"); memory->create(theta,nmax,"pair:theta"); - } // ******** temp array to store Plastic extension *********** /// @@ -228,7 +191,7 @@ void PairPeriEPS::compute(int eflag, int vflag) // ******** temp array to store Plastic extension *********** /// // compute the dilatation on each particle - compute_dilatation(); + compute_dilatation(0,nlocal); // communicate dilatation (theta) of each particle comm->forward_comm_pair(this); @@ -236,7 +199,7 @@ void PairPeriEPS::compute(int eflag, int vflag) // communicate weighted volume (wvolume) upon every reneighbor if (neighbor->ago == 0) - comm->forward_comm_fix(modify->fix[ifix_peri]); + comm->forward_comm_fix(fix_peri_neigh); // volume-dependent part of the energy @@ -269,21 +232,17 @@ void PairPeriEPS::compute(int eflag, int vflag) jnum = npartner[i]; first = true; - - double yieldStress = m_yieldstress[itype][itype]; - double horizon = cut[itype][itype]; - double tdnorm = compute_DeviatoricForceStateNorm(i); - double pointwiseYieldvalue = 25.0 * yieldStress * - yieldStress / 8 / MY_PI / pow(horizon,5); - - - double fsurf = (tdnorm * tdnorm)/2 - pointwiseYieldvalue; + const double yieldStress = m_yieldstress[itype][itype]; + const double horizon = cut[itype][itype]; + const double tdnorm = compute_DeviatoricForceStateNorm(i); + const double pointwiseYieldvalue = 25.0/8.0/MY_PI/powint(horizon,5)*yieldStress*yieldStress; + const double fsurf = (tdnorm * tdnorm)/2.0 - pointwiseYieldvalue; bool elastic = true; - if (fsurf > 0) { + if (fsurf > 0.0) { elastic = false; deltalambda = ((tdnorm /sqrt(2.0 * pointwiseYieldvalue)) - 1.0) * wvolume[i] - / (15 * shearmodulus[itype][itype]); + / (15.0 * shearmodulus[itype][itype]); double templambda = lambdaValue[i]; lambdaValue[i] = templambda + deltalambda; } @@ -316,34 +275,31 @@ void PairPeriEPS::compute(int eflag, int vflag) // avoid roundoff errors - if (fabs(dr) < 2.2204e-016) { - dr = 0.0; - } + if (fabs(dr) < NEAR_ZERO) dr = 0.0; // scale vfrac[j] if particle j near the horizon if ((fabs(r0[i][jj] - delta)) <= half_lc) - vfrac_scale = (-1.0/(2*half_lc))*(r0[i][jj]) + - (1.0 + ((delta - half_lc)/(2*half_lc) ) ); + vfrac_scale = (-1.0/(2*half_lc))*(r0[i][jj]) + (1.0 + ((delta - half_lc)/(2*half_lc))); else vfrac_scale = 1.0; omega_plus = influence_function(-1.0*delx0,-1.0*dely0,-1.0*delz0); omega_minus = influence_function(delx0,dely0,delz0); - //Elastic Part - rk = ((3.0 * bulkmodulus[itype][itype]) * ( (omega_plus * theta[i] / wvolume[i]) + - ( omega_minus * theta[j] / wvolume[j] ) ) ) * r0[i][jj]; + // Elastic Part + rk = ((3.0 * bulkmodulus[itype][itype]) * ((omega_plus * theta[i] / wvolume[i]) + + (omega_minus * theta[j] / wvolume[j]))) * r0[i][jj]; if (r > 0.0) fbond = -((rk/r) * vfrac[j] * vfrac_scale); else fbond = 0.0; - //Plastic part + // Plastic part double deviatoric_extension = dr - (theta[i]* r0[i][jj] / 3.0); edpNp1 = deviatorPlasticextension[i][jj]; double tdtrialValue = ( 15 * shearmodulus[itype][itype]) * - ( (omega_plus / wvolume[i]) + (omega_minus / wvolume[j]) ) * + ((omega_plus / wvolume[i]) + (omega_minus / wvolume[j])) * (deviatoric_extension - edpNp1); if (elastic) { @@ -353,21 +309,17 @@ void PairPeriEPS::compute(int eflag, int vflag) deviatorPlasticExtTemp[i][jj] = edpNp1 + rkNew * deltalambda; } - if (r > 0.0) fbondElastoPlastic = -((rkNew/r) * vfrac[j] * vfrac_scale); else fbondElastoPlastic = 0.0; - // total Force state: elastic + plastic fbondFinal=fbond+fbondElastoPlastic; fbond=fbondFinal; - f[i][0] += delx*fbond; f[i][1] += dely*fbond; f[i][2] += delz*fbond; - // since I-J is double counted, set newton off & use 1/2 factor and I,I if (eflag) evdwl = (0.5 * 15 * shearmodulus[itype][itype]/wvolume[i] * @@ -379,7 +331,6 @@ void PairPeriEPS::compute(int eflag, int vflag) // find stretch in bond I-J and break if necessary // use s0 from previous timestep - stretch = dr / r0[i][jj]; if (stretch > MIN(s0[i],s0[j])) partner[i][jj] = 0; @@ -388,9 +339,7 @@ void PairPeriEPS::compute(int eflag, int vflag) if (first) s0_new[i] = s00[itype][jtype] - (alpha[itype][jtype] * stretch); else - s0_new[i] = MAX(s0_new[i],s00[itype][jtype] - - (alpha[itype][jtype] * stretch)); - + s0_new[i] = MAX(s0_new[i],s00[itype][jtype] - (alpha[itype][jtype] * stretch)); first = false; } } @@ -400,45 +349,12 @@ void PairPeriEPS::compute(int eflag, int vflag) memcpy(s0,s0_new,sizeof(double)*nlocal); if (nlocal*maxpartner > 0) { - memcpy(&(deviatorPlasticextension[0][0]), - &(deviatorPlasticExtTemp[0][0]), + memcpy(&(deviatorPlasticextension[0][0]),&(deviatorPlasticExtTemp[0][0]), sizeof(double)*nlocal*maxpartner); memory->destroy(deviatorPlasticExtTemp); } } -/* ---------------------------------------------------------------------- - allocate all arrays -------------------------------------------------------------------------- */ - -void PairPeriEPS::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(bulkmodulus,n+1,n+1,"pair:bulkmodulus"); - memory->create(shearmodulus,n+1,n+1,"pair:shearmodulus"); - memory->create(s00,n+1,n+1,"pair:s00"); - memory->create(alpha,n+1,n+1,"pair:alpha"); - memory->create(cut,n+1,n+1,"pair:cut"); - memory->create(m_yieldstress,n+1,n+1,"pair:m_yieldstress"); -} - -/* ---------------------------------------------------------------------- - global settings -------------------------------------------------------------------------- */ - -void PairPeriEPS::settings(int narg, char **/*arg*/) -{ - if (narg) error->all(FLERR,"Illegal pair_style command"); -} - /* ---------------------------------------------------------------------- set coeffs for one or more type pairs ------------------------------------------------------------------------- */ @@ -493,40 +409,6 @@ double PairPeriEPS::init_one(int i, int j) return cut[i][j]; } -/* ---------------------------------------------------------------------- - init specific to this pair style -------------------------------------------------------------------------- */ - -void PairPeriEPS::init_style() -{ - // error checks - - if (!atom->peri_flag) - error->all(FLERR,"Pair style peri requires atom style peri"); - if (atom->map_style == Atom::MAP_NONE) - error->all(FLERR,"Pair peri requires an atom map, see atom_modify"); - - if (domain->lattice == nullptr) - error->all(FLERR,"Pair peri requires a lattice be defined"); - if (domain->lattice->xlattice != domain->lattice->ylattice || - domain->lattice->xlattice != domain->lattice->zlattice || - domain->lattice->ylattice != domain->lattice->zlattice) - error->all(FLERR,"Pair peri lattice is not identical in x, y, and z"); - - // if first init, create Fix needed for storing fixed neighbors - - if (ifix_peri == -1) modify->add_fix("PERI_NEIGH all PERI_NEIGH"); - - // find associated PERI_NEIGH fix that must exist - // could have changed locations in fix list since created - - ifix_peri = modify->find_fix_by_style("^PERI_NEIGH"); - if (ifix_peri == -1) - error->all(FLERR,"Fix peri neigh does not exist"); - - neighbor->request(this,instance_me); -} - /* ---------------------------------------------------------------------- proc 0 writes to restart file ------------------------------------------------------------------------- */ @@ -581,120 +463,6 @@ void PairPeriEPS::read_restart(FILE *fp) } } -/* ---------------------------------------------------------------------- - memory usage of local atom-based arrays -------------------------------------------------------------------------- */ - -double PairPeriEPS::memory_usage() -{ - double bytes = 2 * nmax * sizeof(double); - return bytes; -} - -/* ---------------------------------------------------------------------- - influence function definition -------------------------------------------------------------------------- */ - -double PairPeriEPS::influence_function(double xi_x, double xi_y, double xi_z) -{ - double r = sqrt(xi_x*xi_x + xi_y*xi_y + xi_z*xi_z); - double omega; - - if (fabs(r) < 2.2204e-016) - error->one(FLERR,"Divide by 0 in influence function"); - omega = 1.0/r; - return omega; -} - -/* ---------------------------------------------------------------------- */ - -void PairPeriEPS::compute_dilatation() -{ - int i,j,jj,jnum,itype,jtype; - double xtmp,ytmp,ztmp,delx,dely,delz; - double xtmp0,ytmp0,ztmp0,delx0,dely0,delz0; - double rsq,r,dr; - double delta; - - double **x = atom->x; - int *type = atom->type; - double **x0 = atom->x0; - int nlocal = atom->nlocal; - double *vfrac = atom->vfrac; - double vfrac_scale = 1.0; - - double lc = domain->lattice->xlattice; - double half_lc = 0.5*lc; - - double **r0 = ((FixPeriNeigh *) modify->fix[ifix_peri])->r0; - tagint **partner = ((FixPeriNeigh *) modify->fix[ifix_peri])->partner; - int *npartner = ((FixPeriNeigh *) modify->fix[ifix_peri])->npartner; - double *wvolume = ((FixPeriNeigh *) modify->fix[ifix_peri])->wvolume; - - int periodic = domain->xperiodic || domain->yperiodic || domain->zperiodic; - - // compute the dilatation theta - - for (i = 0; i < nlocal; i++) { - xtmp = x[i][0]; - ytmp = x[i][1]; - ztmp = x[i][2]; - xtmp0 = x0[i][0]; - ytmp0 = x0[i][1]; - ztmp0 = x0[i][2]; - jnum = npartner[i]; - theta[i] = 0.0; - itype = type[i]; - - for (jj = 0; jj < jnum; jj++) { - - // if bond already broken, skip this partner - if (partner[i][jj] == 0) continue; - - // look up local index of this partner particle - j = atom->map(partner[i][jj]); - - // skip if particle is "lost" - if (j < 0) continue; - - // compute force density and add to PD equation of motion - delx = xtmp - x[j][0]; - dely = ytmp - x[j][1]; - delz = ztmp - x[j][2]; - if (periodic) domain->minimum_image(delx,dely,delz); - rsq = delx*delx + dely*dely + delz*delz; - delx0 = xtmp0 - x0[j][0]; - dely0 = ytmp0 - x0[j][1]; - delz0 = ztmp0 - x0[j][2]; - if (periodic) domain->minimum_image(delx0,dely0,delz0); - - r = sqrt(rsq); - dr = r - r0[i][jj]; - if (fabs(dr) < 2.2204e-016) dr = 0.0; - - jtype = type[j]; - delta = cut[itype][jtype]; - - // scale vfrac[j] if particle j near the horizon - - if ((fabs(r0[i][jj] - delta)) <= half_lc) - vfrac_scale = (-1.0/(2*half_lc))*(r0[i][jj]) + - (1.0 + ((delta - half_lc)/(2*half_lc) ) ); - else vfrac_scale = 1.0; - - theta[i] += influence_function(delx0, dely0, delz0) * r0[i][jj] * dr * - vfrac[j] * vfrac_scale; - - } - - // if wvolume[i] is zero, then particle i has no bonds - // therefore, the dilatation is set to - - if (wvolume[i] != 0.0) theta[i] = (3.0/wvolume[i]) * theta[i]; - else theta[i] = 0; - } -} - /* ---------------------------------------------------------------------- */ double PairPeriEPS::compute_DeviatoricForceStateNorm(int i) @@ -714,12 +482,11 @@ double PairPeriEPS::compute_DeviatoricForceStateNorm(int i) double lc = domain->lattice->xlattice; double half_lc = 0.5*lc; - double **r0 = ((FixPeriNeigh *) modify->fix[ifix_peri])->r0; - tagint **partner = ((FixPeriNeigh *) modify->fix[ifix_peri])->partner; - int *npartner = ((FixPeriNeigh *) modify->fix[ifix_peri])->npartner; - double *wvolume = ((FixPeriNeigh *) modify->fix[ifix_peri])->wvolume; - double **deviatorPlasticextension = - ((FixPeriNeigh *) modify->fix[ifix_peri])->deviatorPlasticextension; + double **r0 = fix_peri_neigh->r0; + tagint **partner = fix_peri_neigh->partner; + int *npartner = fix_peri_neigh->npartner; + double *wvolume = fix_peri_neigh->wvolume; + double **deviatorPlasticextension = fix_peri_neigh->deviatorPlasticextension; int periodic = domain->xperiodic || domain->yperiodic || domain->zperiodic; @@ -753,7 +520,7 @@ double PairPeriEPS::compute_DeviatoricForceStateNorm(int i) if (periodic) domain->minimum_image(delx0,dely0,delz0); r = sqrt(rsq); dr = r - r0[i][jj]; - if (fabs(dr) < 2.2204e-016) dr = 0.0; + if (fabs(dr) < NEAR_ZERO) dr = 0.0; // scale vfrac[j] if particle j near the horizon double vfrac_scale; @@ -785,34 +552,3 @@ double PairPeriEPS::compute_DeviatoricForceStateNorm(int i) } return sqrt(norm); } - - -/* ---------------------------------------------------------------------- - communication routines ----------------------------------------------------------------------- */ - -int PairPeriEPS::pack_forward_comm(int n, int *list, double *buf, - int /*pbc_flag*/, int * /*pbc*/) -{ - int i,j,m; - - m = 0; - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = theta[j]; - } - return m; -} - -/* ---------------------------------------------------------------------- */ - -void PairPeriEPS::unpack_forward_comm(int n, int first, double *buf) -{ - int i,m,last; - - m = 0; - last = first + n; - for (i = first; i < last; i++) { - theta[i] = buf[m++]; - } -} diff --git a/src/PERI/pair_peri_eps.h b/src/PERI/pair_peri_eps.h index 82d4c91ddb..5d9a437ac8 100644 --- a/src/PERI/pair_peri_eps.h +++ b/src/PERI/pair_peri_eps.h @@ -20,45 +20,23 @@ PairStyle(peri/eps,PairPeriEPS); #ifndef LMP_PAIR_PERI_EPS_H #define LMP_PAIR_PERI_EPS_H -#include "pair.h" +#include "pair_peri.h" namespace LAMMPS_NS { -class PairPeriEPS : public Pair { +class PairPeriEPS : public PairPeri { public: - double *theta; - double *elastic_energy; - PairPeriEPS(class LAMMPS *); - virtual ~PairPeriEPS(); - int pack_forward_comm(int, int *, double *, int, int *); - void unpack_forward_comm(int, int, double *); + virtual ~PairPeriEPS() = default; virtual void compute(int, int); - void settings(int, char **); void coeff(int, char **); double init_one(int, int); - void init_style(); void write_restart(FILE *); void read_restart(FILE *); void write_restart_settings(FILE *) {} void read_restart_settings(FILE *) {} - double memory_usage(); - double influence_function(double, double, double); - void compute_dilatation(); double compute_DeviatoricForceStateNorm(int); - - protected: - int ifix_peri; - double **bulkmodulus; - double **shearmodulus; - double **s00, **alpha; - double **cut, **m_yieldstress; //NEW: **m_yieldstress - - double *s0_new; - int nmax; - - void allocate(); }; } // namespace LAMMPS_NS @@ -104,9 +82,4 @@ E: Fix peri neigh does not exist Somehow a fix that the pair style defines has been deleted. -E: Divide by 0 in influence function - -This should not normally occur. It is likely a problem with your -model. - */ diff --git a/src/PERI/pair_peri_lps.cpp b/src/PERI/pair_peri_lps.cpp index 5b725306b0..f7c024983b 100644 --- a/src/PERI/pair_peri_lps.cpp +++ b/src/PERI/pair_peri_lps.cpp @@ -37,23 +37,8 @@ using namespace LAMMPS_NS; /* ---------------------------------------------------------------------- */ -PairPeriLPS::PairPeriLPS(LAMMPS *lmp) : Pair(lmp) +PairPeriLPS::PairPeriLPS(LAMMPS *_lmp) : PairPeri(_lmp) { - for (int i = 0; i < 6; i++) virial[i] = 0.0; - no_virial_fdotr_compute = 1; - single_enable = 0; - - ifix_peri = -1; - - nmax = 0; - s0_new = nullptr; - theta = nullptr; - - bulkmodulus = nullptr; - shearmodulus = nullptr; - s00 = alpha = nullptr; - cut = nullptr; - // set comm size needed by this Pair // comm_reverse not needed @@ -62,25 +47,6 @@ PairPeriLPS::PairPeriLPS(LAMMPS *lmp) : Pair(lmp) /* ---------------------------------------------------------------------- */ -PairPeriLPS::~PairPeriLPS() -{ - if (ifix_peri >= 0) modify->delete_fix("PERI_NEIGH"); - - if (allocated) { - memory->destroy(setflag); - memory->destroy(cutsq); - memory->destroy(bulkmodulus); - memory->destroy(shearmodulus); - memory->destroy(s00); - memory->destroy(alpha); - memory->destroy(cut); - memory->destroy(theta); - memory->destroy(s0_new); - } -} - -/* ---------------------------------------------------------------------- */ - void PairPeriLPS::compute(int eflag, int vflag) { int i,j,ii,jj,inum,jnum,itype,jtype; @@ -101,10 +67,10 @@ void PairPeriLPS::compute(int eflag, int vflag) double *vfrac = atom->vfrac; double *s0 = atom->s0; double **x0 = atom->x0; - double **r0 = ((FixPeriNeigh *) modify->fix[ifix_peri])->r0; - tagint **partner = ((FixPeriNeigh *) modify->fix[ifix_peri])->partner; - int *npartner = ((FixPeriNeigh *) modify->fix[ifix_peri])->npartner; - double *wvolume = ((FixPeriNeigh *) modify->fix[ifix_peri])->wvolume; + double **r0 = fix_peri_neigh->r0; + tagint **partner = fix_peri_neigh->partner; + int *npartner = fix_peri_neigh->npartner; + double *wvolume = fix_peri_neigh->wvolume; // lc = lattice constant // init_style guarantees it's the same in x, y, and z @@ -205,13 +171,13 @@ void PairPeriLPS::compute(int eflag, int vflag) } // Compute the dilatation on each particle - compute_dilatation(); + compute_dilatation(0,nlocal); // communicate dilatation (theta) of each particle comm->forward_comm_pair(this); // communicate wighted volume (wvolume) upon every reneighbor if (neighbor->ago == 0) - comm->forward_comm_fix(modify->fix[ifix_peri]); + comm->forward_comm_fix(fix_peri_neigh); // Volume-dependent part of the energy if (eflag) { @@ -272,7 +238,7 @@ void PairPeriLPS::compute(int eflag, int vflag) // avoid roundoff errors - if (fabs(dr) < 2.2204e-016) dr = 0.0; + if (fabs(dr) < NEAR_ZERO) dr = 0.0; // scale vfrac[j] if particle j near the horizon @@ -335,37 +301,6 @@ void PairPeriLPS::compute(int eflag, int vflag) } -/* ---------------------------------------------------------------------- - allocate all arrays -------------------------------------------------------------------------- */ - -void PairPeriLPS::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(bulkmodulus,n+1,n+1,"pair:bulkmodulus"); - memory->create(shearmodulus,n+1,n+1,"pair:shearmodulus"); - memory->create(s00,n+1,n+1,"pair:s00"); - memory->create(alpha,n+1,n+1,"pair:alpha"); - memory->create(cut,n+1,n+1,"pair:cut"); -} - -/* ---------------------------------------------------------------------- - global settings -------------------------------------------------------------------------- */ - -void PairPeriLPS::settings(int narg, char **/*arg*/) -{ - if (narg) error->all(FLERR,"Illegal pair_style command"); -} - /* ---------------------------------------------------------------------- set coeffs for one or more type pairs ------------------------------------------------------------------------- */ @@ -418,38 +353,6 @@ double PairPeriLPS::init_one(int i, int j) return cut[i][j]; } -/* ---------------------------------------------------------------------- - init specific to this pair style -------------------------------------------------------------------------- */ - -void PairPeriLPS::init_style() -{ - // error checks - - if (!atom->peri_flag) - error->all(FLERR,"Pair style peri requires atom style peri"); - if (atom->map_style == Atom::MAP_NONE) - error->all(FLERR,"Pair peri requires an atom map, see atom_modify"); - - if (domain->lattice->xlattice != domain->lattice->ylattice || - domain->lattice->xlattice != domain->lattice->zlattice || - domain->lattice->ylattice != domain->lattice->zlattice) - error->all(FLERR,"Pair peri lattice is not identical in x, y, and z"); - - // if first init, create Fix needed for storing fixed neighbors - - if (ifix_peri == -1) modify->add_fix("PERI_NEIGH all PERI_NEIGH"); - - // find associated PERI_NEIGH fix that must exist - // could have changed locations in fix list since created - - ifix_peri = modify->find_fix_by_style("^PERI_NEIGH"); - if (ifix_peri == -1) - error->all(FLERR,"Fix peri neigh does not exist"); - - neighbor->request(this,instance_me); -} - /* ---------------------------------------------------------------------- proc 0 writes to restart file ------------------------------------------------------------------------- */ @@ -500,148 +403,3 @@ void PairPeriLPS::read_restart(FILE *fp) } } } - -/* ---------------------------------------------------------------------- - memory usage of local atom-based arrays -------------------------------------------------------------------------- */ - -double PairPeriLPS::memory_usage() -{ - double bytes = 2 * nmax * sizeof(double); - return bytes; -} - -/* ---------------------------------------------------------------------- - influence function definition -------------------------------------------------------------------------- */ - -double PairPeriLPS::influence_function(double xi_x, double xi_y, double xi_z) -{ - double r = sqrt(xi_x*xi_x + xi_y*xi_y + xi_z*xi_z); - double omega; - - if (fabs(r) < 2.2204e-016) - error->one(FLERR,"Divide by 0 in influence function of pair peri/lps"); - omega = 1.0/r; - return omega; -} - -/* ---------------------------------------------------------------------- */ - -void PairPeriLPS::compute_dilatation() -{ - int i,j,jj,jnum,itype,jtype; - double xtmp,ytmp,ztmp,delx,dely,delz; - double xtmp0,ytmp0,ztmp0,delx0,dely0,delz0; - double rsq,r,dr; - double delta; - - double **x = atom->x; - int *type = atom->type; - double **x0 = atom->x0; - int nlocal = atom->nlocal; - double *vfrac = atom->vfrac; - double vfrac_scale = 1.0; - - double lc = domain->lattice->xlattice; - double half_lc = 0.5*lc; - - double **r0 = ((FixPeriNeigh *) modify->fix[ifix_peri])->r0; - tagint **partner = ((FixPeriNeigh *) modify->fix[ifix_peri])->partner; - int *npartner = ((FixPeriNeigh *) modify->fix[ifix_peri])->npartner; - double *wvolume = ((FixPeriNeigh *) modify->fix[ifix_peri])->wvolume; - - int periodic = domain->xperiodic || domain->yperiodic || domain->zperiodic; - - // compute the dilatation theta - - for (i = 0; i < nlocal; i++) { - xtmp = x[i][0]; - ytmp = x[i][1]; - ztmp = x[i][2]; - xtmp0 = x0[i][0]; - ytmp0 = x0[i][1]; - ztmp0 = x0[i][2]; - jnum = npartner[i]; - theta[i] = 0.0; - itype = type[i]; - - for (jj = 0; jj < jnum; jj++) { - - // if bond already broken, skip this partner - if (partner[i][jj] == 0) continue; - - // Look up local index of this partner particle - j = atom->map(partner[i][jj]); - - // Skip if particle is "lost" - if (j < 0) continue; - - // Compute force density and add to PD equation of motion - delx = xtmp - x[j][0]; - dely = ytmp - x[j][1]; - delz = ztmp - x[j][2]; - if (periodic) domain->minimum_image(delx,dely,delz); - rsq = delx*delx + dely*dely + delz*delz; - delx0 = xtmp0 - x0[j][0]; - dely0 = ytmp0 - x0[j][1]; - delz0 = ztmp0 - x0[j][2]; - if (periodic) domain->minimum_image(delx0,dely0,delz0); - - r = sqrt(rsq); - dr = r - r0[i][jj]; - if (fabs(dr) < 2.2204e-016) dr = 0.0; - - jtype = type[j]; - delta = cut[itype][jtype]; - - // scale vfrac[j] if particle j near the horizon - - if ((fabs(r0[i][jj] - delta)) <= half_lc) - vfrac_scale = (-1.0/(2*half_lc))*(r0[i][jj]) + - (1.0 + ((delta - half_lc)/(2*half_lc) ) ); - else vfrac_scale = 1.0; - - theta[i] += influence_function(delx0, dely0, delz0) * r0[i][jj] * dr * - vfrac[j] * vfrac_scale; - - } - - // if wvolume[i] is zero, then particle i has no bonds - // therefore, the dilatation is set to - - if (wvolume[i] != 0.0) theta[i] = (3.0/wvolume[i]) * theta[i]; - else theta[i] = 0; - } -} - - -/* ---------------------------------------------------------------------- - communication routines - ---------------------------------------------------------------------- */ - -int PairPeriLPS::pack_forward_comm(int n, int *list, double *buf, - int /*pbc_flag*/, int * /*pbc*/) -{ - int i,j,m; - - m = 0; - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = theta[j]; - } - return m; -} - -/* ---------------------------------------------------------------------- */ - -void PairPeriLPS::unpack_forward_comm(int n, int first, double *buf) -{ - int i,m,last; - - m = 0; - last = first + n; - for (i = first; i < last; i++) { - theta[i] = buf[m++]; - } -} diff --git a/src/PERI/pair_peri_lps.h b/src/PERI/pair_peri_lps.h index fb4647eb2f..0d9132f612 100644 --- a/src/PERI/pair_peri_lps.h +++ b/src/PERI/pair_peri_lps.h @@ -20,44 +20,22 @@ PairStyle(peri/lps,PairPeriLPS); #ifndef LMP_PAIR_PERI_LPS_H #define LMP_PAIR_PERI_LPS_H -#include "pair.h" +#include "pair_peri.h" namespace LAMMPS_NS { -class PairPeriLPS : public Pair { - public: - double *theta; - double *elastic_energy; - +class PairPeriLPS : public PairPeri { +public: PairPeriLPS(class LAMMPS *); - virtual ~PairPeriLPS(); - int pack_forward_comm(int, int *, double *, int, int *); - void unpack_forward_comm(int, int, double *); + virtual ~PairPeriLPS() = default; virtual void compute(int, int); - void settings(int, char **); void coeff(int, char **); double init_one(int, int); - void init_style(); void write_restart(FILE *); void read_restart(FILE *); void write_restart_settings(FILE *) {} void read_restart_settings(FILE *) {} - double memory_usage(); - double influence_function(double, double, double); - void compute_dilatation(); - - protected: - int ifix_peri; - double **bulkmodulus; - double **shearmodulus; - double **s00, **alpha; - double **cut; - - double *s0_new; - int nmax; - - void allocate(); }; } // namespace LAMMPS_NS @@ -99,9 +77,4 @@ E: Fix peri neigh does not exist Somehow a fix that the pair style defines has been deleted. -E: Divide by 0 in influence function of pair peri/lps - -This should not normally occur. It is likely a problem with your -model. - */ diff --git a/src/PERI/pair_peri_pmb.cpp b/src/PERI/pair_peri_pmb.cpp index fa96ef0f26..0f88f0d80a 100644 --- a/src/PERI/pair_peri_pmb.cpp +++ b/src/PERI/pair_peri_pmb.cpp @@ -37,37 +37,9 @@ using namespace LAMMPS_NS; /* ---------------------------------------------------------------------- */ -PairPeriPMB::PairPeriPMB(LAMMPS *lmp) : Pair(lmp) +PairPeriPMB::PairPeriPMB(LAMMPS *_lmp) : PairPeri(_lmp) { - for (int i = 0; i < 6; i++) virial[i] = 0.0; - no_virial_fdotr_compute=1; - - ifix_peri = -1; - - nmax = 0; - s0_new = nullptr; - - kspring = nullptr; - s00 = nullptr; - alpha = nullptr; - cut = nullptr; -} - -/* ---------------------------------------------------------------------- */ - -PairPeriPMB::~PairPeriPMB() -{ - if (ifix_peri >= 0) modify->delete_fix("PERI_NEIGH"); - - if (allocated) { - memory->destroy(setflag); - memory->destroy(cutsq); - memory->destroy(kspring); - memory->destroy(s00); - memory->destroy(alpha); - memory->destroy(cut); - memory->destroy(s0_new); - } + single_enable = 1; } /* ---------------------------------------------------------------------- */ @@ -92,9 +64,9 @@ void PairPeriPMB::compute(int eflag, int vflag) double *vfrac = atom->vfrac; double *s0 = atom->s0; double **x0 = atom->x0; - double **r0 = ((FixPeriNeigh *) modify->fix[ifix_peri])->r0; - tagint **partner = ((FixPeriNeigh *) modify->fix[ifix_peri])->partner; - int *npartner = ((FixPeriNeigh *) modify->fix[ifix_peri])->npartner; + double **r0 = fix_peri_neigh->r0; + tagint **partner = fix_peri_neigh->partner; + int *npartner = fix_peri_neigh->npartner; // lc = lattice constant // init_style guarantees it's the same in x, y, and z @@ -227,7 +199,7 @@ void PairPeriPMB::compute(int eflag, int vflag) // avoid roundoff errors - if (fabs(dr) < 2.2204e-016) dr = 0.0; + if (fabs(dr) < NEAR_ZERO) dr = 0.0; // scale vfrac[j] if particle j near the horizon @@ -269,36 +241,6 @@ void PairPeriPMB::compute(int eflag, int vflag) for (i = 0; i < nlocal; i++) s0[i] = s0_new[i]; } -/* ---------------------------------------------------------------------- - allocate all arrays -------------------------------------------------------------------------- */ - -void PairPeriPMB::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(kspring,n+1,n+1,"pair:kspring"); - memory->create(s00,n+1,n+1,"pair:s00"); - memory->create(alpha,n+1,n+1,"pair:alpha"); - memory->create(cut,n+1,n+1,"pair:cut"); -} - -/* ---------------------------------------------------------------------- - global settings -------------------------------------------------------------------------- */ - -void PairPeriPMB::settings(int narg, char **/*arg*/) -{ - if (narg) error->all(FLERR,"Illegal pair_style command"); -} - /* ---------------------------------------------------------------------- set coeffs for one or more type pairs ------------------------------------------------------------------------- */ @@ -348,38 +290,6 @@ double PairPeriPMB::init_one(int i, int j) return cut[i][j]; } -/* ---------------------------------------------------------------------- - init specific to this pair style -------------------------------------------------------------------------- */ - -void PairPeriPMB::init_style() -{ - // error checks - - if (!atom->peri_flag) - error->all(FLERR,"Pair style peri requires atom style peri"); - if (atom->map_style == Atom::MAP_NONE) - error->all(FLERR,"Pair peri requires an atom map, see atom_modify"); - - if (domain->lattice->xlattice != domain->lattice->ylattice || - domain->lattice->xlattice != domain->lattice->zlattice || - domain->lattice->ylattice != domain->lattice->zlattice) - error->all(FLERR,"Pair peri lattice is not identical in x, y, and z"); - - // if first init, create Fix needed for storing fixed neighbors - - if (ifix_peri == -1) modify->add_fix("PERI_NEIGH all PERI_NEIGH"); - - // find associated PERI_NEIGH fix that must exist - // could have changed locations in fix list since created - - ifix_peri = modify->find_fix_by_style("^PERI_NEIGH"); - if (ifix_peri == -1) - error->all(FLERR,"Fix peri neigh does not exist"); - - neighbor->request(this,instance_me); -} - /* ---------------------------------------------------------------------- proc 0 writes to restart file ------------------------------------------------------------------------- */ @@ -439,9 +349,9 @@ double PairPeriPMB::single(int i, int j, int itype, int jtype, double rsq, double *vfrac = atom->vfrac; double **x0 = atom->x0; - double **r0 = ((FixPeriNeigh *) modify->fix[ifix_peri])->r0; - tagint **partner = ((FixPeriNeigh *) modify->fix[ifix_peri])->partner; - int *npartner = ((FixPeriNeigh *) modify->fix[ifix_peri])->npartner; + double **r0 = fix_peri_neigh->r0; + tagint **partner = fix_peri_neigh->partner; + int *npartner = fix_peri_neigh->npartner; double lc = domain->lattice->xlattice; double half_lc = 0.5*lc; @@ -473,7 +383,7 @@ double PairPeriPMB::single(int i, int j, int itype, int jtype, double rsq, if (j < 0) continue; if (j == atom->map(partner[i][jj])) { dr = r - r0[i][jj]; - if (fabs(dr) < 2.2204e-016) dr = 0.0; + if (fabs(dr) < NEAR_ZERO) dr = 0.0; if ( (fabs(r0[i][jj] - sqrt(cutsq[itype][jtype]))) <= half_lc) vfrac_scale = (-1.0/(2*half_lc))*(r0[i][jj]) + (1.0 + ((sqrt(cutsq[itype][jtype]) - half_lc)/(2*half_lc))); @@ -487,13 +397,3 @@ double PairPeriPMB::single(int i, int j, int itype, int jtype, double rsq, return energy; } - -/* ---------------------------------------------------------------------- - memory usage of local atom-based arrays -------------------------------------------------------------------------- */ - -double PairPeriPMB::memory_usage() -{ - double bytes = (double)nmax * sizeof(double); - return bytes; -} diff --git a/src/PERI/pair_peri_pmb.h b/src/PERI/pair_peri_pmb.h index cd65052dec..44a46093de 100644 --- a/src/PERI/pair_peri_pmb.h +++ b/src/PERI/pair_peri_pmb.h @@ -20,36 +20,25 @@ PairStyle(peri/pmb,PairPeriPMB); #ifndef LMP_PAIR_PERI_PMB_H #define LMP_PAIR_PERI_PMB_H -#include "pair.h" +#include "pair_peri.h" namespace LAMMPS_NS { -class PairPeriPMB : public Pair { +class PairPeriPMB : public PairPeri { public: PairPeriPMB(class LAMMPS *); - virtual ~PairPeriPMB(); + virtual ~PairPeriPMB() = default; + virtual void compute(int, int); - void settings(int, char **); void coeff(int, char **); double init_one(int, int); - void init_style(); + void write_restart(FILE *); void read_restart(FILE *); void write_restart_settings(FILE *) {} void read_restart_settings(FILE *) {} + double single(int, int, int, int, double, double, double, double &); - virtual double memory_usage(); - - protected: - int ifix_peri; - double **kspring; - double **s00, **alpha; - double **cut; - - double *s0_new; - int nmax; - - void allocate(); }; } // namespace LAMMPS_NS diff --git a/src/PERI/pair_peri_ves.cpp b/src/PERI/pair_peri_ves.cpp index ca8802396e..522d05e04f 100644 --- a/src/PERI/pair_peri_ves.cpp +++ b/src/PERI/pair_peri_ves.cpp @@ -37,25 +37,8 @@ using namespace LAMMPS_NS; /* ---------------------------------------------------------------------- */ -PairPeriVES::PairPeriVES(LAMMPS *lmp) : Pair(lmp) +PairPeriVES::PairPeriVES(LAMMPS *_lmp) : PairPeri(_lmp) { - for (int i = 0; i < 6; i++) virial[i] = 0.0; - no_virial_fdotr_compute = 1; - single_enable = 0; - - ifix_peri = -1; - - nmax = 0; - s0_new = nullptr; - theta = nullptr; - - bulkmodulus = nullptr; - shearmodulus = nullptr; - s00 = alpha = nullptr; - cut = nullptr; - m_lambdai = nullptr; - m_taubi = nullptr; - // set comm size needed by this Pair // comm_reverse not needed @@ -64,27 +47,6 @@ PairPeriVES::PairPeriVES(LAMMPS *lmp) : Pair(lmp) /* ---------------------------------------------------------------------- */ -PairPeriVES::~PairPeriVES() -{ - if (ifix_peri >= 0) modify->delete_fix("PERI_NEIGH"); - - if (allocated) { - memory->destroy(setflag); - memory->destroy(cutsq); - memory->destroy(bulkmodulus); - memory->destroy(shearmodulus); - memory->destroy(s00); - memory->destroy(alpha); - memory->destroy(cut); - memory->destroy(m_lambdai); - memory->destroy(m_taubi); - memory->destroy(theta); - memory->destroy(s0_new); - } -} - -/* ---------------------------------------------------------------------- */ - void PairPeriVES::compute(int eflag, int vflag) { int i,j,ii,jj,inum,jnum,itype,jtype; @@ -108,14 +70,12 @@ void PairPeriVES::compute(int eflag, int vflag) double *vfrac = atom->vfrac; double *s0 = atom->s0; double **x0 = atom->x0; - double **r0 = ((FixPeriNeigh *) modify->fix[ifix_peri])->r0; - double **deviatorextention = - ((FixPeriNeigh *) modify->fix[ifix_peri])->deviatorextention; - double **deviatorBackextention = - ((FixPeriNeigh *) modify->fix[ifix_peri])->deviatorBackextention; - tagint **partner = ((FixPeriNeigh *) modify->fix[ifix_peri])->partner; - int *npartner = ((FixPeriNeigh *) modify->fix[ifix_peri])->npartner; - double *wvolume = ((FixPeriNeigh *) modify->fix[ifix_peri])->wvolume; + double **r0 = fix_peri_neigh->r0; + double **deviatorextention = fix_peri_neigh->deviatorextention; + double **deviatorBackextention = fix_peri_neigh->deviatorBackextention; + tagint **partner = fix_peri_neigh->partner; + int *npartner = fix_peri_neigh->npartner; + double *wvolume = fix_peri_neigh->wvolume; // lc = lattice constant // init_style guarantees it's the same in x, y, and z @@ -216,7 +176,7 @@ void PairPeriVES::compute(int eflag, int vflag) } // Compute the dilatation on each particle - compute_dilatation(); + compute_dilatation(0,nlocal); // communicate dilatation (theta) of each particle comm->forward_comm_pair(this); @@ -224,7 +184,7 @@ void PairPeriVES::compute(int eflag, int vflag) // communicate weighted volume (wvolume) upon every reneighbor if (neighbor->ago == 0) - comm->forward_comm_fix(modify->fix[ifix_peri]); + comm->forward_comm_fix(fix_peri_neigh); // volume-dependent part of the energy @@ -286,7 +246,7 @@ void PairPeriVES::compute(int eflag, int vflag) // avoid roundoff errors - if (fabs(dr) < 2.2204e-016) dr = 0.0; + if (fabs(dr) < NEAR_ZERO) dr = 0.0; // scale vfrac[j] if particle j near the horizon @@ -381,39 +341,6 @@ void PairPeriVES::compute(int eflag, int vflag) for (i = 0; i < nlocal; i++) s0[i] = s0_new[i]; } -/* ---------------------------------------------------------------------- - allocate all arrays -------------------------------------------------------------------------- */ - -void PairPeriVES::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(bulkmodulus,n+1,n+1,"pair:bulkmodulus"); - memory->create(shearmodulus,n+1,n+1,"pair:shearmodulus"); - memory->create(s00,n+1,n+1,"pair:s00"); - memory->create(alpha,n+1,n+1,"pair:alpha"); - memory->create(cut,n+1,n+1,"pair:cut"); - memory->create(m_lambdai,n+1,n+1,"pair:m_lambdai"); - memory->create(m_taubi,n+1,n+1,"pair:m_taubi"); -} - -/* ---------------------------------------------------------------------- - global settings -------------------------------------------------------------------------- */ - -void PairPeriVES::settings(int narg, char **/*arg*/) -{ - if (narg) error->all(FLERR,"Illegal pair_style command"); -} - /* ---------------------------------------------------------------------- set coeffs for one or more type pairs ------------------------------------------------------------------------- */ @@ -472,40 +399,6 @@ double PairPeriVES::init_one(int i, int j) return cut[i][j]; } -/* ---------------------------------------------------------------------- - init specific to this pair style -------------------------------------------------------------------------- */ - -void PairPeriVES::init_style() -{ - // error checks - - if (!atom->peri_flag) - error->all(FLERR,"Pair style peri requires atom style peri"); - if (atom->map_style == Atom::MAP_NONE) - error->all(FLERR,"Pair peri requires an atom map, see atom_modify"); - - if (domain->lattice == nullptr) - error->all(FLERR,"Pair peri requires a lattice be defined"); - if (domain->lattice->xlattice != domain->lattice->ylattice || - domain->lattice->xlattice != domain->lattice->zlattice || - domain->lattice->ylattice != domain->lattice->zlattice) - error->all(FLERR,"Pair peri lattice is not identical in x, y, and z"); - - // if first init, create Fix needed for storing fixed neighbors - - if (ifix_peri == -1) modify->add_fix("PERI_NEIGH all PERI_NEIGH"); - - // find associated PERI_NEIGH fix that must exist - // could have changed locations in fix list since created - - ifix_peri = modify->find_fix_by_style("^PERI_NEIGH"); - if (ifix_peri == -1) - error->all(FLERR,"Fix peri neigh does not exist"); - - neighbor->request(this,instance_me); -} - /* ---------------------------------------------------------------------- proc 0 writes to restart file ------------------------------------------------------------------------- */ @@ -562,153 +455,3 @@ void PairPeriVES::read_restart(FILE *fp) } } } - -/* ---------------------------------------------------------------------- - memory usage of local atom-based arrays -------------------------------------------------------------------------- */ - -double PairPeriVES::memory_usage() -{ - double bytes = 2 * nmax * sizeof(double); - return bytes; -} - -/* ---------------------------------------------------------------------- - influence function definition -------------------------------------------------------------------------- */ - -double PairPeriVES::influence_function(double xi_x, double xi_y, double xi_z) -{ - double r = sqrt(xi_x*xi_x + xi_y*xi_y + xi_z*xi_z); - double omega; - - if (fabs(r) < 2.2204e-016) - error->one(FLERR,"Divide by 0 in influence function of pair peri/lps"); - omega = 1.0/r; - return omega; -} - -/* ---------------------------------------------------------------------- */ - -void PairPeriVES::compute_dilatation() -{ - int i,j,jj,jnum,itype,jtype; - double xtmp,ytmp,ztmp,delx,dely,delz; - double xtmp0,ytmp0,ztmp0,delx0,dely0,delz0; - double rsq,r,dr; - double delta; - - double **x = atom->x; - int *type = atom->type; - double **x0 = atom->x0; - int nlocal = atom->nlocal; - double *vfrac = atom->vfrac; - double vfrac_scale = 1.0; - - double lc = domain->lattice->xlattice; - double half_lc = 0.5*lc; - - - double **r0 = ((FixPeriNeigh *) modify->fix[ifix_peri])->r0; - tagint **partner = ((FixPeriNeigh *) modify->fix[ifix_peri])->partner; - int *npartner = ((FixPeriNeigh *) modify->fix[ifix_peri])->npartner; - double *wvolume = ((FixPeriNeigh *) modify->fix[ifix_peri])->wvolume; - - int periodic = domain->xperiodic || domain->yperiodic || domain->zperiodic; - - // compute the dilatation theta - - for (i = 0; i < nlocal; i++) { - xtmp = x[i][0]; - ytmp = x[i][1]; - ztmp = x[i][2]; - xtmp0 = x0[i][0]; - ytmp0 = x0[i][1]; - ztmp0 = x0[i][2]; - jnum = npartner[i]; - theta[i] = 0.0; - itype = type[i]; - - for (jj = 0; jj < jnum; jj++) { - - // if bond already broken, skip this partner - - if (partner[i][jj] == 0) continue; - - // look up local index of this partner particle - - j = atom->map(partner[i][jj]); - - // skip if particle is "lost" - - if (j < 0) continue; - - // compute force density and add to PD equation of motion - - delx = xtmp - x[j][0]; - dely = ytmp - x[j][1]; - delz = ztmp - x[j][2]; - if (periodic) domain->minimum_image(delx,dely,delz); - rsq = delx*delx + dely*dely + delz*delz; - delx0 = xtmp0 - x0[j][0]; - dely0 = ytmp0 - x0[j][1]; - delz0 = ztmp0 - x0[j][2]; - if (periodic) domain->minimum_image(delx0,dely0,delz0); - - r = sqrt(rsq); - dr = r - r0[i][jj]; - if (fabs(dr) < 2.2204e-016) dr = 0.0; - - jtype = type[j]; - delta = cut[itype][jtype]; - - // scale vfrac[j] if particle j near the horizon - - if ((fabs(r0[i][jj] - delta)) <= half_lc) - vfrac_scale = (-1.0/(2*half_lc))*(r0[i][jj]) + - (1.0 + ((delta - half_lc)/(2*half_lc) ) ); - else vfrac_scale = 1.0; - - theta[i] += influence_function(delx0, dely0, delz0) * r0[i][jj] * dr * - vfrac[j] * vfrac_scale; - - } - - // if wvolume[i] is zero, then particle i has no bonds - // therefore, the dilatation is set to - - if (wvolume[i] != 0.0) theta[i] = (3.0/wvolume[i]) * theta[i]; - else theta[i] = 0; - } -} - - -/* ---------------------------------------------------------------------- - communication routines ----------------------------------------------------------------------- */ - -int PairPeriVES::pack_forward_comm(int n, int *list, double *buf, - int /*pbc_flag*/, int * /*pbc*/) -{ - int i,j,m; - - m = 0; - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = theta[j]; - } - return m; -} - -/* ---------------------------------------------------------------------- */ - -void PairPeriVES::unpack_forward_comm(int n, int first, double *buf) -{ - int i,m,last; - - m = 0; - last = first + n; - for (i = first; i < last; i++) { - theta[i] = buf[m++]; - } -} diff --git a/src/PERI/pair_peri_ves.h b/src/PERI/pair_peri_ves.h index 03659ae65d..e80c5e3383 100644 --- a/src/PERI/pair_peri_ves.h +++ b/src/PERI/pair_peri_ves.h @@ -20,46 +20,22 @@ PairStyle(peri/ves,PairPeriVES); #ifndef LMP_PAIR_PERI_VES_H #define LMP_PAIR_PERI_VES_H -#include "pair.h" +#include "pair_peri.h" namespace LAMMPS_NS { -class PairPeriVES : public Pair { +class PairPeriVES : public PairPeri { public: - double *theta; - double *elastic_energy; - PairPeriVES(class LAMMPS *); - virtual ~PairPeriVES(); - int pack_forward_comm(int, int *, double *, int, int *); - void unpack_forward_comm(int, int, double *); + virtual ~PairPeriVES() = default; virtual void compute(int, int); - void settings(int, char **); void coeff(int, char **); double init_one(int, int); - void init_style(); void write_restart(FILE *); void read_restart(FILE *); void write_restart_settings(FILE *) {} void read_restart_settings(FILE *) {} - double memory_usage(); - double influence_function(double, double, double); - void compute_dilatation(); - - protected: - int ifix_peri; - double **bulkmodulus; - double **shearmodulus; - double **s00, **alpha; - double **cut; - double **m_lambdai; - double **m_taubi; - - double *s0_new; - int nmax; - - void allocate(); }; } // namespace LAMMPS_NS @@ -105,9 +81,4 @@ E: Fix peri neigh does not exist Somehow a fix that the pair style defines has been deleted. -E: Divide by 0 in influence function of pair peri/lps - -This should not normally occur. It is likely a problem with your -model. - */ From dd2ff737f1b485d3f1e1e29cbacbd60f33204ada Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Mon, 18 Oct 2021 06:50:28 -0400 Subject: [PATCH 214/372] port mdi/engine command to new fix accessor API --- src/MDI/mdi_engine.cpp | 18 +++++++----------- 1 file changed, 7 insertions(+), 11 deletions(-) diff --git a/src/MDI/mdi_engine.cpp b/src/MDI/mdi_engine.cpp index 4be739d187..4f9302c4d5 100644 --- a/src/MDI/mdi_engine.cpp +++ b/src/MDI/mdi_engine.cpp @@ -20,8 +20,8 @@ #include "atom.h" #include "error.h" -#include "integrate.h" #include "fix_mdi_engine.h" +#include "integrate.h" #include "mdi.h" #include "min.h" #include "modify.h" @@ -176,17 +176,13 @@ void MDIEngine::command(int narg, char ** /*arg*/) // if the mdi/engine fix is not already present, add it now - int ifix = modify->find_fix_by_style("mdi/engine"); bool added_mdi_engine_fix = false; - if (ifix < 0) { - modify->add_fix("MDI_ENGINE_INTERNAL all mdi/engine"); + auto fixes = modify->get_fix_by_style("mdi/engine"); + if (fixes.size() == 0) { added_mdi_engine_fix = true; - } - - // identify the mdi_engine fix - - ifix = modify->find_fix_by_style("mdi/engine"); - mdi_fix = static_cast(modify->fix[ifix]); + mdi_fix = (FixMDIEngine *) modify->add_fix("MDI_ENGINE_INTERNAL all mdi/engine"); + } else + mdi_fix = (FixMDIEngine *) fixes.front(); // check that LAMMPS is setup as a compatible MDI engine @@ -224,7 +220,7 @@ void MDIEngine::command(int narg, char ** /*arg*/) error->all(FLERR, "MDI node exited with invalid command: {}", command); } - // remove mdi/engine fix that mdi/engine instantiated + // remove mdi/engine fix if instantiated here by mdi/engine if (added_mdi_engine_fix) modify->delete_fix("MDI_ENGINE_INTERNAL"); } From fc0e6af7dd840ee2adcdf35f7aa67b23df6b7286 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Mon, 18 Oct 2021 07:11:55 -0400 Subject: [PATCH 215/372] fix memory leaks --- src/PERI/pair_peri.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/PERI/pair_peri.cpp b/src/PERI/pair_peri.cpp index 9c920dd63f..44c83661c9 100644 --- a/src/PERI/pair_peri.cpp +++ b/src/PERI/pair_peri.cpp @@ -55,6 +55,8 @@ PairPeri::~PairPeri() memory->destroy(s00); memory->destroy(alpha); memory->destroy(cut); + memory->destroy(cutsq); + memory->destroy(setflag); memory->destroy(kspring); memory->destroy(s0_new); From 87b63f768f4f777f289620ff1ed4ad7892696009 Mon Sep 17 00:00:00 2001 From: Richard Berger Date: Mon, 18 Oct 2021 12:15:05 -0400 Subject: [PATCH 216/372] Only check for GPU double precision support if a GPU is present --- lib/gpu/lal_device.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/gpu/lal_device.cpp b/lib/gpu/lal_device.cpp index 47e6d6e500..43a565c9fe 100644 --- a/lib/gpu/lal_device.cpp +++ b/lib/gpu/lal_device.cpp @@ -1047,7 +1047,7 @@ bool lmp_has_compatible_gpu_device() UCL_Device gpu; bool compatible_gpu = gpu.num_platforms() > 0; #if defined(_SINGLE_DOUBLE) || defined(_DOUBLE_DOUBLE) - if (!gpu.double_precision(0)) + if (compatible_gpu && !gpu.double_precision(0)) compatible_gpu = false; #endif return compatible_gpu; From 5e102e1bfe884a9fdb39d2084da5e0dbf3c5cff2 Mon Sep 17 00:00:00 2001 From: Yury Lysogorskiy Date: Mon, 18 Oct 2021 18:43:38 +0200 Subject: [PATCH 217/372] ML-PACE.cmake: find_package(yaml-cpp 0.6.3 EXACT QUITE) first, otherwise dowload from github/yaml-cpp tag 0.6.3 --- cmake/Modules/Packages/ML-PACE.cmake | 73 ++++++++++++++++++++-------- 1 file changed, 53 insertions(+), 20 deletions(-) diff --git a/cmake/Modules/Packages/ML-PACE.cmake b/cmake/Modules/Packages/ML-PACE.cmake index 6a5d07553d..5ab56de62b 100644 --- a/cmake/Modules/Packages/ML-PACE.cmake +++ b/cmake/Modules/Packages/ML-PACE.cmake @@ -1,3 +1,53 @@ +# try to find system libyaml-cpp v.0.6.3 library +find_package(yaml-cpp 0.6.3 EXACT QUIET) + + +if(yaml-cpp_FOUND) + message(STATUS "Library yaml-cpp(v0.6.3) found") + #message(STATUS "YAML_CPP_LIBRARY_DIRS=${YAML_CPP_LIBRARY_DIRS}") + +# get_cmake_property(_variableNames VARIABLES) +# list (SORT _variableNames) +# foreach (_variableName ${_variableNames}) +# message(STATUS "${_variableName}=${${_variableName}}") +# endforeach() + + find_path(YAML_CPP_INCLUDE_DIR + NAMES yaml.h + PATHS ${YAML_CPP_INCLUDE_DIRS}) + + if(NOT YAML_CPP_LIBRARIES) + find_library(YAML_CPP_LIBRARY + NAMES yaml-cpp + PATHS ${YAML_CPP_LIBRARY_DIRS}) + else() + set(YAML_CPP_LIBRARY ${YAML_CPP_LIBRARIES}) + endif() +else() + message(STATUS "Library yaml-cpp(v0.6.3) not found, downloading") + + set(YAML_063_URL "https://github.com/jbeder/yaml-cpp/archive/refs/tags/yaml-cpp-0.6.3.tar.gz" CACHE STRING "URL for yaml-cpp (v.0.6.3) library sources") + set(YAML_063_MD5 "b45bf1089a382e81f6b661062c10d0c2" CACHE STRING "MD5 checksum of yaml-cpp (v.0.6.3) library tarball") + mark_as_advanced(YAML_063_URL) + mark_as_advanced(YAML_063_MD5) + + # download library sources to build folder + file(DOWNLOAD ${YAML_063_URL} ${CMAKE_BINARY_DIR}/yaml-cpp-0.6.3.tar.gz SHOW_PROGRESS EXPECTED_HASH MD5=${YAML_063_MD5}) + + execute_process( + COMMAND ${CMAKE_COMMAND} -E remove_directory yaml-cpp-yaml-cpp-0.6.3* + COMMAND ${CMAKE_COMMAND} -E tar xzf yaml-cpp-0.6.3.tar.gz + WORKING_DIRECTORY ${CMAKE_BINARY_DIR} + ) + + set(YAML_DIR ${CMAKE_BINARY_DIR}/yaml-cpp-yaml-cpp-0.6.3) + + add_subdirectory(${YAML_DIR} build-yaml-cpp EXCLUDE_FROM_ALL) + set(YAML_CPP_INCLUDE_DIR ${YAML_DIR}/include) + set(YAML_CPP_LIBRARY yaml-cpp) +endif() + + set(PACELIB_URL "https://github.com/ICAMS/lammps-user-pace/archive/refs/tags/v.2021.9.28.upd1.tar.gz" CACHE STRING "URL for PACE evaluator library sources") set(PACELIB_MD5 "ec75bc491edd75e10560cdbf129d91a7" CACHE STRING "MD5 checksum of PACE evaluator library tarball") @@ -16,25 +66,8 @@ execute_process( file(GLOB lib-pace ${CMAKE_BINARY_DIR}/lammps-user-pace-*) -# try to find system libyaml-cpp v.0.6.3 library -find_package(yaml-cpp 0.6.3 QUIET) - -find_path(YAML_CPP_INCLUDE_DIR - NAMES yaml.h - PATHS ${YAML_CPP_INCLUDE_DIRS}) - -find_library(YAML_CPP_LIBRARY - NAMES yaml-cpp - PATHS ${YAML_CPP_LIBRARY_DIRS}) - -# if system library not found - using downloaded -if(${YAML_CPP_LIBRARY} STREQUAL "" OR ${YAML_CPP_INCLUDE_DIR} STREQUAL "" OR - ${YAML_CPP_INCLUDE_DIR} STREQUAL "YAML_CPP_INCLUDE_DIR-NOTFOUND") - message("-- Library yaml-fcc v0.6.3 not found, using downloaded copy") - add_subdirectory(${lib-pace}/yaml-cpp build-yaml-cpp) - set(YAML_CPP_INCLUDE_DIR ${lib-pace}/yaml-cpp/include) - set(YAML_CPP_LIBRARY yaml-cpp-pace) -endif() +message(STATUS "YAML_CPP_INCLUDE_DIR=${YAML_CPP_INCLUDE_DIR}") +message(STATUS "YAML_CPP_LIBRARY=${YAML_CPP_LIBRARY}") file(GLOB PACE_EVALUATOR_INCLUDE_DIR ${lib-pace}/ML-PACE) file(GLOB PACE_EVALUATOR_SOURCES ${lib-pace}/ML-PACE/*.cpp) @@ -46,4 +79,4 @@ target_include_directories(pace PRIVATE ${YAML_CPP_INCLUDE_DIR}) target_include_directories(pace PUBLIC ${PACE_EVALUATOR_INCLUDE_DIR}) target_link_libraries(lammps PRIVATE pace) -target_link_libraries(lammps PRIVATE ${YAML_CPP_LIBRARY}) \ No newline at end of file +target_link_libraries(lammps PRIVATE ${YAML_CPP_LIBRARY}) From 0e369fb9b5441b8353694e1501d9ea5ab7615044 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Mon, 18 Oct 2021 13:47:29 -0400 Subject: [PATCH 218/372] update example to represent recent style changes. --- doc/src/Developer_write.rst | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/doc/src/Developer_write.rst b/doc/src/Developer_write.rst index 37ac9ca126..c3df6ad6bb 100644 --- a/doc/src/Developer_write.rst +++ b/doc/src/Developer_write.rst @@ -29,7 +29,9 @@ of code in the header before include guards: .. code-block:: c #ifdef FIX_CLASS - FixStyle(print/vel,FixPrintVel) + // clang-format off + FixStyle(print/vel,FixPrintVel); + // clang-format on #else /* the definition of the FixPrintVel class comes here */ ... From 241c816ad304ebd4c1444784fa0cb72ae01d8223 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Mon, 18 Oct 2021 17:29:25 -0400 Subject: [PATCH 219/372] adapt fix shake and pair style spin --- src/RIGID/fix_shake.cpp | 11 ++++++----- src/RIGID/fix_shake.h | 4 ++-- src/SPIN/pair_spin.cpp | 14 +++++++------- 3 files changed, 15 insertions(+), 14 deletions(-) diff --git a/src/RIGID/fix_shake.cpp b/src/RIGID/fix_shake.cpp index 9e45ec13d8..fb684f6b19 100644 --- a/src/RIGID/fix_shake.cpp +++ b/src/RIGID/fix_shake.cpp @@ -362,10 +362,11 @@ void FixShake::init() // set ptrs to rRESPA variables if (utils::strmatch(update->integrate_style,"^respa")) { - ifix_respa = modify->find_fix_by_style("^RESPA"); - nlevels_respa = ((Respa *) update->integrate)->nlevels; - loop_respa = ((Respa *) update->integrate)->loop; - step_respa = ((Respa *) update->integrate)->step; + fix_respa = (FixRespa *) modify->get_fix_by_style("^RESPA").front(); + Respa *respa_style = (Respa *) update->integrate; + nlevels_respa = respa_style->nlevels; + loop_respa = respa_style->loop; + step_respa = respa_style->step; } // set equilibrium bond distances @@ -1619,7 +1620,7 @@ void FixShake::unconstrained_update_respa(int ilevel) // x + dt0 (v + dtN/m fN + 1/2 dt(N-1)/m f(N-1) + ... + 1/2 dt0/m f0) // also set dtfsq = dt0*dtN so that shake,shake3,etc can use it - double ***f_level = ((FixRespa *) modify->fix[ifix_respa])->f_level; + double ***f_level = fix_respa->f_level; dtfsq = dtf_inner * step_respa[ilevel]; double invmass,dtfmsq; diff --git a/src/RIGID/fix_shake.h b/src/RIGID/fix_shake.h index c5563ea9b9..3db415281d 100644 --- a/src/RIGID/fix_shake.h +++ b/src/RIGID/fix_shake.h @@ -77,8 +77,8 @@ class FixShake : public Fix { int molecular; // copy of atom->molecular double *bond_distance, *angle_distance; // constraint distances - int ifix_respa; // rRESPA fix needed by SHAKE - int nlevels_respa; // copies of needed rRESPA variables + class FixRespa *fix_respa; // rRESPA fix needed by SHAKE + int nlevels_respa; // copies of needed rRESPA variables int *loop_respa; double *step_respa; diff --git a/src/SPIN/pair_spin.cpp b/src/SPIN/pair_spin.cpp index 74f7aaaf77..4247918499 100644 --- a/src/SPIN/pair_spin.cpp +++ b/src/SPIN/pair_spin.cpp @@ -79,10 +79,8 @@ void PairSpin::init_style() // checking if nve/spin or neb/spin is a listed fix - bool have_fix = ((modify->find_fix_by_style("^nve/spin") != -1) - || (modify->find_fix_by_style("^neb/spin") != -1)); - - if (!have_fix && (comm->me == 0)) + if ((comm->me == 0) && ((modify->get_fix_by_style("^nve/spin").size() + + modify->get_fix_by_style("^neb/spin").size()) == 0)) error->warning(FLERR,"Using spin pair style without nve/spin or neb/spin"); // check if newton pair is on @@ -98,9 +96,11 @@ void PairSpin::init_style() // get the lattice_flag from nve/spin - int ifix = modify->find_fix_by_style("^nve/spin"); - if (ifix >=0) - lattice_flag = ((FixNVESpin *) modify->fix[ifix])->lattice_flag; + auto fixes = modify->get_fix_by_style("^nve/spin"); + if (fixes.size() == 1) + lattice_flag = ((FixNVESpin *) fixes.front())->lattice_flag; + else if (fixes.size() > 1) + error->warning(FLERR,"Using multiple instances of fix nve/spin or neb/spin"); // init. size of energy stacking lists From f9e99f1f4cd8bc1a76d44c8ac560ef3ca306efe8 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Mon, 18 Oct 2021 18:04:04 -0400 Subject: [PATCH 220/372] wipe out all loaded plugins before destroying the LAMMPS instance --- src/lammps.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/lammps.cpp b/src/lammps.cpp index f186615424..84a27b524f 100644 --- a/src/lammps.cpp +++ b/src/lammps.cpp @@ -909,6 +909,10 @@ void LAMMPS::init() void LAMMPS::destroy() { + // must wipe out all plugins first, if configured +#if defined(LMP_PLUGIN) + input->one("plugin clear"); +#endif delete update; update = nullptr; From 81a5beb8cca4132b3f627231db91022220e5cd5d Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Mon, 18 Oct 2021 18:13:21 -0400 Subject: [PATCH 221/372] must not have folders names differing only in case: "MC" versu "mc" This is causing problems on MacOS and Windows with case preserving but case insensitive file systems. --- doc/src/Examples.rst | 4 ++-- examples/{MC => MC-LOOP}/README | 0 examples/{MC => MC-LOOP}/in.mc | 0 examples/{MC => MC-LOOP}/log.13Oct16.mc.g++.1 | 0 examples/README | 2 +- 5 files changed, 3 insertions(+), 3 deletions(-) rename examples/{MC => MC-LOOP}/README (100%) rename examples/{MC => MC-LOOP}/in.mc (100%) rename examples/{MC => MC-LOOP}/log.13Oct16.mc.g++.1 (100%) diff --git a/doc/src/Examples.rst b/doc/src/Examples.rst index f91ca2db11..c211727902 100644 --- a/doc/src/Examples.rst +++ b/doc/src/Examples.rst @@ -80,7 +80,7 @@ Lowercase directories +-------------+------------------------------------------------------------------+ | friction | frictional contact of spherical asperities between 2d surfaces | +-------------+------------------------------------------------------------------+ -| gcmc | Grand Canonical Monte Carlo (GCMC) via the fix gcmc command | +| mc | Monte Carlo features via fix gcmc, widom and other commands | +-------------+------------------------------------------------------------------+ | granregion | use of fix wall/region/gran as boundary on granular particles | +-------------+------------------------------------------------------------------+ @@ -205,7 +205,7 @@ Uppercase directories +------------+--------------------------------------------------------------------------------------------------+ | KAPPA | compute thermal conductivity via several methods | +------------+--------------------------------------------------------------------------------------------------+ -| MC | using LAMMPS in a Monte Carlo mode to relax the energy of a system | +| MC-LOOP | using LAMMPS in a Monte Carlo mode to relax the energy of a system in a input script loop | +------------+--------------------------------------------------------------------------------------------------+ | PACKAGES | examples for specific packages and contributed commands | +------------+--------------------------------------------------------------------------------------------------+ diff --git a/examples/MC/README b/examples/MC-LOOP/README similarity index 100% rename from examples/MC/README rename to examples/MC-LOOP/README diff --git a/examples/MC/in.mc b/examples/MC-LOOP/in.mc similarity index 100% rename from examples/MC/in.mc rename to examples/MC-LOOP/in.mc diff --git a/examples/MC/log.13Oct16.mc.g++.1 b/examples/MC-LOOP/log.13Oct16.mc.g++.1 similarity index 100% rename from examples/MC/log.13Oct16.mc.g++.1 rename to examples/MC-LOOP/log.13Oct16.mc.g++.1 diff --git a/examples/README b/examples/README index 50d3d52e65..c398579cde 100644 --- a/examples/README +++ b/examples/README @@ -167,7 +167,7 @@ The KAPPA directory has example scripts for computing the thermal 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 +The MC-LOOP directory has an example script for using LAMMPS as an energy-evaluation engine in a iterative Monte Carlo energy-relaxation loop. From 1cd05511975b8465efd18cdcb82db7cf1bffade7 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Tue, 19 Oct 2021 08:27:49 -0400 Subject: [PATCH 222/372] more direct version of clearing out loaded plugins --- src/lammps.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/lammps.cpp b/src/lammps.cpp index 84a27b524f..5d571b88dd 100644 --- a/src/lammps.cpp +++ b/src/lammps.cpp @@ -51,6 +51,10 @@ #include "update.h" #include "version.h" +#if defined(LMP_PLUGIN) +#include "plugin.h" +#endif + #include #include #include @@ -911,7 +915,7 @@ void LAMMPS::destroy() { // must wipe out all plugins first, if configured #if defined(LMP_PLUGIN) - input->one("plugin clear"); + plugin_clear(this); #endif delete update; update = nullptr; From 3ae0aae018a11ea5143349d2a5aa35570154a12f Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Tue, 19 Oct 2021 12:36:31 -0400 Subject: [PATCH 223/372] update remaining uses of find_fix_by_style() --- src/QEQ/fix_qeq.cpp | 2 +- src/REACTION/fix_bond_react.cpp | 2 +- src/REAXFF/fix_qeq_reaxff.cpp | 15 +++++---------- 3 files changed, 7 insertions(+), 12 deletions(-) diff --git a/src/QEQ/fix_qeq.cpp b/src/QEQ/fix_qeq.cpp index 79205f7c81..4835f90c90 100644 --- a/src/QEQ/fix_qeq.cpp +++ b/src/QEQ/fix_qeq.cpp @@ -302,7 +302,7 @@ void FixQEq::init() ngroup = group->count(igroup); if (ngroup == 0) error->all(FLERR,"Fix {} group has no atoms", style); - if ((comm->me == 0) && (modify->find_fix_by_style("^efield") >= 0)) + if ((comm->me == 0) && (modify->get_fix_by_style("^efield").size() > 0)) error->warning(FLERR,"Fix efield is ignored during charge equilibration"); if (utils::strmatch(update->integrate_style,"^respa")) diff --git a/src/REACTION/fix_bond_react.cpp b/src/REACTION/fix_bond_react.cpp index bddeb330e4..47b7746aaa 100644 --- a/src/REACTION/fix_bond_react.cpp +++ b/src/REACTION/fix_bond_react.cpp @@ -155,7 +155,7 @@ FixBondReact::FixBondReact(LAMMPS *lmp, int narg, char **arg) : master_group = (char *) "bond_react_MASTER_group"; // by using fixed group names, only one instance of fix bond/react is allowed. - if (modify->find_fix_by_style("^bond/react") != -1) + if (modify->get_fix_by_style("^bond/react").size() != 0) error->all(FLERR,"Only one instance of fix bond/react allowed at a time"); // let's find number of reactions specified diff --git a/src/REAXFF/fix_qeq_reaxff.cpp b/src/REAXFF/fix_qeq_reaxff.cpp index f0ba651a26..cc62df4b83 100644 --- a/src/REAXFF/fix_qeq_reaxff.cpp +++ b/src/REAXFF/fix_qeq_reaxff.cpp @@ -385,18 +385,13 @@ void FixQEqReaxFF::init() if (group->count(igroup) == 0) error->all(FLERR,"Fix {} group has no atoms", style); - // there may be only one instance of fix efield - - int num_efield = 0; - for (int ifix = 0; ifix < modify->nfix; ++ifix) { - if (utils::strmatch(modify->fix[ifix]->style, "^efield")) ++num_efield; - } - if (num_efield > 1) - error->all(FLERR, "There may be only one fix efield instance used with fix {}", style); + // get pointer to fix efield if present. there may be at most one instance of fix efield in use. efield = nullptr; - int ifix = modify->find_fix_by_style("^efield"); - if (ifix >= 0) efield = (FixEfield *) modify->fix[ifix]; + auto fixes = modify->get_fix_by_style("^efield"); + if (fixes.size() == 0) efield = (FixEfield *) fixes.front(); + else if (fixes.size() > 1) + error->all(FLERR, "There may be only one fix efield instance used with fix {}", style); // ensure that fix efield is properly initialized before accessing its data and check some settings if (efield) { From 597ee207b1d9ee097fb1bb6d327dca798ae2698f Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Tue, 19 Oct 2021 12:37:02 -0400 Subject: [PATCH 224/372] remove now obsolete find_fix_by_style() and find_compute_by_style() members --- src/modify.cpp | 28 ++-------------------------- src/modify.h | 2 -- 2 files changed, 2 insertions(+), 28 deletions(-) diff --git a/src/modify.cpp b/src/modify.cpp index 07301c4779..aadfd5cc3e 100644 --- a/src/modify.cpp +++ b/src/modify.cpp @@ -1091,18 +1091,6 @@ int Modify::find_fix(const std::string &id) return -1; } -/* ---------------------------------------------------------------------- - find a fix by style - return index of fix or -1 if not found -------------------------------------------------------------------------- */ - -int Modify::find_fix_by_style(const char *style) -{ - for (int ifix = 0; ifix < nfix; ifix++) - if (utils::strmatch(fix[ifix]->style,style)) return ifix; - return -1; -} - /* ---------------------------------------------------------------------- look up pointer to Fix class by fix-ID return null pointer if ID not found @@ -1386,18 +1374,6 @@ int Modify::find_compute(const std::string &id) return -1; } -/* ---------------------------------------------------------------------- - find a compute by style - return index of compute or -1 if not found -------------------------------------------------------------------------- */ - -int Modify::find_compute_by_style(const char *style) -{ - for (int icompute = 0; icompute < ncompute; icompute++) - if (utils::strmatch(compute[icompute]->style,style)) return icompute; - return -1; -} - /* ---------------------------------------------------------------------- look up pointer to Compute class by compute-ID return null pointer if ID not found @@ -1412,8 +1388,8 @@ Compute *Modify::get_compute_by_id(const std::string &id) const } /* ---------------------------------------------------------------------- - look up pointer to compute by compute style name - return null pointer if style not used + look up pointers to computes by compute style name + return vector with matching pointers ------------------------------------------------------------------------- */ const std::vector Modify::get_compute_by_style(const std::string &style) const diff --git a/src/modify.h b/src/modify.h index 0ea3bc2c7c..60365cd56c 100644 --- a/src/modify.h +++ b/src/modify.h @@ -111,7 +111,6 @@ class Modify : protected Pointers { // deprecated API int find_fix(const std::string &); - int find_fix_by_style(const char *); // new API Fix *get_fix_by_id(const std::string &) const; const std::vector get_fix_by_style(const std::string &) const; @@ -125,7 +124,6 @@ class Modify : protected Pointers { // deprecated API int find_compute(const std::string &); - int find_compute_by_style(const char *); // new API Compute *get_compute_by_id(const std::string &) const; const std::vector get_compute_by_style(const std::string &) const; From 2857577dda866ad1ff91d3f492273c3edffef8ef Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Tue, 19 Oct 2021 12:38:00 -0400 Subject: [PATCH 225/372] replace find_region_by_style() with get_region_by_style() with same semantics as find_fix_by_style() --- src/PLUGIN/plugin.cpp | 749 ++++++++++++++++++++---------------------- src/domain.cpp | 36 +- src/domain.h | 6 +- 3 files changed, 379 insertions(+), 412 deletions(-) diff --git a/src/PLUGIN/plugin.cpp b/src/PLUGIN/plugin.cpp index 7a47903946..44a8c61832 100644 --- a/src/PLUGIN/plugin.cpp +++ b/src/PLUGIN/plugin.cpp @@ -1,4 +1,3 @@ -// clang-format off /* ---------------------------------------------------------------------- LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator https://www.lammps.org/, Sandia National Laboratories @@ -19,459 +18,425 @@ #include "domain.h" #include "error.h" #include "fix.h" -#include "input.h" #include "force.h" +#include "input.h" #include "modify.h" +#include "region.h" #include -#include #include +#include -namespace LAMMPS_NS +namespace LAMMPS_NS { +// list of plugin information data for loaded styles +static std::list pluginlist; + +// map for counting references to dso handles +static std::map dso_refcounter; + +/* ---------------------------------------------------------------------- */ + +Plugin::Plugin(LAMMPS *lmp) : Command(lmp) {} + +/* ---------------------------------------------------------------------- */ + +void Plugin::command(int narg, char **arg) { - // list of plugin information data for loaded styles - static std::list pluginlist; + if (narg < 1) error->all(FLERR, "Illegal plugin command"); - // map for counting references to dso handles - static std::map dso_refcounter; + std::string cmd = arg[0]; + if (cmd == "load") { + if (narg < 2) error->all(FLERR, "Illegal plugin load command"); + for (int i = 1; i < narg; ++i) plugin_load(arg[i], lmp); + } else if (cmd == "unload") { + if (narg != 3) error->all(FLERR, "Illegal plugin unload command"); + plugin_unload(arg[1], arg[2], lmp); -/* ---------------------------------------------------------------------- */ + } else if (cmd == "clear") { + plugin_clear(lmp); - Plugin::Plugin(LAMMPS *lmp) : Command(lmp) {} - -/* ---------------------------------------------------------------------- */ - - void Plugin::command(int narg, char **arg) - { - if (narg < 1) error->all(FLERR,"Illegal plugin command"); - -#if defined(LMP_PLUGIN) - std::string cmd = arg[0]; - if (cmd == "load") { - if (narg < 2) error->all(FLERR,"Illegal plugin load command"); - for (int i=1; i < narg; ++i) - plugin_load(arg[i],lmp); - - } else if (cmd == "unload") { - if (narg != 3) error->all(FLERR,"Illegal plugin unload command"); - plugin_unload(arg[1],arg[2],lmp); - - } else if (cmd == "clear") { - plugin_clear(lmp); - - } else if (cmd == "list") { - if (comm->me == 0) { - int num = plugin_get_num_plugins(); - utils::logmesg(lmp,"Currently loaded plugins\n"); - for (int i=0; i < num; ++i) { - auto entry = plugin_get_info(i); - utils::logmesg(lmp,"{:4}: {} style plugin {}\n", - i+1,entry->style,entry->name); - } + } else if (cmd == "list") { + if (comm->me == 0) { + int num = plugin_get_num_plugins(); + utils::logmesg(lmp, "Currently loaded plugins\n"); + for (int i = 0; i < num; ++i) { + auto entry = plugin_get_info(i); + utils::logmesg(lmp, "{:4}: {} style plugin {}\n", i + 1, entry->style, entry->name); } - } else error->all(FLERR,"Illegal plugin command"); -#else - if (comm->me == 0) - error->warning(FLERR,"Ignoring plugin command. LAMMPS must be built as " - "a shared library for it to work."); + } + } else + error->all(FLERR, "Illegal plugin command"); +#if 0 + if (comm->me == 0) + error->warning( + FLERR, "LAMMPS must be built as a shared library for it to work."); #endif - } +} - // load DSO and call included registration function - void plugin_load(const char *file, LAMMPS *lmp) - { +// load DSO and call included registration function +void plugin_load(const char *file, LAMMPS *lmp) +{ #if defined(LMP_PLUGIN) - int me = lmp->comm->me; + int me = lmp->comm->me; - // open DSO file from given path; load symbols globally + // open DSO file from given path; load symbols globally - platform::dlerror(); - void *dso = platform::dlopen(file); - if (dso == nullptr) { - if (me == 0) - utils::logmesg(lmp,"Open of file {} failed: {}\n",file,platform::dlerror()); - return; - } - - // look up lammpsplugin_init() function in DSO - // function must have C bindings so there is no name mangling - - platform::dlerror(); - void *initfunc = platform::dlsym(dso,"lammpsplugin_init"); - if (initfunc == nullptr) { - platform::dlclose(dso); - - if (me == 0) - utils::logmesg(lmp,"Plugin symbol lookup failure in file {}: {}\n", - file,platform::dlerror()); - return; - } - - // call initializer function loaded from DSO and pass a pointer - // to the LAMMPS instance, the DSO handle (for reference counting) - // and plugin registration function pointer - - (*(lammpsplugin_initfunc)(initfunc))((void *)lmp, dso, - (void *)&plugin_register); -#endif + platform::dlerror(); + void *dso = platform::dlopen(file); + if (dso == nullptr) { + if (me == 0) utils::logmesg(lmp, "Open of file {} failed: {}\n", file, platform::dlerror()); + return; } - /* -------------------------------------------------------------------- + // look up lammpsplugin_init() function in DSO + // function must have C bindings so there is no name mangling + + platform::dlerror(); + void *initfunc = platform::dlsym(dso, "lammpsplugin_init"); + if (initfunc == nullptr) { + platform::dlclose(dso); + + if (me == 0) + utils::logmesg(lmp, "Plugin symbol lookup failure in file {}: {}\n", file, + platform::dlerror()); + return; + } + + // call initializer function loaded from DSO and pass a pointer + // to the LAMMPS instance, the DSO handle (for reference counting) + // and plugin registration function pointer + + (*(lammpsplugin_initfunc) (initfunc))((void *) lmp, dso, (void *) &plugin_register); +#endif +} + +/* -------------------------------------------------------------------- register a new style from a plugin with LAMMPS this is the callback function that is called from within the plugin initializer function. all plugin information is taken from the lammpsplugin_t struct. -------------------------------------------------------------------- */ - void plugin_register(lammpsplugin_t *plugin, void *ptr) - { +void plugin_register(lammpsplugin_t *plugin, void *ptr) +{ #if defined(LMP_PLUGIN) - LAMMPS *lmp = (LAMMPS *)ptr; - int me = lmp->comm->me; + LAMMPS *lmp = (LAMMPS *) ptr; + int me = lmp->comm->me; - if (plugin == nullptr) return; + if (plugin == nullptr) return; - // ignore load request if same plugin already loaded - int idx = plugin_find(plugin->style,plugin->name); - if (idx >= 0) { - if (me == 0) - utils::logmesg(lmp,"Ignoring load of {} style {}: must " - "unload existing {} plugin first\n", - plugin->style,plugin->name,plugin->name); - return; - } - - if (me == 0) { - utils::logmesg(lmp,"Loading plugin: {} by {}\n", - plugin->info,plugin->author); - // print version info only if the versions of host and plugin don't match - if ((plugin->version) && (strcmp(plugin->version,lmp->version) != 0)) - utils::logmesg(lmp," compiled for LAMMPS version {}, loaded into " - "LAMMPS version {}\n",plugin->version,lmp->version); - } - - pluginlist.push_back(*plugin); - - if (dso_refcounter.find(plugin->handle) != dso_refcounter.end()) { - ++ dso_refcounter[plugin->handle]; - } else { - dso_refcounter[plugin->handle] = 1; - } - - std::string pstyle = plugin->style; - if (pstyle == "pair") { - auto pair_map = lmp->force->pair_map; - if (pair_map->find(plugin->name) != pair_map->end()) { - if (lmp->comm->me == 0) - lmp->error->warning(FLERR,"Overriding built-in pair " - "style {} from plugin",plugin->name); - } - (*pair_map)[plugin->name] = (Force::PairCreator)plugin->creator.v1; - - } else if (pstyle == "bond") { - auto bond_map = lmp->force->bond_map; - if (bond_map->find(plugin->name) != bond_map->end()) { - if (lmp->comm->me == 0) - lmp->error->warning(FLERR,"Overriding built-in bond " - "style {} from plugin",plugin->name); - } - (*bond_map)[plugin->name] = (Force::BondCreator)plugin->creator.v1; - - } else if (pstyle == "angle") { - auto angle_map = lmp->force->angle_map; - if (angle_map->find(plugin->name) != angle_map->end()) { - if (lmp->comm->me == 0) - lmp->error->warning(FLERR,"Overriding built-in angle " - "style {} from plugin",plugin->name); - } - (*angle_map)[plugin->name] = (Force::AngleCreator)plugin->creator.v1; - - } else if (pstyle == "dihedral") { - auto dihedral_map = lmp->force->dihedral_map; - if (dihedral_map->find(plugin->name) != dihedral_map->end()) { - if (lmp->comm->me == 0) - lmp->error->warning(FLERR,"Overriding built-in dihedral " - "style {} from plugin",plugin->name); - } - (*dihedral_map)[plugin->name] = (Force::DihedralCreator)plugin->creator.v1; - - } else if (pstyle == "improper") { - auto improper_map = lmp->force->improper_map; - if (improper_map->find(plugin->name) != improper_map->end()) { - if (lmp->comm->me == 0) - lmp->error->warning(FLERR,"Overriding built-in improper " - "style {} from plugin",plugin->name); - } - (*improper_map)[plugin->name] = (Force::ImproperCreator)plugin->creator.v1; - - } else if (pstyle == "compute") { - auto compute_map = lmp->modify->compute_map; - if (compute_map->find(plugin->name) != compute_map->end()) { - if (lmp->comm->me == 0) - lmp->error->warning(FLERR,"Overriding built-in compute " - "style {} from plugin",plugin->name); - } - (*compute_map)[plugin->name] = (Modify::ComputeCreator)plugin->creator.v2; - - } else if (pstyle == "fix") { - auto fix_map = lmp->modify->fix_map; - if (fix_map->find(plugin->name) != fix_map->end()) { - if (lmp->comm->me == 0) - lmp->error->warning(FLERR,"Overriding built-in fix " - "style {} from plugin",plugin->name); - } - (*fix_map)[plugin->name] = (Modify::FixCreator)plugin->creator.v2; - - } else if (pstyle == "region") { - auto region_map = lmp->domain->region_map; - if (region_map->find(plugin->name) != region_map->end()) { - if (lmp->comm->me == 0) - lmp->error->warning(FLERR,"Overriding built-in region " - "style {} from plugin",plugin->name); - } - (*region_map)[plugin->name] = (Domain::RegionCreator)plugin->creator.v2; - - } else if (pstyle == "command") { - auto command_map = lmp->input->command_map; - if (command_map->find(plugin->name) != command_map->end()) { - if (lmp->comm->me == 0) - lmp->error->warning(FLERR,"Overriding built-in command " - "style {} from plugin",plugin->name); - } - (*command_map)[plugin->name] = (Input::CommandCreator)plugin->creator.v1; - - } else { - utils::logmesg(lmp,"Loading plugins for {} styles not " - "yet implemented\n",pstyle); - pluginlist.pop_back(); - } -#endif + // ignore load request if same plugin already loaded + int idx = plugin_find(plugin->style, plugin->name); + if (idx >= 0) { + if (me == 0) + utils::logmesg(lmp, "Ignoring load of {} style {}: must unload existing {} plugin first\n", + plugin->style, plugin->name, plugin->name); + return; } - /* -------------------------------------------------------------------- + if (me == 0) { + utils::logmesg(lmp, "Loading plugin: {} by {}\n", plugin->info, plugin->author); + // print version info only if the versions of host and plugin don't match + if ((plugin->version) && (strcmp(plugin->version, lmp->version) != 0)) + utils::logmesg(lmp, " compiled for LAMMPS version {}, loaded into LAMMPS version {}\n", + plugin->version, lmp->version); + } + + pluginlist.push_back(*plugin); + + if (dso_refcounter.find(plugin->handle) != dso_refcounter.end()) { + ++dso_refcounter[plugin->handle]; + } else { + dso_refcounter[plugin->handle] = 1; + } + + std::string pstyle = plugin->style; + if (pstyle == "pair") { + auto pair_map = lmp->force->pair_map; + if (pair_map->find(plugin->name) != pair_map->end()) { + if (lmp->comm->me == 0) + lmp->error->warning(FLERR, "Overriding built-in pair style {} from plugin", plugin->name); + } + (*pair_map)[plugin->name] = (Force::PairCreator) plugin->creator.v1; + + } else if (pstyle == "bond") { + auto bond_map = lmp->force->bond_map; + if (bond_map->find(plugin->name) != bond_map->end()) { + if (lmp->comm->me == 0) + lmp->error->warning(FLERR, "Overriding built-in bond style {} from plugin", plugin->name); + } + (*bond_map)[plugin->name] = (Force::BondCreator) plugin->creator.v1; + + } else if (pstyle == "angle") { + auto angle_map = lmp->force->angle_map; + if (angle_map->find(plugin->name) != angle_map->end()) { + if (lmp->comm->me == 0) + lmp->error->warning(FLERR, "Overriding built-in angle style {} from plugin", plugin->name); + } + (*angle_map)[plugin->name] = (Force::AngleCreator) plugin->creator.v1; + + } else if (pstyle == "dihedral") { + auto dihedral_map = lmp->force->dihedral_map; + if (dihedral_map->find(plugin->name) != dihedral_map->end()) { + if (lmp->comm->me == 0) + lmp->error->warning(FLERR, "Overriding built-in dihedral style {} from plugin", + plugin->name); + } + (*dihedral_map)[plugin->name] = (Force::DihedralCreator) plugin->creator.v1; + + } else if (pstyle == "improper") { + auto improper_map = lmp->force->improper_map; + if (improper_map->find(plugin->name) != improper_map->end()) { + if (lmp->comm->me == 0) + lmp->error->warning(FLERR, "Overriding built-in improper style {} from plugin", + plugin->name); + } + (*improper_map)[plugin->name] = (Force::ImproperCreator) plugin->creator.v1; + + } else if (pstyle == "compute") { + auto compute_map = lmp->modify->compute_map; + if (compute_map->find(plugin->name) != compute_map->end()) { + if (lmp->comm->me == 0) + lmp->error->warning(FLERR, "Overriding built-in compute style {} from plugin", + plugin->name); + } + (*compute_map)[plugin->name] = (Modify::ComputeCreator) plugin->creator.v2; + + } else if (pstyle == "fix") { + auto fix_map = lmp->modify->fix_map; + if (fix_map->find(plugin->name) != fix_map->end()) { + if (lmp->comm->me == 0) + lmp->error->warning(FLERR, "Overriding built-in fix style {} from plugin", plugin->name); + } + (*fix_map)[plugin->name] = (Modify::FixCreator) plugin->creator.v2; + + } else if (pstyle == "region") { + auto region_map = lmp->domain->region_map; + if (region_map->find(plugin->name) != region_map->end()) { + if (lmp->comm->me == 0) + lmp->error->warning(FLERR, "Overriding built-in region style {} from plugin", plugin->name); + } + (*region_map)[plugin->name] = (Domain::RegionCreator) plugin->creator.v2; + + } else if (pstyle == "command") { + auto command_map = lmp->input->command_map; + if (command_map->find(plugin->name) != command_map->end()) { + if (lmp->comm->me == 0) + lmp->error->warning(FLERR, "Overriding built-in command style {} from plugin", + plugin->name); + } + (*command_map)[plugin->name] = (Input::CommandCreator) plugin->creator.v1; + + } else { + utils::logmesg(lmp, "Loading plugins for {} styles not yet implemented\n", pstyle); + pluginlist.pop_back(); + } +#endif +} + +/* -------------------------------------------------------------------- remove plugin from given style table and plugin list optionally close the DSO handle if it is the last plugin from that DSO must also delete style instances if style is currently active -------------------------------------------------------------------- */ - void plugin_unload(const char *style, const char *name, LAMMPS *lmp) - { +void plugin_unload(const char *style, const char *name, LAMMPS *lmp) +{ #if defined(LMP_PLUGIN) - int me = lmp->comm->me; - - // ignore unload request from unsupported style categories - if ((strcmp(style,"pair") != 0) && (strcmp(style,"bond") != 0) - && (strcmp(style,"angle") != 0) && (strcmp(style,"dihedral") != 0) - && (strcmp(style,"improper") != 0) && (strcmp(style,"compute") != 0) - && (strcmp(style,"fix") != 0) && (strcmp(style,"region") != 0) - && (strcmp(style,"command") != 0)) { - if (me == 0) - utils::logmesg(lmp,"Ignoring unload: {} is not a " - "supported plugin style\n",style); - return; - } - - // ignore unload request if not loaded from a plugin - int idx = plugin_find(style,name); - if (idx < 0) { - if (me == 0) - utils::logmesg(lmp,"Ignoring unload of {} style {}: not " - "loaded from a plugin\n",style,name); - return; - } - - // make copy of DSO handle for later use - void *handle = plugin_get_info(idx)->handle; - - // remove selected plugin from list of plugins + int me = lmp->comm->me; + // ignore unload request from unsupported style categories + if ((strcmp(style, "pair") != 0) && (strcmp(style, "bond") != 0) && + (strcmp(style, "angle") != 0) && (strcmp(style, "dihedral") != 0) && + (strcmp(style, "improper") != 0) && (strcmp(style, "compute") != 0) && + (strcmp(style, "fix") != 0) && (strcmp(style, "region") != 0) && + (strcmp(style, "command") != 0)) { if (me == 0) - utils::logmesg(lmp,"Unloading {} style {}\n",style,name); - plugin_erase(style,name); - - // remove style of given name from corresponding map - // must delete style instance if currently active so - // we can close the DSO handle if the last reference is gone. - - std::string pstyle = style; - if (pstyle == "pair") { - - auto found = lmp->force->pair_map->find(name); - if (found != lmp->force->pair_map->end()) - lmp->force->pair_map->erase(found); - - // must delete pair style instance if in use - - if (lmp->force->pair_style) { - if (utils::strmatch(lmp->force->pair_style,"^hybrid")) { - if (lmp->force->pair_match(name,1,1) != nullptr) - lmp->force->create_pair("none",0); - } else { - if (strcmp(lmp->force->pair_style,name) == 0) - lmp->force->create_pair("none",0); - } - } - - } else if (pstyle == "bond") { - - auto found = lmp->force->bond_map->find(name); - if (found != lmp->force->bond_map->end()) - lmp->force->bond_map->erase(found); - - // must delete bond style instance if in use - - if ((lmp->force->bond_style != nullptr) - && (lmp->force->bond_match(name) != nullptr)) - lmp->force->create_bond("none",0); - - } else if (pstyle == "angle") { - - auto found = lmp->force->angle_map->find(name); - if (found != lmp->force->angle_map->end()) - lmp->force->angle_map->erase(found); - - // must delete angle style instance if in use - - if ((lmp->force->angle_style != nullptr) - && (lmp->force->angle_match(name) != nullptr)) - lmp->force->create_angle("none",0); - - } else if (pstyle == "dihedral") { - - auto found = lmp->force->dihedral_map->find(name); - if (found != lmp->force->dihedral_map->end()) - lmp->force->dihedral_map->erase(found); - - // must delete dihedral style instance if in use - - if ((lmp->force->dihedral_style) - && (lmp->force->dihedral_match(name) != nullptr)) - lmp->force->create_dihedral("none",0); - - } else if (pstyle == "improper") { - - auto found = lmp->force->improper_map->find(name); - if (found != lmp->force->improper_map->end()) - lmp->force->improper_map->erase(found); - - // must delete improper style instance if in use - - if ((lmp->force->improper_style != nullptr) - && (lmp->force->improper_match(name) != nullptr)) - lmp->force->create_improper("none",0); - - } else if (pstyle == "compute") { - - auto compute_map = lmp->modify->compute_map; - auto found = compute_map->find(name); - if (found != compute_map->end()) compute_map->erase(name); - - // must delete all compute instances using this compute style - - for (auto icompute : lmp->modify->get_compute_by_style(name)) - lmp->modify->delete_compute(icompute->id); - - } else if (pstyle == "fix") { - - auto fix_map = lmp->modify->fix_map; - auto found = fix_map->find(name); - if (found != fix_map->end()) fix_map->erase(name); - - // must delete all fix instances using this fix style - - for (auto ifix : lmp->modify->get_fix_by_style(name)) - lmp->modify->delete_fix(ifix->id); - - } else if (pstyle == "region") { - - auto region_map = lmp->domain->region_map; - auto found = region_map->find(name); - if (found != region_map->end()) region_map->erase(name); - - for (int iregion = lmp->domain->find_region_by_style(name); - iregion >= 0; iregion = lmp->domain->find_region_by_style(name)) - lmp->domain->delete_region(iregion); - - } else if (pstyle == "command") { - - auto command_map = lmp->input->command_map; - auto found = command_map->find(name); - if (found != command_map->end()) command_map->erase(name); - } - - // if reference count is down to zero, close DSO handle. - - -- dso_refcounter[handle]; - if (dso_refcounter[handle] == 0) { - platform::dlclose(handle); - } -#endif + utils::logmesg(lmp, "Ignoring unload: {} is not a supported plugin style\n", style); + return; } - /* -------------------------------------------------------------------- + // ignore unload request if not loaded from a plugin + int idx = plugin_find(style, name); + if (idx < 0) { + if (me == 0) + utils::logmesg(lmp, "Ignoring unload of {} style {}: not from a plugin\n", style, name); + return; + } + + // make copy of DSO handle for later use + void *handle = plugin_get_info(idx)->handle; + + // remove selected plugin from list of plugins + + if (me == 0) utils::logmesg(lmp, "Unloading {} style {}\n", style, name); + plugin_erase(style, name); + + // remove style of given name from corresponding map + // must delete style instance if currently active so + // we can close the DSO handle if the last reference is gone. + + std::string pstyle = style; + if (pstyle == "pair") { + + auto found = lmp->force->pair_map->find(name); + if (found != lmp->force->pair_map->end()) lmp->force->pair_map->erase(found); + + // must delete pair style instance if in use + + if (lmp->force->pair_style) { + if (utils::strmatch(lmp->force->pair_style, "^hybrid")) { + if (lmp->force->pair_match(name, 1, 1) != nullptr) lmp->force->create_pair("none", 0); + } else { + if (strcmp(lmp->force->pair_style, name) == 0) lmp->force->create_pair("none", 0); + } + } + + } else if (pstyle == "bond") { + + auto found = lmp->force->bond_map->find(name); + if (found != lmp->force->bond_map->end()) lmp->force->bond_map->erase(found); + + // must delete bond style instance if in use + + if ((lmp->force->bond_style != nullptr) && (lmp->force->bond_match(name) != nullptr)) + lmp->force->create_bond("none", 0); + + } else if (pstyle == "angle") { + + auto found = lmp->force->angle_map->find(name); + if (found != lmp->force->angle_map->end()) lmp->force->angle_map->erase(found); + + // must delete angle style instance if in use + + if ((lmp->force->angle_style != nullptr) && (lmp->force->angle_match(name) != nullptr)) + lmp->force->create_angle("none", 0); + + } else if (pstyle == "dihedral") { + + auto found = lmp->force->dihedral_map->find(name); + if (found != lmp->force->dihedral_map->end()) lmp->force->dihedral_map->erase(found); + + // must delete dihedral style instance if in use + + if ((lmp->force->dihedral_style) && (lmp->force->dihedral_match(name) != nullptr)) + lmp->force->create_dihedral("none", 0); + + } else if (pstyle == "improper") { + + auto found = lmp->force->improper_map->find(name); + if (found != lmp->force->improper_map->end()) lmp->force->improper_map->erase(found); + + // must delete improper style instance if in use + + if ((lmp->force->improper_style != nullptr) && (lmp->force->improper_match(name) != nullptr)) + lmp->force->create_improper("none", 0); + + } else if (pstyle == "compute") { + + auto compute_map = lmp->modify->compute_map; + auto found = compute_map->find(name); + if (found != compute_map->end()) compute_map->erase(name); + + // must delete all compute instances using this compute style + + for (auto icompute : lmp->modify->get_compute_by_style(name)) + lmp->modify->delete_compute(icompute->id); + + } else if (pstyle == "fix") { + + auto fix_map = lmp->modify->fix_map; + auto found = fix_map->find(name); + if (found != fix_map->end()) fix_map->erase(name); + + // must delete all fix instances using this fix style + + for (auto ifix : lmp->modify->get_fix_by_style(name)) lmp->modify->delete_fix(ifix->id); + + } else if (pstyle == "region") { + + auto region_map = lmp->domain->region_map; + auto found = region_map->find(name); + if (found != region_map->end()) region_map->erase(name); + + for (auto iregion : lmp->domain->get_region_by_style(name)) + lmp->domain->delete_region(iregion->id); + + } else if (pstyle == "command") { + + auto command_map = lmp->input->command_map; + auto found = command_map->find(name); + if (found != command_map->end()) command_map->erase(name); + } + + // if reference count is down to zero, close DSO handle. + + --dso_refcounter[handle]; + if (dso_refcounter[handle] == 0) { platform::dlclose(handle); } +#endif +} + +/* -------------------------------------------------------------------- unload all loaded plugins -------------------------------------------------------------------- */ - void plugin_clear(LAMMPS *lmp) - { - while (pluginlist.size() > 0) { - auto p = pluginlist.begin(); - plugin_unload(p->style,p->name,lmp); - } +void plugin_clear(LAMMPS *lmp) +{ + while (pluginlist.size() > 0) { + auto p = pluginlist.begin(); + plugin_unload(p->style, p->name, lmp); } +} - /* -------------------------------------------------------------------- +/* -------------------------------------------------------------------- remove plugin of given name and style from internal lists -------------------------------------------------------------------- */ - void plugin_erase(const char *style, const char *name) - { - for (auto p=pluginlist.begin(); p != pluginlist.end(); ++p) { - if ((strcmp(style,p->style) == 0) - && (strcmp(name,p->name) == 0)) { - pluginlist.erase(p); - return; - } +void plugin_erase(const char *style, const char *name) +{ + for (auto p = pluginlist.begin(); p != pluginlist.end(); ++p) { + if ((strcmp(style, p->style) == 0) && (strcmp(name, p->name) == 0)) { + pluginlist.erase(p); + return; } } +} - /* -------------------------------------------------------------------- +/* -------------------------------------------------------------------- number of styles loaded from plugin files -------------------------------------------------------------------- */ - int plugin_get_num_plugins() - { - return pluginlist.size(); - } +int plugin_get_num_plugins() +{ + return pluginlist.size(); +} - /* -------------------------------------------------------------------- +/* -------------------------------------------------------------------- return position index in list of given plugin of given style -------------------------------------------------------------------- */ - int plugin_find(const char *style, const char *name) - { - int i=0; - for (auto entry : pluginlist) { - if ((strcmp(style,entry.style) == 0) - && (strcmp(name,entry.name) == 0)) - return i; - ++i; - } - return -1; +int plugin_find(const char *style, const char *name) +{ + int i = 0; + for (auto entry : pluginlist) { + if ((strcmp(style, entry.style) == 0) && (strcmp(name, entry.name) == 0)) return i; + ++i; } + return -1; +} - /* -------------------------------------------------------------------- +/* -------------------------------------------------------------------- get pointer to plugin initializer struct at position idx -------------------------------------------------------------------- */ - const lammpsplugin_t *plugin_get_info(int idx) - { - int i=0; - for (auto p=pluginlist.begin(); p != pluginlist.end(); ++p) { - if (i == idx) return &(*p); - ++i; - } - return nullptr; +const lammpsplugin_t *plugin_get_info(int idx) +{ + int i = 0; + for (auto p = pluginlist.begin(); p != pluginlist.end(); ++p) { + if (i == idx) return &(*p); + ++i; } + return nullptr; } +} // namespace LAMMPS_NS diff --git a/src/domain.cpp b/src/domain.cpp index 4759490ae8..71fb27a4e6 100644 --- a/src/domain.cpp +++ b/src/domain.cpp @@ -1742,7 +1742,7 @@ void Domain::add_region(int narg, char **arg) if (narg < 2) error->all(FLERR,"Illegal region command"); if (strcmp(arg[1],"delete") == 0) { - delete_region(narg,arg); + delete_region(arg[2]); return; } @@ -1811,16 +1811,6 @@ Region *Domain::region_creator(LAMMPS *lmp, int narg, char ** arg) delete a region ------------------------------------------------------------------------- */ -void Domain::delete_region(int narg, char **arg) -{ - if (narg != 2) error->all(FLERR,"Illegal region command"); - - int iregion = find_region(arg[0]); - if (iregion == -1) error->all(FLERR,"Delete region ID does not exist"); - - delete_region(iregion); -} - void Domain::delete_region(int iregion) { if ((iregion < 0) || (iregion >= nregion)) return; @@ -1833,12 +1823,20 @@ void Domain::delete_region(int iregion) nregion--; } +void Domain::delete_region(const std::string &id) +{ + int iregion = find_region(id); + if (iregion == -1) error->all(FLERR,"Delete region ID does not exist"); + + delete_region(iregion); +} + /* ---------------------------------------------------------------------- return region index if name matches existing region ID return -1 if no such region ------------------------------------------------------------------------- */ -int Domain::find_region(const std::string &name) +int Domain::find_region(const std::string &name) const { for (int iregion = 0; iregion < nregion; iregion++) if (name == regions[iregion]->id) return iregion; @@ -1846,15 +1844,19 @@ int Domain::find_region(const std::string &name) } /* ---------------------------------------------------------------------- - return region index if name matches existing region style - return -1 if no such region + look up pointers to regions by region style name + return vector with matching pointers ------------------------------------------------------------------------- */ -int Domain::find_region_by_style(const std::string &name) +const std::vector Domain::get_region_by_style(const std::string &name) const { + std::vector matches; + if (name.empty()) return matches; + for (int iregion = 0; iregion < nregion; iregion++) - if (name == regions[iregion]->style) return iregion; - return -1; + if (name == regions[iregion]->style) matches.push_back(regions[iregion]); + + return matches; } /* ---------------------------------------------------------------------- diff --git a/src/domain.h b/src/domain.h index 711bab0fb2..361979b887 100644 --- a/src/domain.h +++ b/src/domain.h @@ -137,10 +137,10 @@ class Domain : protected Pointers { void set_lattice(int, char **); void add_region(int, char **); - void delete_region(int, char **); void delete_region(int); - int find_region(const std::string &); - int find_region_by_style(const std::string &); + void delete_region(const std::string &); + int find_region(const std::string &) const; + const std::vector get_region_by_style(const std::string &) const; void set_boundary(int, char **, int); void set_box(int, char **); void print_box(const std::string &); From 89d70aeabfbcea38ebb8a2926a631146322f90c6 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Tue, 19 Oct 2021 15:31:24 -0400 Subject: [PATCH 226/372] work around issue with skipping creation of fix RESPA for whichflag == 0 --- src/RIGID/fix_shake.cpp | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/RIGID/fix_shake.cpp b/src/RIGID/fix_shake.cpp index fb684f6b19..29739b294c 100644 --- a/src/RIGID/fix_shake.cpp +++ b/src/RIGID/fix_shake.cpp @@ -361,8 +361,13 @@ void FixShake::init() // could have changed locations in fix list since created // set ptrs to rRESPA variables + fix_respa = nullptr; if (utils::strmatch(update->integrate_style,"^respa")) { - fix_respa = (FixRespa *) modify->get_fix_by_style("^RESPA").front(); + if (update->whichflag > 0) { + auto fixes = modify->get_fix_by_style("^RESPA"); + if (fixes.size() > 0) fix_respa = (FixRespa *) fixes.front(); + else error->all(FLERR,"Run style respa did not create fix RESPA"); + } Respa *respa_style = (Respa *) update->integrate; nlevels_respa = respa_style->nlevels; loop_respa = respa_style->loop; From 8cd4460c623a2558c6a82c8a909d6897a7148d29 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Tue, 19 Oct 2021 15:40:15 -0400 Subject: [PATCH 227/372] fix typo --- src/REAXFF/fix_qeq_reaxff.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/REAXFF/fix_qeq_reaxff.cpp b/src/REAXFF/fix_qeq_reaxff.cpp index cc62df4b83..6c3df43cd1 100644 --- a/src/REAXFF/fix_qeq_reaxff.cpp +++ b/src/REAXFF/fix_qeq_reaxff.cpp @@ -389,7 +389,7 @@ void FixQEqReaxFF::init() efield = nullptr; auto fixes = modify->get_fix_by_style("^efield"); - if (fixes.size() == 0) efield = (FixEfield *) fixes.front(); + if (fixes.size() == 1) efield = (FixEfield *) fixes.front(); else if (fixes.size() > 1) error->all(FLERR, "There may be only one fix efield instance used with fix {}", style); From 2e362b1f3f8a7a911a09a32872e4eb45abf86fbb Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Wed, 20 Oct 2021 02:47:26 -0400 Subject: [PATCH 228/372] use get_(fix|compute)_by_id() instead of find_(fix|compute)() --- src/info.cpp | 40 ++--- src/library.cpp | 366 +++++++++++++++++++----------------------- src/min.cpp | 8 +- src/modify.cpp | 50 +++--- src/read_data.cpp | 9 +- src/read_restart.cpp | 3 +- src/reset_mol_ids.cpp | 20 +-- src/respa.cpp | 3 +- src/thermo.cpp | 103 ++++++------ src/utils.cpp | 11 +- 10 files changed, 268 insertions(+), 345 deletions(-) diff --git a/src/info.cpp b/src/info.cpp index bbc94fbccb..61781c9b3e 100644 --- a/src/info.cpp +++ b/src/info.cpp @@ -566,16 +566,13 @@ void Info::command(int narg, char **arg) } if (flags & COMPUTES) { - int ncompute = modify->ncompute; - Compute **compute = modify->compute; + int i = 0; char **names = group->names; fputs("\nCompute information:\n",out); - for (int i=0; i < ncompute; ++i) { - fmt::print(out,"Compute[{:3d}]: {:16} style = {:16} group = {}\n", - i, std::string(compute[i]->id)+',', - std::string(compute[i]->style)+',', - names[compute[i]->igroup]); - } + for (auto compute : modify->get_compute_list()) + fmt::print(out,"Compute[{:3d}]: {:16} style = {:16} group = {}\n", i++, + std::string(compute->id)+',',std::string(compute->style)+',', + names[compute->igroup]); } if (flags & DUMPS) { @@ -587,10 +584,8 @@ void Info::command(int narg, char **arg) fputs("\nDump information:\n",out); for (int i=0; i < ndump; ++i) { fmt::print(out,"Dump[{:3d}]: {:16} file = {:16} style = {:16} group = {:16} ", - i, std::string(dump[i]->id)+',', - std::string(dump[i]->filename)+',', - std::string(dump[i]->style)+',', - std::string(names[dump[i]->igroup])+','); + i, std::string(dump[i]->id)+',',std::string(dump[i]->filename)+',', + std::string(dump[i]->style)+',',std::string(names[dump[i]->igroup])+','); if (nevery[i]) { fmt::print(out,"every = {}\n", nevery[i]); } else { @@ -600,16 +595,12 @@ void Info::command(int narg, char **arg) } if (flags & FIXES) { - int nfix = modify->nfix; - Fix **fix = modify->fix; + int i = 0; char **names = group->names; fputs("\nFix information:\n",out); - for (int i=0; i < nfix; ++i) { - fmt::print(out, "Fix[{:3d}]: {:16} style = {:16} group = {}\n", - i,std::string(fix[i]->id)+',', - std::string(fix[i]->style)+',', - names[fix[i]->igroup]); - } + for (auto fix : modify->get_fix_list()) + fmt::print(out, "Fix[{:3d}]: {:16} style = {:16} group = {}\n",i++, + std::string(fix->id)+',',std::string(fix->style)+',',names[fix->igroup]); } if (flags & VARIABLES) { @@ -621,8 +612,7 @@ void Info::command(int narg, char **arg) for (int i=0; i < nvar; ++i) { int ndata = 1; fmt::print(out,"Variable[{:3d}]: {:16} style = {:16} def =", - i,std::string(names[i])+',', - std::string(varstyles[style[i]])+','); + i,std::string(names[i])+',',std::string(varstyles[style[i]])+','); if (style[i] == Variable::INTERNAL) { fmt::print(out,"{:.8}\n",input->variable->dvalue[i]); continue; @@ -797,13 +787,13 @@ bool Info::is_active(const char *category, const char *name) if (strcmp(category,"package") == 0) { if (strcmp(name,"gpu") == 0) { - return (modify->find_fix("package_gpu") >= 0) ? true : false; + return (modify->get_fix_by_id("package_gpu")) ? true : false; } else if (strcmp(name,"intel") == 0) { - return (modify->find_fix("package_intel") >= 0) ? true : false; + return (modify->get_fix_by_id("package_intel")) ? true : false; } else if (strcmp(name,"kokkos") == 0) { return (lmp->kokkos && lmp->kokkos->kokkos_exists) ? true : false; } else if (strcmp(name,"omp") == 0) { - return (modify->find_fix("package_omp") >= 0) ? true : false; + return (modify->get_fix_by_id("package_omp")) ? true : false; } else error->all(FLERR,"Unknown name for info package category: {}", name); } else if (strcmp(category,"newton") == 0) { diff --git a/src/library.cpp b/src/library.cpp index ed208413e6..a27da0d478 100644 --- a/src/library.cpp +++ b/src/library.cpp @@ -1689,9 +1689,8 @@ void *lammps_extract_compute(void *handle, const char *id, int style, int type) BEGIN_CAPTURE { - int icompute = lmp->modify->find_compute(id); - if (icompute < 0) return nullptr; - Compute *compute = lmp->modify->compute[icompute]; + auto compute = lmp->modify->get_compute_by_id(id); + if (!compute) return nullptr; if (style == LMP_STYLE_GLOBAL) { if (type == LMP_TYPE_SCALAR) { @@ -1876,9 +1875,8 @@ void *lammps_extract_fix(void *handle, const char *id, int style, int type, BEGIN_CAPTURE { - int ifix = lmp->modify->find_fix(id); - if (ifix < 0) return nullptr; - Fix *fix = lmp->modify->fix[ifix]; + auto fix = lmp->modify->get_fix_by_id(id); + if (!fix) return nullptr; if (style == LMP_STYLE_GLOBAL) { if (type == LMP_TYPE_SCALAR) { @@ -2868,10 +2866,9 @@ void lammps_gather(void *handle, char *name, int type, int count, void *data) BEGIN_CAPTURE { #if defined(LAMMPS_BIGBIG) - lmp->error->all(FLERR,"Library function lammps_gather" - " not compatible with -DLAMMPS_BIGBIG"); + lmp->error->all(FLERR,"Library function lammps_gather not compatible with -DLAMMPS_BIGBIG"); #else - int i,j,offset,fcid,ltype,icol; + int i,j,offset,ltype; // error if tags are not defined or not consecutive @@ -2892,76 +2889,72 @@ void lammps_gather(void *handle, char *name, int type, int count, void *data) if (vptr==nullptr && utils::strmatch(name,"^f_")) { - fcid = lmp->modify->find_fix(&name[2]); - if (fcid < 0) { + auto fix = lmp->modify->get_fix_by_id(&name[2]); + if (!fix) { if (lmp->comm->me == 0) lmp->error->warning(FLERR,"lammps_gather: unknown fix id"); return; } - if (lmp->modify->fix[fcid]->peratom_flag == 0) { + if (fix->peratom_flag == 0) { if (lmp->comm->me == 0) - lmp->error->warning(FLERR,"lammps_gather:" - " fix does not return peratom data"); + lmp->error->warning(FLERR,"lammps_gather: fix does not return peratom data"); return; } - if (count>1 && lmp->modify->fix[fcid]->size_peratom_cols != count) { + if ((count > 1) && (fix->size_peratom_cols != count)) { if (lmp->comm->me == 0) - lmp->error->warning(FLERR,"lammps_gather:" - " count != values peratom for fix"); + lmp->error->warning(FLERR,"lammps_gather: count != values peratom for fix"); return; } - if (lmp->update->ntimestep % lmp->modify->fix[fcid]->peratom_freq) { + if (lmp->update->ntimestep % fix->peratom_freq) { if (lmp->comm->me == 0) - lmp->error->all(FLERR,"lammps_gather:" - " fix not computed at compatible time"); + lmp->error->all(FLERR,"lammps_gather: fix not computed at compatible time"); return; } - if (count==1) vptr = (void *) lmp->modify->fix[fcid]->vector_atom; - else vptr = (void *) lmp->modify->fix[fcid]->array_atom; + if (count==1) vptr = (void *) fix->vector_atom; + else vptr = (void *) fix->array_atom; } // compute if (vptr==nullptr && utils::strmatch(name,"^c_")) { - fcid = lmp->modify->find_compute(&name[2]); - if (fcid < 0) { + auto compute = lmp->modify->get_compute_by_id(&name[2]); + if (!compute) { if (lmp->comm->me == 0) lmp->error->warning(FLERR,"lammps_gather: unknown compute id"); return; } - if (lmp->modify->compute[fcid]->peratom_flag == 0) { + if (compute->peratom_flag == 0) { if (lmp->comm->me == 0) - lmp->error->warning(FLERR,"lammps_gather:" - " compute does not return peratom data"); + lmp->error->warning(FLERR,"lammps_gather: compute does not return peratom data"); return; } - if (count>1 && lmp->modify->compute[fcid]->size_peratom_cols != count) { + if ((count > 1) && (compute->size_peratom_cols != count)) { if (lmp->comm->me == 0) - lmp->error->warning(FLERR,"lammps_gather:" - " count != values peratom for compute"); + lmp->error->warning(FLERR,"lammps_gather: count != values peratom for compute"); return; } - if (lmp->modify->compute[fcid]->invoked_peratom != lmp->update->ntimestep) - lmp->modify->compute[fcid]->compute_peratom(); + if (compute->invoked_peratom != lmp->update->ntimestep) + compute->compute_peratom(); - if (count==1) vptr = (void *) lmp->modify->compute[fcid]->vector_atom; - else vptr = (void *) lmp->modify->compute[fcid]->array_atom; + if (count==1) vptr = (void *) compute->vector_atom; + else vptr = (void *) compute->array_atom; } // custom fix property/atom vector or array if ((vptr == nullptr) && utils::strmatch(name,"^[id]2?_")) { - if (utils::strmatch(name,"^[id]_")) fcid = lmp->atom->find_custom(&name[2],ltype,icol); - else fcid = lmp->atom->find_custom(&name[3],ltype,icol); + int idx,icol; + if (utils::strmatch(name,"^[id]_")) idx = lmp->atom->find_custom(&name[2],ltype,icol); + else idx = lmp->atom->find_custom(&name[3],ltype,icol); - if (fcid < 0) { + if (idx < 0) { if (lmp->comm->me == 0) lmp->error->warning(FLERR,"lammps_gather: unknown property/atom id"); return; @@ -2972,23 +2965,23 @@ void lammps_gather(void *handle, char *name, int type, int count, void *data) lmp->error->warning(FLERR,"lammps_gather: mismatch property/atom type"); return; } - if (count == 1 && icol != 0) { + if ((count == 1) && (icol != 0)) { if (lmp->comm->me == 0) lmp->error->warning(FLERR,"lammps_gather: mismatch property/atom count"); return; } - if (count > 1 && icol != count) { + if ((count > 1) && (icol != count)) { if (lmp->comm->me == 0) lmp->error->warning(FLERR,"lammps_gather: mismatch property/atom count"); return; } if (count == 1) { - if (ltype==0) vptr = (void *) lmp->atom->ivector[fcid]; - else vptr = (void *) lmp->atom->dvector[fcid]; + if (ltype==0) vptr = (void *) lmp->atom->ivector[idx]; + else vptr = (void *) lmp->atom->dvector[idx]; } else { - if (ltype==0) vptr = (void *) lmp->atom->iarray[fcid]; - else vptr = (void *) lmp->atom->darray[fcid]; + if (ltype==0) vptr = (void *) lmp->atom->iarray[idx]; + else vptr = (void *) lmp->atom->darray[idx]; } } @@ -3111,7 +3104,7 @@ void lammps_gather_concat(void *handle, char *name, int type, int count, void *d lmp->error->all(FLERR,"Library function lammps_gather_concat" " not compatible with -DLAMMPS_BIGBIG"); #else - int i,offset,fcid,ltype,icol; + int i,offset,ltype; // error if tags are not defined or not consecutive @@ -3131,70 +3124,71 @@ void lammps_gather_concat(void *handle, char *name, int type, int count, void *d if (vptr==nullptr && utils::strmatch(name,"^f_")) { - fcid = lmp->modify->find_fix(&name[2]); - if (fcid < 0) { + auto fix = lmp->modify->get_fix_by_id(&name[2]); + if (!fix) { if (lmp->comm->me == 0) lmp->error->warning(FLERR,"lammps_gather_concat: unknown fix id"); return; } - if (lmp->modify->fix[fcid]->peratom_flag == 0) { + if (fix->peratom_flag == 0) { if (lmp->comm->me == 0) lmp->error->warning(FLERR,"lammps_gather_concat: fix does not return peratom data"); return; } - if (count>1 && lmp->modify->fix[fcid]->size_peratom_cols != count) { + if ((count > 1) && (fix->size_peratom_cols != count)) { if (lmp->comm->me == 0) lmp->error->warning(FLERR,"lammps_gather_concat: count != values peratom for fix"); return; } - if (lmp->update->ntimestep % lmp->modify->fix[fcid]->peratom_freq) { + if (lmp->update->ntimestep % fix->peratom_freq) { if (lmp->comm->me == 0) lmp->error->all(FLERR,"lammps_gather_concat: fix not computed at compatible time"); return; } - if (count==1) vptr = (void *) lmp->modify->fix[fcid]->vector_atom; - else vptr = (void *) lmp->modify->fix[fcid]->array_atom; + if (count==1) vptr = (void *) fix->vector_atom; + else vptr = (void *) fix->array_atom; } // compute if (vptr==nullptr && utils::strmatch(name,"^c_")) { - fcid = lmp->modify->find_compute(&name[2]); - if (fcid < 0) { + auto compute = lmp->modify->get_compute_by_id(&name[2]); + if (!compute) { if (lmp->comm->me == 0) lmp->error->warning(FLERR,"lammps_gather_concat: unknown compute id"); return; } - if (lmp->modify->compute[fcid]->peratom_flag == 0) { + if (compute->peratom_flag == 0) { if (lmp->comm->me == 0) lmp->error->warning(FLERR,"lammps_gather_concat: compute does not return peratom data"); return; } - if (count>1 && lmp->modify->compute[fcid]->size_peratom_cols != count) { + if ((count > 1) && (compute->size_peratom_cols != count)) { if (lmp->comm->me == 0) lmp->error->warning(FLERR,"lammps_gather_concat: count != values peratom for compute"); return; } - if (lmp->modify->compute[fcid]->invoked_peratom != lmp->update->ntimestep) - lmp->modify->compute[fcid]->compute_peratom(); + if (compute->invoked_peratom != lmp->update->ntimestep) + compute->compute_peratom(); - if (count==1) vptr = (void *) lmp->modify->compute[fcid]->vector_atom; - else vptr = (void *) lmp->modify->compute[fcid]->array_atom; + if (count==1) vptr = (void *) compute->vector_atom; + else vptr = (void *) compute->array_atom; } // custom per-atom vector or array if ((vptr==nullptr) && utils::strmatch(name,"^[id]2?_")) { - if (utils::strmatch(name,"^[id]_")) fcid = lmp->atom->find_custom(&name[2],ltype,icol); - else fcid = lmp->atom->find_custom(&name[3],ltype,icol); + int idx,icol; + if (utils::strmatch(name,"^[id]_")) idx = lmp->atom->find_custom(&name[2],ltype,icol); + else idx = lmp->atom->find_custom(&name[3],ltype,icol); - if (fcid < 0) { + if (idx < 0) { if (lmp->comm->me == 0) lmp->error->warning(FLERR,"lammps_gather_concat: unknown property/atom id"); return; @@ -3205,23 +3199,23 @@ void lammps_gather_concat(void *handle, char *name, int type, int count, void *d lmp->error->warning(FLERR,"lammps_gather_concat: mismatch property/atom type"); return; } - if (count == 1 && icol != 0) { + if ((count == 1) && (icol != 0)) { if (lmp->comm->me == 0) lmp->error->warning(FLERR,"lammps_gather_concat: mismatch property/atom count"); return; } - if (count > 1 && icol != count) { + if ((count > 1) && (icol != count)) { if (lmp->comm->me == 0) lmp->error->warning(FLERR,"lammps_gather_concat: mismatch property/atom count"); return; } if (count == 1) { - if (ltype==0) vptr = (void *) lmp->atom->ivector[fcid]; - else vptr = (void *) lmp->atom->dvector[fcid]; + if (ltype==0) vptr = (void *) lmp->atom->ivector[idx]; + else vptr = (void *) lmp->atom->dvector[idx]; } else { - if (ltype==0) vptr = (void *) lmp->atom->iarray[fcid]; - else vptr = (void *) lmp->atom->darray[fcid]; + if (ltype==0) vptr = (void *) lmp->atom->iarray[idx]; + else vptr = (void *) lmp->atom->darray[idx]; } } @@ -3364,7 +3358,7 @@ void lammps_gather_subset(void *handle, char *name, lmp->error->all(FLERR,"Library function lammps_gather_subset() " "is not compatible with -DLAMMPS_BIGBIG"); #else - int i,j,m,offset,fcid,ltype,icol; + int i,j,m,offset,ltype; tagint id; // error if tags are not defined or not consecutive @@ -3384,71 +3378,70 @@ void lammps_gather_subset(void *handle, char *name, if (vptr==nullptr && utils::strmatch(name,"^f_")) { - fcid = lmp->modify->find_fix(&name[2]); - if (fcid < 0) { + auto fix = lmp->modify->get_fix_by_id(&name[2]); + if (!fix) { if (lmp->comm->me == 0) lmp->error->warning(FLERR,"lammps_gather_subset: unknown fix id"); return; } - if (lmp->modify->fix[fcid]->peratom_flag == 0) { + if (fix->peratom_flag == 0) { if (lmp->comm->me == 0) - lmp->error->warning(FLERR,"lammps_gather_subset:" - " fix does not return peratom data"); + lmp->error->warning(FLERR,"lammps_gather_subset: fix does not return peratom data"); return; } - if (count>1 && lmp->modify->fix[fcid]->size_peratom_cols != count) { + if ((count > 1) && (fix->size_peratom_cols != count)) { lmp->error->warning(FLERR,"lammps_gather_subset: count != values peratom for fix"); return; } - if (lmp->update->ntimestep % lmp->modify->fix[fcid]->peratom_freq) { + if (lmp->update->ntimestep % fix->peratom_freq) { if (lmp->comm->me == 0) lmp->error->all(FLERR,"lammps_gather_subset: fix not computed at compatible time"); return; } - if (count==1) vptr = (void *) lmp->modify->fix[fcid]->vector_atom; - else vptr = (void *) lmp->modify->fix[fcid]->array_atom; + if (count==1) vptr = (void *) fix->vector_atom; + else vptr = (void *) fix->array_atom; } // compute if (vptr==nullptr && utils::strmatch(name,"^c_")) { - fcid = lmp->modify->find_compute(&name[2]); - if (fcid < 0) { + auto compute = lmp->modify->get_compute_by_id(&name[2]); + if (!compute) { if (lmp->comm->me == 0) lmp->error->warning(FLERR,"lammps_gather_subset: unknown compute id"); return; } - if (lmp->modify->compute[fcid]->peratom_flag == 0) { + if (compute->peratom_flag == 0) { if (lmp->comm->me == 0) lmp->error->warning(FLERR,"lammps_gather_subset: compute does not return peratom data"); return; } - if (count>1 && lmp->modify->compute[fcid]->size_peratom_cols != count) { + if ((count > 1) && (compute->size_peratom_cols != count)) { if (lmp->comm->me == 0) lmp->error->warning(FLERR,"lammps_gather_subset: count != values peratom for compute"); return; } - if (lmp->modify->compute[fcid]->invoked_peratom != lmp->update->ntimestep) - lmp->modify->compute[fcid]->compute_peratom(); + if (compute->invoked_peratom != lmp->update->ntimestep) + compute->compute_peratom(); - if (count==1) vptr = (void *) lmp->modify->compute[fcid]->vector_atom; - else vptr = (void *) lmp->modify->compute[fcid]->array_atom; + if (count==1) vptr = (void *) compute->vector_atom; + else vptr = (void *) compute->array_atom; } // custom fix property/atom vector or array if ((vptr == nullptr) && utils::strmatch(name,"^[id]2?_")) { - if (utils::strmatch(name,"^[id]_")) - fcid = lmp->atom->find_custom(&name[2],ltype,icol); - else fcid = lmp->atom->find_custom(&name[3],ltype,icol); + int idx,icol; + if (utils::strmatch(name,"^[id]_")) idx = lmp->atom->find_custom(&name[2],ltype,icol); + else idx = lmp->atom->find_custom(&name[3],ltype,icol); - if (fcid < 0) { + if (idx < 0) { if (lmp->comm->me == 0) lmp->error->warning(FLERR,"lammps_gather_subset: unknown property/atom id"); return; @@ -3471,11 +3464,11 @@ void lammps_gather_subset(void *handle, char *name, } if (count == 1) { - if (ltype==0) vptr = (void *) lmp->atom->ivector[fcid]; - else vptr = (void *) lmp->atom->dvector[fcid]; + if (ltype==0) vptr = (void *) lmp->atom->ivector[idx]; + else vptr = (void *) lmp->atom->dvector[idx]; } else { - if (ltype==0) vptr = (void *) lmp->atom->iarray[fcid]; - else vptr = (void *) lmp->atom->darray[fcid]; + if (ltype==0) vptr = (void *) lmp->atom->iarray[idx]; + else vptr = (void *) lmp->atom->darray[idx]; } } @@ -3611,7 +3604,7 @@ void lammps_scatter(void *handle, char *name, int type, int count, void *data) lmp->error->all(FLERR,"Library function lammps_scatter() " "is not compatible with -DLAMMPS_BIGBIG"); #else - int i,j,m,offset,fcid,ltype,icol; + int i,j,m,offset,ltype; // error if tags are not defined or not consecutive or no atom map // NOTE: test that name = image or ids is not a 64-bit int in code? @@ -3634,70 +3627,66 @@ void lammps_scatter(void *handle, char *name, int type, int count, void *data) if (vptr==nullptr && utils::strmatch(name,"^f_")) { - fcid = lmp->modify->find_fix(&name[2]); - if (fcid < 0) { + auto fix = lmp->modify->get_fix_by_id(&name[2]); + if (!fix) { if (lmp->comm->me == 0) lmp->error->warning(FLERR,"lammps_scatter: unknown fix id"); return; } - if (lmp->modify->fix[fcid]->peratom_flag == 0) { + if (fix->peratom_flag == 0) { if (lmp->comm->me == 0) - lmp->error->warning(FLERR,"lammps_scatter:" - " fix does not return peratom data"); + lmp->error->warning(FLERR,"lammps_scatter: fix does not return peratom data"); return; } - if (count>1 && lmp->modify->fix[fcid]->size_peratom_cols != count) { + if ((count > 1) && (fix->size_peratom_cols != count)) { if (lmp->comm->me == 0) - lmp->error->warning(FLERR,"lammps_scatter:" - " count != values peratom for fix"); + lmp->error->warning(FLERR,"lammps_scatter: count != values peratom for fix"); return; } - if (count==1) vptr = (void *) lmp->modify->fix[fcid]->vector_atom; - else vptr = (void *) lmp->modify->fix[fcid]->array_atom; + if (count==1) vptr = (void *) fix->vector_atom; + else vptr = (void *) fix->array_atom; } // compute if (vptr==nullptr && utils::strmatch(name,"^c_")) { - fcid = lmp->modify->find_compute(&name[2]); - if (fcid < 0) { + auto compute = lmp->modify->get_compute_by_id(&name[2]); + if (!compute) { if (lmp->comm->me == 0) lmp->error->warning(FLERR,"lammps_scatter: unknown compute id"); return; } - if (lmp->modify->compute[fcid]->peratom_flag == 0) { + if (compute->peratom_flag == 0) { if (lmp->comm->me == 0) - lmp->error->warning(FLERR,"lammps_scatter:" - " compute does not return peratom data"); + lmp->error->warning(FLERR,"lammps_scatter: compute does not return peratom data"); return; } - if (count>1 && lmp->modify->compute[fcid]->size_peratom_cols != count) { + if ((count > 1) && (compute->size_peratom_cols != count)) { if (lmp->comm->me == 0) - lmp->error->warning(FLERR,"lammps_scatter:" - " count != values peratom for compute"); + lmp->error->warning(FLERR,"lammps_scatter: count != values peratom for compute"); return; } - if (lmp->modify->compute[fcid]->invoked_peratom != lmp->update->ntimestep) - lmp->modify->compute[fcid]->compute_peratom(); + if (compute->invoked_peratom != lmp->update->ntimestep) + compute->compute_peratom(); - if (count==1) vptr = (void *) lmp->modify->compute[fcid]->vector_atom; - else vptr = (void *) lmp->modify->compute[fcid]->array_atom; + if (count==1) vptr = (void *) compute->vector_atom; + else vptr = (void *) compute->array_atom; } // custom fix property/atom vector or array if ((vptr == nullptr) && utils::strmatch(name,"^[id]2?_")) { - if (utils::strmatch(name,"^[id]_")) - fcid = lmp->atom->find_custom(&name[2],ltype,icol); - else fcid = lmp->atom->find_custom(&name[3],ltype,icol); + int idx,icol; + if (utils::strmatch(name,"^[id]_")) idx = lmp->atom->find_custom(&name[2],ltype,icol); + else idx = lmp->atom->find_custom(&name[3],ltype,icol); - if (fcid < 0) { + if (idx < 0) { if (lmp->comm->me == 0) lmp->error->warning(FLERR,"lammps_scatter: unknown property/atom id"); return; @@ -3720,11 +3709,11 @@ void lammps_scatter(void *handle, char *name, int type, int count, void *data) } if (count == 1) { - if (ltype==0) vptr = (void *) lmp->atom->ivector[fcid]; - else vptr = (void *) lmp->atom->dvector[fcid]; + if (ltype==0) vptr = (void *) lmp->atom->ivector[idx]; + else vptr = (void *) lmp->atom->dvector[idx]; } else { - if (ltype==0) vptr = (void *) lmp->atom->iarray[fcid]; - else vptr = (void *) lmp->atom->darray[fcid]; + if (ltype==0) vptr = (void *) lmp->atom->iarray[idx]; + else vptr = (void *) lmp->atom->darray[idx]; } } @@ -3833,7 +3822,7 @@ void lammps_scatter_subset(void *handle, char *name,int type, int count, lmp->error->all(FLERR,"Library function lammps_scatter_subset() " "is not compatible with -DLAMMPS_BIGBIG"); #else - int i,j,m,offset,fcid,ltype,icol; + int i,j,m,offset,ltype; tagint id; // error if tags are not defined or no atom map @@ -3855,70 +3844,66 @@ void lammps_scatter_subset(void *handle, char *name,int type, int count, if (vptr==nullptr && utils::strmatch(name,"^f_")) { - fcid = lmp->modify->find_fix(&name[2]); - if (fcid < 0) { + auto fix = lmp->modify->get_fix_by_id(&name[2]); + if (!fix) { if (lmp->comm->me == 0) lmp->error->warning(FLERR,"lammps_scatter_subset: unknown fix id"); return; } - if (lmp->modify->fix[fcid]->peratom_flag == 0) { + if (fix->peratom_flag == 0) { if (lmp->comm->me == 0) - lmp->error->warning(FLERR,"lammps_scatter_subset:" - " fix does not return peratom data"); + lmp->error->warning(FLERR,"lammps_scatter_subset: fix does not return peratom data"); return; } - if (count>1 && lmp->modify->fix[fcid]->size_peratom_cols != count) { + if ((count > 1) && (fix->size_peratom_cols != count)) { if (lmp->comm->me == 0) - lmp->error->warning(FLERR,"lammps_scatter_subset:" - " count != values peratom for fix"); + lmp->error->warning(FLERR,"lammps_scatter_subset: count != values peratom for fix"); return; } - if (count==1) vptr = (void *) lmp->modify->fix[fcid]->vector_atom; - else vptr = (void *) lmp->modify->fix[fcid]->array_atom; + if (count==1) vptr = (void *) fix->vector_atom; + else vptr = (void *) fix->array_atom; } // compute if (vptr==nullptr && utils::strmatch(name,"^c_")) { - fcid = lmp->modify->find_compute(&name[2]); - if (fcid < 0) { + auto compute = lmp->modify->get_compute_by_id(&name[2]); + if (!compute) { if (lmp->comm->me == 0) lmp->error->warning(FLERR,"lammps_scatter_subset: unknown compute id"); return; } - if (lmp->modify->compute[fcid]->peratom_flag == 0) { + if (compute->peratom_flag == 0) { if (lmp->comm->me == 0) - lmp->error->warning(FLERR,"lammps_scatter_subset:" - " compute does not return peratom data"); + lmp->error->warning(FLERR,"lammps_scatter_subset: compute does not return peratom data"); return; } - if (count>1 && lmp->modify->compute[fcid]->size_peratom_cols != count) { + if ((count > 1) && (compute->size_peratom_cols != count)) { if (lmp->comm->me == 0) - lmp->error->warning(FLERR,"lammps_scatter_subset:" - " count != values peratom for compute"); + lmp->error->warning(FLERR,"lammps_scatter_subset: count != values peratom for compute"); return; } - if (lmp->modify->compute[fcid]->invoked_peratom != lmp->update->ntimestep) - lmp->modify->compute[fcid]->compute_peratom(); + if (compute->invoked_peratom != lmp->update->ntimestep) + compute->compute_peratom(); - if (count==1) vptr = (void *) lmp->modify->compute[fcid]->vector_atom; - else vptr = (void *) lmp->modify->compute[fcid]->array_atom; + if (count==1) vptr = (void *) compute->vector_atom; + else vptr = (void *) compute->array_atom; } // custom fix property/atom vector or array if ((vptr == nullptr) && utils::strmatch(name,"^[id]2?_")) { - if (utils::strmatch(name,"^[id]_")) - fcid = lmp->atom->find_custom(&name[2],ltype,icol); - else fcid = lmp->atom->find_custom(&name[3],ltype,icol); + int idx,icol; + if (utils::strmatch(name,"^[id]_")) idx = lmp->atom->find_custom(&name[2],ltype,icol); + else idx = lmp->atom->find_custom(&name[3],ltype,icol); - if (fcid < 0) { + if (idx < 0) { if (lmp->comm->me == 0) lmp->error->warning(FLERR,"lammps_scatter_subset: unknown property/atom id"); return; @@ -3941,11 +3926,11 @@ void lammps_scatter_subset(void *handle, char *name,int type, int count, } if (count == 1) { - if (ltype==0) vptr = (void *) lmp->atom->ivector[fcid]; - else vptr = (void *) lmp->atom->dvector[fcid]; + if (ltype==0) vptr = (void *) lmp->atom->ivector[idx]; + else vptr = (void *) lmp->atom->dvector[idx]; } else { - if (ltype==0) vptr = (void *) lmp->atom->iarray[fcid]; - else vptr = (void *) lmp->atom->darray[fcid]; + if (ltype==0) vptr = (void *) lmp->atom->iarray[idx]; + else vptr = (void *) lmp->atom->darray[idx]; } } @@ -4242,10 +4227,9 @@ int lammps_find_pair_neighlist(void *handle, const char *style, int exact, int n int lammps_find_fix_neighlist(void *handle, const char *id, int reqid) { LAMMPS *lmp = (LAMMPS *) handle; - const int ifix = lmp->modify->find_fix(id); - if (ifix < 0) return -1; + auto fix = lmp->modify->get_fix_by_id(id); + if (!fix) return -1; - Fix *fix = lmp->modify->fix[ifix]; // find neigh list for (int i = 0; i < lmp->neighbor->nlist; i++) { NeighList *list = lmp->neighbor->lists[i]; @@ -4272,10 +4256,9 @@ int lammps_find_fix_neighlist(void *handle, const char *id, int reqid) { int lammps_find_compute_neighlist(void* handle, const char *id, int reqid) { LAMMPS *lmp = (LAMMPS *) handle; - const int icompute = lmp->modify->find_compute(id); - if (icompute < 0) return -1; + auto compute = lmp->modify->get_compute_by_id(id); + if (!compute) return -1; - Compute *compute = lmp->modify->compute[icompute]; // find neigh list for (int i = 0; i < lmp->neighbor->nlist; i++) { NeighList * list = lmp->neighbor->lists[i]; @@ -5089,11 +5072,8 @@ void lammps_set_fix_external_callback(void *handle, const char *id, FixExternalF BEGIN_CAPTURE { - int ifix = lmp->modify->find_fix(id); - if (ifix < 0) - lmp->error->all(FLERR,"Cannot find fix with ID '{}'!", id); - - Fix *fix = lmp->modify->fix[ifix]; + auto fix = lmp->modify->get_fix_by_id(id); + if (!fix) lmp->error->all(FLERR,"Cannot find fix with ID '{}'!", id); if (strcmp("external",fix->style) != 0) lmp->error->all(FLERR,"Fix '{}' is not of style 'external'", id); @@ -5153,16 +5133,14 @@ double **lammps_fix_external_get_force(void *handle, const char *id) BEGIN_CAPTURE { - int ifix = lmp->modify->find_fix(id); - if (ifix < 0) - lmp->error->all(FLERR,"Can not find fix with ID '{}'!", id); - - Fix *fix = lmp->modify->fix[ifix]; + auto fix = lmp->modify->get_fix_by_id(id); + if (!fix) lmp->error->all(FLERR,"Can not find fix with ID '{}'!", id); if (strcmp("external",fix->style) != 0) lmp->error->all(FLERR,"Fix '{}' is not of style external!", id); - fexternal = (double **)fix->extract("fexternal",ifix); + int tmp; + fexternal = (double **)fix->extract("fexternal",tmp); } END_CAPTURE return fexternal; @@ -5202,11 +5180,8 @@ void lammps_fix_external_set_energy_global(void *handle, const char *id, double BEGIN_CAPTURE { - int ifix = lmp->modify->find_fix(id); - if (ifix < 0) - lmp->error->all(FLERR,"Can not find fix with ID '{}'!", id); - - Fix *fix = lmp->modify->fix[ifix]; + auto fix = lmp->modify->get_fix_by_id(id); + if (!fix) lmp->error->all(FLERR,"Can not find fix with ID '{}'!", id); if (strcmp("external",fix->style) != 0) lmp->error->all(FLERR,"Fix '{}' is not of style external!", id); @@ -5253,11 +5228,8 @@ void lammps_fix_external_set_virial_global(void *handle, const char *id, double BEGIN_CAPTURE { - int ifix = lmp->modify->find_fix(id); - if (ifix < 0) - lmp->error->all(FLERR,"Can not find fix with ID '{}'!", id); - - Fix *fix = lmp->modify->fix[ifix]; + auto fix = lmp->modify->get_fix_by_id(id); + if (!fix) lmp->error->all(FLERR,"Can not find fix with ID '{}'!", id); if (strcmp("external",fix->style) != 0) lmp->error->all(FLERR,"Fix '{}' is not of style external!", id); @@ -5304,11 +5276,8 @@ void lammps_fix_external_set_energy_peratom(void *handle, const char *id, double BEGIN_CAPTURE { - int ifix = lmp->modify->find_fix(id); - if (ifix < 0) - lmp->error->all(FLERR,"Can not find fix with ID '{}'!", id); - - Fix *fix = lmp->modify->fix[ifix]; + auto fix = lmp->modify->get_fix_by_id(id); + if (!fix) lmp->error->all(FLERR,"Can not find fix with ID '{}'!", id); if (strcmp("external",fix->style) != 0) lmp->error->all(FLERR,"Fix '{}' is not of style external!", id); @@ -5358,11 +5327,8 @@ void lammps_fix_external_set_virial_peratom(void *handle, const char *id, double BEGIN_CAPTURE { - int ifix = lmp->modify->find_fix(id); - if (ifix < 0) - lmp->error->all(FLERR,"Can not find fix with ID '{}'!", id); - - Fix *fix = lmp->modify->fix[ifix]; + auto fix = lmp->modify->get_fix_by_id(id); + if (!fix) lmp->error->all(FLERR,"Can not find fix with ID '{}'!", id); if (strcmp("external",fix->style) != 0) lmp->error->all(FLERR,"Fix '{}' is not of style external!", id); @@ -5405,11 +5371,8 @@ void lammps_fix_external_set_vector_length(void *handle, const char *id, int len BEGIN_CAPTURE { - int ifix = lmp->modify->find_fix(id); - if (ifix < 0) - lmp->error->all(FLERR,"Can not find fix with ID '{}'!", id); - - Fix *fix = lmp->modify->fix[ifix]; + auto fix = lmp->modify->get_fix_by_id(id); + if (!fix) lmp->error->all(FLERR,"Can not find fix with ID '{}'!", id); if (strcmp("external",fix->style) != 0) lmp->error->all(FLERR,"Fix '{}' is not of style external!", id); @@ -5462,11 +5425,8 @@ void lammps_fix_external_set_vector(void *handle, const char *id, int idx, doubl BEGIN_CAPTURE { - int ifix = lmp->modify->find_fix(id); - if (ifix < 0) - lmp->error->all(FLERR,"Can not find fix with ID '{}'!", id); - - Fix *fix = lmp->modify->fix[ifix]; + auto fix = lmp->modify->get_fix_by_id(id); + if (!fix) lmp->error->all(FLERR,"Can not find fix with ID '{}'!", id); if (strcmp("external",fix->style) != 0) lmp->error->all(FLERR,"Fix '{}' is not of style external!", id); diff --git a/src/min.cpp b/src/min.cpp index 4780cf31eb..0c71607bd8 100644 --- a/src/min.cpp +++ b/src/min.cpp @@ -157,8 +157,7 @@ void Min::init() // detect if fix omp is present for clearing force arrays - int ifix = modify->find_fix("package_omp"); - if (ifix >= 0) external_force_clear = 1; + if (modify->get_fix_by_id("package_omp")) external_force_clear = 1; // set flags for arrays to clear in force_clear() @@ -230,9 +229,8 @@ void Min::setup(int flag) // compute for potential energy - int id = modify->find_compute("thermo_pe"); - if (id < 0) error->all(FLERR,"Minimization could not find thermo_pe compute"); - pe_compute = modify->compute[id]; + pe_compute = modify->get_compute_by_id("thermo_pe"); + if (!pe_compute) error->all(FLERR,"Minimization could not find thermo_pe compute"); // style-specific setup does two tasks // setup extra global dof vectors diff --git a/src/modify.cpp b/src/modify.cpp index aadfd5cc3e..1ff4986a43 100644 --- a/src/modify.cpp +++ b/src/modify.cpp @@ -807,9 +807,8 @@ Fix *Modify::add_fix(int narg, char **arg, int trysuffix) // since some fixes access domain settings in their constructor // nullptr must be last entry in this list - const char *exceptions[] = - {"GPU", "OMP", "INTEL", "property/atom", "cmap", "cmap3", "rx", - "deprecated", "STORE/KIM", nullptr}; + const char *exceptions[] = {"GPU", "OMP", "INTEL", "property/atom", "cmap", "cmap3", "rx", + "deprecated", "STORE/KIM", nullptr}; if (domain->box_exist == 0) { int m; @@ -822,7 +821,7 @@ Fix *Modify::add_fix(int narg, char **arg, int trysuffix) // check group ID int igroup = group->find(arg[1]); - if (igroup == -1) error->all(FLERR,"Could not find fix group ID"); + if (igroup == -1) error->all(FLERR,"Could not find fix group ID {}", arg[1]); // if fix ID exists: // set newflag = 0 so create new fix in same location in fix list @@ -856,8 +855,7 @@ Fix *Modify::add_fix(int narg, char **arg, int trysuffix) if (estyle == fix[ifix]->style) match = 1; } } - if (!match) - error->all(FLERR,"Replacing a fix, but new style != old style"); + if (!match) error->all(FLERR,"Replacing a fix, but new style != old style"); if (fix[ifix]->igroup != igroup && comm->me == 0) error->warning(FLERR,"Replacing a fix, but new group != old group"); @@ -907,9 +905,12 @@ Fix *Modify::add_fix(int narg, char **arg, int trysuffix) if (fix[ifix] == nullptr) error->all(FLERR,utils::check_packages_for_style("fix",arg[2],lmp)); - // increment nfix (if new) + // increment nfix and update fix_list vector (if new) - if (newflag) nfix++; + if (newflag) { + nfix++; + fix_list = std::vector(fix, fix+nfix); + } // post_constructor() can call virtual methods in parent or child // which would otherwise not yet be visible in child class @@ -983,25 +984,24 @@ Fix *Modify::add_fix(const std::string &fixcmd, int trysuffix) Fix *Modify::replace_fix(const char *replaceID, int narg, char **arg, int trysuffix) { - int ifix = find_fix(replaceID); - if (ifix < 0) error->all(FLERR,"Modify replace_fix ID {} could not be found", replaceID); + auto oldfix = get_fix_by_id(replaceID); + if (!oldfix) error->all(FLERR,"Modify replace_fix ID {} could not be found", replaceID); // change ID, igroup, style of fix being replaced to match new fix // requires some error checking on arguments for new fix if (narg < 3) error->all(FLERR,"Illegal replace_fix invocation"); - int jfix = find_fix(arg[0]); - if (jfix >= 0) error->all(FLERR,"Replace_fix ID is already in use"); + if (!get_fix_by_id(arg[0])) error->all(FLERR,"Replace_fix ID is already in use"); - delete [] fix[ifix]->id; - fix[ifix]->id = utils::strdup(arg[0]); + delete[] oldfix->id; + oldfix->id = utils::strdup(arg[0]); int jgroup = group->find(arg[1]); - if (jgroup == -1) error->all(FLERR,"Could not find replace_fix group ID"); - fix[ifix]->igroup = jgroup; + if (jgroup == -1) error->all(FLERR,"Could not find replace_fix group ID {}", arg[1]); + oldfix->igroup = jgroup; - delete [] fix[ifix]->style; - fix[ifix]->style = utils::strdup(arg[2]); + delete[] oldfix->style; + oldfix->style = utils::strdup(arg[2]); // invoke add_fix // it will find and overwrite the replaceID fix @@ -1047,7 +1047,7 @@ void Modify::modify_fix(int narg, char **arg) int ifix; for (ifix = 0; ifix < nfix; ifix++) if (strcmp(arg[0],fix[ifix]->id) == 0) break; - if (ifix == nfix) error->all(FLERR,"Could not find fix_modify ID"); + if (ifix == nfix) error->all(FLERR,"Could not find fix_modify ID {}", arg[0]); fix[ifix]->modify_params(narg-1,&arg[1]); } @@ -1060,7 +1060,7 @@ void Modify::modify_fix(int narg, char **arg) void Modify::delete_fix(const std::string &id) { int ifix = find_fix(id); - if (ifix < 0) error->all(FLERR,"Could not find fix ID to delete"); + if (ifix < 0) error->all(FLERR,"Could not find fix ID {} to delete", id); delete_fix(ifix); } @@ -1076,6 +1076,7 @@ void Modify::delete_fix(int ifix) for (int i = ifix+1; i < nfix; i++) fix[i-1] = fix[i]; for (int i = ifix+1; i < nfix; i++) fmask[i-1] = fmask[i]; nfix--; + fix_list = std::vector(fix, fix+nfix); } /* ---------------------------------------------------------------------- @@ -1252,8 +1253,7 @@ Compute *Modify::add_compute(int narg, char **arg, int trysuffix) if (ncompute == maxcompute) { maxcompute += DELTA; - compute = (Compute **) - memory->srealloc(compute,maxcompute*sizeof(Compute *),"modify:compute"); + compute = (Compute **) memory->srealloc(compute,maxcompute*sizeof(Compute *),"modify:compute"); } // create the Compute @@ -1291,6 +1291,7 @@ Compute *Modify::add_compute(int narg, char **arg, int trysuffix) if (compute[ncompute] == nullptr) error->all(FLERR,utils::check_packages_for_style("compute",arg[2],lmp)); + compute_list = std::vector(compute, compute+ncompute+1); return compute[ncompute++]; } @@ -1334,7 +1335,7 @@ void Modify::modify_compute(int narg, char **arg) for (icompute = 0; icompute < ncompute; icompute++) if (strcmp(arg[0],compute[icompute]->id) == 0) break; if (icompute == ncompute) - error->all(FLERR,"Could not find compute_modify ID"); + error->all(FLERR,"Could not find compute_modify ID {}", arg[0]); compute[icompute]->modify_params(narg-1,&arg[1]); } @@ -1346,7 +1347,7 @@ void Modify::modify_compute(int narg, char **arg) void Modify::delete_compute(const std::string &id) { int icompute = find_compute(id); - if (icompute < 0) error->all(FLERR,"Could not find compute ID to delete"); + if (icompute < 0) error->all(FLERR,"Could not find compute ID {} to delete", id); delete_compute(icompute); } @@ -1359,6 +1360,7 @@ void Modify::delete_compute(int icompute) delete compute[icompute]; for (int i = icompute+1; i < ncompute; i++) compute[i-1] = compute[i]; ncompute--; + compute_list = std::vector(compute, compute+ncompute); } /* ---------------------------------------------------------------------- diff --git a/src/read_data.cpp b/src/read_data.cpp index edbfc16696..27d60275c4 100644 --- a/src/read_data.cpp +++ b/src/read_data.cpp @@ -267,14 +267,11 @@ void ReadData::command(int narg, char **arg) error->all(FLERR,"Illegal read_data command"); memory->grow(fix_index,nfix+1,"read_data:fix_index"); fix_header = (char **) - memory->srealloc(fix_header,(nfix+1)*sizeof(char *), - "read_data:fix_header"); + memory->srealloc(fix_header,(nfix+1)*sizeof(char *),"read_data:fix_header"); fix_section = (char **) - memory->srealloc(fix_section,(nfix+1)*sizeof(char *), - "read_data:fix_section"); + memory->srealloc(fix_section,(nfix+1)*sizeof(char *),"read_data:fix_section"); fix_index[nfix] = modify->find_fix(arg[iarg+1]); - if (fix_index[nfix] < 0) - error->all(FLERR,"Fix ID for read_data does not exist"); + if (fix_index[nfix] < 0) error->all(FLERR,"Fix ID for read_data does not exist"); if (strcmp(arg[iarg+2],"NULL") == 0) fix_header[nfix] = nullptr; else fix_header[nfix] = utils::strdup(arg[iarg+2]); fix_section[nfix] = utils::strdup(arg[iarg+3]); diff --git a/src/read_restart.cpp b/src/read_restart.cpp index 0eab44baaa..f8ac14534b 100644 --- a/src/read_restart.cpp +++ b/src/read_restart.cpp @@ -445,8 +445,7 @@ void ReadRestart::command(int narg, char **arg) if (nextra) { memory->destroy(atom->extra); memory->create(atom->extra,atom->nmax,nextra,"atom:extra"); - int ifix = modify->find_fix("_read_restart"); - FixReadRestart *fix = (FixReadRestart *) modify->fix[ifix]; + auto fix = (FixReadRestart *) modify->get_fix_by_id("_read_restart"); int *count = fix->count; double **extra = fix->extra; double **atom_extra = atom->extra; diff --git a/src/reset_mol_ids.cpp b/src/reset_mol_ids.cpp index 4c973f543f..a29ea98e18 100644 --- a/src/reset_mol_ids.cpp +++ b/src/reset_mol_ids.cpp @@ -151,24 +151,14 @@ void ResetMolIDs::create_computes(char *fixid, char *groupid) // 'fixid' allows for creating independent instances of the computes idfrag = fmt::format("{}_reset_mol_ids_FRAGMENT_ATOM",fixid); - if (singleflag) - modify->add_compute(fmt::format("{} {} fragment/atom single yes",idfrag,groupid)); - else - modify->add_compute(fmt::format("{} {} fragment/atom single no",idfrag,groupid)); + auto use_single = singleflag ? "yes" : "no"; + cfa = (ComputeFragmentAtom *) + modify->add_compute(fmt::format("{} {} fragment/atom single {}",idfrag,groupid,use_single)); idchunk = fmt::format("{}_reset_mol_ids_CHUNK_ATOM",fixid); if (compressflag) - modify->add_compute(fmt::format("{} {} chunk/atom molecule compress yes", - idchunk,groupid)); - - int icompute = modify->find_compute(idfrag); - cfa = (ComputeFragmentAtom *) modify->compute[icompute]; - - - if (compressflag) { - icompute = modify->find_compute(idchunk); - cca = (ComputeChunkAtom *) modify->compute[icompute]; - } + cca = (ComputeChunkAtom *) + modify->add_compute(fmt::format("{} {} chunk/atom molecule compress yes",idchunk,groupid)); } /* ---------------------------------------------------------------------- diff --git a/src/respa.cpp b/src/respa.cpp index 5190441994..cc8c03538d 100644 --- a/src/respa.cpp +++ b/src/respa.cpp @@ -322,8 +322,7 @@ void Respa::init() // detect if fix omp is present and will clear force arrays - int ifix = modify->find_fix("package_omp"); - if (ifix >= 0) external_force_clear = 1; + if (modify->get_fix_by_id("package_omp")) external_force_clear = 1; // set flags for arrays to clear in force_clear() diff --git a/src/thermo.cpp b/src/thermo.cpp index 434012870b..e39d7d7c57 100644 --- a/src/thermo.cpp +++ b/src/thermo.cpp @@ -267,23 +267,20 @@ void Thermo::init() // find current ptr for each Compute ID - int icompute; for (i = 0; i < ncompute; i++) { - icompute = modify->find_compute(id_compute[i]); - if (icompute < 0) error->all(FLERR,"Could not find thermo compute ID"); - computes[i] = modify->compute[icompute]; + computes[i] = modify->get_compute_by_id(id_compute[i]); + if (!computes[i]) error->all(FLERR,"Could not find thermo compute with ID {}",id_compute[i]); } // find current ptr for each Fix ID // check that fix frequency is acceptable with thermo output frequency - int ifix; for (i = 0; i < nfix; i++) { - ifix = modify->find_fix(id_fix[i]); - if (ifix < 0) error->all(FLERR,"Could not find thermo fix ID"); - fixes[i] = modify->fix[ifix]; + fixes[i] = modify->get_fix_by_id(id_fix[i]); + if (!fixes[i]) error->all(FLERR,"Could not find thermo fix ID {}",id_fix[i]); + if (output->thermo_every % fixes[i]->global_freq) - error->all(FLERR,"Thermo and fix not computed at compatible times"); + error->all(FLERR,"Thermo and fix {} not computed at compatible times",id_fix[i]); } // find current ptr for each Variable ID @@ -467,36 +464,33 @@ void Thermo::modify_params(int narg, char **arg) if (strcmp(arg[iarg],"temp") == 0) { if (iarg+2 > narg) error->all(FLERR,"Illegal thermo_modify command"); if (index_temp < 0) error->all(FLERR,"Thermo style does not use temp"); - delete [] id_compute[index_temp]; + delete[] id_compute[index_temp]; id_compute[index_temp] = utils::strdup(arg[iarg+1]); - int icompute = modify->find_compute(arg[iarg+1]); - if (icompute < 0) - error->all(FLERR,"Could not find thermo_modify temperature ID"); - temperature = modify->compute[icompute]; + temperature = modify->get_compute_by_id(arg[iarg+1]); + if (!temperature) + error->all(FLERR,"Could not find thermo_modify temperature compute {}",arg[iarg+1]); if (temperature->tempflag == 0) - error->all(FLERR,"Thermo_modify temperature ID does not " - "compute temperature"); + error->all(FLERR,"Thermo_modify compute {} does not compute temperature",arg[iarg+1]); if (temperature->igroup != 0 && comm->me == 0) - error->warning(FLERR, - "Temperature for thermo pressure is not for group all"); + error->warning(FLERR,"Temperature for thermo pressure is not for group all"); // reset id_temp of pressure to new temperature ID // either pressure currently being used by thermo or "thermo_press" + Compute *pcompute; if (index_press_scalar >= 0) { - icompute = modify->find_compute(id_compute[index_press_scalar]); - if (icompute < 0) error->all(FLERR, - "Pressure ID for thermo does not exist"); + pcompute = modify->get_compute_by_id(id_compute[index_press_scalar]); + if (!pcompute) error->all(FLERR, "Pressure compute {} for thermo output does not exist", + id_compute[index_press_scalar]); } else if (index_press_vector >= 0) { - icompute = modify->find_compute(id_compute[index_press_vector]); - if (icompute < 0) error->all(FLERR, - "Pressure ID for thermo does not exist"); - } else icompute = modify->find_compute("thermo_press"); - - modify->compute[icompute]->reset_extra_compute_fix(arg[iarg+1]); + pcompute = modify->get_compute_by_id(id_compute[index_press_vector]); + if (!pcompute) error->all(FLERR,"Pressure compute {} for thermo output does not exist", + id_compute[index_press_vector]); + } else pcompute = modify->get_compute_by_id("thermo_press"); + pcompute->reset_extra_compute_fix(arg[iarg+1]); iarg += 2; } else if (strcmp(arg[iarg],"press") == 0) { @@ -513,13 +507,12 @@ void Thermo::modify_params(int narg, char **arg) id_compute[index_press_vector] = utils::strdup(arg[iarg+1]); } - int icompute = modify->find_compute(arg[iarg+1]); - if (icompute < 0) error->all(FLERR, - "Could not find thermo_modify pressure ID"); - pressure = modify->compute[icompute]; + pressure = modify->get_compute_by_id(arg[iarg+1]); + if (!pressure) + error->all(FLERR,"Could not find thermo_modify pressure compute {}",arg[iarg+1]); if (pressure->pressflag == 0) - error->all(FLERR,"Thermo_modify pressure ID does not compute pressure"); + error->all(FLERR,"Thermo_modify compute {} does not compute pressure",arg[iarg+1]); iarg += 2; @@ -912,24 +905,24 @@ void Thermo::parse_fields(char *str) argindex2[nfield] = (argi.get_dim() > 1) ? argi.get_index2() : 0; if (argi.get_type() == ArgInfo::COMPUTE) { - int n = modify->find_compute(argi.get_name()); - if (n < 0) error->all(FLERR,"Could not find thermo custom compute ID"); - if (argindex1[nfield] == 0 && modify->compute[n]->scalar_flag == 0) + auto icompute = modify->get_compute_by_id(argi.get_name()); + if (!icompute) error->all(FLERR,"Could not find thermo custom compute ID"); + if (argindex1[nfield] == 0 && icompute->scalar_flag == 0) error->all(FLERR,"Thermo compute does not compute scalar"); if (argindex1[nfield] > 0 && argindex2[nfield] == 0) { - if (modify->compute[n]->vector_flag == 0) + if (icompute->vector_flag == 0) error->all(FLERR,"Thermo compute does not compute vector"); - if (argindex1[nfield] > modify->compute[n]->size_vector && - modify->compute[n]->size_vector_variable == 0) + if (argindex1[nfield] > icompute->size_vector && + icompute->size_vector_variable == 0) error->all(FLERR,"Thermo compute vector is accessed out-of-range"); } if (argindex1[nfield] > 0 && argindex2[nfield] > 0) { - if (modify->compute[n]->array_flag == 0) + if (icompute->array_flag == 0) error->all(FLERR,"Thermo compute does not compute array"); - if (argindex1[nfield] > modify->compute[n]->size_array_rows && - modify->compute[n]->size_array_rows_variable == 0) + if (argindex1[nfield] > icompute->size_array_rows && + icompute->size_array_rows_variable == 0) error->all(FLERR,"Thermo compute array is accessed out-of-range"); - if (argindex2[nfield] > modify->compute[n]->size_array_cols) + if (argindex2[nfield] > icompute->size_array_cols) error->all(FLERR,"Thermo compute array is accessed out-of-range"); } @@ -942,24 +935,24 @@ void Thermo::parse_fields(char *str) addfield(word.c_str(), &Thermo::compute_compute, FLOAT); } else if (argi.get_type() == ArgInfo::FIX) { - int n = modify->find_fix(argi.get_name()); - if (n < 0) error->all(FLERR,"Could not find thermo custom fix ID"); - if (argindex1[nfield] == 0 && modify->fix[n]->scalar_flag == 0) + auto ifix = modify->get_fix_by_id(argi.get_name()); + if (!ifix) error->all(FLERR,"Could not find thermo custom fix ID"); + if (argindex1[nfield] == 0 && ifix->scalar_flag == 0) error->all(FLERR,"Thermo fix does not compute scalar"); if (argindex1[nfield] > 0 && argindex2[nfield] == 0) { - if (modify->fix[n]->vector_flag == 0) + if (ifix->vector_flag == 0) error->all(FLERR,"Thermo fix does not compute vector"); - if (argindex1[nfield] > modify->fix[n]->size_vector && - modify->fix[n]->size_vector_variable == 0) + if (argindex1[nfield] > ifix->size_vector && + ifix->size_vector_variable == 0) error->all(FLERR,"Thermo fix vector is accessed out-of-range"); } if (argindex1[nfield] > 0 && argindex2[nfield] > 0) { - if (modify->fix[n]->array_flag == 0) + if (ifix->array_flag == 0) error->all(FLERR,"Thermo fix does not compute array"); - if (argindex1[nfield] > modify->fix[n]->size_array_rows && - modify->fix[n]->size_array_rows_variable == 0) + if (argindex1[nfield] > ifix->size_array_rows && + ifix->size_array_rows_variable == 0) error->all(FLERR,"Thermo fix array is accessed out-of-range"); - if (argindex2[nfield] > modify->fix[n]->size_array_cols) + if (argindex2[nfield] > ifix->size_array_cols) error->all(FLERR,"Thermo fix array is accessed out-of-range"); } @@ -971,11 +964,9 @@ void Thermo::parse_fields(char *str) if (n < 0) error->all(FLERR,"Could not find thermo custom variable name"); if (argindex1[nfield] == 0 && input->variable->equalstyle(n) == 0) - error->all(FLERR, - "Thermo custom variable is not equal-style variable"); + error->all(FLERR,"Thermo custom variable is not equal-style variable"); if (argindex1[nfield] && input->variable->vectorstyle(n) == 0) - error->all(FLERR, - "Thermo custom variable is not vector-style variable"); + error->all(FLERR,"Thermo custom variable is not vector-style variable"); if (argindex2[nfield]) error->all(FLERR,"Thermo custom variable cannot have two indices"); diff --git a/src/utils.cpp b/src/utils.cpp index 507500f116..dc96dd4c1f 100644 --- a/src/utils.cpp +++ b/src/utils.cpp @@ -583,12 +583,11 @@ int utils::expand_args(const char *file, int line, int narg, char **arg, int mod // compute if (word[0] == 'c') { - int icompute = lmp->modify->find_compute(id); + auto compute = lmp->modify->get_compute_by_id(id); // check for global vector/array, peratom array, local array - if (icompute >= 0) { - Compute *compute = lmp->modify->compute[icompute]; + if (compute) { if (mode == 0 && compute->vector_flag) { nmax = compute->size_vector; expandflag = 1; @@ -607,13 +606,11 @@ int utils::expand_args(const char *file, int line, int narg, char **arg, int mod // fix } else if (word[0] == 'f') { - int ifix = lmp->modify->find_fix(id); + auto fix = lmp->modify->get_fix_by_id(id); // check for global vector/array, peratom array, local array - if (ifix >= 0) { - Fix *fix = lmp->modify->fix[ifix]; - + if (fix) { if (mode == 0 && fix->vector_flag) { nmax = fix->size_vector; expandflag = 1; From 682f862f431433935d41191520365aa3b21fcda9 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Wed, 20 Oct 2021 02:48:15 -0400 Subject: [PATCH 229/372] apply clang-format --- src/respa.cpp | 352 +++++++++++++++++++++++--------------------------- 1 file changed, 162 insertions(+), 190 deletions(-) diff --git a/src/respa.cpp b/src/respa.cpp index cc8c03538d..af8b0c21ac 100644 --- a/src/respa.cpp +++ b/src/respa.cpp @@ -1,4 +1,3 @@ -// clang-format off /* ---------------------------------------------------------------------- LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator https://www.lammps.org/, Sandia National Laboratories @@ -46,23 +45,22 @@ using namespace LAMMPS_NS; /* ---------------------------------------------------------------------- */ Respa::Respa(LAMMPS *lmp, int narg, char **arg) : - Integrate(lmp, narg, arg), - step(nullptr), loop(nullptr), hybrid_level(nullptr), hybrid_compute(nullptr), - newton(nullptr), fix_respa(nullptr) + Integrate(lmp, narg, arg), step(nullptr), loop(nullptr), hybrid_level(nullptr), + hybrid_compute(nullptr), newton(nullptr), fix_respa(nullptr) { nhybrid_styles = 0; - if (narg < 1) error->all(FLERR,"Illegal run_style respa command"); + if (narg < 1) error->all(FLERR, "Illegal run_style respa command"); - nlevels = utils::inumeric(FLERR,arg[0],false,lmp); - if (nlevels < 1) error->all(FLERR,"Respa levels must be >= 1"); + nlevels = utils::inumeric(FLERR, arg[0], false, lmp); + if (nlevels < 1) error->all(FLERR, "Respa levels must be >= 1"); - if (narg < nlevels) error->all(FLERR,"Illegal run_style respa command"); + if (narg < nlevels) error->all(FLERR, "Illegal run_style respa command"); loop = new int[nlevels]; for (int iarg = 1; iarg < nlevels; iarg++) { - loop[iarg-1] = utils::inumeric(FLERR,arg[iarg],false,lmp); - if (loop[iarg-1] <= 0) error->all(FLERR,"Illegal run_style respa command"); + loop[iarg - 1] = utils::inumeric(FLERR, arg[iarg], false, lmp); + if (loop[iarg - 1] <= 0) error->all(FLERR, "Illegal run_style respa command"); } - loop[nlevels-1] = 1; + loop[nlevels - 1] = 1; // set level at which each force is computed // argument settings override defaults @@ -79,87 +77,86 @@ Respa::Respa(LAMMPS *lmp, int narg, char **arg) : int iarg = nlevels; while (iarg < narg) { - if (strcmp(arg[iarg],"bond") == 0) { - if (iarg+2 > narg) error->all(FLERR,"Illegal run_style respa command"); - level_bond = utils::inumeric(FLERR,arg[iarg+1],false,lmp) - 1; + if (strcmp(arg[iarg], "bond") == 0) { + if (iarg + 2 > narg) error->all(FLERR, "Illegal run_style respa command"); + level_bond = utils::inumeric(FLERR, arg[iarg + 1], false, lmp) - 1; iarg += 2; - } else if (strcmp(arg[iarg],"angle") == 0) { - if (iarg+2 > narg) error->all(FLERR,"Illegal run_style respa command"); - level_angle = utils::inumeric(FLERR,arg[iarg+1],false,lmp) - 1; + } else if (strcmp(arg[iarg], "angle") == 0) { + if (iarg + 2 > narg) error->all(FLERR, "Illegal run_style respa command"); + level_angle = utils::inumeric(FLERR, arg[iarg + 1], false, lmp) - 1; iarg += 2; - } else if (strcmp(arg[iarg],"dihedral") == 0) { - if (iarg+2 > narg) error->all(FLERR,"Illegal run_style respa command"); - level_dihedral = utils::inumeric(FLERR,arg[iarg+1],false,lmp) - 1; + } else if (strcmp(arg[iarg], "dihedral") == 0) { + if (iarg + 2 > narg) error->all(FLERR, "Illegal run_style respa command"); + level_dihedral = utils::inumeric(FLERR, arg[iarg + 1], false, lmp) - 1; iarg += 2; - } else if (strcmp(arg[iarg],"improper") == 0) { - if (iarg+2 > narg) error->all(FLERR,"Illegal run_style respa command"); - level_improper = utils::inumeric(FLERR,arg[iarg+1],false,lmp) - 1; + } else if (strcmp(arg[iarg], "improper") == 0) { + if (iarg + 2 > narg) error->all(FLERR, "Illegal run_style respa command"); + level_improper = utils::inumeric(FLERR, arg[iarg + 1], false, lmp) - 1; iarg += 2; - } else if (strcmp(arg[iarg],"pair") == 0) { - if (iarg+2 > narg) error->all(FLERR,"Illegal run_style respa command"); - level_pair = utils::inumeric(FLERR,arg[iarg+1],false,lmp) - 1; + } else if (strcmp(arg[iarg], "pair") == 0) { + if (iarg + 2 > narg) error->all(FLERR, "Illegal run_style respa command"); + level_pair = utils::inumeric(FLERR, arg[iarg + 1], false, lmp) - 1; iarg += 2; - } else if (strcmp(arg[iarg],"inner") == 0) { - if (iarg+4 > narg) error->all(FLERR,"Illegal run_style respa command"); - level_inner = utils::inumeric(FLERR,arg[iarg+1],false,lmp) - 1; - cutoff[0] = utils::numeric(FLERR,arg[iarg+2],false,lmp); - cutoff[1] = utils::numeric(FLERR,arg[iarg+3],false,lmp); + } else if (strcmp(arg[iarg], "inner") == 0) { + if (iarg + 4 > narg) error->all(FLERR, "Illegal run_style respa command"); + level_inner = utils::inumeric(FLERR, arg[iarg + 1], false, lmp) - 1; + cutoff[0] = utils::numeric(FLERR, arg[iarg + 2], false, lmp); + cutoff[1] = utils::numeric(FLERR, arg[iarg + 3], false, lmp); iarg += 4; - } else if (strcmp(arg[iarg],"middle") == 0) { - if (iarg+4 > narg) error->all(FLERR,"Illegal run_style respa command"); - level_middle = utils::inumeric(FLERR,arg[iarg+1],false,lmp) - 1; - cutoff[2] = utils::numeric(FLERR,arg[iarg+2],false,lmp); - cutoff[3] = utils::numeric(FLERR,arg[iarg+3],false,lmp); + } else if (strcmp(arg[iarg], "middle") == 0) { + if (iarg + 4 > narg) error->all(FLERR, "Illegal run_style respa command"); + level_middle = utils::inumeric(FLERR, arg[iarg + 1], false, lmp) - 1; + cutoff[2] = utils::numeric(FLERR, arg[iarg + 2], false, lmp); + cutoff[3] = utils::numeric(FLERR, arg[iarg + 3], false, lmp); iarg += 4; - } else if (strcmp(arg[iarg],"outer") == 0) { - if (iarg+2 > narg) error->all(FLERR,"Illegal run_style respa command"); - level_outer = utils::inumeric(FLERR,arg[iarg+1],false,lmp) - 1; + } else if (strcmp(arg[iarg], "outer") == 0) { + if (iarg + 2 > narg) error->all(FLERR, "Illegal run_style respa command"); + level_outer = utils::inumeric(FLERR, arg[iarg + 1], false, lmp) - 1; iarg += 2; - } else if (strcmp(arg[iarg],"kspace") == 0) { - if (iarg+2 > narg) error->all(FLERR,"Illegal run_style respa command"); - level_kspace = utils::inumeric(FLERR,arg[iarg+1],false,lmp) - 1; + } else if (strcmp(arg[iarg], "kspace") == 0) { + if (iarg + 2 > narg) error->all(FLERR, "Illegal run_style respa command"); + level_kspace = utils::inumeric(FLERR, arg[iarg + 1], false, lmp) - 1; iarg += 2; - } else if (strcmp(arg[iarg],"hybrid") == 0) { + } else if (strcmp(arg[iarg], "hybrid") == 0) { // the hybrid keyword requires a hybrid pair style - if (!utils::strmatch(force->pair_style,"^hybrid")) - error->all(FLERR,"Illegal run_style respa command"); + if (!utils::strmatch(force->pair_style, "^hybrid")) + error->all(FLERR, "Illegal run_style respa command"); PairHybrid *hybrid = (PairHybrid *) force->pair; nhybrid_styles = hybrid->nstyles; // each hybrid sub-style needs to be assigned to a respa level - if (iarg+nhybrid_styles > narg) - error->all(FLERR,"Illegal run_style respa command"); + if (iarg + nhybrid_styles > narg) error->all(FLERR, "Illegal run_style respa command"); hybrid_level = new int[nhybrid_styles]; hybrid_compute = new int[nhybrid_styles]; - for (int i=0; i < nhybrid_styles; ++i) { + for (int i = 0; i < nhybrid_styles; ++i) { ++iarg; - hybrid_level[i] = utils::inumeric(FLERR,arg[iarg],false,lmp)-1; + hybrid_level[i] = utils::inumeric(FLERR, arg[iarg], false, lmp) - 1; } ++iarg; - } else error->all(FLERR,"Illegal run_style respa command"); + } else + error->all(FLERR, "Illegal run_style respa command"); } // cannot specify both pair and inner/middle/outer - if (level_pair >= 0 && - (level_inner >= 0 || level_middle >= 0 || level_outer >= 0)) - error->all(FLERR,"Cannot set both respa pair and inner/middle/outer"); + if (level_pair >= 0 && (level_inner >= 0 || level_middle >= 0 || level_outer >= 0)) + error->all(FLERR, "Cannot set both respa pair and inner/middle/outer"); // if either inner and outer is specified, then both must be - if ((level_inner >= 0 && level_outer == -1) || - (level_outer >= 0 && level_inner == -1)) - error->all(FLERR,"Must set both respa inner and outer"); + if ((level_inner >= 0 && level_outer == -1) || (level_outer >= 0 && level_inner == -1)) + error->all(FLERR, "Must set both respa inner and outer"); // middle cannot be set without inner/outer if (level_middle >= 0 && level_inner == -1) - error->all(FLERR,"Cannot set respa middle without inner/outer"); + error->all(FLERR, "Cannot set respa middle without inner/outer"); // cannot combine hybrid with any of pair/inner/middle/outer - if ((nhybrid_styles > 0) && (level_pair >= 0 || level_inner >= 0 - || level_middle >= 0 || level_outer >= 0)) - error->all(FLERR,"Cannot set respa hybrid and " + if ((nhybrid_styles > 0) && + (level_pair >= 0 || level_inner >= 0 || level_middle >= 0 || level_outer >= 0)) + error->all(FLERR, + "Cannot set respa hybrid and " "any of pair/inner/middle/outer"); // set defaults if user did not specify level @@ -174,8 +171,7 @@ Respa::Respa(LAMMPS *lmp, int narg, char **arg) : if (level_dihedral == -1) level_dihedral = level_angle; if (level_improper == -1) level_improper = level_dihedral; - if (level_pair == -1 && level_inner == -1 && nhybrid_styles < 1) - level_pair = nlevels-1; + if (level_pair == -1 && level_inner == -1 && nhybrid_styles < 1) level_pair = nlevels - 1; if (level_kspace == -1 && level_pair >= 0) level_kspace = level_pair; if (level_kspace == -1 && level_pair == -1) { @@ -183,9 +179,8 @@ Respa::Respa(LAMMPS *lmp, int narg, char **arg) : level_kspace = level_outer; } else { int max_hybrid_level = -1; - for (int i=0; i < nhybrid_styles; ++i) { - if (max_hybrid_level < hybrid_level[i]) - max_hybrid_level = hybrid_level[i]; + for (int i = 0; i < nhybrid_styles; ++i) { + if (max_hybrid_level < hybrid_level[i]) max_hybrid_level = hybrid_level[i]; } level_kspace = max_hybrid_level; } @@ -196,59 +191,57 @@ Respa::Respa(LAMMPS *lmp, int narg, char **arg) : if (comm->me == 0) { std::string mesg = "Respa levels:\n"; for (int i = 0; i < nlevels; i++) { - mesg += fmt::format(" {} =",i+1); - if (level_bond == i) mesg += " bond"; - if (level_angle == i) mesg += " angle"; - if (level_dihedral == i) mesg += " dihedral"; - if (level_improper == i) mesg += " improper"; - if (level_pair == i) mesg += " pair"; - if (level_inner == i) mesg += " pair-inner"; - if (level_middle == i) mesg += " pair-middle"; - if (level_outer == i) mesg += " pair-outer"; - for (int j=0; j < nhybrid_styles; j++) - if (hybrid_level[j] == i) mesg += fmt::format(" hybrid-{}",j+1); - if (level_kspace == i) mesg += " kspace"; + mesg += fmt::format(" {} =", i + 1); + if (level_bond == i) mesg += " bond"; + if (level_angle == i) mesg += " angle"; + if (level_dihedral == i) mesg += " dihedral"; + if (level_improper == i) mesg += " improper"; + if (level_pair == i) mesg += " pair"; + if (level_inner == i) mesg += " pair-inner"; + if (level_middle == i) mesg += " pair-middle"; + if (level_outer == i) mesg += " pair-outer"; + for (int j = 0; j < nhybrid_styles; j++) + if (hybrid_level[j] == i) mesg += fmt::format(" hybrid-{}", j + 1); + if (level_kspace == i) mesg += " kspace"; mesg += "\n"; } - utils::logmesg(lmp,mesg); + utils::logmesg(lmp, mesg); } // check that levels are in correct order - if (level_angle < level_bond || level_dihedral < level_angle || - level_improper < level_dihedral) - error->all(FLERR,"Invalid order of forces within respa levels"); + if (level_angle < level_bond || level_dihedral < level_angle || level_improper < level_dihedral) + error->all(FLERR, "Invalid order of forces within respa levels"); if (level_pair >= 0) { if (level_pair < level_improper || level_kspace < level_pair) - error->all(FLERR,"Invalid order of forces within respa levels"); + error->all(FLERR, "Invalid order of forces within respa levels"); } if (level_pair == -1 && level_middle == -1 && nhybrid_styles < 1) { - if (level_inner < level_improper || level_outer < level_inner || - level_kspace < level_outer) - error->all(FLERR,"Invalid order of forces within respa levels"); + if (level_inner < level_improper || level_outer < level_inner || level_kspace < level_outer) + error->all(FLERR, "Invalid order of forces within respa levels"); } if (level_pair == -1 && level_middle >= 0) { - if (level_inner < level_improper || level_middle < level_inner || - level_outer < level_inner || level_kspace < level_outer) - error->all(FLERR,"Invalid order of forces within respa levels"); + if (level_inner < level_improper || level_middle < level_inner || level_outer < level_inner || + level_kspace < level_outer) + error->all(FLERR, "Invalid order of forces within respa levels"); } // warn if any levels are devoid of forces int flag = 0; for (int i = 0; i < nlevels; i++) - if (level_bond != i && level_angle != i && level_dihedral != i && - level_improper != i && level_pair != i && level_inner != i && - level_middle != i && level_outer != i && level_kspace != i) flag = 1; - if (flag && comm->me == 0) - error->warning(FLERR,"One or more respa levels compute no forces"); + if (level_bond != i && level_angle != i && level_dihedral != i && level_improper != i && + level_pair != i && level_inner != i && level_middle != i && level_outer != i && + level_kspace != i) + flag = 1; + if (flag && comm->me == 0) error->warning(FLERR, "One or more respa levels compute no forces"); // check cutoff consistency if inner/middle/outer are enabled if (level_inner >= 0 && cutoff[1] < cutoff[0]) - error->all(FLERR,"Respa inner cutoffs are invalid"); + error->all(FLERR, "Respa inner cutoffs are invalid"); if (level_middle >= 0 && (cutoff[3] < cutoff[2] || cutoff[2] < cutoff[1])) - error->all(FLERR,"Respa middle cutoffs are invalid"); + error->all(FLERR, "Respa middle cutoffs are invalid"); // set outer pair of cutoffs to inner pair if middle is not enabled @@ -275,12 +268,12 @@ Respa::Respa(LAMMPS *lmp, int narg, char **arg) : Respa::~Respa() { - delete [] loop; - delete [] newton; - delete [] step; + delete[] loop; + delete[] newton; + delete[] step; if (nhybrid_styles > 0) { - delete [] hybrid_level; - delete [] hybrid_compute; + delete[] hybrid_level; + delete[] hybrid_compute; } } @@ -295,13 +288,13 @@ void Respa::init() // warn if no fixes if (modify->nfix == 0 && comm->me == 0) - error->warning(FLERR,"No fixes defined, atoms won't move"); + error->warning(FLERR, "No fixes defined, atoms won't move"); // create fix needed for storing atom-based respa level forces // will delete it at end of run // if supported, we also store torques on a per-level basis - std::string cmd = fmt::format("RESPA all RESPA {}",nlevels); + std::string cmd = fmt::format("RESPA all RESPA {}", nlevels); if (atom->torque_flag) cmd += " torque"; fix_respa = (FixRespa *) modify->add_fix(cmd); @@ -309,7 +302,7 @@ void Respa::init() if (level_inner >= 0) if (force->pair && force->pair->respa_enable == 0) - error->all(FLERR,"Pair style does not support rRESPA inner/middle/outer"); + error->all(FLERR, "Pair style does not support rRESPA inner/middle/outer"); // virial_style = VIRIAL_PAIR (explicit) // since never computed implicitly with virial_fdotr_compute() like Verlet @@ -332,22 +325,22 @@ void Respa::init() // step[] = timestep for each level - step[nlevels-1] = update->dt; - for (int ilevel = nlevels-2; ilevel >= 0; ilevel--) - step[ilevel] = step[ilevel+1]/loop[ilevel]; + step[nlevels - 1] = update->dt; + for (int ilevel = nlevels - 2; ilevel >= 0; ilevel--) + step[ilevel] = step[ilevel + 1] / loop[ilevel]; // set newton flag for each level for (int ilevel = 0; ilevel < nlevels; ilevel++) { newton[ilevel] = 0; if (force->newton_bond) { - if (level_bond == ilevel || level_angle == ilevel || - level_dihedral == ilevel || level_improper == ilevel) + if (level_bond == ilevel || level_angle == ilevel || level_dihedral == ilevel || + level_improper == ilevel) newton[ilevel] = 1; } if (force->newton_pair) { - if (level_pair == ilevel || level_inner == ilevel || - level_middle == ilevel || level_outer == ilevel) + if (level_pair == ilevel || level_inner == ilevel || level_middle == ilevel || + level_outer == ilevel) newton[ilevel] = 1; if (nhybrid_styles > 0) { @@ -371,23 +364,21 @@ void Respa::setup(int flag) if (comm->me == 0 && screen) { std::string mesg = "Setting up r-RESPA run ...\n"; if (flag) { - mesg += fmt::format(" Unit style : {}\n",update->unit_style); + mesg += fmt::format(" Unit style : {}\n", update->unit_style); mesg += fmt::format(" Current step : {}\n", update->ntimestep); mesg += " Time steps :"; - for (int ilevel=0; ilevel < nlevels; ++ilevel) - mesg += fmt::format(" {}:{}",ilevel+1, step[ilevel]); + for (int ilevel = 0; ilevel < nlevels; ++ilevel) + mesg += fmt::format(" {}:{}", ilevel + 1, step[ilevel]); mesg += "\n r-RESPA fixes :"; - for (int l=0; l < modify->n_post_force_respa; ++l) { + for (int l = 0; l < modify->n_post_force_respa; ++l) { Fix *f = modify->fix[modify->list_post_force_respa[l]]; if (f->respa_level >= 0) - mesg += fmt::format(" {}:{}[{}]", - MIN(f->respa_level+1,nlevels), - f->style,f->id); + mesg += fmt::format(" {}:{}[{}]", MIN(f->respa_level + 1, nlevels), f->style, f->id); } mesg += "\n"; - fputs(mesg.c_str(),screen); + fputs(mesg.c_str(), screen); timer->print_timeout(screen); } } @@ -408,7 +399,7 @@ void Respa::setup(int flag) comm->exchange(); if (atom->sortfreq > 0) atom->sort(); comm->borders(); - if (triclinic) domain->lamda2x(atom->nlocal+atom->nghost); + if (triclinic) domain->lamda2x(atom->nlocal + atom->nghost); domain->image_check(); domain->box_too_small_check(); modify->setup_pre_neighbor(); @@ -423,34 +414,26 @@ void Respa::setup(int flag) for (int ilevel = 0; ilevel < nlevels; ilevel++) { force_clear(newton[ilevel]); - modify->setup_pre_force_respa(vflag,ilevel); + modify->setup_pre_force_respa(vflag, ilevel); if (nhybrid_styles > 0) { set_compute_flags(ilevel); - force->pair->compute(eflag,vflag); + force->pair->compute(eflag, vflag); } - if (level_pair == ilevel && pair_compute_flag) - force->pair->compute(eflag,vflag); - if (level_inner == ilevel && pair_compute_flag) - force->pair->compute_inner(); - if (level_middle == ilevel && pair_compute_flag) - force->pair->compute_middle(); - if (level_outer == ilevel && pair_compute_flag) - force->pair->compute_outer(eflag,vflag); - if (level_bond == ilevel && force->bond) - force->bond->compute(eflag,vflag); - if (level_angle == ilevel && force->angle) - force->angle->compute(eflag,vflag); - if (level_dihedral == ilevel && force->dihedral) - force->dihedral->compute(eflag,vflag); - if (level_improper == ilevel && force->improper) - force->improper->compute(eflag,vflag); + if (level_pair == ilevel && pair_compute_flag) force->pair->compute(eflag, vflag); + if (level_inner == ilevel && pair_compute_flag) force->pair->compute_inner(); + if (level_middle == ilevel && pair_compute_flag) force->pair->compute_middle(); + if (level_outer == ilevel && pair_compute_flag) force->pair->compute_outer(eflag, vflag); + if (level_bond == ilevel && force->bond) force->bond->compute(eflag, vflag); + if (level_angle == ilevel && force->angle) force->angle->compute(eflag, vflag); + if (level_dihedral == ilevel && force->dihedral) force->dihedral->compute(eflag, vflag); + if (level_improper == ilevel && force->improper) force->improper->compute(eflag, vflag); if (level_kspace == ilevel && force->kspace) { force->kspace->setup(); - if (kspace_compute_flag) force->kspace->compute(eflag,vflag); + if (kspace_compute_flag) force->kspace->compute(eflag, vflag); } - modify->setup_pre_reverse(eflag,vflag); + modify->setup_pre_reverse(eflag, vflag); if (newton[ilevel]) comm->reverse_comm(); copy_f_flevel(ilevel); } @@ -484,7 +467,7 @@ void Respa::setup_minimal(int flag) if (neighbor->style) neighbor->setup_bins(); comm->exchange(); comm->borders(); - if (triclinic) domain->lamda2x(atom->nlocal+atom->nghost); + if (triclinic) domain->lamda2x(atom->nlocal + atom->nghost); domain->image_check(); domain->box_too_small_check(); modify->setup_pre_neighbor(); @@ -499,35 +482,27 @@ void Respa::setup_minimal(int flag) for (int ilevel = 0; ilevel < nlevels; ilevel++) { force_clear(newton[ilevel]); - modify->setup_pre_force_respa(vflag,ilevel); + modify->setup_pre_force_respa(vflag, ilevel); if (nhybrid_styles > 0) { set_compute_flags(ilevel); - force->pair->compute(eflag,vflag); + force->pair->compute(eflag, vflag); } - if (level_pair == ilevel && pair_compute_flag) - force->pair->compute(eflag,vflag); - if (level_inner == ilevel && pair_compute_flag) - force->pair->compute_inner(); - if (level_middle == ilevel && pair_compute_flag) - force->pair->compute_middle(); - if (level_outer == ilevel && pair_compute_flag) - force->pair->compute_outer(eflag,vflag); - if (level_bond == ilevel && force->bond) - force->bond->compute(eflag,vflag); - if (level_angle == ilevel && force->angle) - force->angle->compute(eflag,vflag); - if (level_dihedral == ilevel && force->dihedral) - force->dihedral->compute(eflag,vflag); - if (level_improper == ilevel && force->improper) - force->improper->compute(eflag,vflag); + if (level_pair == ilevel && pair_compute_flag) force->pair->compute(eflag, vflag); + if (level_inner == ilevel && pair_compute_flag) force->pair->compute_inner(); + if (level_middle == ilevel && pair_compute_flag) force->pair->compute_middle(); + if (level_outer == ilevel && pair_compute_flag) force->pair->compute_outer(eflag, vflag); + if (level_bond == ilevel && force->bond) force->bond->compute(eflag, vflag); + if (level_angle == ilevel && force->angle) force->angle->compute(eflag, vflag); + if (level_dihedral == ilevel && force->dihedral) force->dihedral->compute(eflag, vflag); + if (level_improper == ilevel && force->improper) force->improper->compute(eflag, vflag); if (level_kspace == ilevel && force->kspace) { force->kspace->setup(); - if (kspace_compute_flag) force->kspace->compute(eflag,vflag); + if (kspace_compute_flag) force->kspace->compute(eflag, vflag); } - modify->setup_pre_reverse(eflag,vflag); + modify->setup_pre_reverse(eflag, vflag); if (newton[ilevel]) comm->reverse_comm(); copy_f_flevel(ilevel); } @@ -554,7 +529,7 @@ void Respa::run(int n) ntimestep = ++update->ntimestep; ev_set(ntimestep); - recurse(nlevels-1); + recurse(nlevels - 1); // needed in case end_of_step() or output() use total force @@ -590,9 +565,9 @@ void Respa::cleanup() void Respa::reset_dt() { - step[nlevels-1] = update->dt; - for (int ilevel = nlevels-2; ilevel >= 0; ilevel--) - step[ilevel] = step[ilevel+1]/loop[ilevel]; + step[nlevels - 1] = update->dt; + for (int ilevel = nlevels - 2; ilevel >= 0; ilevel--) + step[ilevel] = step[ilevel + 1] / loop[ilevel]; } /* ---------------------------------------------------------------------- */ @@ -604,16 +579,15 @@ void Respa::recurse(int ilevel) for (int iloop = 0; iloop < loop[ilevel]; iloop++) { timer->stamp(); - modify->initial_integrate_respa(vflag,ilevel,iloop); - if (modify->n_post_integrate_respa) - modify->post_integrate_respa(ilevel,iloop); + modify->initial_integrate_respa(vflag, ilevel, iloop); + if (modify->n_post_integrate_respa) modify->post_integrate_respa(ilevel, iloop); timer->stamp(Timer::MODIFY); // at outermost level, check on rebuilding neighbor list // at innermost level, communicate // at middle levels, do nothing - if (ilevel == nlevels-1) { + if (ilevel == nlevels - 1) { int nflag = neighbor->decide(); if (nflag) { if (modify->n_pre_exchange) { @@ -630,10 +604,9 @@ void Respa::recurse(int ilevel) } timer->stamp(); comm->exchange(); - if (atom->sortfreq > 0 && - update->ntimestep >= atom->nextsort) atom->sort(); + if (atom->sortfreq > 0 && update->ntimestep >= atom->nextsort) atom->sort(); comm->borders(); - if (triclinic) domain->lamda2x(atom->nlocal+atom->nghost); + if (triclinic) domain->lamda2x(atom->nlocal + atom->nghost); timer->stamp(Timer::COMM); if (modify->n_pre_neighbor) { modify->pre_neighbor(); @@ -664,7 +637,7 @@ void Respa::recurse(int ilevel) // b/c atoms migrated to new procs between short/long force calls // now they migrate at very start of rRESPA timestep, before all forces - if (ilevel) recurse(ilevel-1); + if (ilevel) recurse(ilevel - 1); // force computations // important that ordering is same as Verlet @@ -674,18 +647,18 @@ void Respa::recurse(int ilevel) force_clear(newton[ilevel]); if (modify->n_pre_force_respa) { timer->stamp(); - modify->pre_force_respa(vflag,ilevel,iloop); + modify->pre_force_respa(vflag, ilevel, iloop); timer->stamp(Timer::MODIFY); } timer->stamp(); if (nhybrid_styles > 0) { set_compute_flags(ilevel); - force->pair->compute(eflag,vflag); + force->pair->compute(eflag, vflag); timer->stamp(Timer::PAIR); } if (level_pair == ilevel && pair_compute_flag) { - force->pair->compute(eflag,vflag); + force->pair->compute(eflag, vflag); timer->stamp(Timer::PAIR); } if (level_inner == ilevel && pair_compute_flag) { @@ -697,32 +670,32 @@ void Respa::recurse(int ilevel) timer->stamp(Timer::PAIR); } if (level_outer == ilevel && pair_compute_flag) { - force->pair->compute_outer(eflag,vflag); + force->pair->compute_outer(eflag, vflag); timer->stamp(Timer::PAIR); } if (level_bond == ilevel && force->bond) { - force->bond->compute(eflag,vflag); + force->bond->compute(eflag, vflag); timer->stamp(Timer::BOND); } if (level_angle == ilevel && force->angle) { - force->angle->compute(eflag,vflag); + force->angle->compute(eflag, vflag); timer->stamp(Timer::BOND); } if (level_dihedral == ilevel && force->dihedral) { - force->dihedral->compute(eflag,vflag); + force->dihedral->compute(eflag, vflag); timer->stamp(Timer::BOND); } if (level_improper == ilevel && force->improper) { - force->improper->compute(eflag,vflag); + force->improper->compute(eflag, vflag); timer->stamp(Timer::BOND); } if (level_kspace == ilevel && kspace_compute_flag) { - force->kspace->compute(eflag,vflag); + force->kspace->compute(eflag, vflag); timer->stamp(Timer::KSPACE); } if (modify->n_pre_reverse) { - modify->pre_reverse(eflag,vflag); + modify->pre_reverse(eflag, vflag); timer->stamp(Timer::MODIFY); } @@ -731,9 +704,8 @@ void Respa::recurse(int ilevel) timer->stamp(Timer::COMM); } timer->stamp(); - if (modify->n_post_force_respa) - modify->post_force_respa(vflag,ilevel,iloop); - modify->final_integrate_respa(ilevel,iloop); + if (modify->n_post_force_respa) modify->post_force_respa(vflag, ilevel, iloop); + modify->final_integrate_respa(ilevel, iloop); timer->stamp(Timer::MODIFY); } @@ -756,9 +728,9 @@ void Respa::force_clear(int /*newtonflag*/) if (force->newton) nbytes += sizeof(double) * atom->nghost; if (nbytes) { - memset(&atom->f[0][0],0,3*nbytes); - if (torqueflag) memset(&atom->torque[0][0],0,3*nbytes); - if (extraflag) atom->avec->force_clear(0,nbytes); + memset(&atom->f[0][0], 0, 3 * nbytes); + if (torqueflag) memset(&atom->torque[0][0], 0, 3 * nbytes); + if (extraflag) atom->avec->force_clear(0, nbytes); } } @@ -848,9 +820,9 @@ void Respa::set_compute_flags(int ilevel) if (nhybrid_styles < 1) return; pair_compute = 0; - for (int i=0; i Date: Wed, 20 Oct 2021 12:41:02 -0400 Subject: [PATCH 230/372] use true/false instead of 1/0 detected and changed by clang-tidy --- src/DPD-REACT/fix_eos_table.cpp | 2 +- src/DPD-REACT/fix_eos_table_rx.cpp | 4 +-- src/DPD-REACT/fix_rx.cpp | 12 ++++---- src/DPD-REACT/pair_exp6_rx.cpp | 4 +-- src/DPD-REACT/pair_multi_lucy.cpp | 2 +- src/DPD-REACT/pair_multi_lucy_rx.cpp | 2 +- src/EXTRA-FIX/fix_gle.cpp | 4 +-- src/GRANULAR/fix_pour.cpp | 2 +- src/KIM/kim_interactions.cpp | 2 +- src/KSPACE/pppm.cpp | 2 +- src/KSPACE/pppm_dipole.cpp | 2 +- src/KSPACE/pppm_disp.cpp | 6 ++-- src/MANIFOLD/fix_nve_manifold_rattle.cpp | 2 +- src/MANYBODY/pair_edip.cpp | 2 +- src/MANYBODY/pair_edip_multi.cpp | 2 +- src/MANYBODY/pair_extep.cpp | 4 +-- src/MANYBODY/pair_lcbop.cpp | 6 ++-- src/MDI/mdi_engine.cpp | 4 +-- src/MEAM/pair_meam.cpp | 2 +- src/MESONT/pair_mesont_tpm.cpp | 2 +- src/MGPT/mgpt_readpot.cpp | 10 +++---- src/MGPT/mgpt_splinetab.cpp | 2 +- src/MGPT/pair_mgpt.cpp | 14 ++++----- src/ML-IAP/mliap_descriptor_snap.cpp | 2 +- src/ML-IAP/mliap_descriptor_so3.cpp | 2 +- src/ML-IAP/mliap_model_nn.cpp | 2 +- src/ML-RANN/pair_rann.cpp | 30 ++++++++++---------- src/ML-SNAP/pair_snap.cpp | 2 +- src/POEMS/fix_poems.cpp | 6 ++-- src/PTM/ptm_convex_hull_incremental.cpp | 2 +- src/QEQ/fix_qeq.cpp | 2 +- src/REACTION/fix_bond_react.cpp | 2 +- src/REAXFF/fix_reaxff_species.cpp | 4 +-- src/REAXFF/reaxff_allocate.cpp | 6 ++-- src/REAXFF/reaxff_control.cpp | 2 +- src/REPLICA/fix_hyper_local.cpp | 2 +- src/REPLICA/neb.cpp | 4 +-- src/RIGID/fix_rigid.cpp | 2 +- src/RIGID/fix_rigid_small.cpp | 2 +- src/SPIN/neb_spin.cpp | 4 +-- src/SRD/fix_srd.cpp | 8 +++--- src/atom.cpp | 2 +- src/atom_vec_body.cpp | 2 +- src/balance.cpp | 2 +- src/comm_tiled.cpp | 2 +- src/compute_aggregate_atom.cpp | 4 +-- src/compute_cluster_atom.cpp | 4 +-- src/compute_fragment_atom.cpp | 2 +- src/create_atoms.cpp | 2 +- src/input.cpp | 4 +-- src/min_linesearch.cpp | 6 ++-- src/molecule.cpp | 2 +- src/platform.cpp | 2 +- src/procmap.cpp | 2 +- src/rcb.cpp | 4 +-- src/read_data.cpp | 4 +-- src/read_dump.cpp | 10 +++---- src/rerun.cpp | 2 +- src/universe.cpp | 2 +- src/utils.cpp | 2 +- src/variable.cpp | 12 ++++---- src/write_coeff.cpp | 2 +- src/write_dump.cpp | 2 +- tools/binary2txt.cpp | 2 +- unittest/force-styles/test_config_reader.cpp | 4 +-- 65 files changed, 130 insertions(+), 130 deletions(-) diff --git a/src/DPD-REACT/fix_eos_table.cpp b/src/DPD-REACT/fix_eos_table.cpp index c9c23b51f8..61b4e7501a 100644 --- a/src/DPD-REACT/fix_eos_table.cpp +++ b/src/DPD-REACT/fix_eos_table.cpp @@ -207,7 +207,7 @@ void FixEOStable::read_table(Table *tb, Table *tb2, char *file, char *keyword) // loop until section found with matching keyword - while (1) { + while (true) { if (fgets(line,MAXLINE,fp) == nullptr) error->one(FLERR,"Did not find keyword in table file"); if (strspn(line," \t\n\r") == strlen(line)) continue; // blank line diff --git a/src/DPD-REACT/fix_eos_table_rx.cpp b/src/DPD-REACT/fix_eos_table_rx.cpp index b39e029c3e..5e950642d3 100644 --- a/src/DPD-REACT/fix_eos_table_rx.cpp +++ b/src/DPD-REACT/fix_eos_table_rx.cpp @@ -321,7 +321,7 @@ void FixEOStableRX::read_file(char *file) char line[MAXLINE],*ptr; int eof = 0; - while (1) { + while (true) { if (comm->me == 0) { ptr = fgets(line,MAXLINE,fp); if (ptr == nullptr) { @@ -427,7 +427,7 @@ void FixEOStableRX::read_table(Table *tb, Table *tb2, char *file, char *keyword) // loop until section found with matching keyword - while (1) { + while (true) { if (fgets(line,MAXLINE,fp) == nullptr) error->one(FLERR,"Did not find keyword in table file"); if (strspn(line," \t\n\r") == strlen(line)) continue; // blank line diff --git a/src/DPD-REACT/fix_rx.cpp b/src/DPD-REACT/fix_rx.cpp index f21914e2d5..165a3a6dbf 100644 --- a/src/DPD-REACT/fix_rx.cpp +++ b/src/DPD-REACT/fix_rx.cpp @@ -255,7 +255,7 @@ void FixRX::post_constructor() int eof = 0; char * word; - while (1) { + while (true) { if (comm->me == 0) { ptr = fgets(line,MAXLINE,fp); if (ptr == nullptr) { @@ -804,7 +804,7 @@ void FixRX::read_file(char *file) char line[MAXLINE],*ptr; int eof = 0; - while (1) { + while (true) { if (comm->me == 0) { ptr = fgets(line,MAXLINE,fp); if (ptr == nullptr) { @@ -858,7 +858,7 @@ void FixRX::read_file(char *file) nreactions=0; sign = -1.0; - while (1) { + while (true) { if (comm->me == 0) { ptr = fgets(line,MAXLINE,fp); if (ptr == nullptr) { @@ -1155,7 +1155,7 @@ int FixRX::rkf45_h0 (const int neq, const double t, const double /*t_stop*/, // compute ydot at t=t0 rhs (t, y, ydot, v_params); - while (1) + while (true) { // Estimate y'' with finite-difference ... @@ -1254,7 +1254,7 @@ void FixRX::odeDiagnostics() double max_per_proc[numCounters]; double min_per_proc[numCounters]; - if (1) + if (true) { static bool firstStep = true; @@ -1285,7 +1285,7 @@ void FixRX::odeDiagnostics() printf("me= %d nst= %g nfc= %g time= %g nlocal= %g lmpnst= %g weight_idx= %d 1st= %d aveNeigh= %g\n", comm->me, this->diagnosticCounter[0], this->diagnosticCounter[1], this->diagnosticCounter[2], this->diagnosticCounter[3], this->diagnosticCounter[4], rx_weight_index, firstStep, averageNumNeighbors); - if (rx_weight_index != -1 && !firstStep && 0) + if (rx_weight_index != -1 && !firstStep && false) { double *rx_weight = atom->dvector[rx_weight_index]; diff --git a/src/DPD-REACT/pair_exp6_rx.cpp b/src/DPD-REACT/pair_exp6_rx.cpp index b0b9f97ca2..313e9f2583 100644 --- a/src/DPD-REACT/pair_exp6_rx.cpp +++ b/src/DPD-REACT/pair_exp6_rx.cpp @@ -731,7 +731,7 @@ void PairExp6rx::read_file(char *file) char line[MAXLINE],*ptr; int eof = 0; - while (1) { + while (true) { if (comm->me == 0) { ptr = fgets(line,MAXLINE,fp); if (ptr == nullptr) { @@ -838,7 +838,7 @@ void PairExp6rx::read_file2(char *file) char line[MAXLINE],*ptr; int eof = 0; - while (1) { + while (true) { if (comm->me == 0) { ptr = fgets(line,MAXLINE,fp); if (ptr == nullptr) { diff --git a/src/DPD-REACT/pair_multi_lucy.cpp b/src/DPD-REACT/pair_multi_lucy.cpp index 9f5e494991..4aaea3f81b 100644 --- a/src/DPD-REACT/pair_multi_lucy.cpp +++ b/src/DPD-REACT/pair_multi_lucy.cpp @@ -356,7 +356,7 @@ void PairMultiLucy::read_table(Table *tb, char *file, char *keyword) // loop until section found with matching keyword - while (1) { + while (true) { if (fgets(line,MAXLINE,fp) == nullptr) error->one(FLERR,"Did not find keyword in table file"); if (strspn(line," \t\n\r") == strlen(line)) continue; // blank line diff --git a/src/DPD-REACT/pair_multi_lucy_rx.cpp b/src/DPD-REACT/pair_multi_lucy_rx.cpp index c386abded4..eac047d9f7 100644 --- a/src/DPD-REACT/pair_multi_lucy_rx.cpp +++ b/src/DPD-REACT/pair_multi_lucy_rx.cpp @@ -496,7 +496,7 @@ void PairMultiLucyRX::read_table(Table *tb, char *file, char *keyword) // loop until section found with matching keyword - while (1) { + while (true) { if (fgets(line,MAXLINE,fp) == nullptr) error->one(FLERR,"Did not find keyword in table file"); if (strspn(line," \t\n\r") == strlen(line)) continue; // blank line diff --git a/src/EXTRA-FIX/fix_gle.cpp b/src/EXTRA-FIX/fix_gle.cpp index 8f31613188..de225c6980 100644 --- a/src/EXTRA-FIX/fix_gle.cpp +++ b/src/EXTRA-FIX/fix_gle.cpp @@ -234,7 +234,7 @@ FixGLE::FixGLE(LAMMPS *lmp, int narg, char **arg) : char line[MAXLINE],*ptr; int n,nwords,ndone=0,eof=0; - while (1) { + while (true) { if (comm->me == 0) { ptr = fgets(line,MAXLINE,fgle); if (ptr == nullptr) { @@ -300,7 +300,7 @@ FixGLE::FixGLE(LAMMPS *lmp, int narg, char **arg) : ndone = eof = 0; const double cfac = force->boltz / force->mvv2e; - while (1) { + while (true) { if (comm->me == 0) { ptr = fgets(line,MAXLINE,fgle); if (ptr == nullptr) { diff --git a/src/GRANULAR/fix_pour.cpp b/src/GRANULAR/fix_pour.cpp index b73593b1d7..4c83e13a7b 100644 --- a/src/GRANULAR/fix_pour.cpp +++ b/src/GRANULAR/fix_pour.cpp @@ -851,7 +851,7 @@ void FixPour::xyz_random(double h, double *coord) coord[2] = h; } else { double r1,r2; - while (1) { + while (true) { r1 = random->uniform() - 0.5; r2 = random->uniform() - 0.5; if (r1*r1 + r2*r2 < 0.25) break; diff --git a/src/KIM/kim_interactions.cpp b/src/KIM/kim_interactions.cpp index 9a3aee87c0..74ac40198c 100644 --- a/src/KIM/kim_interactions.cpp +++ b/src/KIM/kim_interactions.cpp @@ -293,7 +293,7 @@ void KimInteractions::KIM_SET_TYPE_PARAMETERS(const std::string &input_line) con char line[MAXLINE], *ptr; int n, eof = 0; - while (1) { + while (true) { if (comm->me == 0) { ptr = fgets(line, MAXLINE,fp); if (ptr == nullptr) { diff --git a/src/KSPACE/pppm.cpp b/src/KSPACE/pppm.cpp index 9d3a06f18e..06d90e5d0e 100644 --- a/src/KSPACE/pppm.cpp +++ b/src/KSPACE/pppm.cpp @@ -983,7 +983,7 @@ void PPPM::set_grid_global() h = h_x = h_y = h_z = 4.0/g_ewald; int count = 0; - while (1) { + while (true) { // set grid dimensions diff --git a/src/KSPACE/pppm_dipole.cpp b/src/KSPACE/pppm_dipole.cpp index 16e06ed13e..abadcc52be 100644 --- a/src/KSPACE/pppm_dipole.cpp +++ b/src/KSPACE/pppm_dipole.cpp @@ -783,7 +783,7 @@ void PPPMDipole::set_grid_global() h = h_x = h_y = h_z = 4.0/g_ewald; int count = 0; - while (1) { + while (true) { // set grid dimension diff --git a/src/KSPACE/pppm_disp.cpp b/src/KSPACE/pppm_disp.cpp index fa14cb23f0..85aceb8500 100644 --- a/src/KSPACE/pppm_disp.cpp +++ b/src/KSPACE/pppm_disp.cpp @@ -1471,7 +1471,7 @@ int PPPMDisp::qr_alg(double **A, double **Q, int n) // start loop for the matrix factorization int count = 0; int countmax = 100000; - while (1) { + while (true) { // make a Wilkinson shift an1 = A[n-2][n-2]; an = A[n-1][n-1]; @@ -2645,7 +2645,7 @@ void PPPMDisp::set_grid() if (!gridflag) { h = h_x = h_y = h_z = 4.0/g_ewald; int count = 0; - while (1) { + while (true) { // set grid dimension @@ -3663,7 +3663,7 @@ void PPPMDisp::set_n_pppm_6() // decrease grid spacing until required precision is obtained int count = 0; - while (1) { + while (true) { // set grid dimension nx_pppm_6 = static_cast (xprd/h_x); diff --git a/src/MANIFOLD/fix_nve_manifold_rattle.cpp b/src/MANIFOLD/fix_nve_manifold_rattle.cpp index b4644a1350..8c3a9205e9 100644 --- a/src/MANIFOLD/fix_nve_manifold_rattle.cpp +++ b/src/MANIFOLD/fix_nve_manifold_rattle.cpp @@ -498,7 +498,7 @@ void FixNVEManifoldRattle::rattle_manifold_x(double *x, double *v, const double c_inv = 1.0 / c; - while (1) { + while (true) { v[0] = vt[0] - l*no_dt[0]; v[1] = vt[1] - l*no_dt[1]; v[2] = vt[2] - l*no_dt[2]; diff --git a/src/MANYBODY/pair_edip.cpp b/src/MANYBODY/pair_edip.cpp index 51b38037ab..af2314b8b9 100644 --- a/src/MANYBODY/pair_edip.cpp +++ b/src/MANYBODY/pair_edip.cpp @@ -789,7 +789,7 @@ void PairEDIP::read_file(char *file) char line[MAXLINE], *ptr; int eof = 0; - while (1) { + while (true) { if (comm->me == 0) { ptr = fgets(line, MAXLINE, fp); if (ptr == nullptr) { diff --git a/src/MANYBODY/pair_edip_multi.cpp b/src/MANYBODY/pair_edip_multi.cpp index 3cabec4505..8017fa4f8e 100644 --- a/src/MANYBODY/pair_edip_multi.cpp +++ b/src/MANYBODY/pair_edip_multi.cpp @@ -602,7 +602,7 @@ void PairEDIPMulti::read_file(char *file) char line[MAXLINE],*ptr; int eof = 0; - while (1) { + while (true) { if (comm->me == 0) { ptr = fgets(line,MAXLINE,fp); if (ptr == nullptr) { diff --git a/src/MANYBODY/pair_extep.cpp b/src/MANYBODY/pair_extep.cpp index bc96a40c57..68db444f31 100644 --- a/src/MANYBODY/pair_extep.cpp +++ b/src/MANYBODY/pair_extep.cpp @@ -540,7 +540,7 @@ void PairExTeP::read_file(char *file) char line[MAXLINE],*ptr; int eof = 0; - while (1) { + while (true) { if (comm->me == 0) { ptr = fgets(line,MAXLINE,fp); if (ptr == nullptr) { @@ -669,7 +669,7 @@ void PairExTeP::read_file(char *file) F_corr_data[iel][jel][in][jn][ivar]=0; // loop until EOF - while (1) { + while (true) { if (comm->me == 0) { ptr = fgets(line,MAXLINE,fp); //fputs(line,stdout); diff --git a/src/MANYBODY/pair_lcbop.cpp b/src/MANYBODY/pair_lcbop.cpp index 3c6f08a7e7..547fc75154 100644 --- a/src/MANYBODY/pair_lcbop.cpp +++ b/src/MANYBODY/pair_lcbop.cpp @@ -935,7 +935,7 @@ void PairLCBOP::read_file(char *filename) // skip initial comment lines - while (1) { + while (true) { utils::sfgets(FLERR,s,MAXLINE,fp,filename,error); if (s[0] != '#') break; } @@ -971,7 +971,7 @@ void PairLCBOP::read_file(char *filename) utils::sfgets(FLERR,s,MAXLINE,fp,filename,error); sscanf(s,"%lg",&eps); utils::sfgets(FLERR,s,MAXLINE,fp,filename,error); sscanf(s,"%lg",&delta); - while (1) { + while (true) { utils::sfgets(FLERR,s,MAXLINE,fp,filename,error); if (s[0] != '#') break; } @@ -988,7 +988,7 @@ void PairLCBOP::read_file(char *filename) &F_conj_data[i][2][k][l], &F_conj_data[i][3][k][l]); } - while (1) { utils::sfgets(FLERR,s,MAXLINE,fp,filename,error); if (s[0] != '#') break; } + while (true) { utils::sfgets(FLERR,s,MAXLINE,fp,filename,error); if (s[0] != '#') break; } } } diff --git a/src/MDI/mdi_engine.cpp b/src/MDI/mdi_engine.cpp index 4be739d187..5194c44189 100644 --- a/src/MDI/mdi_engine.cpp +++ b/src/MDI/mdi_engine.cpp @@ -200,7 +200,7 @@ void MDIEngine::command(int narg, char ** /*arg*/) char *command; - while (1) { + while (true) { // mdi/engine command only recognizes three nodes // DEFAULT, INIT_MD, INIT_OPTG @@ -265,7 +265,7 @@ char *MDIEngine::mdi_md() // run MD one step at a time - while (1) { + while (true) { update->whichflag = 1; timer->init_timeout(); update->nsteps += 1; diff --git a/src/MEAM/pair_meam.cpp b/src/MEAM/pair_meam.cpp index b69d17f0a9..e8c6c942a4 100644 --- a/src/MEAM/pair_meam.cpp +++ b/src/MEAM/pair_meam.cpp @@ -517,7 +517,7 @@ void PairMEAM::read_user_meam_file(const std::string &userfile) char * line = nullptr; char buffer[MAXLINE]; - while (1) { + while (true) { int which; int nindex, index[3]; double value; diff --git a/src/MESONT/pair_mesont_tpm.cpp b/src/MESONT/pair_mesont_tpm.cpp index 425722a569..293e9d02f5 100644 --- a/src/MESONT/pair_mesont_tpm.cpp +++ b/src/MESONT/pair_mesont_tpm.cpp @@ -197,7 +197,7 @@ MESONTList::MESONTList(const Atom* atom, const NeighList* nblist) { index_list.push_back(i); index_list_b[i] = index_list.size() - 1; int idx = i; - while (1) { + while (true) { idx = chain_list[idx][1]; if (idx == cnt_end || idx == domain_end) break; else index_list.push_back(idx); diff --git a/src/MGPT/mgpt_readpot.cpp b/src/MGPT/mgpt_readpot.cpp index df62bf735d..dd196142f5 100644 --- a/src/MGPT/mgpt_readpot.cpp +++ b/src/MGPT/mgpt_readpot.cpp @@ -131,7 +131,7 @@ static void getparmindata(const char *potin_file,int nvol[1],double vol0[1],doub exit(1); } - if (0) { + if (false) { printf("Before sort:\n"); for (int i = 0; i nvol = %d, vol0 = %.6f, x0= %.6f, x1 = %.6f, dx = %.6f\n", nvol,vol0,x0,x1,dx); } @@ -408,7 +408,7 @@ void potdata::readpot(const char *parmin_file,const char *potin_file,const doubl double vpair_tmp = vpairtab[i*nr+j]; vpairtab[i*nr+j] = vpairtab[i*nr+j]*fscr + v2a - v2b; - if (0) if (fabs(vol-ivol) < 0.01) { + if (false) if (fabs(vol-ivol) < 0.01) { static FILE *xfile = nullptr; if (j == 0) { xfile = fopen("mgpt5-pot.dat","w"); @@ -487,7 +487,7 @@ void potdata::readpot(const char *parmin_file,const char *potin_file,const doubl evalspline(nx-1,x0,x1,C,x,&evol0,&devol0,&unused); devol0 *= dxdv; - if (1) { + if (true) { printf("%% READPOT PARAMETERS:\n"); printf("%% ddl = %15.5e %15.5e %15.5e %15.5e\n",ddl[1],ddl[2],ddl[3],ddl[4]); diff --git a/src/MGPT/mgpt_splinetab.cpp b/src/MGPT/mgpt_splinetab.cpp index e31572fe50..fd6d4541c2 100644 --- a/src/MGPT/mgpt_splinetab.cpp +++ b/src/MGPT/mgpt_splinetab.cpp @@ -105,7 +105,7 @@ void evalspline(int n,double x0,double x1,double C[][4], xhat = xhat - idx; p = C[idx]; - if (0) { + if (false) { *y = p[0] + xhat*(p[1] + xhat*(p[2] + xhat*p[3])); *dy = p[1] + xhat*(2*p[2] + xhat*3*p[3]); diff --git a/src/MGPT/pair_mgpt.cpp b/src/MGPT/pair_mgpt.cpp index 2bea1273c6..fde6fc7084 100644 --- a/src/MGPT/pair_mgpt.cpp +++ b/src/MGPT/pair_mgpt.cpp @@ -191,7 +191,7 @@ static inline double mtrace(int n,double A[8][8],double B[8][8]) { void PairMGPT::make_triplet(bond_data *ij_bond,bond_data *ik_bond, triplet_data *triptr) { - if (1) { + if (true) { const trmul_fun tr_mul = linalg.tr_mul; tr_mul(&(ij_bond->H.m[1][0]), &(ik_bond->H.m[1][0]) ,&(triptr->H1H2.m[1][0]) ); tr_mul(&(ij_bond->Hx.m[1][0]),&(ik_bond->H.m[1][0]) ,&(triptr->H1xH2.m[1][0])); @@ -289,7 +289,7 @@ double PairMGPT::numderiv3t(double xx[][3],int i,int j,int k,int p) { xx[i][p] = xsave - delta; make_bond(xx,i,j,&Bij); - if (0) { /* This bond doesn't change when i is perturbed */ + if (false) { /* This bond doesn't change when i is perturbed */ make_bond(xx,j,k,&Bjk); } make_bond(xx,k,i,&Bki); @@ -341,7 +341,7 @@ double PairMGPT::numderiv4(double xx[][3],int i,int j,int k,int m,int p) { xx[i][p] = xsave - delta; make_bond(xx,i,j,&Bij); - if (0) { /* Only the i coordinates changed... */ + if (false) { /* Only the i coordinates changed... */ make_bond(xx,j,k,&Bjk); make_bond(xx,k,m,&Bkm); } @@ -438,7 +438,7 @@ void PairMGPT::force_debug_4(double xx[][3], for (int p = 0; p<3; p++) { /* Compute numerical derivatives by displacing atoms i,j,k,m */ double ndfi,ndfj,ndfk,ndfm; - if (1) { + if (true) { double ndf[] = {0.0,0.0,0.0,0.0}; for (int s = 0; s<4; s++) for (int t = 0; t<4; t++) @@ -765,7 +765,7 @@ void PairMGPT::compute_x(const int *nnei,const int * const *nlist, int c_p = 0, c_t = 0, c_q = 0; - if (0) + if (false) if (domain->triclinic) { if (comm->me == 0) printf("Can not handle triclinic box yet\n"); @@ -1690,7 +1690,7 @@ void PairMGPT::compute(int eflag, int vflag) compute_x(listfull->numneigh,listfull->firstneigh,&e_s,&e_p,&e_t,&e_q,evflag,newton_pair); - if (0) { // Stupid force calculation / verification + if (false) { // Stupid force calculation / verification int ii,nmax=-1; for (ii = 0; iiinum + listfull->gnum; ii++) { int i = listfull->ilist[ii]; @@ -1768,7 +1768,7 @@ void PairMGPT::compute(int eflag, int vflag) } - if (0) { + if (false) { printf("\nForces MGPT:\n"); const int iimax = (listfull->inum < 10) ? listfull->inum : 10; for (int ii = 0; iime == 0) { ptr = fgets(line,MAXLINE,fpparam); if (ptr == nullptr) { diff --git a/src/ML-IAP/mliap_descriptor_so3.cpp b/src/ML-IAP/mliap_descriptor_so3.cpp index d816bd0638..e8bedea377 100644 --- a/src/ML-IAP/mliap_descriptor_so3.cpp +++ b/src/ML-IAP/mliap_descriptor_so3.cpp @@ -93,7 +93,7 @@ void MLIAPDescriptorSO3::read_paramfile(char *paramfilename) int eof = 0; int n, nwords; - while (1) { + while (true) { if (comm->me == 0) { ptr = utils::fgets_trunc(line, MAXLINE, fpparam); if (ptr == nullptr) { diff --git a/src/ML-IAP/mliap_model_nn.cpp b/src/ML-IAP/mliap_model_nn.cpp index 10ef97300e..853f1d9c6c 100644 --- a/src/ML-IAP/mliap_model_nn.cpp +++ b/src/ML-IAP/mliap_model_nn.cpp @@ -125,7 +125,7 @@ void MLIAPModelNN::read_coeffs(char *coefffilename) int ielem = 0; int l = 0; - while (1) { + while (true) { if (comm->me == 0) { ptr = fgets(line,MAXLINE,fpcoeff); if (ptr == nullptr) { diff --git a/src/ML-RANN/pair_rann.cpp b/src/ML-RANN/pair_rann.cpp index fbc54e745f..3e97b638dc 100644 --- a/src/ML-RANN/pair_rann.cpp +++ b/src/ML-RANN/pair_rann.cpp @@ -440,7 +440,7 @@ void PairRANN::read_mass(const std::vector &line1, const std::vecto if (nelements == -1)error->one(filename,linenum-1,"atom types must be defined before mass in potential file."); for (int i=0;i line,std::vector l if (nelements == -1)error->one(filename,linenum-1,"atom types must be defined before fingerprints per element in potential file."); for (i=0;i line,std::vectorn_body_type!=nwords-1) {error->one(filename,linenum,"invalid fingerprint for element combination");} k++; - fingerprints[i][i1]->init(atomtypes,utils::inumeric(filename,linenum,line1[k++].c_str(),1,lmp)); + fingerprints[i][i1]->init(atomtypes,utils::inumeric(filename,linenum,line1[k++].c_str(),true,lmp)); fingerprintcount[i]++; } delete[] atomtypes; @@ -523,7 +523,7 @@ void PairRANN::read_fingerprint_constants(std::vector line,std::vec for (j=0;jatomtypes[j]!=atomtypes[j]) {break;} if (j==n_body_type-1) { - if (line[nwords-3].compare(fingerprints[i][k]->style)==0 && utils::inumeric(filename,linenum,line[nwords-2].c_str(),1,lmp)==fingerprints[i][k]->id) { + if (line[nwords-3].compare(fingerprints[i][k]->style)==0 && utils::inumeric(filename,linenum,line[nwords-2].c_str(),true,lmp)==fingerprints[i][k]->id) { found=true; i1 = k; break; @@ -542,7 +542,7 @@ void PairRANN::read_network_layers(std::vector line,std::vectorone(filename,linenum-1,"atom types must be defined before network layers in potential file."); for (i=0;ione(filename,linenum,"invalid number of network layers"); delete[] net[i].dimensions; weightdefined[i] = new bool [net[i].layers]; @@ -570,9 +570,9 @@ void PairRANN::read_layer_size(std::vector line,std::vectorone(filename,linenum-1,"networklayers for each atom type must be defined before the corresponding layer sizes."); - int j = utils::inumeric(filename,linenum,line[2].c_str(),1,lmp); + int j = utils::inumeric(filename,linenum,line[2].c_str(),true,lmp); if (j>=net[i].layers || j<0) {error->one(filename,linenum,"invalid layer in layer size definition");}; - net[i].dimensions[j]= utils::inumeric(filename,linenum,line1[0].c_str(),1,lmp); + net[i].dimensions[j]= utils::inumeric(filename,linenum,line1[0].c_str(),true,lmp); return; } } @@ -587,7 +587,7 @@ void PairRANN::read_weight(std::vector line,std::vectorone(filename,*linenum-1,"networklayers must be defined before weights."); - i=utils::inumeric(filename,*linenum,line[2].c_str(),1,lmp); + i=utils::inumeric(filename,*linenum,line[2].c_str(),true,lmp); if (i>=net[l].layers || i<0)error->one(filename,*linenum-1,"invalid weight layer"); if (net[l].dimensions[i]==0 || net[l].dimensions[i+1]==0) error->one(filename,*linenum-1,"network layer sizes must be defined before corresponding weight"); net[l].Weights[i] = new double[net[l].dimensions[i]*net[l].dimensions[i+1]]; @@ -595,7 +595,7 @@ void PairRANN::read_weight(std::vector line,std::vectorone(filename,*linenum,"invalid weights per line"); for (k=0;k line,std::vectorone(filename,*linenum,"invalid weights per line"); for (k=0;k line,std::vector for (l=0;lone(filename,*linenum-1,"networklayers must be defined before biases."); - i=utils::inumeric(filename,*linenum,line[2].c_str(),1,lmp); + i=utils::inumeric(filename,*linenum,line[2].c_str(),true,lmp); if (i>=net[l].layers || i<0)error->one(filename,*linenum-1,"invalid bias layer"); if (net[l].dimensions[i]==0) error->one(filename,*linenum-1,"network layer sizes must be defined before corresponding bias"); biasdefined[l][i] = true; net[l].Biases[i] = new double[net[l].dimensions[i+1]]; - net[l].Biases[i][0] = utils::numeric(filename,*linenum,line1[0].c_str(),1,lmp); + net[l].Biases[i][0] = utils::numeric(filename,*linenum,line1[0].c_str(),true,lmp); for (j=1;jone(filename,*linenum,"unexpected end of potential file!"); (*linenum)++; Tokenizer values1 = Tokenizer(linetemp,": ,\t_\n"); line1 = values1.as_vector(); - net[l].Biases[i][j] = utils::numeric(filename,*linenum,line1[0].c_str(),1,lmp); + net[l].Biases[i][j] = utils::numeric(filename,*linenum,line1[0].c_str(),true,lmp); } return; } @@ -680,10 +680,10 @@ void PairRANN::read_screening(std::vector line,std::vectorone(filename,linenum-1,"unrecognized screening keyword"); delete[] atomtypes; diff --git a/src/ML-SNAP/pair_snap.cpp b/src/ML-SNAP/pair_snap.cpp index d6da639734..1eb078bc61 100644 --- a/src/ML-SNAP/pair_snap.cpp +++ b/src/ML-SNAP/pair_snap.cpp @@ -640,7 +640,7 @@ void PairSNAP::read_files(char *coefffilename, char *paramfilename) } eof = 0; - while (1) { + while (true) { if (comm->me == 0) { ptr = fgets(line,MAXLINE,fpparam); if (ptr == nullptr) { diff --git a/src/POEMS/fix_poems.cpp b/src/POEMS/fix_poems.cpp index fdd8ef7a18..201e40b5b8 100644 --- a/src/POEMS/fix_poems.cpp +++ b/src/POEMS/fix_poems.cpp @@ -954,7 +954,7 @@ void FixPOEMS::readfile(char *file) int nlocal = atom->nlocal; int i,id,nlen; - while (1) { + while (true) { if (me == 0) nlen = readline(fp,&line,&maxline); MPI_Bcast(&nlen,1,MPI_INT,0,world); if (nlen == 0) break; @@ -986,7 +986,7 @@ int FixPOEMS::readline(FILE *fp, char **pline, int *pmaxline) char *line = *pline; int maxline = *pmaxline; - while (1) { + while (true) { if (n+1 >= maxline) { maxline += DELTA; memory->grow(line,maxline,"fix_poems:line"); @@ -1246,7 +1246,7 @@ int FixPOEMS::loopcheck(int nvert, int nedge, tagint **elist) int *stack = new int[nvert]; ncluster = 0; - while (1) { + while (true) { for (i = 0; i < nvert; i++) if (mark[i] == 0) break; if (i == nvert) break; diff --git a/src/PTM/ptm_convex_hull_incremental.cpp b/src/PTM/ptm_convex_hull_incremental.cpp index 580d88c578..23b8e3a89d 100644 --- a/src/PTM/ptm_convex_hull_incremental.cpp +++ b/src/PTM/ptm_convex_hull_incremental.cpp @@ -263,7 +263,7 @@ int get_convex_hull(int num_points, const double (*points)[3], convexhull_t* ch, int ret = 0; int num_prev = ch->num_prev; ch->num_prev = num_points; - if (!ch->ok || 0) + if (!ch->ok || false) { ret = initialize_convex_hull(num_points, points, ch->facets, ch->plane_normal, ch->processed, ch->initial_vertices, ch->barycentre); if (ret != 0) diff --git a/src/QEQ/fix_qeq.cpp b/src/QEQ/fix_qeq.cpp index 79205f7c81..51262d7dc7 100644 --- a/src/QEQ/fix_qeq.cpp +++ b/src/QEQ/fix_qeq.cpp @@ -763,7 +763,7 @@ void FixQEq::read_file(char *file) " {}", file,utils::getsyserror())); TextFileReader reader(fp, "qeq parameter"); - while (1) { + while (true) { auto values = reader.next_values(0); if (values.count() == 0) continue; diff --git a/src/REACTION/fix_bond_react.cpp b/src/REACTION/fix_bond_react.cpp index bddeb330e4..d106c858b4 100644 --- a/src/REACTION/fix_bond_react.cpp +++ b/src/REACTION/fix_bond_react.cpp @@ -3763,7 +3763,7 @@ void FixBondReact::read(int myrxn) // stop when read an unrecognized line ncreate = 0; - while (1) { + while (true) { readline(line); diff --git a/src/REAXFF/fix_reaxff_species.cpp b/src/REAXFF/fix_reaxff_species.cpp index 3c8e808f93..a839469d35 100644 --- a/src/REAXFF/fix_reaxff_species.cpp +++ b/src/REAXFF/fix_reaxff_species.cpp @@ -416,12 +416,12 @@ void FixReaxFFSpecies::FindMolecule () } loop = 0; - while (1) { + while (true) { comm->forward_comm_fix(this); loop ++; change = 0; - while (1) { + while (true) { done = 1; for (ii = 0; ii < inum; ii++) { diff --git a/src/REAXFF/reaxff_allocate.cpp b/src/REAXFF/reaxff_allocate.cpp index cbb53420ba..b81b8ed222 100644 --- a/src/REAXFF/reaxff_allocate.cpp +++ b/src/REAXFF/reaxff_allocate.cpp @@ -232,13 +232,13 @@ namespace ReaxFF { reallocate_data *wsr = &(workspace->realloc); if (system->n >= DANGER_ZONE * system->local_cap || - (0 && system->n <= LOOSE_ZONE * system->local_cap)) { + (false && system->n <= LOOSE_ZONE * system->local_cap)) { system->local_cap = MAX((int)(system->n * safezone), mincap); } int Nflag = 0; if (system->N >= DANGER_ZONE * system->total_cap || - (0 && system->N <= LOOSE_ZONE * system->total_cap)) { + (false && system->N <= LOOSE_ZONE * system->total_cap)) { Nflag = 1; system->total_cap = MAX((int)(system->N * safezone), mincap); } @@ -272,7 +272,7 @@ namespace ReaxFF { if (control->hbond_cut > 0) { Hflag = 0; if (system->numH >= DANGER_ZONE * system->Hcap || - (0 && system->numH <= LOOSE_ZONE * system->Hcap)) { + (false && system->numH <= LOOSE_ZONE * system->Hcap)) { Hflag = 1; system->Hcap = int(MAX(system->numH * saferzone, mincap)); } diff --git a/src/REAXFF/reaxff_control.cpp b/src/REAXFF/reaxff_control.cpp index 2020e8a5c3..3ee7614366 100644 --- a/src/REAXFF/reaxff_control.cpp +++ b/src/REAXFF/reaxff_control.cpp @@ -81,7 +81,7 @@ namespace ReaxFF { LAMMPS_NS::TextFileReader reader(control_file, "ReaxFF control"); reader.ignore_comments = false; - while (1) { + while (true) { auto values = reader.next_values(0); // empty line diff --git a/src/REPLICA/fix_hyper_local.cpp b/src/REPLICA/fix_hyper_local.cpp index ba91644c53..b506ef4f4a 100644 --- a/src/REPLICA/fix_hyper_local.cpp +++ b/src/REPLICA/fix_hyper_local.cpp @@ -980,7 +980,7 @@ void FixHyperLocal::build_bond_list(int natom) "hyper/local:clist"); } - while (1) { + while (true) { if (firstflag) break; for (i = 0; i < nall; i++) numcoeff[i] = 0; for (i = 0; i < nall; i++) clist[i] = nullptr; diff --git a/src/REPLICA/neb.cpp b/src/REPLICA/neb.cpp index 8cfc4b5c24..e730aac351 100644 --- a/src/REPLICA/neb.cpp +++ b/src/REPLICA/neb.cpp @@ -392,7 +392,7 @@ void NEB::readfile(char *file, int flag) if (flag == 0) { if (me_universe == 0) { open(file); - while (1) { + while (true) { eof = fgets(line,MAXLINE,fp); if (eof == nullptr) error->one(FLERR,"Unexpected end of NEB file"); start = &line[strspn(line," \t\n\v\f\r")]; @@ -408,7 +408,7 @@ void NEB::readfile(char *file, int flag) if (me == 0) { if (ireplica) { open(file); - while (1) { + while (true) { eof = fgets(line,MAXLINE,fp); if (eof == nullptr) error->one(FLERR,"Unexpected end of NEB file"); start = &line[strspn(line," \t\n\v\f\r")]; diff --git a/src/RIGID/fix_rigid.cpp b/src/RIGID/fix_rigid.cpp index db9767d01e..9c39518508 100644 --- a/src/RIGID/fix_rigid.cpp +++ b/src/RIGID/fix_rigid.cpp @@ -2281,7 +2281,7 @@ void FixRigid::readfile(int which, double *vec, if (fp == nullptr) error->one(FLERR,"Cannot open fix rigid file {}: {}", inpfile,utils::getsyserror()); - while (1) { + while (true) { eof = fgets(line,MAXLINE,fp); if (eof == nullptr) error->one(FLERR,"Unexpected end of fix rigid file"); start = &line[strspn(line," \t\n\v\f\r")]; diff --git a/src/RIGID/fix_rigid_small.cpp b/src/RIGID/fix_rigid_small.cpp index 0ef05d926c..5db24a96d5 100644 --- a/src/RIGID/fix_rigid_small.cpp +++ b/src/RIGID/fix_rigid_small.cpp @@ -2451,7 +2451,7 @@ void FixRigidSmall::readfile(int which, double **array, int *inbody) if (fp == nullptr) error->one(FLERR,"Cannot open fix rigid/small file {}: {}", inpfile,utils::getsyserror()); - while (1) { + while (true) { eof = fgets(line,MAXLINE,fp); if (eof == nullptr) error->one(FLERR,"Unexpected end of fix rigid/small file"); diff --git a/src/SPIN/neb_spin.cpp b/src/SPIN/neb_spin.cpp index 1c987f8e7e..0ed3ad28c3 100644 --- a/src/SPIN/neb_spin.cpp +++ b/src/SPIN/neb_spin.cpp @@ -387,7 +387,7 @@ void NEBSpin::readfile(char *file, int flag) if (flag == 0) { if (me_universe == 0) { open(file); - while (1) { + while (true) { eof = fgets(line,MAXLINE,fp); if (eof == nullptr) error->one(FLERR,"Unexpected end of neb/spin file"); start = &line[strspn(line," \t\n\v\f\r")]; @@ -401,7 +401,7 @@ void NEBSpin::readfile(char *file, int flag) if (me == 0) { if (ireplica) { open(file); - while (1) { + while (true) { eof = fgets(line,MAXLINE,fp); if (eof == nullptr) error->one(FLERR,"Unexpected end of neb/spin file"); start = &line[strspn(line," \t\n\v\f\r")]; diff --git a/src/SRD/fix_srd.cpp b/src/SRD/fix_srd.cpp index f1e17eaa24..48d7d55663 100644 --- a/src/SRD/fix_srd.cpp +++ b/src/SRD/fix_srd.cpp @@ -1433,7 +1433,7 @@ void FixSRD::collisions_multi() jlast = -1; dt = dt_big; - while (1) { + while (true) { nbig = nbinbig[ibin]; if (ibounce == 0) ncheck += nbig; @@ -2263,7 +2263,7 @@ void FixSRD::slip(double *vs, double *vb, double *xb, Big *big, double *xsurf, d double tangent[3], vsurf[3]; double *omega = big->omega; - while (1) { + while (true) { r1 = sigma * random->gaussian(); r2 = sigma * random->gaussian(); vnmag = sqrt(r1 * r1 + r2 * r2); @@ -2319,7 +2319,7 @@ void FixSRD::slip_wall(double *vs, int iwall, double *norm, double *vsnew) tangent2[1] = norm[2] * tangent1[0] - norm[0] * tangent1[2]; tangent2[2] = norm[0] * tangent1[1] - norm[1] * tangent1[0]; - while (1) { + while (true) { r1 = sigma * random->gaussian(); r2 = sigma * random->gaussian(); vnmag = sqrt(r1 * r1 + r2 * r2); @@ -2370,7 +2370,7 @@ void FixSRD::noslip(double *vs, double *vb, double *xb, Big *big, int iwall, dou tangent2[1] = norm[2] * tangent1[0] - norm[0] * tangent1[2]; tangent2[2] = norm[0] * tangent1[1] - norm[1] * tangent1[0]; - while (1) { + while (true) { r1 = sigma * random->gaussian(); r2 = sigma * random->gaussian(); vnmag = sqrt(r1 * r1 + r2 * r2); diff --git a/src/atom.cpp b/src/atom.cpp index 796c0ba156..8bf361ab95 100644 --- a/src/atom.cpp +++ b/src/atom.cpp @@ -1904,7 +1904,7 @@ void Atom::add_molecule(int narg, char **arg) int ifile = 1; int index = 1; - while (1) { + while (true) { molecules = (Molecule **) memory->srealloc(molecules,(nmolecule+1)*sizeof(Molecule *), "atom::molecules"); diff --git a/src/atom_vec_body.cpp b/src/atom_vec_body.cpp index a1ef126069..6308153be6 100644 --- a/src/atom_vec_body.cpp +++ b/src/atom_vec_body.cpp @@ -105,7 +105,7 @@ void AtomVecBody::process_args(int narg, char **arg) if (narg < 1) error->all(FLERR,"Invalid atom_style body command"); - if (0) { + if (false) { bptr = nullptr; #define BODY_CLASS diff --git a/src/balance.cpp b/src/balance.cpp index bd3ba007ef..3f325dffe6 100644 --- a/src/balance.cpp +++ b/src/balance.cpp @@ -930,7 +930,7 @@ int Balance::shift() // else add split I-1 or J+1 to set and try again // delta = size of expanded split set that will satisy criterion - while (1) { + while (true) { delta = (j-i) * close; midpt = 0.5 * (split[i]+split[j]); start = midpt - 0.5*delta; diff --git a/src/comm_tiled.cpp b/src/comm_tiled.cpp index 482b90c4c2..28ef37b008 100644 --- a/src/comm_tiled.cpp +++ b/src/comm_tiled.cpp @@ -1884,7 +1884,7 @@ void CommTiled::box_drop_brick(int idim, double *lo, double *hi, int &indexme) if (index < 0 || index > procgrid[idim]) error->one(FLERR,"Comm tiled invalid index in box drop brick"); - while (1) { + while (true) { lower = boxlo[idim] + prd[idim]*split[index]; if (index < procgrid[idim]-1) upper = boxlo[idim] + prd[idim]*split[index+1]; diff --git a/src/compute_aggregate_atom.cpp b/src/compute_aggregate_atom.cpp index 818d8657b8..cb39f61ce0 100644 --- a/src/compute_aggregate_atom.cpp +++ b/src/compute_aggregate_atom.cpp @@ -166,7 +166,7 @@ void ComputeAggregateAtom::compute_peratom() int change,done,anychange; - while (1) { + while (true) { comm->forward_comm_compute(this); // reverse communication when bonds are not stored on every processor @@ -175,7 +175,7 @@ void ComputeAggregateAtom::compute_peratom() comm->reverse_comm_compute(this); change = 0; - while (1) { + while (true) { done = 1; for (i = 0; i < nlocal; i++) { if (!(mask[i] & groupbit)) continue; diff --git a/src/compute_cluster_atom.cpp b/src/compute_cluster_atom.cpp index 476af0bfa2..ca3fe1f453 100644 --- a/src/compute_cluster_atom.cpp +++ b/src/compute_cluster_atom.cpp @@ -164,11 +164,11 @@ void ComputeClusterAtom::compute_peratom() int change,done,anychange; - while (1) { + while (true) { comm->forward_comm_compute(this); change = 0; - while (1) { + while (true) { done = 1; for (ii = 0; ii < inum; ii++) { i = ilist[ii]; diff --git a/src/compute_fragment_atom.cpp b/src/compute_fragment_atom.cpp index 9ed57fef60..d361e29d41 100644 --- a/src/compute_fragment_atom.cpp +++ b/src/compute_fragment_atom.cpp @@ -150,7 +150,7 @@ void ComputeFragmentAtom::compute_peratom() int iteration = 0; - while (1) { + while (true) { iteration++; comm->forward_comm_compute(this); diff --git a/src/create_atoms.cpp b/src/create_atoms.cpp index e82be7d331..f21d1fc23d 100644 --- a/src/create_atoms.cpp +++ b/src/create_atoms.cpp @@ -693,7 +693,7 @@ void CreateAtoms::add_random() int valid; for (int i = 0; i < nrandom; i++) { - while (1) { + while (true) { xone[0] = xlo + random->uniform() * (xhi-xlo); xone[1] = ylo + random->uniform() * (yhi-ylo); xone[2] = zlo + random->uniform() * (zhi-zlo); diff --git a/src/input.cpp b/src/input.cpp index 21c092f356..08f62bdb42 100644 --- a/src/input.cpp +++ b/src/input.cpp @@ -180,7 +180,7 @@ void Input::file() { int m,n; - while (1) { + while (true) { // read a line from input script // n = length of line including str terminator, 0 if end of file @@ -189,7 +189,7 @@ void Input::file() if (me == 0) { m = 0; - while (1) { + while (true) { if (infile == nullptr) { n = 0; diff --git a/src/min_linesearch.cpp b/src/min_linesearch.cpp index a5d0aa326c..c4c10d8a1f 100644 --- a/src/min_linesearch.cpp +++ b/src/min_linesearch.cpp @@ -253,7 +253,7 @@ int MinLineSearch::linemin_backtrack(double eoriginal, double &alpha) // backtrack with alpha until energy decrease is sufficient - while (1) { + while (true) { ecurrent = alpha_step(alpha,1); // if energy change is better than ideal, exit with success @@ -412,7 +412,7 @@ int MinLineSearch::linemin_quadratic(double eoriginal, double &alpha) // etmp-eoriginal+alphatmp*fdothall); // alpha_step(0.0,1); - while (1) { + while (true) { ecurrent = alpha_step(alpha,1); // compute new fh, alpha, delfh @@ -708,7 +708,7 @@ int MinLineSearch::linemin_forcezero(double eoriginal, double &alpha) // main linesearch loop - while (1) { + while (true) { backtrack = false; fhPrev = fhCurr; engPrev = engCurr; diff --git a/src/molecule.cpp b/src/molecule.cpp index 2c9b03337d..40ca218ecc 100644 --- a/src/molecule.cpp +++ b/src/molecule.cpp @@ -412,7 +412,7 @@ void Molecule::read(int flag) // skip blank lines or lines that start with "#" // stop when read an unrecognized line - while (1) { + while (true) { readline(line); diff --git a/src/platform.cpp b/src/platform.cpp index 555026b2ac..f589efc318 100644 --- a/src/platform.cpp +++ b/src/platform.cpp @@ -231,7 +231,7 @@ std::string platform::os_info() if (platform::file_is_readable("/etc/os-release")) { try { TextFileReader reader("/etc/os-release",""); - while (1) { + while (true) { auto words = reader.next_values(0,"="); if ((words.count() > 1) && (words.next_string() == "PRETTY_NAME")) { buf += " " + utils::trim(words.next_string()); diff --git a/src/procmap.cpp b/src/procmap.cpp index ed3839fe7b..3fc8a2263e 100644 --- a/src/procmap.cpp +++ b/src/procmap.cpp @@ -294,7 +294,7 @@ void ProcMap::custom_grid(char *cfile, int nprocs, char *ptr; if (!fgets(line,MAXLINE,fp)) error->one(FLERR,"Unexpected end of custom file"); - while (1) { + while (true) { if ((ptr = strchr(line,'#'))) *ptr = '\0'; if (strspn(line," \t\n\r") != strlen(line)) break; if (!fgets(line,MAXLINE,fp)) diff --git a/src/rcb.cpp b/src/rcb.cpp index b4d1c135ec..92eafebc28 100644 --- a/src/rcb.cpp +++ b/src/rcb.cpp @@ -285,7 +285,7 @@ void RCB::compute(int dimension, int n, double **x, double *wt, first_iteration = 1; indexlo = indexhi = 0; - while (1) { + while (true) { // choose bisector value // use old value on 1st iteration if old cut dimension is the same @@ -814,7 +814,7 @@ void RCB::compute_old(int dimension, int n, double **x, double *wt, first_iteration = 1; indexlo = indexhi = 0; - while (1) { + while (true) { // choose bisector value // use old value on 1st iteration if old cut dimension is the same diff --git a/src/read_data.cpp b/src/read_data.cpp index edbfc16696..0c7af243ac 100644 --- a/src/read_data.cpp +++ b/src/read_data.cpp @@ -430,7 +430,7 @@ void ReadData::command(int narg, char **arg) nlocal_previous = atom->nlocal; int firstpass = 1; - while (1) { + while (true) { // open file on proc 0 @@ -965,7 +965,7 @@ void ReadData::header(int firstpass) if (eof == nullptr) error->one(FLERR,"Unexpected end of data file"); } - while (1) { + while (true) { // read a line and bcast length diff --git a/src/read_dump.cpp b/src/read_dump.cpp index c09bd38c87..71d302c4f1 100644 --- a/src/read_dump.cpp +++ b/src/read_dump.cpp @@ -233,7 +233,7 @@ void ReadDump::setup_reader(int narg, char **arg) // create Nreader reader classes per reader // match readerstyle to options in style_reader.h - if (0) { + if (false) { return; // dummy line to enable else-if macro expansion #define READER_CLASS @@ -289,7 +289,7 @@ bigint ReadDump::seek(bigint nrequest, int exact) readers[0]->open_file(multiname.c_str()); } else readers[0]->open_file(files[ifile]); - while (1) { + while (true) { eofflag = readers[0]->read_time(ntimestep); if (eofflag) break; if (ntimestep >= nrequest) break; @@ -333,7 +333,7 @@ bigint ReadDump::seek(bigint nrequest, int exact) readers[i]->open_file(multiname.c_str()); bigint step; - while (1) { + while (true) { eofflag = readers[i]->read_time(step); if (eofflag) break; if (step == ntimestep) break; @@ -382,7 +382,7 @@ bigint ReadDump::next(bigint ncurrent, bigint nlast, int nevery, int nskip) } else readers[0]->open_file(files[ifile]); } - while (1) { + while (true) { eofflag = readers[0]->read_time(ntimestep); if (eofflag) break; if (ntimestep > nlast) break; @@ -435,7 +435,7 @@ bigint ReadDump::next(bigint ncurrent, bigint nlast, int nevery, int nskip) readers[i]->open_file(multiname.c_str()); bigint step; - while (1) { + while (true) { eofflag = readers[i]->read_time(step); if (eofflag) break; if (step == ntimestep) break; diff --git a/src/rerun.cpp b/src/rerun.cpp index ce21fbc2b8..78b1a28cb6 100644 --- a/src/rerun.cpp +++ b/src/rerun.cpp @@ -156,7 +156,7 @@ void Rerun::command(int narg, char **arg) if (ntimestep < 0) error->all(FLERR,"Rerun dump file does not contain requested snapshot"); - while (1) { + while (true) { ndump++; rd->header(firstflag); update->reset_timestep(ntimestep); diff --git a/src/universe.cpp b/src/universe.cpp index 005a91fc6b..bd06300d12 100644 --- a/src/universe.cpp +++ b/src/universe.cpp @@ -98,7 +98,7 @@ void Universe::reorder(char *style, char *arg) char *ptr; if (!fgets(line,MAXLINE,fp)) error->one(FLERR,"Unexpected end of -reorder file"); - while (1) { + while (true) { if ((ptr = strchr(line,'#'))) *ptr = '\0'; if (strspn(line," \t\n\r") != strlen(line)) break; if (!fgets(line,MAXLINE,fp)) diff --git a/src/utils.cpp b/src/utils.cpp index 507500f116..b6c0908934 100644 --- a/src/utils.cpp +++ b/src/utils.cpp @@ -957,7 +957,7 @@ std::vector utils::split_words(const std::string &text) } // unquoted - while (1) { + while (true) { if ((c == '\'') || (c == '"')) goto quoted; // skip escaped quote if ((c == '\\') && ((buf[1] == '\'') || (buf[1] == '"'))) { diff --git a/src/variable.cpp b/src/variable.cpp index 22f792b5ec..0add581c48 100644 --- a/src/variable.cpp +++ b/src/variable.cpp @@ -692,7 +692,7 @@ int Variable::next(int narg, char **arg) if (!random) random = new RanMars(lmp,seed); int delay = (int) (1000000*random->uniform()); platform::usleep(delay); - while (1) { + while (true) { if (!rename("tmp.lammps.variable","tmp.lammps.variable.lock")) break; delay = (int) (1000000*random->uniform()); platform::usleep(delay); @@ -1234,7 +1234,7 @@ double Variable::evaluate(char *str, Tree **tree, int ivar) if (str == nullptr) print_var_error(FLERR,"Invalid syntax in variable formula",ivar); - while (1) { + while (true) { onechar = str[i]; // whitespace: just skip @@ -3214,7 +3214,7 @@ int Variable::find_matching_paren(char *str, int i, char *&contents, int ivar) int istart = i; int ilevel = 0; - while (1) { + while (true) { i++; if (!str[i]) break; if (str[i] == '(') ilevel++; @@ -4722,7 +4722,7 @@ double Variable::evaluate_boolean(char *str) int i = 0; int expect = ARG; - while (1) { + while (true) { onechar = str[i]; // whitespace: just skip @@ -5016,7 +5016,7 @@ int VarReader::read_scalar(char *str) // read one string from file if (me == 0) { - while (1) { + while (true) { ptr = fgets(str,MAXLINE,fp); if (!ptr) { n=0; break; } // end of file ptr[strcspn(ptr,"#")] = '\0'; // strip comment @@ -5059,7 +5059,7 @@ int VarReader::read_peratom() char str[MAXLINE]; if (me == 0) { - while (1) { + while (true) { ptr = fgets(str,MAXLINE,fp); if (!ptr) { n=0; break; } // end of file ptr[strcspn(ptr,"#")] = '\0'; // strip comment diff --git a/src/write_coeff.cpp b/src/write_coeff.cpp index 6f53a97e8f..a21a2634fc 100644 --- a/src/write_coeff.cpp +++ b/src/write_coeff.cpp @@ -92,7 +92,7 @@ void WriteCoeff::command(int narg, char **arg) fprintf(two,"# LAMMPS coeff file via write_coeff, version %s\n", lmp->version); - while (1) { + while (true) { int coeff_mode = REGULAR_MODE; if (fgets(str,256,one) == nullptr) break; diff --git a/src/write_dump.cpp b/src/write_dump.cpp index 89c976fe09..53ab80149a 100644 --- a/src/write_dump.cpp +++ b/src/write_dump.cpp @@ -57,7 +57,7 @@ void WriteDump::command(int narg, char **arg) for (int i = 2; i < modindex; ++i) dumpargs[i+2] = arg[i]; - if (0) { + if (false) { return; // dummy line to enable else-if macro expansion #define DUMP_CLASS diff --git a/tools/binary2txt.cpp b/tools/binary2txt.cpp index a7724ffbd2..dfa81e8a6e 100644 --- a/tools/binary2txt.cpp +++ b/tools/binary2txt.cpp @@ -97,7 +97,7 @@ int main(int narg, char **arg) // loop over snapshots in file - while (1) { + while (true) { int endian = 0x0001; int revision = 0x0001; diff --git a/unittest/force-styles/test_config_reader.cpp b/unittest/force-styles/test_config_reader.cpp index 945c16c649..65e9e4b0f6 100644 --- a/unittest/force-styles/test_config_reader.cpp +++ b/unittest/force-styles/test_config_reader.cpp @@ -83,7 +83,7 @@ void TestConfigReader::prerequisites(const yaml_event_t &event) std::stringstream data((char *)event.data.scalar.value); std::string key, value; - while (1) { + while (true) { data >> key >> value; if (data.eof()) break; config.prerequisites.emplace_back(key, value); @@ -138,7 +138,7 @@ void TestConfigReader::extract(const yaml_event_t &event) std::stringstream data((char *)event.data.scalar.value); std::string name; int value; - while (1) { + while (true) { data >> name >> value; if (data.eof()) break; config.extract.emplace_back(name, value); From a0b25acf351422838dbab0e4a1c2d30336b63b1e Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Wed, 20 Oct 2021 21:58:31 -0400 Subject: [PATCH 231/372] refactor loops using (auto var : container) syntax --- src/AWPMD/pair_awpmd_cut.cpp | 4 +-- src/EXTRA-FIX/fix_wall_ees.cpp | 6 +++-- src/EXTRA-FIX/fix_wall_region_ees.cpp | 14 ++++++---- src/KIM/kim_init.cpp | 10 +++---- src/MANIFOLD/manifold_thylakoid.cpp | 12 ++++----- src/MANYBODY/pair_airebo.cpp | 4 +-- src/PLUGIN/plugin.cpp | 4 +-- src/REACTION/fix_bond_react.cpp | 3 +-- unittest/c-library/test_library_commands.cpp | 28 ++++++++++---------- unittest/cplusplus/test_input_class.cpp | 12 ++++----- 10 files changed, 50 insertions(+), 47 deletions(-) diff --git a/src/AWPMD/pair_awpmd_cut.cpp b/src/AWPMD/pair_awpmd_cut.cpp index 682a0dd3d6..15cd316f12 100644 --- a/src/AWPMD/pair_awpmd_cut.cpp +++ b/src/AWPMD/pair_awpmd_cut.cpp @@ -246,8 +246,8 @@ void PairAWPMDCut::compute(int eflag, int vflag) fi= new Vector_3[wpmd->ni]; // adding electrons - for (std::map >::iterator it=etmap.begin(); it!= etmap.end(); ++it) { - std::vector &el=it->second; + for (auto & it : etmap) { + std::vector &el=it.second; if (!el.size()) // should not happen continue; int s=spin[el[0]] >0 ? 0 : 1; diff --git a/src/EXTRA-FIX/fix_wall_ees.cpp b/src/EXTRA-FIX/fix_wall_ees.cpp index c224e59d12..26ed4f52f1 100644 --- a/src/EXTRA-FIX/fix_wall_ees.cpp +++ b/src/EXTRA-FIX/fix_wall_ees.cpp @@ -121,8 +121,10 @@ void FixWallEES::wall_particle(int m, int which, double coord) double* shape = bonus[ellipsoid[i]].shape;; MathExtra::quat_to_mat(bonus[ellipsoid[i]].quat,A); MathExtra::transpose_matvec(A,nhat,tempvec); - for (int k = 0; k<3; k++) tempvec[k] *= shape[k]; - for (int k = 0; k<3 ; k++) sigman2 += tempvec[k]*tempvec[k]; + for (int k = 0; k<3; k++) { + tempvec[k] *= shape[k]; + sigman2 += tempvec[k]*tempvec[k]; + } sigman = sqrt(sigman2); if (delta <= sigman) { diff --git a/src/EXTRA-FIX/fix_wall_region_ees.cpp b/src/EXTRA-FIX/fix_wall_region_ees.cpp index 81a67e8e58..261036333e 100644 --- a/src/EXTRA-FIX/fix_wall_region_ees.cpp +++ b/src/EXTRA-FIX/fix_wall_region_ees.cpp @@ -194,8 +194,10 @@ void FixWallRegionEES::post_force(int /*vflag*/) nhat[(which+2)%3] = 0 ; sn2 = 0 ; MathExtra::transpose_matvec(A,nhat,tempvec); - for (int k = 0; k<3; k++) tempvec[k] *= shape[k]; - for (int k = 0; k<3 ; k++) sn2 += tempvec[k]*tempvec[k]; + for (int k = 0; k<3; k++) { + tempvec[k] *= shape[k]; + sn2 += tempvec[k]*tempvec[k]; + } sn = sqrt(sn2); tooclose[which] = sn; } @@ -321,9 +323,11 @@ void FixWallRegionEES::ees(int m, int i) sigman2 = 0.0; MathExtra::transpose_matvec(A,nhat,tempvec); - for (int k = 0; k<3; k++) tempvec[k] *= shape[k]; - for (int k = 0; k<3; k++) sigman2 += tempvec[k]*tempvec[k]; - for (int k = 0; k<3; k++) SAn[k] = tempvec[k]; + for (int k = 0; k<3; k++) { + tempvec[k] *= shape[k]; + sigman2 += tempvec[k]*tempvec[k]; + SAn[k] = tempvec[k]; + } sigman = sqrt(sigman2); delta = fabs(region->contact[m].r); diff --git a/src/KIM/kim_init.cpp b/src/KIM/kim_init.cpp index a4003b7510..2c8a19251f 100644 --- a/src/KIM/kim_init.cpp +++ b/src/KIM/kim_init.cpp @@ -251,17 +251,15 @@ void KimInit::determine_model_type_and_units(char *model_name, char *user_units, return; } else if (unit_conversion_mode) { KIM_Model_Destroy(&pkim); - int const num_systems = 5; - char const *const systems[num_systems] = {"metal", "real", "si", "cgs", "electron"}; - for (int i = 0; i < num_systems; ++i) { - get_kim_unit_names(systems[i], lengthUnit, energyUnit, chargeUnit, temperatureUnit, - timeUnit, error); + const char * unit_systems[] = {"metal", "real", "si", "cgs", "electron"}; + for (auto units : unit_systems) { + get_kim_unit_names(units, lengthUnit, energyUnit, chargeUnit, temperatureUnit, timeUnit, error); kim_error = KIM_Model_Create(KIM_NUMBERING_zeroBased, lengthUnit, energyUnit, chargeUnit, temperatureUnit, timeUnit, model_name, &units_accepted, &pkim); if (units_accepted) { logID = fmt::format("{}_Model", comm->me); KIM_Model_SetLogID(pkim, logID.c_str()); - *model_units = utils::strdup(systems[i]); + *model_units = utils::strdup(units); return; } KIM_Model_Destroy(&pkim); diff --git a/src/MANIFOLD/manifold_thylakoid.cpp b/src/MANIFOLD/manifold_thylakoid.cpp index b7004cac3a..63bd26a800 100644 --- a/src/MANIFOLD/manifold_thylakoid.cpp +++ b/src/MANIFOLD/manifold_thylakoid.cpp @@ -38,8 +38,8 @@ manifold_thylakoid::manifold_thylakoid( LAMMPS *lmp, int /*narg*/, char ** /*arg manifold_thylakoid::~manifold_thylakoid() { - for (std::size_t i = 0; i < parts.size(); ++i) { - delete parts[i]; + for (auto & part : parts) { + delete part; } } @@ -73,11 +73,11 @@ void manifold_thylakoid::checkup() if (comm->me == 0) { fprintf(screen,"This is checkup of thylakoid %p\n", this); fprintf(screen,"I have %ld parts. They are:\n", parts.size()); - for (int i = 0; i < (int)parts.size(); ++i) { + for (auto & part : parts) { fprintf(screen, "[%f, %f] x [%f, %f] x [%f, %f]\n", - parts[i]->xlo, parts[i]->xhi, - parts[i]->ylo, parts[i]->yhi, - parts[i]->zlo, parts[i]->zhi ); + part->xlo, part->xhi, + part->ylo, part->yhi, + part->zlo, part->zhi ); } fprintf(screen,"My params are:\n"); for (int i = 0; i < NPARAMS; ++i) { diff --git a/src/MANYBODY/pair_airebo.cpp b/src/MANYBODY/pair_airebo.cpp index a02a5718ff..29d2121f1f 100644 --- a/src/MANYBODY/pair_airebo.cpp +++ b/src/MANYBODY/pair_airebo.cpp @@ -3485,8 +3485,8 @@ void PairAIREBO::read_file(char *filename) // global parameters current_section = "global parameters"; - for (int i = 0; i < (int)params.size(); i++) { - *params[i] = reader.next_double(); + for (auto & param : params) { + *param = reader.next_double(); } diff --git a/src/PLUGIN/plugin.cpp b/src/PLUGIN/plugin.cpp index 443fecc99f..4c20ff6fdd 100644 --- a/src/PLUGIN/plugin.cpp +++ b/src/PLUGIN/plugin.cpp @@ -464,8 +464,8 @@ namespace LAMMPS_NS const lammpsplugin_t *plugin_get_info(int idx) { int i=0; - for (auto p=pluginlist.begin(); p != pluginlist.end(); ++p) { - if (i == idx) return &(*p); + for (auto & p : pluginlist) { + if (i == idx) return &p; ++i; } return nullptr; diff --git a/src/REACTION/fix_bond_react.cpp b/src/REACTION/fix_bond_react.cpp index d106c858b4..dbee51e034 100644 --- a/src/REACTION/fix_bond_react.cpp +++ b/src/REACTION/fix_bond_react.cpp @@ -2239,8 +2239,7 @@ double FixBondReact::custom_constraint(std::string varstr) } evlstr.push_back(varstr.substr(prev3+1)); - for (int i = 0; i < evlstr.size(); i++) - evlcat += evlstr[i]; + for (auto & evl : evlstr) evlcat += evl; char *cstr = utils::strdup(evlcat); val = input->variable->compute_equal(cstr); diff --git a/unittest/c-library/test_library_commands.cpp b/unittest/c-library/test_library_commands.cpp index 267ee6108e..b16dc6e9dd 100644 --- a/unittest/c-library/test_library_commands.cpp +++ b/unittest/c-library/test_library_commands.cpp @@ -54,14 +54,14 @@ TEST_F(LibraryCommands, from_file) const char cont_file[] = "in.cont"; fp = fopen(demo_file, "w"); - for (unsigned int i = 0; i < sizeof(demo_input) / sizeof(char *); ++i) { - fputs(demo_input[i], fp); + for (auto & inp : demo_input) { + fputs(inp, fp); fputc('\n', fp); } fclose(fp); fp = fopen(cont_file, "w"); - for (unsigned int i = 0; i < sizeof(cont_input) / sizeof(char *); ++i) { - fputs(cont_input[i], fp); + for (auto & inp : cont_input) { + fputs(inp, fp); fputc('\n', fp); } fclose(fp); @@ -84,8 +84,8 @@ TEST_F(LibraryCommands, from_line) { EXPECT_EQ(lammps_get_natoms(lmp), 0); if (!verbose) ::testing::internal::CaptureStdout(); - for (unsigned int i = 0; i < sizeof(demo_input) / sizeof(char *); ++i) { - lammps_command(lmp, demo_input[i]); + for (auto & inp : demo_input) { + lammps_command(lmp, inp); } if (!verbose) ::testing::internal::GetCapturedStdout(); EXPECT_EQ(lammps_get_natoms(lmp), 1); @@ -105,12 +105,12 @@ TEST_F(LibraryCommands, from_string) { std::string cmds(""); - for (unsigned int i = 0; i < sizeof(demo_input) / sizeof(char *); ++i) { - cmds += demo_input[i]; + for (auto & inp : demo_input) { + cmds += inp; cmds += "\n"; } - for (unsigned int i = 0; i < sizeof(cont_input) / sizeof(char *); ++i) { - cmds += cont_input[i]; + for (auto & inp : cont_input) { + cmds += inp; cmds += "\n"; } EXPECT_EQ(lammps_get_natoms(lmp), 0); @@ -125,12 +125,12 @@ TEST_F(LibraryCommands, from_string) if (!verbose) ::testing::internal::GetCapturedStdout(); cmds.clear(); - for (unsigned int i = 0; i < sizeof(demo_input) / sizeof(char *); ++i) { - cmds += demo_input[i]; + for (auto & inp : demo_input) { + cmds += inp; cmds += "\r\n"; } - for (unsigned int i = 0; i < sizeof(cont_input) / sizeof(char *); ++i) { - cmds += cont_input[i]; + for (auto & inp : cont_input) { + cmds += inp; cmds += "\r\n"; } EXPECT_EQ(lammps_get_natoms(lmp), 0); diff --git a/unittest/cplusplus/test_input_class.cpp b/unittest/cplusplus/test_input_class.cpp index 4af7450ed8..87bea36081 100644 --- a/unittest/cplusplus/test_input_class.cpp +++ b/unittest/cplusplus/test_input_class.cpp @@ -60,14 +60,14 @@ TEST_F(Input_commands, from_file) const char cont_file[] = "in.cont"; fp = fopen(demo_file, "w"); - for (unsigned int i = 0; i < sizeof(demo_input) / sizeof(char *); ++i) { - fputs(demo_input[i], fp); + for (auto & inp : demo_input) { + fputs(inp, fp); fputc('\n', fp); } fclose(fp); fp = fopen(cont_file, "w"); - for (unsigned int i = 0; i < sizeof(cont_input) / sizeof(char *); ++i) { - fputs(cont_input[i], fp); + for (auto & inp : cont_input) { + fputs(inp, fp); fputc('\n', fp); } fclose(fp); @@ -84,8 +84,8 @@ TEST_F(Input_commands, from_file) TEST_F(Input_commands, from_line) { EXPECT_EQ(lmp->atom->natoms, 0); - for (unsigned int i = 0; i < sizeof(demo_input) / sizeof(char *); ++i) { - lmp->input->one(demo_input[i]); + for (auto & inp : demo_input) { + lmp->input->one(inp); } EXPECT_EQ(lmp->atom->natoms, 1); }; From ede188652b357cbe2172f9641a3a7844491004b4 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Thu, 21 Oct 2021 07:33:00 -0400 Subject: [PATCH 232/372] update a few GPU kernels so they can be compiled on GPUs without double precisions support --- lib/gpu/lal_atom.cu | 2 +- lib/gpu/lal_atom.h | 2 +- lib/gpu/lal_zbl.cu | 12 ++++++------ lib/gpu/lal_zbl.h | 6 +++--- 4 files changed, 11 insertions(+), 11 deletions(-) diff --git a/lib/gpu/lal_atom.cu b/lib/gpu/lal_atom.cu index 1418459301..287d72803c 100644 --- a/lib/gpu/lal_atom.cu +++ b/lib/gpu/lal_atom.cu @@ -18,7 +18,7 @@ #endif __kernel void kernel_cast_x(__global numtyp4 *restrict x_type, - const __global double *restrict x, + const __global numtyp *restrict x, const __global int *restrict type, const int nall) { int ii=GLOBAL_ID_X; diff --git a/lib/gpu/lal_atom.h b/lib/gpu/lal_atom.h index 3cf97d94a0..77c1faa784 100644 --- a/lib/gpu/lal_atom.h +++ b/lib/gpu/lal_atom.h @@ -475,7 +475,7 @@ class Atom { UCL_Vector v; #ifdef GPU_CAST - UCL_Vector x_cast; + UCL_Vector x_cast; UCL_Vector type_cast; #endif diff --git a/lib/gpu/lal_zbl.cu b/lib/gpu/lal_zbl.cu index 09e1b4f6bb..2a7d4795da 100644 --- a/lib/gpu/lal_zbl.cu +++ b/lib/gpu/lal_zbl.cu @@ -82,9 +82,9 @@ __kernel void k_zbl(const __global numtyp4 *restrict x_, const __global numtyp4 *restrict coeff1, const __global numtyp4 *restrict coeff2, const __global numtyp4 *restrict coeff3, - const double cut_globalsq, - const double cut_innersq, - const double cut_inner, + const numtyp cut_globalsq, + const numtyp cut_innersq, + const numtyp cut_inner, const int lj_types, const __global int *dev_nbor, const __global int *dev_packed, @@ -174,9 +174,9 @@ __kernel void k_zbl_fast(const __global numtyp4 *restrict x_, const __global numtyp4 *restrict coeff1_in, const __global numtyp4 *restrict coeff2_in, const __global numtyp4 *restrict coeff3_in, - const double cut_globalsq, - const double cut_innersq, - const double cut_inner, + const numtyp cut_globalsq, + const numtyp cut_innersq, + const numtyp cut_inner, const __global int *dev_nbor, const __global int *dev_packed, __global acctyp4 *restrict ans, diff --git a/lib/gpu/lal_zbl.h b/lib/gpu/lal_zbl.h index af4f1b2eac..b7b525661c 100644 --- a/lib/gpu/lal_zbl.h +++ b/lib/gpu/lal_zbl.h @@ -67,9 +67,9 @@ class ZBL : public BaseAtomic { /// If atom type constants fit in shared memory, use fast kernels bool shared_types; - double _cut_globalsq; - double _cut_innersq; - double _cut_inner; + numtyp _cut_globalsq; + numtyp _cut_innersq; + numtyp _cut_inner; /// Number of atom types int _lj_types; From 6e3fcce9e18f760c3d3cbcbc453238b16adabc0b Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Thu, 21 Oct 2021 17:30:54 -0400 Subject: [PATCH 233/372] move download and extract code into function --- cmake/Modules/ExternalCMakeProject.cmake | 35 ++++++++++++++++++++ cmake/Modules/Packages/MSCG.cmake | 42 ++---------------------- unittest/CMakeLists.txt | 20 ++--------- 3 files changed, 40 insertions(+), 57 deletions(-) create mode 100644 cmake/Modules/ExternalCMakeProject.cmake diff --git a/cmake/Modules/ExternalCMakeProject.cmake b/cmake/Modules/ExternalCMakeProject.cmake new file mode 100644 index 0000000000..d8138f9088 --- /dev/null +++ b/cmake/Modules/ExternalCMakeProject.cmake @@ -0,0 +1,35 @@ +# Build a CMake based external library as subdirectory. +# The sources will be unpacked to ${CMAKE_BINARY_DIR}/_deps/${target}-src +# The binaries will be built in ${CMAKE_BINARY_DIR}/_deps/${target}-build +# +function(ExternalCMakeProject target url hash basedir cmakedir) + # change settings locally + set(BUILD_SHARED_LIBS OFF) + set(CMAKE_POSITION_INDEPENDENT_CODE ON) + + if(CMAKE_VERSION VERSION_LESS 3.14) + get_filename_component(archive ${url} NAME) + file(MAKE_DIRECTORY ${CMAKE_BINARY_DIR}/_deps/src) + message(STATUS "Downloading ${url}") + file(DOWNLOAD ${url} ${CMAKE_BINARY_DIR}/_deps/${archive} EXPECTED_HASH MD5=${hash} SHOW_PROGRESS) + message(STATUS "Unpacking and configuring ${archive}") + execute_process(COMMAND ${CMAKE_COMMAND} -E tar xzf ${CMAKE_BINARY_DIR}/_deps/${archive} + WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/_deps/src) + file(GLOB TARGET_SOURCE "${CMAKE_BINARY_DIR}/_deps/src/${basedir}*") + list(LENGTH TARGET_SOURCE _num) + if(_num GREATER 1) + message(FATAL_ERROR "Inconsistent ${target} library sources. " + "Please delete ${CMAKE_BINARY_DIR}/_deps/src and re-run cmake") + endif() + file(REMOVE_RECURSE ${CMAKE_BINARY_DIR}/_deps/${target}-src) + file(RENAME ${TARGET_SOURCE} ${CMAKE_BINARY_DIR}/_deps/${target}-src) + add_subdirectory("${CMAKE_BINARY_DIR}/_deps/${target}-src/${cmakedir}" + "${CMAKE_BINARY_DIR}/_deps/${target}-build") + else() + include(FetchContent) + message(STATUS "Downloading ${url}") + FetchContent_Declare(${target} URL ${url} URL_HASH MD5=${hash} SOURCE_SUBDIR ${cmakedir}) + message(STATUS "Unpacking and configuring ${archive}") + FetchContent_MakeAvailable(${target}) + endif() +endfunction(ExternalCMakeProject) diff --git a/cmake/Modules/Packages/MSCG.cmake b/cmake/Modules/Packages/MSCG.cmake index 1bfd123dd0..dbfe437f67 100644 --- a/cmake/Modules/Packages/MSCG.cmake +++ b/cmake/Modules/Packages/MSCG.cmake @@ -12,47 +12,11 @@ if(DOWNLOAD_MSCG) mark_as_advanced(MSCG_URL) mark_as_advanced(MSCG_MD5) - # always compile a static lib but with position independent code - # make a copy of current settings for later use - set(OLD_SHARED_LIBS ${BUILD_SHARED_LIBS}) - set(OLD_POSITION_INDEPENDENT_CODE ${CMAKE_POSITION_INDEPENDENT_CODE}) - set(BUILD_SHARED_LIBS OFF) - set(CMAKE_POSITION_INDEPENDENT_CODE ON) - - if(CMAKE_VERSION VERSION_LESS 3.14) - file(MAKE_DIRECTORY ${CMAKE_BINARY_DIR}/_deps) - file(DOWNLOAD ${MSCG_URL} ${CMAKE_BINARY_DIR}/_deps/mscg.tar.gz EXPECTED_HASH MD5=${MSCG_MD5}) - execute_process(COMMAND ${CMAKE_COMMAND} -E tar xzf ${CMAKE_BINARY_DIR}/_deps/mscg.tar.gz - WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/_deps) - - file(GLOB MSCG_SOURCE "${CMAKE_BINARY_DIR}/_deps/MSCG-release-*") - # sanity check. do not allow to have multiple downloaded and extracted versions of the source - list(LENGTH MSCG_SOURCE _num) - if(_num GREATER 1) - message(FATAL_ERROR "Inconsistent MSCG library sources. Please delete ${CMAKE_BINARY_DIR}/_deps and re-run cmake") - endif() - add_subdirectory(${MSCG_SOURCE}/src/CMake ${CMAKE_BINARY_DIR}/_deps/mscg-build) - else() - include(FetchContent) - FetchContent_Declare(mscg URL ${MSCG_URL} URL_HASH MD5=${MSCG_MD5} SOURCE_SUBDIR src/CMake) - FetchContent_MakeAvailable(mscg) - set(MSCG_SOURCE ${CMAKE_BINARY_DIR}/_deps/mscg-src) - endif() - - # restore previous settings - if(OLD_POSITION_INDEPENDENT_CODE) - set(CMAKE_POSITON_INDEPENDENT_CODE ${OLD_POSITION_INDEPENDENT_CODE}) - else() - unset(CMAKE_POSITION_INDEPENDENT_CODE) - endif() - if (OLD_SHARED_LIBS) - set(BUILD_SHARED_LIBS ${OLD_SHARED_LIBS}) - else() - unset(BUILD_SHARED_LIBS) - endif() + include(ExternalCMakeProject) + ExternalCMakeProject(mscg ${MSCG_URL} ${MSCG_MD5} MSCG-release src/CMake) # set include and link library - target_include_directories(lammps PRIVATE "${MSCG_SOURCE}/src") + target_include_directories(lammps PRIVATE "${CMAKE_BINARY_DIR}/_deps/mscg-src/src") target_link_libraries(lammps PRIVATE mscg) else() find_package(MSCG) diff --git a/unittest/CMakeLists.txt b/unittest/CMakeLists.txt index a61d50af45..119e514207 100644 --- a/unittest/CMakeLists.txt +++ b/unittest/CMakeLists.txt @@ -11,24 +11,8 @@ mark_as_advanced(GTEST_URL) mark_as_advanced(GTEST_MD5) set(gtest_force_shared_crt ON CACHE BOOL "" FORCE) -# workaround for older CMake versions (tested on Ubuntu 18.04 with CMake 3.10) -if(CMAKE_VERSION VERSION_LESS 3.14) - file(MAKE_DIRECTORY ${CMAKE_BINARY_DIR}/_deps) - file(DOWNLOAD ${GTEST_URL} ${CMAKE_BINARY_DIR}/_deps/googletest.tar.gz EXPECTED_HASH MD5=${GTEST_MD5}) - execute_process(COMMAND ${CMAKE_COMMAND} -E tar xzf ${CMAKE_BINARY_DIR}/_deps/googletest.tar.gz - WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/_deps) - file(GLOB GTEST_SOURCE "${CMAKE_BINARY_DIR}/_deps/googletest-*") - # sanity check. do not allow to have multiple downloaded and extracted versions of the source - list(LENGTH GTEST_SOURCE _num) - if(_num GREATER 1) - message(FATAL_ERROR "Inconsistent googletest sources. Please delete ${CMAKE_BINARY_DIR}/_deps and re-run cmake") - endif() - add_subdirectory(${GTEST_SOURCE} ${CMAKE_BINARY_DIR}/googletest) -else() - include(FetchContent) - FetchContent_Declare(googletest URL ${GTEST_URL} URL_HASH MD5=${GTEST_MD5}) - FetchContent_MakeAvailable(googletest) -endif() +include(ExternalCMakeProject) +ExternalCMakeProject(googletest ${GTEST_URL} ${GTEST_MD5} googletest .) ######################################## # General tests using the LAMMPS executable itself From e75757007e1c285edb4a16b5013b50c61791f6d7 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Thu, 21 Oct 2021 19:21:34 -0400 Subject: [PATCH 234/372] always compile position independent code --- cmake/CMakeLists.txt | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt index 055d9f3a92..c14bb16812 100644 --- a/cmake/CMakeLists.txt +++ b/cmake/CMakeLists.txt @@ -133,10 +133,7 @@ endif() set(LAMMPS_BINARY lmp${LAMMPS_MACHINE}) option(BUILD_SHARED_LIBS "Build shared library" OFF) -if(BUILD_SHARED_LIBS) # for all pkg libs, mpi_stubs and linalg - set(CMAKE_POSITION_INDEPENDENT_CODE ON) -endif() - +option(CMAKE_POSITION_INDEPENDENT_CODE "Create object compatible with shared libraries" ON) option(BUILD_TOOLS "Build and install LAMMPS tools (msi2lmp, binary2txt, chain)" OFF) option(BUILD_LAMMPS_SHELL "Build and install the LAMMPS shell" OFF) From 6ad03498c324e4852eac6b488426e65ec62998e5 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Thu, 21 Oct 2021 19:22:01 -0400 Subject: [PATCH 235/372] make finding plugins for testing multi-config compatible --- unittest/commands/CMakeLists.txt | 14 ++------------ unittest/commands/test_simple_commands.cpp | 9 +++++++-- 2 files changed, 9 insertions(+), 14 deletions(-) diff --git a/unittest/commands/CMakeLists.txt b/unittest/commands/CMakeLists.txt index 10c113d781..6116bf8422 100644 --- a/unittest/commands/CMakeLists.txt +++ b/unittest/commands/CMakeLists.txt @@ -10,18 +10,8 @@ endif() target_link_libraries(test_simple_commands PRIVATE lammps gmock) add_test(NAME SimpleCommands COMMAND test_simple_commands WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}) -if(BUILD_IS_MULTI_CONFIG) - set(LAMMPS_PLUGIN_BIN_DIR ${CMAKE_BINARY_DIR}/build-plugins/$) -else() - set(LAMMPS_PLUGIN_BIN_DIR ${CMAKE_BINARY_DIR}/build-plugins) -endif() -if(APPLE) - set_tests_properties(SimpleCommands PROPERTIES - ENVIRONMENT "DYLD_LIBRARY_PATH=${LAMMPS_PLUGIN_BIN_DIR}/:${DYLD_LIBRARY_PATH}") -else() - set_tests_properties(SimpleCommands PROPERTIES - ENVIRONMENT "LD_LIBRARY_PATH=${LAMMPS_PLUGIN_BIN_DIR}/:${LD_LIBRARY_PATH}") -endif() +set_tests_properties(SimpleCommands PROPERTIES + ENVIRONMENT "LAMMPS_PLUGIN_BIN_DIR=${CMAKE_BINARY_DIR}/build-plugins") add_executable(test_lattice_region test_lattice_region.cpp) target_link_libraries(test_lattice_region PRIVATE lammps gmock) diff --git a/unittest/commands/test_simple_commands.cpp b/unittest/commands/test_simple_commands.cpp index 0ad47f4e96..4d68b54c21 100644 --- a/unittest/commands/test_simple_commands.cpp +++ b/unittest/commands/test_simple_commands.cpp @@ -384,7 +384,12 @@ TEST_F(SimpleCommandsTest, Units) #if defined(LMP_PLUGIN) TEST_F(SimpleCommandsTest, Plugin) { - std::string loadfmt("plugin load {}plugin.so"); + const char *bindir = getenv("LAMMPS_PLUGIN_BIN_DIR"); + const char *config = getenv("CMAKE_CONFIG_TYPE"); + if (!bindir) GTEST_SKIP(); + std::string loadfmt = platform::path_join("plugin load ", bindir); + if (config) loadfmt = platform::path_join(loadfmt, config); + loadfmt = platform::path_join(loadfmt, "{}plugin.so"); ::testing::internal::CaptureStdout(); lmp->input->one(fmt::format(loadfmt, "hello")); auto text = ::testing::internal::GetCapturedStdout(); @@ -395,7 +400,7 @@ TEST_F(SimpleCommandsTest, Plugin) lmp->input->one(fmt::format(loadfmt, "xxx")); text = ::testing::internal::GetCapturedStdout(); if (verbose) std::cout << text; - ASSERT_THAT(text, MatchesRegex(".*Open of file xxx.* failed.*")); + ASSERT_THAT(text, MatchesRegex(".*Open of file .*xxx.* failed.*")); ::testing::internal::CaptureStdout(); lmp->input->one(fmt::format(loadfmt, "nve2")); From 3869e3fce84bde6d9cef6ec0606f0626407c3c62 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Thu, 21 Oct 2021 19:27:59 -0400 Subject: [PATCH 236/372] adjust for compiling on windows --- examples/plugins/CMakeLists.txt | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/examples/plugins/CMakeLists.txt b/examples/plugins/CMakeLists.txt index ec0f6ade83..b0903613de 100644 --- a/examples/plugins/CMakeLists.txt +++ b/examples/plugins/CMakeLists.txt @@ -29,17 +29,15 @@ else() if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT) set(CMAKE_INSTALL_PREFIX "$ENV{HOME}/.local" CACHE PATH "Default install path" FORCE) endif() + # ugly hacks for MSVC which by default always reports an old C++ standard in the __cplusplus macro + # and prints lots of pointless warnings about "unsafe" functions + if(MSVC) + add_compile_options(/Zc:__cplusplus) + add_compile_options(/wd4244) + add_compile_options(/wd4267) + add_compile_definitions(_CRT_SECURE_NO_WARNINGS) endif() -# ugly hacks for MSVC which by default always reports an old C++ standard in the __cplusplus macro -# and prints lots of pointless warnings about "unsafe" functions -#if(MSVC) -# add_compile_options(/Zc:__cplusplus) -# add_compile_options(/wd4244) -# add_compile_options(/wd4267) -# add_compile_definitions(_CRT_SECURE_NO_WARNINGS) -#endif() - # C++11 is required set(CMAKE_CXX_STANDARD 11) set(CMAKE_CXX_STANDARD_REQUIRED ON) From 7d16078cf49cd4b6dbeb9233aacc521212a9f086 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Thu, 21 Oct 2021 19:35:48 -0400 Subject: [PATCH 237/372] always use .so suffix for plugins --- examples/plugins/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/plugins/CMakeLists.txt b/examples/plugins/CMakeLists.txt index b0903613de..b0345e4a5a 100644 --- a/examples/plugins/CMakeLists.txt +++ b/examples/plugins/CMakeLists.txt @@ -70,7 +70,7 @@ add_library(zero2plugin MODULE zero2plugin.cpp pair_zero2.cpp bond_zero2.cpp angle_zero2.cpp dihedral_zero2.cpp improper_zero2.cpp) target_link_libraries(zero2plugin PRIVATE lammps) -set_target_properties(morse2plugin nve2plugin helloplugin zero2plugin PROPERTIES PREFIX "") +set_target_properties(morse2plugin nve2plugin helloplugin zero2plugin PROPERTIES PREFIX "" SUFFIX ".so") # MacOS seems to need this if(CMAKE_SYSTEM_NAME STREQUAL Darwin) From 7cc50925472e16930b87024971ef879429c0ee08 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Thu, 21 Oct 2021 21:01:59 -0400 Subject: [PATCH 238/372] make portable to MSVC++ --- unittest/utils/test_math_eigen_impl.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/unittest/utils/test_math_eigen_impl.cpp b/unittest/utils/test_math_eigen_impl.cpp index 895a35080c..47ca8d9cca 100644 --- a/unittest/utils/test_math_eigen_impl.cpp +++ b/unittest/utils/test_math_eigen_impl.cpp @@ -48,7 +48,7 @@ inline static bool SimilarVec(Vector a, Vector b, int n, Scalar eps = 1.0e-06, Scalar ratio = 1.0e-06, Scalar ratio_denom = 1.0) { for (int i = 0; i < n; i++) - if (not Similar(a[i], b[i], eps, ratio, ratio_denom)) return false; + if (! Similar(a[i], b[i], eps, ratio, ratio_denom)) return false; return true; } @@ -61,7 +61,7 @@ inline static bool SimilarVecUnsigned(Vector a, Vector b, int n, Scalar eps = 1. return true; else { for (int i = 0; i < n; i++) - if (not Similar(a[i], -b[i], eps, ratio, ratio_denom)) return false; + if (! Similar(a[i], -b[i], eps, ratio, ratio_denom)) return false; return true; } } From a796d6b82426c06f46b5654ad99bc4f6a1897cdb Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Thu, 21 Oct 2021 21:04:15 -0400 Subject: [PATCH 239/372] fix logic bug --- examples/plugins/CMakeLists.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/examples/plugins/CMakeLists.txt b/examples/plugins/CMakeLists.txt index b0345e4a5a..e237c42d41 100644 --- a/examples/plugins/CMakeLists.txt +++ b/examples/plugins/CMakeLists.txt @@ -36,6 +36,7 @@ else() add_compile_options(/wd4244) add_compile_options(/wd4267) add_compile_definitions(_CRT_SECURE_NO_WARNINGS) + endif() endif() # C++11 is required From 8d6461ffcd5e5733feabf32cd98cfb51708ce8ee Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Thu, 21 Oct 2021 23:39:14 -0400 Subject: [PATCH 240/372] whitespace --- unittest/CMakeLists.txt | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/unittest/CMakeLists.txt b/unittest/CMakeLists.txt index 119e514207..bab92d1be7 100644 --- a/unittest/CMakeLists.txt +++ b/unittest/CMakeLists.txt @@ -25,7 +25,7 @@ add_test(NAME RunLammps COMMAND $ -log none -echo none -in in.empty WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}) set_tests_properties(RunLammps PROPERTIES - ENVIRONMENT "TSAN_OPTIONS=ignore_noninstrumented_modules=1;HWLOC_HIDE_ERRORS=1" + ENVIRONMENT "TSAN_OPTIONS=ignore_noninstrumented_modules=1;HWLOC_HIDE_ERRORS=1" PASS_REGULAR_EXPRESSION "LAMMPS \\([0-9]+ [A-Za-z]+ 2[0-9][0-9][0-9]( - Update [0-9]+)?\\)") # check if the compiled executable will print the help message @@ -33,7 +33,7 @@ add_test(NAME HelpMessage COMMAND $ -h WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}) set_tests_properties(HelpMessage PROPERTIES - ENVIRONMENT "TSAN_OPTIONS=ignore_noninstrumented_modules=1;HWLOC_HIDE_ERRORS=1" + ENVIRONMENT "TSAN_OPTIONS=ignore_noninstrumented_modules=1;HWLOC_HIDE_ERRORS=1" PASS_REGULAR_EXPRESSION ".*Large-scale Atomic/Molecular Massively Parallel Simulator -.*Usage example:.*") # check if the compiled executable will error out on an invalid command line flag @@ -41,7 +41,7 @@ add_test(NAME InvalidFlag COMMAND $ -xxx WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}) set_tests_properties(InvalidFlag PROPERTIES - ENVIRONMENT "TSAN_OPTIONS=ignore_noninstrumented_modules=1;HWLOC_HIDE_ERRORS=1" + ENVIRONMENT "TSAN_OPTIONS=ignore_noninstrumented_modules=1;HWLOC_HIDE_ERRORS=1" PASS_REGULAR_EXPRESSION "ERROR: Invalid command-line argument.*") # convenience function for adding tests requiring to be run in parallel with MPI From b57c8bda514b4a64d501be34ee3cd0d7bd6db55c Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Thu, 21 Oct 2021 23:39:56 -0400 Subject: [PATCH 241/372] build yaml library using custom CMakeLists.txt file --- unittest/force-styles/CMakeLists.txt | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/unittest/force-styles/CMakeLists.txt b/unittest/force-styles/CMakeLists.txt index 487433c9c8..89b63f462b 100644 --- a/unittest/force-styles/CMakeLists.txt +++ b/unittest/force-styles/CMakeLists.txt @@ -1,8 +1,22 @@ find_package(YAML) -if(NOT YAML_FOUND) +if(YAML_FOUND) + set(DOWNLOAD_YAML_DEFAULT OFF) +else() + set(DOWNLOAD_YAML_DEFAULT ON) +endif() +option(DOWNLOAD_YAML "Download YAML library instead of using an already installed one)" ${DOWNLOAD_YAML_DEFAULT}) +set(YAML_URL "https://github.com/akohlmey/libyaml/archive/refs/heads/new-cmake.tar.gz" CACHE STRING "URL for libyaml tarball") +set(YAML_MD5 "b45401559221758b7b48d67eecf27077" CACHE STRING "MD5 checksum of libyaml tarball") +mark_as_advanced(YAML_URL) +mark_as_advanced(YAML_MD5) + +if(DOWNLOAD_YAML) # download and build a local copy of libyaml - include(YAML) + set(BUILD_TESTING off) + include(ExternalCMakeProject) + ExternalCMakeProject(libyaml ${YAML_URL} ${YAML_MD5} libyaml .) + add_library(Yaml::Yaml ALIAS yaml) endif() if(CMAKE_VERSION VERSION_LESS 3.12) From ad81dd39604a7e1163bb3efdab4bd9d08cbbe695 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Fri, 22 Oct 2021 08:23:49 -0400 Subject: [PATCH 242/372] recover original new style library target names through ALIAS library definitions --- unittest/CMakeLists.txt | 4 ++++ unittest/c-library/CMakeLists.txt | 14 ++++++------ unittest/commands/CMakeLists.txt | 14 ++++++------ unittest/cplusplus/CMakeLists.txt | 6 +++--- unittest/formats/CMakeLists.txt | 36 +++++++++++++++---------------- unittest/fortran/CMakeLists.txt | 4 ++-- unittest/python/CMakeLists.txt | 2 +- unittest/utils/CMakeLists.txt | 12 +++++------ 8 files changed, 48 insertions(+), 44 deletions(-) diff --git a/unittest/CMakeLists.txt b/unittest/CMakeLists.txt index bab92d1be7..f6638b839e 100644 --- a/unittest/CMakeLists.txt +++ b/unittest/CMakeLists.txt @@ -13,6 +13,10 @@ set(gtest_force_shared_crt ON CACHE BOOL "" FORCE) include(ExternalCMakeProject) ExternalCMakeProject(googletest ${GTEST_URL} ${GTEST_MD5} googletest .) +add_library(GTest::GTest ALIAS gtest) +add_library(GTest::GMock ALIAS gmock) +add_library(GTest::GTestMain ALIAS gtest_main) +add_library(GTest::GMockMain ALIAS gmock_main) ######################################## # General tests using the LAMMPS executable itself diff --git a/unittest/c-library/CMakeLists.txt b/unittest/c-library/CMakeLists.txt index 5168345727..3d57dbbc90 100644 --- a/unittest/c-library/CMakeLists.txt +++ b/unittest/c-library/CMakeLists.txt @@ -1,24 +1,24 @@ add_executable(test_library_open test_library_open.cpp test_main.cpp) -target_link_libraries(test_library_open PRIVATE lammps gmock) +target_link_libraries(test_library_open PRIVATE lammps GTest::GMock) add_test(LibraryOpen test_library_open) add_executable(test_library_commands test_library_commands.cpp test_main.cpp) -target_link_libraries(test_library_commands PRIVATE lammps gmock) +target_link_libraries(test_library_commands PRIVATE lammps GTest::GMock) add_test(LibraryCommands test_library_commands) add_executable(test_library_external test_library_external.cpp test_main.cpp) -target_link_libraries(test_library_external PRIVATE lammps gmock) +target_link_libraries(test_library_external PRIVATE lammps GTest::GMock) add_test(LibraryExternal test_library_external) add_executable(test_library_properties test_library_properties.cpp test_main.cpp) -target_link_libraries(test_library_properties PRIVATE lammps gmock) +target_link_libraries(test_library_properties PRIVATE lammps GTest::GMock) target_compile_definitions(test_library_properties PRIVATE -DTEST_INPUT_FOLDER=${CMAKE_CURRENT_SOURCE_DIR}) add_test(LibraryProperties test_library_properties) set_tests_properties(LibraryProperties PROPERTIES ENVIRONMENT "LAMMPS_POTENTIALS=${LAMMPS_POTENTIALS_DIR}") add_executable(test_library_scatter_gather test_library_scatter_gather.cpp test_main.cpp) -target_link_libraries(test_library_scatter_gather PRIVATE lammps gmock) +target_link_libraries(test_library_scatter_gather PRIVATE lammps GTest::GMock) target_compile_definitions(test_library_scatter_gather PRIVATE -DTEST_INPUT_FOLDER=${CMAKE_CURRENT_SOURCE_DIR}) add_test(LibraryScatterGather test_library_scatter_gather) set_tests_properties(LibraryScatterGather PROPERTIES ENVIRONMENT "LAMMPS_POTENTIALS=${LAMMPS_POTENTIALS_DIR}") @@ -63,11 +63,11 @@ foreach(WITH "JPEG" "PNG" "GZIP" "FFMPEG") endforeach() add_executable(test_library_config test_library_config.cpp test_main.cpp) -target_link_libraries(test_library_config PRIVATE lammps gmock) +target_link_libraries(test_library_config PRIVATE lammps GTest::GMock) target_compile_definitions(test_library_config PRIVATE ${TEST_CONFIG_DEFS}) add_test(LibraryConfig test_library_config) add_executable(test_library_mpi test_library_mpi.cpp) -target_link_libraries(test_library_mpi PRIVATE lammps gmock) +target_link_libraries(test_library_mpi PRIVATE lammps GTest::GMock) target_compile_definitions(test_library_mpi PRIVATE ${TEST_CONFIG_DEFS}) add_mpi_test(NAME LibraryMPI NUM_PROCS 4 COMMAND $) diff --git a/unittest/commands/CMakeLists.txt b/unittest/commands/CMakeLists.txt index 6116bf8422..49603a8b22 100644 --- a/unittest/commands/CMakeLists.txt +++ b/unittest/commands/CMakeLists.txt @@ -8,21 +8,21 @@ if((NOT (CMAKE_SYSTEM_NAME STREQUAL "Windows")) AND PKG_PLUGIN) target_compile_definitions(test_simple_commands PRIVATE -DLMP_PLUGIN) endif() -target_link_libraries(test_simple_commands PRIVATE lammps gmock) +target_link_libraries(test_simple_commands PRIVATE lammps GTest::GMock) add_test(NAME SimpleCommands COMMAND test_simple_commands WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}) set_tests_properties(SimpleCommands PROPERTIES ENVIRONMENT "LAMMPS_PLUGIN_BIN_DIR=${CMAKE_BINARY_DIR}/build-plugins") add_executable(test_lattice_region test_lattice_region.cpp) -target_link_libraries(test_lattice_region PRIVATE lammps gmock) +target_link_libraries(test_lattice_region PRIVATE lammps GTest::GMock) add_test(NAME LatticeRegion COMMAND test_lattice_region WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}) add_executable(test_groups test_groups.cpp) -target_link_libraries(test_groups PRIVATE lammps gmock) +target_link_libraries(test_groups PRIVATE lammps GTest::GMock) add_test(NAME Groups COMMAND test_groups WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}) add_executable(test_variables test_variables.cpp) -target_link_libraries(test_variables PRIVATE lammps gmock) +target_link_libraries(test_variables PRIVATE lammps GTest::GMock) add_test(NAME Variables COMMAND test_variables WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}) add_executable(test_kim_commands test_kim_commands.cpp) @@ -33,15 +33,15 @@ if(KIM_EXTRA_UNITTESTS) message(FATAL_ERROR "CURL not found. Enabling KIM extra unit tests requires to have libcurl installed.") endif() endif() -target_link_libraries(test_kim_commands PRIVATE lammps gmock) +target_link_libraries(test_kim_commands PRIVATE lammps GTest::GMock) add_test(NAME KimCommands COMMAND test_kim_commands WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}) add_executable(test_reset_ids test_reset_ids.cpp) target_compile_definitions(test_reset_ids PRIVATE -DTEST_INPUT_FOLDER=${CMAKE_CURRENT_SOURCE_DIR}) -target_link_libraries(test_reset_ids PRIVATE lammps gmock) +target_link_libraries(test_reset_ids PRIVATE lammps GTest::GMock) add_test(NAME ResetIDs COMMAND test_reset_ids WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}) add_executable(test_mpi_load_balancing test_mpi_load_balancing.cpp) -target_link_libraries(test_mpi_load_balancing PRIVATE lammps gmock) +target_link_libraries(test_mpi_load_balancing PRIVATE lammps GTest::GMock) target_compile_definitions(test_mpi_load_balancing PRIVATE ${TEST_CONFIG_DEFS}) add_mpi_test(NAME MPILoadBalancing NUM_PROCS 4 COMMAND $) diff --git a/unittest/cplusplus/CMakeLists.txt b/unittest/cplusplus/CMakeLists.txt index ef6155f986..efd194b9d2 100644 --- a/unittest/cplusplus/CMakeLists.txt +++ b/unittest/cplusplus/CMakeLists.txt @@ -1,13 +1,13 @@ add_executable(test_lammps_class test_lammps_class.cpp) -target_link_libraries(test_lammps_class PRIVATE lammps gmock_main) +target_link_libraries(test_lammps_class PRIVATE lammps GTest::GMockMain) add_test(LammpsClass test_lammps_class) set_tests_properties(LammpsClass PROPERTIES ENVIRONMENT "OMP_NUM_THREADS=1") add_executable(test_input_class test_input_class.cpp) -target_link_libraries(test_input_class PRIVATE lammps gtest_main) +target_link_libraries(test_input_class PRIVATE lammps GTest::GTestMain) add_test(InputClass test_input_class) add_executable(test_error_class test_error_class.cpp) -target_link_libraries(test_error_class PRIVATE lammps gmock) +target_link_libraries(test_error_class PRIVATE lammps GTest::GMock) add_test(ErrorClass test_error_class) diff --git a/unittest/formats/CMakeLists.txt b/unittest/formats/CMakeLists.txt index 9978857c1e..a17707fdf1 100644 --- a/unittest/formats/CMakeLists.txt +++ b/unittest/formats/CMakeLists.txt @@ -1,48 +1,48 @@ add_executable(test_atom_styles test_atom_styles.cpp) -target_link_libraries(test_atom_styles PRIVATE lammps gmock) +target_link_libraries(test_atom_styles PRIVATE lammps GTest::GMock) add_test(NAME AtomStyles COMMAND test_atom_styles WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}) add_executable(test_image_flags test_image_flags.cpp) -target_link_libraries(test_image_flags PRIVATE lammps gmock) +target_link_libraries(test_image_flags PRIVATE lammps GTest::GMock) add_test(NAME ImageFlags COMMAND test_image_flags WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}) add_executable(test_input_convert test_input_convert.cpp) -target_link_libraries(test_input_convert PRIVATE lammps gmock_main) +target_link_libraries(test_input_convert PRIVATE lammps GTest::GMockMain) add_test(NAME InputConvert COMMAND test_input_convert WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}) add_executable(test_molecule_file test_molecule_file.cpp) -target_link_libraries(test_molecule_file PRIVATE lammps gmock) +target_link_libraries(test_molecule_file PRIVATE lammps GTest::GMock) add_test(NAME MoleculeFile COMMAND test_molecule_file WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}) add_executable(test_pair_unit_convert test_pair_unit_convert.cpp) -target_link_libraries(test_pair_unit_convert PRIVATE lammps gmock) +target_link_libraries(test_pair_unit_convert PRIVATE lammps GTest::GMock) add_test(NAME PairUnitConvert COMMAND test_pair_unit_convert WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}) set_tests_properties(PairUnitConvert PROPERTIES ENVIRONMENT "LAMMPS_POTENTIALS=${LAMMPS_POTENTIALS_DIR}") add_executable(test_potential_file_reader test_potential_file_reader.cpp) -target_link_libraries(test_potential_file_reader PRIVATE lammps gmock) +target_link_libraries(test_potential_file_reader PRIVATE lammps GTest::GMock) add_test(NAME PotentialFileReader COMMAND test_potential_file_reader WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}) set_tests_properties(PotentialFileReader PROPERTIES ENVIRONMENT "LAMMPS_POTENTIALS=${LAMMPS_POTENTIALS_DIR}") if(PKG_MANYBODY) add_executable(test_eim_potential_file_reader test_eim_potential_file_reader.cpp) - target_link_libraries(test_eim_potential_file_reader PRIVATE lammps gmock) + target_link_libraries(test_eim_potential_file_reader PRIVATE lammps GTest::GMock) add_test(NAME EIMPotentialFileReader COMMAND test_eim_potential_file_reader WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}) set_tests_properties(EIMPotentialFileReader PROPERTIES ENVIRONMENT "LAMMPS_POTENTIALS=${LAMMPS_POTENTIALS_DIR}") endif() add_executable(test_text_file_reader test_text_file_reader.cpp) -target_link_libraries(test_text_file_reader PRIVATE lammps gmock) +target_link_libraries(test_text_file_reader PRIVATE lammps GTest::GMock) add_test(NAME TextFileReader COMMAND test_text_file_reader WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}) set_tests_properties(TextFileReader PROPERTIES ENVIRONMENT "LAMMPS_POTENTIALS=${LAMMPS_POTENTIALS_DIR}") add_executable(test_file_operations test_file_operations.cpp) -target_link_libraries(test_file_operations PRIVATE lammps gmock) +target_link_libraries(test_file_operations PRIVATE lammps GTest::GMock) add_test(NAME FileOperations COMMAND test_file_operations WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}) add_executable(test_dump_atom test_dump_atom.cpp) -target_link_libraries(test_dump_atom PRIVATE lammps gmock) +target_link_libraries(test_dump_atom PRIVATE lammps GTest::GMock) add_test(NAME DumpAtom COMMAND test_dump_atom WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}) set_tests_properties(DumpAtom PROPERTIES ENVIRONMENT "LAMMPS_POTENTIALS=${LAMMPS_POTENTIALS_DIR}") @@ -50,19 +50,19 @@ if(PKG_COMPRESS) find_program(GZIP_BINARY NAMES gzip REQUIRED) add_executable(test_dump_atom_compressed test_dump_atom_compressed.cpp compressed_dump_test_main.cpp) - target_link_libraries(test_dump_atom_compressed PRIVATE lammps gmock) + target_link_libraries(test_dump_atom_compressed PRIVATE lammps GTest::GMock) add_executable(test_dump_custom_compressed test_dump_custom_compressed.cpp compressed_dump_test_main.cpp) - target_link_libraries(test_dump_custom_compressed PRIVATE lammps gmock) + target_link_libraries(test_dump_custom_compressed PRIVATE lammps GTest::GMock) add_executable(test_dump_cfg_compressed test_dump_cfg_compressed.cpp compressed_dump_test_main.cpp) - target_link_libraries(test_dump_cfg_compressed PRIVATE lammps gmock) + target_link_libraries(test_dump_cfg_compressed PRIVATE lammps GTest::GMock) add_executable(test_dump_local_compressed test_dump_local_compressed.cpp compressed_dump_test_main.cpp) - target_link_libraries(test_dump_local_compressed PRIVATE lammps gmock) + target_link_libraries(test_dump_local_compressed PRIVATE lammps GTest::GMock) add_executable(test_dump_xyz_compressed test_dump_xyz_compressed.cpp compressed_dump_test_main.cpp) - target_link_libraries(test_dump_xyz_compressed PRIVATE lammps gmock) + target_link_libraries(test_dump_xyz_compressed PRIVATE lammps GTest::GMock) add_test(NAME DumpAtomGZ COMMAND test_dump_atom_compressed gz WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}) set_tests_properties(DumpAtomGZ PROPERTIES ENVIRONMENT "LAMMPS_POTENTIALS=${LAMMPS_POTENTIALS_DIR};COMPRESS_BINARY=${GZIP_BINARY}") @@ -102,17 +102,17 @@ if(PKG_COMPRESS) endif() add_executable(test_dump_custom test_dump_custom.cpp) -target_link_libraries(test_dump_custom PRIVATE lammps gmock) +target_link_libraries(test_dump_custom PRIVATE lammps GTest::GMock) add_test(NAME DumpCustom COMMAND test_dump_custom WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}) set_tests_properties(DumpCustom PROPERTIES ENVIRONMENT "LAMMPS_POTENTIALS=${LAMMPS_POTENTIALS_DIR}") add_executable(test_dump_cfg test_dump_cfg.cpp) -target_link_libraries(test_dump_cfg PRIVATE lammps gmock) +target_link_libraries(test_dump_cfg PRIVATE lammps GTest::GMock) add_test(NAME DumpCfg COMMAND test_dump_cfg WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}) set_tests_properties(DumpCfg PROPERTIES ENVIRONMENT "LAMMPS_POTENTIALS=${LAMMPS_POTENTIALS_DIR}") add_executable(test_dump_local test_dump_local.cpp) -target_link_libraries(test_dump_local PRIVATE lammps gmock) +target_link_libraries(test_dump_local PRIVATE lammps GTest::GMock) add_test(NAME DumpLocal COMMAND test_dump_local WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}) set_tests_properties(DumpLocal PROPERTIES ENVIRONMENT "LAMMPS_POTENTIALS=${LAMMPS_POTENTIALS_DIR}") diff --git a/unittest/fortran/CMakeLists.txt b/unittest/fortran/CMakeLists.txt index 586dcf537f..6e7e165018 100644 --- a/unittest/fortran/CMakeLists.txt +++ b/unittest/fortran/CMakeLists.txt @@ -25,11 +25,11 @@ if(CMAKE_Fortran_COMPILER) add_library(flammps STATIC ${LAMMPS_FORTRAN_MODULE}) add_executable(test_fortran_create wrap_create.cpp test_fortran_create.f90) - target_link_libraries(test_fortran_create PRIVATE flammps lammps MPI::MPI_Fortran gtest_main) + target_link_libraries(test_fortran_create PRIVATE flammps lammps MPI::MPI_Fortran GTest::GTestMain) add_test(FortranOpen test_fortran_create) add_executable(test_fortran_commands wrap_commands.cpp test_fortran_commands.f90) - target_link_libraries(test_fortran_commands PRIVATE flammps lammps MPI::MPI_Fortran gtest_main) + target_link_libraries(test_fortran_commands PRIVATE flammps lammps MPI::MPI_Fortran GTest::GTestMain) add_test(FortranCommands test_fortran_commands) else() message(STATUS "Skipping Tests for the LAMMPS Fortran Module: no Fortran compiler") diff --git a/unittest/python/CMakeLists.txt b/unittest/python/CMakeLists.txt index 9343167228..f61a9c61ab 100644 --- a/unittest/python/CMakeLists.txt +++ b/unittest/python/CMakeLists.txt @@ -21,7 +21,7 @@ else() endif() add_executable(test_python_package test_python_package.cpp) -target_link_libraries(test_python_package PRIVATE lammps gmock) +target_link_libraries(test_python_package PRIVATE lammps GTest::GMock) target_compile_definitions(test_python_package PRIVATE -DTEST_INPUT_FOLDER=${TEST_INPUT_FOLDER}) # this requires CMake 3.12. don't care to add backward compatibility for this. if(Python3_Development_FOUND) diff --git a/unittest/utils/CMakeLists.txt b/unittest/utils/CMakeLists.txt index 8aa671cba6..28486048c4 100644 --- a/unittest/utils/CMakeLists.txt +++ b/unittest/utils/CMakeLists.txt @@ -1,21 +1,21 @@ add_executable(test_tokenizer test_tokenizer.cpp) -target_link_libraries(test_tokenizer PRIVATE lammps gmock_main) +target_link_libraries(test_tokenizer PRIVATE lammps GTest::GMockMain) add_test(Tokenizer test_tokenizer) add_executable(test_mempool test_mempool.cpp) -target_link_libraries(test_mempool PRIVATE lammps gmock_main) +target_link_libraries(test_mempool PRIVATE lammps GTest::GMockMain) add_test(MemPool test_mempool) add_executable(test_argutils test_argutils.cpp) -target_link_libraries(test_argutils PRIVATE lammps gmock_main) +target_link_libraries(test_argutils PRIVATE lammps GTest::GMockMain) add_test(ArgUtils test_argutils) add_executable(test_utils test_utils.cpp) -target_link_libraries(test_utils PRIVATE lammps gmock_main) +target_link_libraries(test_utils PRIVATE lammps GTest::GMockMain) add_test(Utils test_utils) add_executable(test_platform test_platform.cpp) -target_link_libraries(test_platform PRIVATE lammps gmock_main) +target_link_libraries(test_platform PRIVATE lammps GTest::GMockMain) add_test(Platform test_platform) set_tests_properties(Utils Platform PROPERTIES @@ -34,7 +34,7 @@ if(BUILD_SHARED_LIBS) endif() add_executable(test_fmtlib test_fmtlib.cpp) -target_link_libraries(test_fmtlib PRIVATE lammps gmock_main) +target_link_libraries(test_fmtlib PRIVATE lammps GTest::GMockMain) add_test(FmtLib test_fmtlib) add_executable(test_math_eigen_impl test_math_eigen_impl.cpp) From ced96441ef482ddb355795a0fdcdc436a655f1c6 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Fri, 22 Oct 2021 08:44:30 -0400 Subject: [PATCH 243/372] update hash after change in repo --- unittest/force-styles/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/unittest/force-styles/CMakeLists.txt b/unittest/force-styles/CMakeLists.txt index 89b63f462b..9ef2b73ec5 100644 --- a/unittest/force-styles/CMakeLists.txt +++ b/unittest/force-styles/CMakeLists.txt @@ -7,7 +7,7 @@ else() endif() option(DOWNLOAD_YAML "Download YAML library instead of using an already installed one)" ${DOWNLOAD_YAML_DEFAULT}) set(YAML_URL "https://github.com/akohlmey/libyaml/archive/refs/heads/new-cmake.tar.gz" CACHE STRING "URL for libyaml tarball") -set(YAML_MD5 "b45401559221758b7b48d67eecf27077" CACHE STRING "MD5 checksum of libyaml tarball") +set(YAML_MD5 "1683f5957a79d7a823e09575b0488df2" CACHE STRING "MD5 checksum of libyaml tarball") mark_as_advanced(YAML_URL) mark_as_advanced(YAML_MD5) From d7d1c84b35c7de35fa439decc6b4c0d1692aa8b9 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Fri, 22 Oct 2021 08:56:00 -0400 Subject: [PATCH 244/372] only build a custom YAML lib, if not installed --- unittest/force-styles/CMakeLists.txt | 17 +++++------------ 1 file changed, 5 insertions(+), 12 deletions(-) diff --git a/unittest/force-styles/CMakeLists.txt b/unittest/force-styles/CMakeLists.txt index 9ef2b73ec5..c4c008f6df 100644 --- a/unittest/force-styles/CMakeLists.txt +++ b/unittest/force-styles/CMakeLists.txt @@ -1,19 +1,12 @@ find_package(YAML) -if(YAML_FOUND) - set(DOWNLOAD_YAML_DEFAULT OFF) -else() - set(DOWNLOAD_YAML_DEFAULT ON) -endif() -option(DOWNLOAD_YAML "Download YAML library instead of using an already installed one)" ${DOWNLOAD_YAML_DEFAULT}) -set(YAML_URL "https://github.com/akohlmey/libyaml/archive/refs/heads/new-cmake.tar.gz" CACHE STRING "URL for libyaml tarball") -set(YAML_MD5 "1683f5957a79d7a823e09575b0488df2" CACHE STRING "MD5 checksum of libyaml tarball") -mark_as_advanced(YAML_URL) -mark_as_advanced(YAML_MD5) +if(NOT YAML_FOUND) + set(YAML_URL "https://github.com/akohlmey/libyaml/archive/refs/heads/new-cmake.tar.gz" CACHE STRING "URL for libyaml tarball") + set(YAML_MD5 "1683f5957a79d7a823e09575b0488df2" CACHE STRING "MD5 checksum of libyaml tarball") + mark_as_advanced(YAML_URL) + mark_as_advanced(YAML_MD5) -if(DOWNLOAD_YAML) # download and build a local copy of libyaml - set(BUILD_TESTING off) include(ExternalCMakeProject) ExternalCMakeProject(libyaml ${YAML_URL} ${YAML_MD5} libyaml .) add_library(Yaml::Yaml ALIAS yaml) From bd9ad288b953c8bdbb9d216a3f49c77ed75530fe Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Fri, 22 Oct 2021 09:13:07 -0500 Subject: [PATCH 245/372] recover compilation of test on windows --- unittest/force-styles/test_error_stats.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/unittest/force-styles/test_error_stats.cpp b/unittest/force-styles/test_error_stats.cpp index 52ba3baae3..0d0cbd43b3 100644 --- a/unittest/force-styles/test_error_stats.cpp +++ b/unittest/force-styles/test_error_stats.cpp @@ -9,6 +9,10 @@ #include "fmtlib_format.cpp" #include "fmtlib_os.cpp" +#if defined(max) +#undef max +#endif + TEST(ErrorStats, test) { ErrorStats stats; From 69f5e1feac2111469d7bbd3adbfa16cb50c858d8 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Fri, 22 Oct 2021 09:25:44 -0500 Subject: [PATCH 246/372] Enable testing for Debug configurations in VS --- cmake/CMakeSettings.json | 98 ++++++++++++++++++++-------------------- 1 file changed, 49 insertions(+), 49 deletions(-) diff --git a/cmake/CMakeSettings.json b/cmake/CMakeSettings.json index dada2f6752..7292649afe 100644 --- a/cmake/CMakeSettings.json +++ b/cmake/CMakeSettings.json @@ -1,55 +1,55 @@ { - "configurations": [ + "configurations": [ + { + "name": "x64-Debug-MSVC", + "generator": "Ninja", + "configurationType": "Debug", + "buildRoot": "${workspaceRoot}\\build\\${name}", + "installRoot": "${workspaceRoot}\\install\\${name}", + "cmakeCommandArgs": "-S ${workspaceRoot}\\cmake -C ${workspaceRoot}\\cmake\\presets\\windows.cmake -DENABLE_TESTING=on", + "buildCommandArgs": "", + "ctestCommandArgs": "", + "inheritEnvironments": [ "msvc_x64_x64" ], + "variables": [ { - "name": "x64-Debug-MSVC", - "generator": "Ninja", - "configurationType": "Debug", - "buildRoot": "${workspaceRoot}\\build\\${name}", - "installRoot": "${workspaceRoot}\\install\\${name}", - "cmakeCommandArgs": "-S ${workspaceRoot}\\cmake -C ${workspaceRoot}\\cmake\\presets\\windows.cmake", - "buildCommandArgs": "", - "ctestCommandArgs": "", - "inheritEnvironments": [ "msvc_x64_x64" ], - "variables": [ - { - "name": "BUILD_SHARED_LIBS", - "value": "True", - "type": "BOOL" - }, - { - "name": "BUILD_TOOLS", - "value": "True", - "type": "BOOL" - }, - { - "name": "LAMMPS_EXCEPTIONS", - "value": "True", - "type": "BOOL" - } - ] + "name": "BUILD_SHARED_LIBS", + "value": "True", + "type": "BOOL" }, { - "name": "x64-Debug-Clang", - "generator": "Ninja", - "configurationType": "Debug", - "buildRoot": "${workspaceRoot}\\build\\${name}", - "installRoot": "${workspaceRoot}\\install\\${name}", - "cmakeCommandArgs": "-S ${workspaceRoot}\\cmake -C ${workspaceRoot}\\cmake\\presets\\windows.cmake", - "buildCommandArgs": "", - "ctestCommandArgs": "", - "inheritEnvironments": [ "clang_cl_x64" ], - "variables": [ - { - "name": "BUILD_TOOLS", - "value": "True", - "type": "BOOL" - }, - { - "name": "LAMMPS_EXCEPTIONS", - "value": "True", - "type": "BOOL" - } - ] + "name": "BUILD_TOOLS", + "value": "True", + "type": "BOOL" + }, + { + "name": "LAMMPS_EXCEPTIONS", + "value": "True", + "type": "BOOL" } - ] + ] + }, + { + "name": "x64-Debug-Clang", + "generator": "Ninja", + "configurationType": "Debug", + "buildRoot": "${workspaceRoot}\\build\\${name}", + "installRoot": "${workspaceRoot}\\install\\${name}", + "cmakeCommandArgs": "-S ${workspaceRoot}\\cmake -C ${workspaceRoot}\\cmake\\presets\\windows.cmake -DENABLE_TESTING=on", + "buildCommandArgs": "", + "ctestCommandArgs": "", + "inheritEnvironments": [ "clang_cl_x64" ], + "variables": [ + { + "name": "BUILD_TOOLS", + "value": "True", + "type": "BOOL" + }, + { + "name": "LAMMPS_EXCEPTIONS", + "value": "True", + "type": "BOOL" + } + ] + } + ] } \ No newline at end of file From 5c9a4f4be01b9614a45b4e86698ff032da5c350c Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Fri, 22 Oct 2021 11:05:32 -0400 Subject: [PATCH 247/372] implement platform abstraction of unsetenv() --- doc/src/Developer_platform.rst | 3 +++ src/platform.cpp | 21 +++++++++++++++++++++ src/platform.h | 7 +++++++ unittest/cplusplus/test_lammps_class.cpp | 6 +----- unittest/utils/test_platform.cpp | 10 +++++++++- 5 files changed, 41 insertions(+), 6 deletions(-) diff --git a/doc/src/Developer_platform.rst b/doc/src/Developer_platform.rst index 4cea36f94c..fd5cf065eb 100644 --- a/doc/src/Developer_platform.rst +++ b/doc/src/Developer_platform.rst @@ -115,6 +115,9 @@ Environment variable functions .. doxygenfunction:: putenv :project: progguide +.. doxygenfunction:: unsetenv + :project: progguide + .. doxygenfunction:: list_pathenv :project: progguide diff --git a/src/platform.cpp b/src/platform.cpp index 555026b2ac..5e04251ca7 100644 --- a/src/platform.cpp +++ b/src/platform.cpp @@ -442,6 +442,27 @@ int platform::putenv(const std::string &vardef) return -1; } +/* ---------------------------------------------------------------------- + unset environment variable +------------------------------------------------------------------------- */ + +int platform::unsetenv(const std::string &variable) +{ + if (variable.size() == 0) return -1; + +#ifdef _WIN32 + // empty _putenv() definition deletes variable on Windows + // must not have an equal sign as that will result in creating an environment variable + if (variable.find_first_of('=') != std::string::npos) return -1; + auto var = utils::strdup(variable); + int rv = _putenv(var); + delete[] var; + return rv; +#else + return ::unsetenv(variable.c_str()); +#endif +} + /* ---------------------------------------------------------------------- split a "path" environment variable into a list ------------------------------------------------------------------------- */ diff --git a/src/platform.h b/src/platform.h index de8ecce016..eb14b403aa 100644 --- a/src/platform.h +++ b/src/platform.h @@ -116,6 +116,13 @@ namespace platform { int putenv(const std::string &vardef); + /*! Delete variable from the environment + * + * \param variable variable name + * \return -1 if failure otherwise 0 */ + + int unsetenv(const std::string &variable); + /*! Get list of entries in a path environment variable * * This provides a list of strings of the entries in an environment diff --git a/unittest/cplusplus/test_lammps_class.cpp b/unittest/cplusplus/test_lammps_class.cpp index 663c7358d9..3a1bde51ff 100644 --- a/unittest/cplusplus/test_lammps_class.cpp +++ b/unittest/cplusplus/test_lammps_class.cpp @@ -363,11 +363,7 @@ TEST(LAMMPS_init, NoOpenMP) FILE *fp = fopen("in.lammps_class_noomp", "w"); fputs("\n", fp); fclose(fp); -#if defined(__WIN32) - _putenv("OMP_NUM_THREADS"); -#else - unsetenv("OMP_NUM_THREADS"); -#endif + platform::unsetenv("OMP_NUM_THREADS"); const char *args[] = {"LAMMPS_init", "-in", "in.lammps_class_noomp", "-log", "none", "-nocite"}; char **argv = (char **)args; diff --git a/unittest/utils/test_platform.cpp b/unittest/utils/test_platform.cpp index 0f39534c31..ace546ba90 100644 --- a/unittest/utils/test_platform.cpp +++ b/unittest/utils/test_platform.cpp @@ -37,7 +37,7 @@ TEST(Platform, clock) ASSERT_GT(ct_used, 1e-4); } -TEST(Platform, putenv) +TEST(Platform, putenv_unsetenv) { const char *var = getenv("UNITTEST_VAR1"); ASSERT_EQ(var, nullptr); @@ -65,6 +65,14 @@ TEST(Platform, putenv) ASSERT_THAT(var, StrEq("one=two")); ASSERT_EQ(platform::putenv(""), -1); + + ASSERT_EQ(platform::unsetenv(""), -1); + ASSERT_EQ(platform::unsetenv("UNITTEST_VAR3=two"), -1); + var = getenv("UNITTEST_VAR1"); + ASSERT_NE(var, nullptr); + ASSERT_EQ(platform::unsetenv("UNITTEST_VAR1"), 0); + var = getenv("UNITTEST_VAR1"); + ASSERT_EQ(var, nullptr); } TEST(Platform, list_pathenv) From 614b751f5f52fa6f731acde3fd7c5d896e64cdfe Mon Sep 17 00:00:00 2001 From: Stan Moore Date: Fri, 22 Oct 2021 16:09:46 +0000 Subject: [PATCH 248/372] Add missing brace --- src/KOKKOS/kokkos_type.h | 1 + 1 file changed, 1 insertion(+) diff --git a/src/KOKKOS/kokkos_type.h b/src/KOKKOS/kokkos_type.h index 248435ba03..15af1397bd 100644 --- a/src/KOKKOS/kokkos_type.h +++ b/src/KOKKOS/kokkos_type.h @@ -222,6 +222,7 @@ struct ExecutionSpaceFromDevice { template<> struct ExecutionSpaceFromDevice { static const LAMMPS_NS::ExecutionSpace space = LAMMPS_NS::Device; +}; #elif defined(KOKKOS_ENABLE_OPENMPTARGET) template<> struct ExecutionSpaceFromDevice { From 7318aa49d8ba01e9c64d4313ec09c36cc5a6e099 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Fri, 22 Oct 2021 12:12:20 -0400 Subject: [PATCH 249/372] set define for static linkage to avoid issues linking libyaml on windows --- unittest/force-styles/CMakeLists.txt | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/unittest/force-styles/CMakeLists.txt b/unittest/force-styles/CMakeLists.txt index c4c008f6df..6624993321 100644 --- a/unittest/force-styles/CMakeLists.txt +++ b/unittest/force-styles/CMakeLists.txt @@ -31,7 +31,12 @@ endif() set(TEST_INPUT_FOLDER ${CMAKE_CURRENT_SOURCE_DIR}/tests) add_library(style_tests STATIC yaml_writer.cpp error_stats.cpp test_config_reader.cpp test_main.cpp) -target_compile_definitions(style_tests PRIVATE -DTEST_INPUT_FOLDER=${TEST_INPUT_FOLDER}) +if(YAML_FOUND) + target_compile_definitions(style_tests PRIVATE TEST_INPUT_FOLDER=${TEST_INPUT_FOLDER}) +else() + # we always use static linkage with local compiled libyaml + target_compile_definitions(style_tests PRIVATE TEST_INPUT_FOLDER=${TEST_INPUT_FOLDER} YAML_DECLARE_STATIC) +endif() target_include_directories(style_tests PRIVATE ${LAMMPS_SOURCE_DIR}) target_link_libraries(style_tests PUBLIC gmock Yaml::Yaml lammps) if(BUILD_MPI) From 3cce6b46e20f3ef4602554337f0e8d67a5771bb4 Mon Sep 17 00:00:00 2001 From: Stan Moore Date: Fri, 22 Oct 2021 16:20:37 +0000 Subject: [PATCH 250/372] Fix thread divergence issue when not using CUDA/HIP --- src/KOKKOS/npair_kokkos.cpp | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/src/KOKKOS/npair_kokkos.cpp b/src/KOKKOS/npair_kokkos.cpp index 2ca16e7a60..42ecedd78a 100644 --- a/src/KOKKOS/npair_kokkos.cpp +++ b/src/KOKKOS/npair_kokkos.cpp @@ -226,7 +226,8 @@ void NPairKokkos::build(NeighList *list_) data.h_resize() = 0; Kokkos::deep_copy(d_scalars, h_scalars); -#ifdef LMP_KOKKOS_GPU + +#if defined(KOKKOS_ENABLE_CUDA) || defined(KOKKOS_ENABLE_HIP) #define BINS_PER_BLOCK 2 const int factor = atoms_per_bin<64?2:1; #else @@ -240,7 +241,7 @@ void NPairKokkos::build(NeighList *list_) if (newton_pair) { if (SIZE) { NPairKokkosBuildFunctorSize f(data,atoms_per_bin * 5 * sizeof(X_FLOAT) * factor); -#if defined(LMP_KOKKOS_GPU) && !defined(KOKKOS_ENABLE_OPENMPTARGET) +#ifdef LMP_KOKKOS_GPU if (ExecutionSpaceFromDevice::space == Device) { int team_size = atoms_per_bin*factor; int team_size_max = Kokkos::TeamPolicy(team_size,Kokkos::AUTO).team_size_max(f,Kokkos::ParallelForTag()); @@ -258,7 +259,7 @@ void NPairKokkos::build(NeighList *list_) #endif } else { NPairKokkosBuildFunctor f(data,atoms_per_bin * 5 * sizeof(X_FLOAT) * factor); -#if defined(LMP_KOKKOS_GPU) && !defined(KOKKOS_ENABLE_OPENMPTARGET) +#ifdef LMP_KOKKOS_GPU if (ExecutionSpaceFromDevice::space == Device) { int team_size = atoms_per_bin*factor; int team_size_max = Kokkos::TeamPolicy(team_size,Kokkos::AUTO).team_size_max(f,Kokkos::ParallelForTag()); @@ -278,7 +279,7 @@ void NPairKokkos::build(NeighList *list_) } else { if (SIZE) { NPairKokkosBuildFunctorSize f(data,atoms_per_bin * 5 * sizeof(X_FLOAT) * factor); -#if defined(LMP_KOKKOS_GPU) && !defined(KOKKOS_ENABLE_OPENMPTARGET) +#ifdef LMP_KOKKOS_GPU if (ExecutionSpaceFromDevice::space == Device) { int team_size = atoms_per_bin*factor; int team_size_max = Kokkos::TeamPolicy(team_size,Kokkos::AUTO).team_size_max(f,Kokkos::ParallelForTag()); @@ -296,7 +297,7 @@ void NPairKokkos::build(NeighList *list_) #endif } else { NPairKokkosBuildFunctor f(data,atoms_per_bin * 5 * sizeof(X_FLOAT) * factor); -#if defined(LMP_KOKKOS_GPU) && !defined(KOKKOS_ENABLE_OPENMPTARGET) +#ifdef LMP_KOKKOS_GPU if (ExecutionSpaceFromDevice::space == Device) { int team_size = atoms_per_bin*factor; int team_size_max = Kokkos::TeamPolicy(team_size,Kokkos::AUTO).team_size_max(f,Kokkos::ParallelForTag()); @@ -607,7 +608,6 @@ void NeighborKokkosExecute::build_ItemGPU(typename Kokkos::TeamPolic other_id[MY_II] = i; #if defined(KOKKOS_ENABLE_CUDA) || defined(KOKKOS_ENABLE_HIP) int test = (__syncthreads_count(i >= 0 && i <= nlocal) == 0); - if (test) return; #elif defined(KOKKOS_ENABLE_SYCL) int not_done = (i >= 0 && i <= nlocal); @@ -1059,7 +1059,6 @@ void NeighborKokkosExecute::build_ItemSizeGPU(typename Kokkos::TeamP other_id[MY_II] = i; #if defined(KOKKOS_ENABLE_CUDA) || defined(KOKKOS_ENABLE_HIP) int test = (__syncthreads_count(i >= 0 && i <= nlocal) == 0); - if (test) return; #elif defined(KOKKOS_ENABLE_SYCL) int not_done = (i >= 0 && i <= nlocal); From 0901540fdadc2242566c01daa2aa006cf04c5936 Mon Sep 17 00:00:00 2001 From: Stan Moore Date: Fri, 22 Oct 2021 16:41:26 +0000 Subject: [PATCH 251/372] Remove deprecated Kokkos code --- src/KOKKOS/kokkos_type.h | 2 +- src/KOKKOS/verlet_kokkos.cpp | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/KOKKOS/kokkos_type.h b/src/KOKKOS/kokkos_type.h index 15af1397bd..4c0dea819c 100644 --- a/src/KOKKOS/kokkos_type.h +++ b/src/KOKKOS/kokkos_type.h @@ -20,7 +20,7 @@ #include #include -#include +#include #include #include #include diff --git a/src/KOKKOS/verlet_kokkos.cpp b/src/KOKKOS/verlet_kokkos.cpp index 5e9ab757c6..14540c9ace 100644 --- a/src/KOKKOS/verlet_kokkos.cpp +++ b/src/KOKKOS/verlet_kokkos.cpp @@ -283,7 +283,7 @@ void VerletKokkos::run(int n) atomKK->sync(Device,ALL_MASK); //static double time = 0.0; - //Kokkos::Impl::Timer ktimer; + //Kokkos::Timer ktimer; timer->init_timeout(); for (int i = 0; i < n; i++) { @@ -445,7 +445,7 @@ void VerletKokkos::run(int n) if (pair_compute_flag) { atomKK->sync(force->pair->execution_space,force->pair->datamask_read); atomKK->sync(force->pair->execution_space,~(~force->pair->datamask_read|(F_MASK | ENERGY_MASK | VIRIAL_MASK))); - Kokkos::Impl::Timer ktimer; + Kokkos::Timer ktimer; force->pair->compute(eflag,vflag); atomKK->modified(force->pair->execution_space,force->pair->datamask_modify); atomKK->modified(force->pair->execution_space,~(~force->pair->datamask_modify|(F_MASK | ENERGY_MASK | VIRIAL_MASK))); From 4edd5238b1cd4074bb80aac249f9e0a77f221a41 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Fri, 22 Oct 2021 13:21:45 -0400 Subject: [PATCH 252/372] improve putenv() and unsetenv() implementation on windows by using _putenv_s() --- src/platform.cpp | 19 ++++++++----------- 1 file changed, 8 insertions(+), 11 deletions(-) diff --git a/src/platform.cpp b/src/platform.cpp index 5e04251ca7..5c18949482 100644 --- a/src/platform.cpp +++ b/src/platform.cpp @@ -428,11 +428,11 @@ int platform::putenv(const std::string &vardef) auto found = vardef.find_first_of('='); #ifdef _WIN32 - // must assign a value to variable with _putenv() + // must assign a value to variable with _putenv_s() if (found == std::string::npos) - return _putenv(utils::strdup(vardef + "=1")); + return _putenv_s(vardef.c_str(), "1"); else - return _putenv(utils::strdup(vardef)); + return _putenv_s(vardef.substr(0, found).c_str(), vardef.substr(found+1).c_str()); #else if (found == std::string::npos) return setenv(vardef.c_str(), "", 1); @@ -449,15 +449,12 @@ int platform::putenv(const std::string &vardef) int platform::unsetenv(const std::string &variable) { if (variable.size() == 0) return -1; - #ifdef _WIN32 - // empty _putenv() definition deletes variable on Windows - // must not have an equal sign as that will result in creating an environment variable - if (variable.find_first_of('=') != std::string::npos) return -1; - auto var = utils::strdup(variable); - int rv = _putenv(var); - delete[] var; - return rv; + // emulate POSIX semantics by returning -1 on trying to unset non-existing variable + const char *ptr = getenv(variable.c_str()); + if (!ptr) return -1; + // empty _putenv_s() definition deletes variable + return _putenv_s(variable.c_str(),""); #else return ::unsetenv(variable.c_str()); #endif From 89808266dd07f646711d7c4b0ad5e86ca30479a9 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Fri, 22 Oct 2021 13:46:13 -0400 Subject: [PATCH 253/372] remove obsolete file --- cmake/Modules/YAML.cmake | 47 ---------------------------------------- 1 file changed, 47 deletions(-) delete mode 100644 cmake/Modules/YAML.cmake diff --git a/cmake/Modules/YAML.cmake b/cmake/Modules/YAML.cmake deleted file mode 100644 index 77ee804111..0000000000 --- a/cmake/Modules/YAML.cmake +++ /dev/null @@ -1,47 +0,0 @@ -message(STATUS "Downloading and building YAML library") - -include(ExternalProject) -set(YAML_URL "https://pyyaml.org/download/libyaml/yaml-0.2.5.tar.gz" CACHE STRING "URL for libyaml tarball") -set(YAML_MD5 "bb15429d8fb787e7d3f1c83ae129a999" CACHE STRING "MD5 checksum of libyaml tarball") -mark_as_advanced(YAML_URL) -mark_as_advanced(YAML_MD5) - -# support cross-compilation to windows -if(CMAKE_CROSSCOMPILING AND (CMAKE_SYSTEM_NAME STREQUAL "Windows")) - if(CMAKE_SYSTEM_PROCESSOR STREQUAL "x86") - set(YAML_CROSS_HOST --host=i686-mingw64) - elseif(CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64") - set(YAML_CROSS_HOST --host=x86_64-mingw64) - else() - message(FATAL_ERROR "Unsupported cross-compilation " - " for ${CMAKE_SYSTEM_NAME}/${CMAKE_SYSTEM_PROCESSOR}" - " on ${CMAKE_HOST_SYSTEM}/${CMAKE_HOST_SYSTEM_PROCESSOR}") - endif() -endif() - -ExternalProject_Add(libyaml - URL ${YAML_URL} - URL_MD5 ${YAML_MD5} - SOURCE_DIR "${CMAKE_BINARY_DIR}/yaml-src" - BINARY_DIR "${CMAKE_BINARY_DIR}/yaml-build" - CONFIGURE_COMMAND /configure ${CONFIGURE_REQUEST_PIC} - CXX=${CMAKE_CXX_COMPILER} CC=${CMAKE_C_COMPILER} - --prefix= --disable-shared ${YAML_CROSS_HOST} - BUILD_BYPRODUCTS /lib/libyaml${CMAKE_STATIC_LIBRARY_SUFFIX} - TEST_COMMAND "") - -ExternalProject_Get_Property(libyaml INSTALL_DIR) -set(YAML_INCLUDE_DIR ${INSTALL_DIR}/include) -set(YAML_LIBRARY_DIR ${INSTALL_DIR}/lib) - -# workaround for CMake 3.10 on ubuntu 18.04 -file(MAKE_DIRECTORY ${YAML_INCLUDE_DIR}) -file(MAKE_DIRECTORY ${YAML_LIBRARY_DIR}) - -set(YAML_LIBRARY_PATH ${INSTALL_DIR}/lib/libyaml${CMAKE_STATIC_LIBRARY_SUFFIX}) - -add_library(Yaml::Yaml UNKNOWN IMPORTED) -set_target_properties(Yaml::Yaml PROPERTIES - IMPORTED_LOCATION ${YAML_LIBRARY_PATH} - INTERFACE_INCLUDE_DIRECTORIES ${YAML_INCLUDE_DIR}) -add_dependencies(Yaml::Yaml libyaml) From b6c610ada2ab709b95852b5351a7d78b6a6c6852 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Fri, 22 Oct 2021 14:12:19 -0400 Subject: [PATCH 254/372] tweak epsilon for portability to MSVC compilers --- unittest/force-styles/tests/atomic-pair-eim.yaml | 2 +- unittest/force-styles/tests/manybody-pair-meam.yaml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/unittest/force-styles/tests/atomic-pair-eim.yaml b/unittest/force-styles/tests/atomic-pair-eim.yaml index 4814029a3c..e705e88614 100644 --- a/unittest/force-styles/tests/atomic-pair-eim.yaml +++ b/unittest/force-styles/tests/atomic-pair-eim.yaml @@ -1,7 +1,7 @@ --- lammps_version: 10 Feb 2021 date_generated: Fri Feb 26 23:09:02 2021 -epsilon: 1e-11 +epsilon: 2e-11 prerequisites: ! | pair eim pre_commands: ! "" diff --git a/unittest/force-styles/tests/manybody-pair-meam.yaml b/unittest/force-styles/tests/manybody-pair-meam.yaml index 4237f5ffc2..fed2a060cf 100644 --- a/unittest/force-styles/tests/manybody-pair-meam.yaml +++ b/unittest/force-styles/tests/manybody-pair-meam.yaml @@ -1,7 +1,7 @@ --- lammps_version: 10 Feb 2021 date_generated: Fri Feb 26 23:09:15 2021 -epsilon: 7.5e-12 +epsilon: 1e-10 prerequisites: ! | pair meam pre_commands: ! | From 7960a2d7d2c51cb80c5db30ad22f66ea6fd08067 Mon Sep 17 00:00:00 2001 From: Stan Moore Date: Fri, 22 Oct 2021 19:13:31 +0000 Subject: [PATCH 255/372] Fix link error with fix_acks2_reaxff_kokkos --- src/KOKKOS/fix_acks2_reaxff_kokkos.cpp | 2 +- src/KOKKOS/fix_acks2_reaxff_kokkos.h | 4 ++-- src/KOKKOS/fix_qeq_reaxff_kokkos.h | 3 +-- 3 files changed, 4 insertions(+), 5 deletions(-) diff --git a/src/KOKKOS/fix_acks2_reaxff_kokkos.cpp b/src/KOKKOS/fix_acks2_reaxff_kokkos.cpp index 63fb1e7a53..8379dc8f46 100644 --- a/src/KOKKOS/fix_acks2_reaxff_kokkos.cpp +++ b/src/KOKKOS/fix_acks2_reaxff_kokkos.cpp @@ -1966,7 +1966,7 @@ void FixACKS2ReaxFFKokkos::get_chi_field() namespace LAMMPS_NS { template class FixACKS2ReaxFFKokkos; -#ifdef KOKKOS_ENABLE_CUDA +#ifdef LMP_KOKKOS_GPU template class FixACKS2ReaxFFKokkos; #endif } diff --git a/src/KOKKOS/fix_acks2_reaxff_kokkos.h b/src/KOKKOS/fix_acks2_reaxff_kokkos.h index 67c737498f..bce90e97a3 100644 --- a/src/KOKKOS/fix_acks2_reaxff_kokkos.h +++ b/src/KOKKOS/fix_acks2_reaxff_kokkos.h @@ -299,7 +299,7 @@ struct FixACKS2ReaxFFKokkosComputeHFunctor { c.template compute_h_team(team, atoms_per_team, vector_length); } - size_t team_shmem_size(int team_size) const { + size_t team_shmem_size(int /*team_size*/) const { size_t shmem_size = Kokkos::View::shmem_size( atoms_per_team) + // s_ilist @@ -347,7 +347,7 @@ struct FixACKS2ReaxFFKokkosComputeXFunctor { c.template compute_x_team(team, atoms_per_team, vector_length); } - size_t team_shmem_size(int team_size) const { + size_t team_shmem_size(int /*team_size*/) const { size_t shmem_size = Kokkos::View::shmem_size( atoms_per_team) + // s_ilist diff --git a/src/KOKKOS/fix_qeq_reaxff_kokkos.h b/src/KOKKOS/fix_qeq_reaxff_kokkos.h index 3256e56aef..fc4f4bafd5 100644 --- a/src/KOKKOS/fix_qeq_reaxff_kokkos.h +++ b/src/KOKKOS/fix_qeq_reaxff_kokkos.h @@ -30,7 +30,6 @@ FixStyle(qeq/reax/kk/host,FixQEqReaxFFKokkos); #include "kokkos_type.h" #include "neigh_list.h" #include "neigh_list_kokkos.h" -#include "kokkos_base.h" namespace LAMMPS_NS { @@ -42,7 +41,7 @@ struct TagFixQEqReaxFFPackForwardComm {}; struct TagFixQEqReaxFFUnpackForwardComm {}; template -class FixQEqReaxFFKokkos : public FixQEqReaxFF, public KokkosBase { +class FixQEqReaxFFKokkos : public FixQEqReaxFF { public: typedef DeviceType device_type; typedef ArrayTypes AT; From c08093f768e6b92c386fa13854c3f40b01bec311 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Fri, 22 Oct 2021 16:00:01 -0400 Subject: [PATCH 256/372] modernize, avoid static buffers, use utility functions, remove debug code --- src/MANIFOLD/fix_nve_manifold_rattle.cpp | 14 ++-- src/MANIFOLD/fix_nvt_manifold_rattle.cpp | 28 +++----- src/MANIFOLD/manifold_gaussian_bump.cpp | 34 +-------- src/MANIFOLD/manifold_gaussian_bump.h | 2 - src/MANIFOLD/manifold_thylakoid.cpp | 88 +++++------------------- src/MANIFOLD/manifold_thylakoid.h | 1 - 6 files changed, 35 insertions(+), 132 deletions(-) diff --git a/src/MANIFOLD/fix_nve_manifold_rattle.cpp b/src/MANIFOLD/fix_nve_manifold_rattle.cpp index b4644a1350..1f0cc95b94 100644 --- a/src/MANIFOLD/fix_nve_manifold_rattle.cpp +++ b/src/MANIFOLD/fix_nve_manifold_rattle.cpp @@ -140,10 +140,8 @@ FixNVEManifoldRattle::FixNVEManifoldRattle( LAMMPS *lmp, int &narg, char **arg, if (strcmp(arg[argi], "every") == 0) { nevery = utils::inumeric(FLERR,arg[argi+1],false,lmp); next_output = update->ntimestep + nevery; - if (comm->me == 0) { - fprintf(screen,"Outputting every %d steps, next is %d\n", - nevery, next_output); - } + if (comm->me == 0) + utils::logmesg(lmp,"Outputting every {} steps, next is {}\n",nevery, next_output); argi += 2; } else if (error_on_unknown_keyword) { error->all(FLERR,"Error parsing arg \"{}\".\n",arg[argi]); @@ -211,11 +209,9 @@ void FixNVEManifoldRattle::print_stats( const char *header ) double inv_tdiff = 1.0/( static_cast(ntimestep) - stats.last_out ); stats.last_out = ntimestep; - fprintf(screen, "%s stats for time step " BIGINT_FORMAT " on %d atoms:\n", - header, ntimestep, stats.natoms); - fprintf(screen, " iters/atom: x = %f, v = %f, dofs removed %d", - x_iters * inv_tdiff, v_iters * inv_tdiff, stats.dofs_removed); - fprintf(screen,"\n"); + utils::logmesg(lmp, "{} stats for time step {} on {} atoms:\n", header, ntimestep, stats.natoms); + utils::logmesg(lmp, " iters/atom: x = {}, v = {}, dofs removed = {}\n", + x_iters * inv_tdiff, v_iters * inv_tdiff, stats.dofs_removed); } stats.x_iters_per_atom = 0; diff --git a/src/MANIFOLD/fix_nvt_manifold_rattle.cpp b/src/MANIFOLD/fix_nvt_manifold_rattle.cpp index f675cdff73..0dcc233b54 100644 --- a/src/MANIFOLD/fix_nvt_manifold_rattle.cpp +++ b/src/MANIFOLD/fix_nvt_manifold_rattle.cpp @@ -32,21 +32,21 @@ ------------------------------------------------------------------------- */ - #include "fix_nvt_manifold_rattle.h" -#include -#include + #include "atom.h" -#include "force.h" -#include "update.h" -#include "error.h" -#include "group.h" #include "citeme.h" -#include "modify.h" #include "compute.h" +#include "error.h" +#include "force.h" +#include "group.h" +#include "modify.h" +#include "update.h" #include "manifold.h" +#include +#include using namespace LAMMPS_NS; using namespace FixConst; @@ -115,9 +115,7 @@ FixNVTManifoldRattle::FixNVTManifoldRattle(LAMMPS *lmp, int narg, char **arg, mtchain = utils::inumeric(FLERR, arg[argi+1],false,lmp); argi += 2; } else if (error_on_unknown_keyword) { - char msg[2048]; - sprintf(msg,"Error parsing arg \"%s\".\n", arg[argi]); - error->all(FLERR, msg); + error->all(FLERR, "Error parsing arg \"{}\".\n", arg[argi]); } else { argi += 1; } @@ -271,12 +269,8 @@ void FixNVTManifoldRattle::nhc_temp_integrate() factor_eta = exp(-dthalf*eta_dot[0]); - if (factor_eta == 0) { - char msg[2048]; - sprintf(msg, "WTF, factor_eta is 0! dthalf = %f, eta_dot[0] = %f", - dthalf, eta_dot[0]); - error->all(FLERR,msg); - } + if (factor_eta == 0) + error->all(FLERR, "factor_eta is 0! dthalf = {}, eta_dot[0] = {}", dthalf, eta_dot[0]); nh_v_temp(); diff --git a/src/MANIFOLD/manifold_gaussian_bump.cpp b/src/MANIFOLD/manifold_gaussian_bump.cpp index 5eb2b08504..1483ff7489 100644 --- a/src/MANIFOLD/manifold_gaussian_bump.cpp +++ b/src/MANIFOLD/manifold_gaussian_bump.cpp @@ -67,9 +67,7 @@ public: double get_t_from_x( double xx ) const { if (xx < x0 || xx > x1) { - char msg[2048]; - sprintf(msg, "x ( %g ) out of bounds [%g, %g]", xx, x0, x1 ); - err->one(FLERR, msg); + err->one(FLERR,"x ( {} ) out of bounds [{}, {}]", xx, x0, x1 ); } // Newton iterate to get right t. @@ -271,8 +269,6 @@ void manifold_gaussian_bump::post_param_init() make_lut(); - - // test_lut(); } @@ -360,31 +356,3 @@ void manifold_gaussian_bump::lut_get_z_and_zp( double rr, double &zz, zz = zleft * fmin + zright * frac; zzp = zpleft * fmin + zpright * frac; } - - -void manifold_gaussian_bump::test_lut() -{ - double x[3], nn[3]; - if (comm->me != 0) return; - - FILE *fp = fopen( "test_lut_gaussian.dat", "w" ); - double dx = 0.1; - for (double xx = 0; xx < 20; xx += dx) { - x[0] = xx; - x[1] = 0.0; - x[2] = 0.0; - double gg = g( x ); - n( x, nn ); - double taper_z; - if (xx <= rc1) { - taper_z = gaussian_bump(xx); - } else if (xx < rc2) { - taper_z = lut_get_z( xx ); - } else { - taper_z = 0.0; - } - fprintf( fp, "%g %g %g %g %g %g %g\n", xx, gaussian_bump(xx), taper_z, - gg, nn[0], nn[1], nn[2] ); - } - fclose(fp); -} diff --git a/src/MANIFOLD/manifold_gaussian_bump.h b/src/MANIFOLD/manifold_gaussian_bump.h index 8c72db080f..4671b189df 100644 --- a/src/MANIFOLD/manifold_gaussian_bump.h +++ b/src/MANIFOLD/manifold_gaussian_bump.h @@ -86,8 +86,6 @@ namespace user_manifold { double lut_get_zp(double rr) const; void lut_get_z_and_zp(double rr, double &zz, double &zzp) const; - void test_lut(); - double taper(double); double taper_der(double); }; diff --git a/src/MANIFOLD/manifold_thylakoid.cpp b/src/MANIFOLD/manifold_thylakoid.cpp index b7004cac3a..5ab90ce08e 100644 --- a/src/MANIFOLD/manifold_thylakoid.cpp +++ b/src/MANIFOLD/manifold_thylakoid.cpp @@ -34,8 +34,6 @@ manifold_thylakoid::manifold_thylakoid( LAMMPS *lmp, int /*narg*/, char ** /*arg // fix should call post_param_init(); } - - manifold_thylakoid::~manifold_thylakoid() { for (std::size_t i = 0; i < parts.size(); ++i) { @@ -43,8 +41,6 @@ manifold_thylakoid::~manifold_thylakoid() } } - - void manifold_thylakoid::post_param_init() { // Set coefficients: @@ -59,52 +55,21 @@ void manifold_thylakoid::post_param_init() LB = params[1]; lB = params[2]; - if (comm->me == 0) { - fprintf(screen,"My params are now: lT = %f, LT = %f, pad = %f, " - "wB = %f, LB = %f, lB = %f\n", lT, LT, pad, wB, LB, lB ); - fprintf(screen,"Calling init_domains() from post_param_init().\n"); - } init_domains(); - checkup(); } -void manifold_thylakoid::checkup() -{ - if (comm->me == 0) { - fprintf(screen,"This is checkup of thylakoid %p\n", this); - fprintf(screen,"I have %ld parts. They are:\n", parts.size()); - for (int i = 0; i < (int)parts.size(); ++i) { - fprintf(screen, "[%f, %f] x [%f, %f] x [%f, %f]\n", - parts[i]->xlo, parts[i]->xhi, - parts[i]->ylo, parts[i]->yhi, - parts[i]->zlo, parts[i]->zhi ); - } - fprintf(screen,"My params are:\n"); - for (int i = 0; i < NPARAMS; ++i) { - fprintf(screen,"%f\n", params[i]); - } - } -} - - double manifold_thylakoid::g( const double *x ) { int err = 0; std::size_t idx; thyla_part *p = get_thyla_part(x,&err,&idx); - if (err) { - char msg[2048]; - sprintf(msg,"Error getting thyla_part for x = (%f, %f, %f)",x[0],x[1],x[2]); - error->one(FLERR,msg); - } + if (err) error->one(FLERR,"Error getting thyla_part for x = ({}, {}, {})",x[0],x[1],x[2]); + double con_val = p->g(x); if (std::isfinite(con_val)) { return con_val; } else { - char msg[2048]; - sprintf(msg,"Error, thyla_part of type %d returned %f as constraint val!", - p->type, con_val); - error->one(FLERR,msg); + error->one(FLERR,"Error, thyla_part of type {} returned {} as constraint val!", p->type, con_val); return 0; } } @@ -114,20 +79,14 @@ void manifold_thylakoid::n( const double *x, double *n ) int err = 0; std::size_t idx; thyla_part *p = get_thyla_part(x,&err,&idx); - if (err) { - char msg[2048]; - sprintf(msg,"Error getting thyla_part for x = (%f, %f, %f)",x[0],x[1],x[2]); - error->one(FLERR,msg); - } + if (err) + error->one(FLERR,"Error getting thyla_part for x = ({}, {}, {})",x[0],x[1],x[2]); p->n(x,n); if (std::isfinite(n[0]) && std::isfinite(n[1]) && std::isfinite(n[2])) { return; - } else { - char msg[2048]; - sprintf(msg,"Error, thyla_part of type %d returned (%f,%f,%f) as gradient!", - p->type, n[0], n[1], n[2]); - error->one(FLERR,msg); - } + } else + error->one(FLERR,"thyla_part of type {} returned ({},{},{}) as gradient!", + p->type, n[0], n[1], n[2]); } thyla_part *manifold_thylakoid::get_thyla_part( const double *x, int * /*err_flag*/, std::size_t *idx ) @@ -140,9 +99,7 @@ thyla_part *manifold_thylakoid::get_thyla_part( const double *x, int * /*err_fla return p; } } - char msg[2048]; - sprintf(msg,"Could not find thyla_part for x = (%f,%f,%f)", x[0],x[1],x[2]); - error->one(FLERR,msg); + error->one(FLERR,"Could not find thyla_part for x = ({},{},{})", x[0],x[1],x[2]); return nullptr; } @@ -153,12 +110,9 @@ thyla_part *manifold_thylakoid::get_thyla_part( const double *x, int * /*err_fla void manifold_thylakoid::init_domains() { - if (wB + 2*lB > LT) { - char msg[2048]; - sprintf(msg,"LT = %f not large enough to accommodate bridge with " - "wB = %f and lB = %f! %f > %f\n", LT, wB, lB, wB + 2*lB, LT); - error->one(FLERR,msg); - } + if (wB + 2*lB > LT) + error->one(FLERR,"LT = {} not large enough to accommodate bridge with " + "wB = {} and lB = {}! {} > {}\n", LT, wB, lB, wB + 2*lB, LT); // Determine some constant coordinates: x0 = -( 0.5*LB + lB + lT + LT + lT + pad); @@ -375,12 +329,9 @@ void manifold_thylakoid::init_domains() parts.push_back(p); // Check if this plane lines up with bl: - if (fabs(plr.pt[0] - bl.pt[0] + lB) > 1e-8) { - char msg[2048]; - sprintf(msg,"Origins of plane left right and bridge left misaligned! %f != %f!\n", - plr.pt[0], bl.pt[0] - lB ); - error->one(FLERR,msg); - } + if (fabs(plr.pt[0] - bl.pt[0] + lB) > 1e-8) + error->one(FLERR,"Origins of plane left right and bridge left misaligned! {} != {}!\n", + plr.pt[0], bl.pt[0] - lB ); // Now, for the right stack, you can mirror the other... // To mirror them you need to invert lo[0] and hi[0] and flip their sign. @@ -428,12 +379,9 @@ void manifold_thylakoid::init_domains() set_domain(p, prr.lo, prr.hi); parts.push_back(p); - if (fabs(prr.pt[0] - br.pt[0] - lB) > 1e-8) { - char msg[2048]; - sprintf(msg,"Origins of plane left right and bridge left misaligned! %f != %f!\n", - prr.pt[0], br.pt[0] + lB); - error->one(FLERR,msg); - } + if (fabs(prr.pt[0] - br.pt[0] - lB) > 1e-8) + error->one(FLERR,"Origins of plane left right and bridge left misaligned! {} != {}!\n", + prr.pt[0], br.pt[0] + lB); } diff --git a/src/MANIFOLD/manifold_thylakoid.h b/src/MANIFOLD/manifold_thylakoid.h index 5470d722f9..0236c3bf54 100644 --- a/src/MANIFOLD/manifold_thylakoid.h +++ b/src/MANIFOLD/manifold_thylakoid.h @@ -37,7 +37,6 @@ namespace user_manifold { virtual int nparams() { return NPARAMS; } virtual void post_param_init(); - virtual void checkup(); // Some diagnostics... private: void init_domains(); From 47eab736bb96c9feffccdade870da7c0a2e98846 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Fri, 22 Oct 2021 16:14:06 -0400 Subject: [PATCH 257/372] use anonymous namespace to manage visibility of multiple copies of parse_error class --- src/EXTRA-FIX/fix_ttm.cpp | 12 ++++++++++++ src/EXTRA-FIX/fix_ttm.h | 8 -------- src/EXTRA-FIX/fix_ttm_grid.cpp | 12 ++++++++++++ src/EXTRA-FIX/fix_ttm_mod.cpp | 12 ++++++++++++ src/EXTRA-FIX/fix_ttm_mod.h | 8 -------- src/QEQ/fix_qeq.cpp | 14 ++++++++------ src/REAXFF/fix_acks2_reaxff.cpp | 14 ++++++++------ src/REAXFF/fix_qeq_reaxff.cpp | 14 ++++++++------ src/REAXFF/reaxff_control.cpp | 16 +++++++++------- src/REAXFF/reaxff_ffield.cpp | 6 ++++-- 10 files changed, 73 insertions(+), 43 deletions(-) diff --git a/src/EXTRA-FIX/fix_ttm.cpp b/src/EXTRA-FIX/fix_ttm.cpp index 13fbd4aff4..4c0d2e9cd5 100644 --- a/src/EXTRA-FIX/fix_ttm.cpp +++ b/src/EXTRA-FIX/fix_ttm.cpp @@ -46,6 +46,18 @@ using namespace FixConst; static constexpr int OFFSET = 16384; static constexpr double SHIFT = 0.0; +// helper class + +namespace { + class parser_error : public std::exception { + std::string message; + + public: + parser_error(const std::string &mesg) { message = mesg; } + const char *what() const noexcept { return message.c_str(); } + }; +} + /* ---------------------------------------------------------------------- */ FixTTM::FixTTM(LAMMPS *lmp, int narg, char **arg) : diff --git a/src/EXTRA-FIX/fix_ttm.h b/src/EXTRA-FIX/fix_ttm.h index 1a2e9fb24a..da782b1f5a 100644 --- a/src/EXTRA-FIX/fix_ttm.h +++ b/src/EXTRA-FIX/fix_ttm.h @@ -77,14 +77,6 @@ class FixTTM : public Fix { virtual void deallocate_grid(); virtual void read_electron_temperatures(const std::string &); virtual void write_electron_temperatures(const std::string &); - - class parser_error : public std::exception { - std::string message; - - public: - parser_error(const std::string &mesg) { message = mesg; } - const char *what() const noexcept { return message.c_str(); } - }; }; } // namespace LAMMPS_NS diff --git a/src/EXTRA-FIX/fix_ttm_grid.cpp b/src/EXTRA-FIX/fix_ttm_grid.cpp index 7b3f434907..b42b876a3b 100644 --- a/src/EXTRA-FIX/fix_ttm_grid.cpp +++ b/src/EXTRA-FIX/fix_ttm_grid.cpp @@ -41,6 +41,18 @@ static constexpr int MAXLINE = 256; static constexpr int CHUNK = 1024; static constexpr int OFFSET = 16384; +// helper class + +namespace { + class parser_error : public std::exception { + std::string message; + + public: + parser_error(const std::string &mesg) { message = mesg; } + const char *what() const noexcept { return message.c_str(); } + }; +} + /* ---------------------------------------------------------------------- */ FixTTMGrid::FixTTMGrid(LAMMPS *lmp, int narg, char **arg) : diff --git a/src/EXTRA-FIX/fix_ttm_mod.cpp b/src/EXTRA-FIX/fix_ttm_mod.cpp index 0aef2ec4ff..d39d50c9e5 100644 --- a/src/EXTRA-FIX/fix_ttm_mod.cpp +++ b/src/EXTRA-FIX/fix_ttm_mod.cpp @@ -41,6 +41,18 @@ using namespace LAMMPS_NS; using namespace FixConst; using namespace MathConst; +// helper class + +namespace { + class parser_error : public std::exception { + std::string message; + + public: + parser_error(const std::string &mesg) { message = mesg; } + const char *what() const noexcept { return message.c_str(); } + }; +} + // OFFSET avoids outside-of-box atoms being rounded to grid pts incorrectly // SHIFT = 0.0 assigns atoms to lower-left grid pt // SHIFT = 0.5 assigns atoms to nearest grid pt diff --git a/src/EXTRA-FIX/fix_ttm_mod.h b/src/EXTRA-FIX/fix_ttm_mod.h index f26f270e7a..21eb0efcaa 100644 --- a/src/EXTRA-FIX/fix_ttm_mod.h +++ b/src/EXTRA-FIX/fix_ttm_mod.h @@ -87,14 +87,6 @@ class FixTTMMod : public Fix { void read_parameters(const std::string &); void read_electron_temperatures(const std::string &); void write_electron_temperatures(const std::string &); - - class parser_error : public std::exception { - std::string message; - - public: - parser_error(const std::string &mesg) { message = mesg; } - const char *what() const noexcept { return message.c_str(); } - }; }; } // namespace LAMMPS_NS diff --git a/src/QEQ/fix_qeq.cpp b/src/QEQ/fix_qeq.cpp index 79205f7c81..b43afb00d6 100644 --- a/src/QEQ/fix_qeq.cpp +++ b/src/QEQ/fix_qeq.cpp @@ -42,12 +42,14 @@ using namespace FixConst; #define MAXLINE 1024 -class parser_error : public std::exception { - std::string message; -public: - parser_error(const std::string &mesg) { message = mesg; } - const char *what() const noexcept { return message.c_str(); } -}; +namespace { + class parser_error : public std::exception { + std::string message; + public: + parser_error(const std::string &mesg) { message = mesg; } + const char *what() const noexcept { return message.c_str(); } + }; +} /* ---------------------------------------------------------------------- */ diff --git a/src/REAXFF/fix_acks2_reaxff.cpp b/src/REAXFF/fix_acks2_reaxff.cpp index f19b31f9ed..ec14ed72b2 100644 --- a/src/REAXFF/fix_acks2_reaxff.cpp +++ b/src/REAXFF/fix_acks2_reaxff.cpp @@ -43,12 +43,14 @@ using namespace LAMMPS_NS; using namespace FixConst; -class parser_error : public std::exception { - std::string message; -public: - parser_error(const std::string &mesg) { message = mesg; } - const char *what() const noexcept { return message.c_str(); } -}; +namespace { + class parser_error : public std::exception { + std::string message; + public: + parser_error(const std::string &mesg) { message = mesg; } + const char *what() const noexcept { return message.c_str(); } + }; +} static const char cite_fix_acks2_reax[] = "fix acks2/reaxff command:\n\n" diff --git a/src/REAXFF/fix_qeq_reaxff.cpp b/src/REAXFF/fix_qeq_reaxff.cpp index f0ba651a26..89ee3f338f 100644 --- a/src/REAXFF/fix_qeq_reaxff.cpp +++ b/src/REAXFF/fix_qeq_reaxff.cpp @@ -49,12 +49,14 @@ using namespace LAMMPS_NS; using namespace FixConst; -class parser_error : public std::exception { - std::string message; -public: - parser_error(const std::string &mesg) { message = mesg; } - const char *what() const noexcept { return message.c_str(); } -}; +namespace { + class parser_error : public std::exception { + std::string message; + public: + parser_error(const std::string &mesg) { message = mesg; } + const char *what() const noexcept { return message.c_str(); } + }; +} static constexpr double EV_TO_KCAL_PER_MOL = 14.4; static constexpr double SMALL = 1.0e-14; diff --git a/src/REAXFF/reaxff_control.cpp b/src/REAXFF/reaxff_control.cpp index 2020e8a5c3..90f12b2031 100644 --- a/src/REAXFF/reaxff_control.cpp +++ b/src/REAXFF/reaxff_control.cpp @@ -40,6 +40,15 @@ using LAMMPS_NS::utils::sfgets; using LAMMPS_NS::utils::logmesg; using LAMMPS_NS::ValueTokenizer; +namespace { + class parser_error : public std::exception { + std::string message; + public: + parser_error(const std::string &mesg) { message = mesg; } + const char *what() const noexcept { return message.c_str(); } + }; +} + namespace ReaxFF { static std::unordered_set inactive_keywords = { "ensemble_type", "nsteps", "dt", "proc_by_dim", "random_vel", @@ -54,13 +63,6 @@ namespace ReaxFF { "energy_update_freq", "atom_info", "atom_velocities", "atom_forces", "bond_info", "angle_info" }; - class parser_error : public std::exception { - std::string message; - public: - parser_error(const std::string &mesg) { message = mesg; } - const char *what() const noexcept { return message.c_str(); } - }; - // NOTE: this function is run on MPI rank 0 only void Read_Control_File(const char *control_file, control_params *control) diff --git a/src/REAXFF/reaxff_ffield.cpp b/src/REAXFF/reaxff_ffield.cpp index 605e077724..db4a63972e 100644 --- a/src/REAXFF/reaxff_ffield.cpp +++ b/src/REAXFF/reaxff_ffield.cpp @@ -41,14 +41,16 @@ using LAMMPS_NS::utils::open_potential; using LAMMPS_NS::utils::getsyserror; using LAMMPS_NS::utils::uppercase; -namespace ReaxFF { - +namespace { class parser_error : public std::exception { std::string message; public: parser_error(const std::string &mesg) { message = mesg; } const char *what() const noexcept { return message.c_str(); } }; +} + +namespace ReaxFF { void Read_Force_Field(const char *filename, reax_interaction *reax, control_params *control, MPI_Comm world) From 7abcdc8c4c7aad517a7e32136f76b03dabedd1fa Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Fri, 22 Oct 2021 16:14:06 -0400 Subject: [PATCH 258/372] use anonymous namespace to manage visibility of multiple copies of parse_error class --- src/EXTRA-FIX/fix_ttm.cpp | 12 ++++++++++++ src/EXTRA-FIX/fix_ttm.h | 8 -------- src/EXTRA-FIX/fix_ttm_grid.cpp | 12 ++++++++++++ src/EXTRA-FIX/fix_ttm_mod.cpp | 12 ++++++++++++ src/EXTRA-FIX/fix_ttm_mod.h | 8 -------- src/QEQ/fix_qeq.cpp | 14 ++++++++------ src/REAXFF/fix_acks2_reaxff.cpp | 14 ++++++++------ src/REAXFF/fix_qeq_reaxff.cpp | 14 ++++++++------ src/REAXFF/reaxff_control.cpp | 16 +++++++++------- src/REAXFF/reaxff_ffield.cpp | 6 ++++-- 10 files changed, 73 insertions(+), 43 deletions(-) diff --git a/src/EXTRA-FIX/fix_ttm.cpp b/src/EXTRA-FIX/fix_ttm.cpp index 13fbd4aff4..4c0d2e9cd5 100644 --- a/src/EXTRA-FIX/fix_ttm.cpp +++ b/src/EXTRA-FIX/fix_ttm.cpp @@ -46,6 +46,18 @@ using namespace FixConst; static constexpr int OFFSET = 16384; static constexpr double SHIFT = 0.0; +// helper class + +namespace { + class parser_error : public std::exception { + std::string message; + + public: + parser_error(const std::string &mesg) { message = mesg; } + const char *what() const noexcept { return message.c_str(); } + }; +} + /* ---------------------------------------------------------------------- */ FixTTM::FixTTM(LAMMPS *lmp, int narg, char **arg) : diff --git a/src/EXTRA-FIX/fix_ttm.h b/src/EXTRA-FIX/fix_ttm.h index 1a2e9fb24a..da782b1f5a 100644 --- a/src/EXTRA-FIX/fix_ttm.h +++ b/src/EXTRA-FIX/fix_ttm.h @@ -77,14 +77,6 @@ class FixTTM : public Fix { virtual void deallocate_grid(); virtual void read_electron_temperatures(const std::string &); virtual void write_electron_temperatures(const std::string &); - - class parser_error : public std::exception { - std::string message; - - public: - parser_error(const std::string &mesg) { message = mesg; } - const char *what() const noexcept { return message.c_str(); } - }; }; } // namespace LAMMPS_NS diff --git a/src/EXTRA-FIX/fix_ttm_grid.cpp b/src/EXTRA-FIX/fix_ttm_grid.cpp index 7b3f434907..b42b876a3b 100644 --- a/src/EXTRA-FIX/fix_ttm_grid.cpp +++ b/src/EXTRA-FIX/fix_ttm_grid.cpp @@ -41,6 +41,18 @@ static constexpr int MAXLINE = 256; static constexpr int CHUNK = 1024; static constexpr int OFFSET = 16384; +// helper class + +namespace { + class parser_error : public std::exception { + std::string message; + + public: + parser_error(const std::string &mesg) { message = mesg; } + const char *what() const noexcept { return message.c_str(); } + }; +} + /* ---------------------------------------------------------------------- */ FixTTMGrid::FixTTMGrid(LAMMPS *lmp, int narg, char **arg) : diff --git a/src/EXTRA-FIX/fix_ttm_mod.cpp b/src/EXTRA-FIX/fix_ttm_mod.cpp index 0aef2ec4ff..d39d50c9e5 100644 --- a/src/EXTRA-FIX/fix_ttm_mod.cpp +++ b/src/EXTRA-FIX/fix_ttm_mod.cpp @@ -41,6 +41,18 @@ using namespace LAMMPS_NS; using namespace FixConst; using namespace MathConst; +// helper class + +namespace { + class parser_error : public std::exception { + std::string message; + + public: + parser_error(const std::string &mesg) { message = mesg; } + const char *what() const noexcept { return message.c_str(); } + }; +} + // OFFSET avoids outside-of-box atoms being rounded to grid pts incorrectly // SHIFT = 0.0 assigns atoms to lower-left grid pt // SHIFT = 0.5 assigns atoms to nearest grid pt diff --git a/src/EXTRA-FIX/fix_ttm_mod.h b/src/EXTRA-FIX/fix_ttm_mod.h index f26f270e7a..21eb0efcaa 100644 --- a/src/EXTRA-FIX/fix_ttm_mod.h +++ b/src/EXTRA-FIX/fix_ttm_mod.h @@ -87,14 +87,6 @@ class FixTTMMod : public Fix { void read_parameters(const std::string &); void read_electron_temperatures(const std::string &); void write_electron_temperatures(const std::string &); - - class parser_error : public std::exception { - std::string message; - - public: - parser_error(const std::string &mesg) { message = mesg; } - const char *what() const noexcept { return message.c_str(); } - }; }; } // namespace LAMMPS_NS diff --git a/src/QEQ/fix_qeq.cpp b/src/QEQ/fix_qeq.cpp index 79205f7c81..b43afb00d6 100644 --- a/src/QEQ/fix_qeq.cpp +++ b/src/QEQ/fix_qeq.cpp @@ -42,12 +42,14 @@ using namespace FixConst; #define MAXLINE 1024 -class parser_error : public std::exception { - std::string message; -public: - parser_error(const std::string &mesg) { message = mesg; } - const char *what() const noexcept { return message.c_str(); } -}; +namespace { + class parser_error : public std::exception { + std::string message; + public: + parser_error(const std::string &mesg) { message = mesg; } + const char *what() const noexcept { return message.c_str(); } + }; +} /* ---------------------------------------------------------------------- */ diff --git a/src/REAXFF/fix_acks2_reaxff.cpp b/src/REAXFF/fix_acks2_reaxff.cpp index f19b31f9ed..ec14ed72b2 100644 --- a/src/REAXFF/fix_acks2_reaxff.cpp +++ b/src/REAXFF/fix_acks2_reaxff.cpp @@ -43,12 +43,14 @@ using namespace LAMMPS_NS; using namespace FixConst; -class parser_error : public std::exception { - std::string message; -public: - parser_error(const std::string &mesg) { message = mesg; } - const char *what() const noexcept { return message.c_str(); } -}; +namespace { + class parser_error : public std::exception { + std::string message; + public: + parser_error(const std::string &mesg) { message = mesg; } + const char *what() const noexcept { return message.c_str(); } + }; +} static const char cite_fix_acks2_reax[] = "fix acks2/reaxff command:\n\n" diff --git a/src/REAXFF/fix_qeq_reaxff.cpp b/src/REAXFF/fix_qeq_reaxff.cpp index f0ba651a26..89ee3f338f 100644 --- a/src/REAXFF/fix_qeq_reaxff.cpp +++ b/src/REAXFF/fix_qeq_reaxff.cpp @@ -49,12 +49,14 @@ using namespace LAMMPS_NS; using namespace FixConst; -class parser_error : public std::exception { - std::string message; -public: - parser_error(const std::string &mesg) { message = mesg; } - const char *what() const noexcept { return message.c_str(); } -}; +namespace { + class parser_error : public std::exception { + std::string message; + public: + parser_error(const std::string &mesg) { message = mesg; } + const char *what() const noexcept { return message.c_str(); } + }; +} static constexpr double EV_TO_KCAL_PER_MOL = 14.4; static constexpr double SMALL = 1.0e-14; diff --git a/src/REAXFF/reaxff_control.cpp b/src/REAXFF/reaxff_control.cpp index 2020e8a5c3..90f12b2031 100644 --- a/src/REAXFF/reaxff_control.cpp +++ b/src/REAXFF/reaxff_control.cpp @@ -40,6 +40,15 @@ using LAMMPS_NS::utils::sfgets; using LAMMPS_NS::utils::logmesg; using LAMMPS_NS::ValueTokenizer; +namespace { + class parser_error : public std::exception { + std::string message; + public: + parser_error(const std::string &mesg) { message = mesg; } + const char *what() const noexcept { return message.c_str(); } + }; +} + namespace ReaxFF { static std::unordered_set inactive_keywords = { "ensemble_type", "nsteps", "dt", "proc_by_dim", "random_vel", @@ -54,13 +63,6 @@ namespace ReaxFF { "energy_update_freq", "atom_info", "atom_velocities", "atom_forces", "bond_info", "angle_info" }; - class parser_error : public std::exception { - std::string message; - public: - parser_error(const std::string &mesg) { message = mesg; } - const char *what() const noexcept { return message.c_str(); } - }; - // NOTE: this function is run on MPI rank 0 only void Read_Control_File(const char *control_file, control_params *control) diff --git a/src/REAXFF/reaxff_ffield.cpp b/src/REAXFF/reaxff_ffield.cpp index 605e077724..db4a63972e 100644 --- a/src/REAXFF/reaxff_ffield.cpp +++ b/src/REAXFF/reaxff_ffield.cpp @@ -41,14 +41,16 @@ using LAMMPS_NS::utils::open_potential; using LAMMPS_NS::utils::getsyserror; using LAMMPS_NS::utils::uppercase; -namespace ReaxFF { - +namespace { class parser_error : public std::exception { std::string message; public: parser_error(const std::string &mesg) { message = mesg; } const char *what() const noexcept { return message.c_str(); } }; +} + +namespace ReaxFF { void Read_Force_Field(const char *filename, reax_interaction *reax, control_params *control, MPI_Comm world) From 6f14cbf16737a2c9e4d1ddd7cabe9ae99d9480b2 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Fri, 22 Oct 2021 16:32:02 -0400 Subject: [PATCH 259/372] Small adjustments for compiling within VS --- cmake/CMakeLists.txt | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt index c14bb16812..60b95dbb62 100644 --- a/cmake/CMakeLists.txt +++ b/cmake/CMakeLists.txt @@ -300,10 +300,12 @@ else() target_link_libraries(lmp PRIVATE mpi_stubs) target_include_directories(lmp INTERFACE $) target_compile_definitions(lmp INTERFACE $) - endif(MSVC) + endif() target_include_directories(lammps INTERFACE $) target_compile_definitions(lammps INTERFACE $) else() + target_include_directories(lammps INTERFACE $) + target_compile_definitions(lammps INTERFACE $) target_link_libraries(lammps PUBLIC mpi_stubs) endif() add_library(MPI::MPI_CXX ALIAS mpi_stubs) From 8a9117d511825b798204ed5912bac573959b30d1 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Fri, 22 Oct 2021 16:32:16 -0400 Subject: [PATCH 260/372] add configurations for intel compilers --- cmake/CMakeSettings.json | 56 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 56 insertions(+) diff --git a/cmake/CMakeSettings.json b/cmake/CMakeSettings.json index 7292649afe..ee4b3c46d5 100644 --- a/cmake/CMakeSettings.json +++ b/cmake/CMakeSettings.json @@ -50,6 +50,62 @@ "type": "BOOL" } ] + }, + { + "name": "x64-Debug-OneAPI", + "generator": "Ninja", + "configurationType": "Debug", + "buildRoot": "${workspaceRoot}\\build\\${name}", + "installRoot": "${workspaceRoot}\\install\\${name}", + "cmakeCommandArgs": "-S ${workspaceRoot}\\cmake -C ${workspaceRoot}\\cmake\\presets\\windows.cmake -DENABLE_TESTING=on -DCMAKE_CXX_COMPILER=icx -DCMAKE_C_COMPILER=icx -DBUILD_MPI=off", + "buildCommandArgs": "", + "ctestCommandArgs": "", + "inheritEnvironments": [ "msvc_x64_x64" ], + "variables": [ + { + "name": "BUILD_SHARED_LIBS", + "value": "True", + "type": "BOOL" + }, + { + "name": "BUILD_TOOLS", + "value": "True", + "type": "BOOL" + }, + { + "name": "LAMMPS_EXCEPTIONS", + "value": "True", + "type": "BOOL" + } + ] + }, + { + "name": "x64-Debug-Intel", + "generator": "Ninja", + "configurationType": "Debug", + "buildRoot": "${workspaceRoot}\\build\\${name}", + "installRoot": "${workspaceRoot}\\install\\${name}", + "cmakeCommandArgs": "-S ${workspaceRoot}\\cmake -C ${workspaceRoot}\\cmake\\presets\\windows.cmake -DENABLE_TESTING=off -DCMAKE_CXX_COMPILER=icl -DCMAKE_C_COMPILER=icl -DCMAKE_Fortran_COMPILER=ifort -DBUILD_MPI=off", + "buildCommandArgs": "", + "ctestCommandArgs": "", + "inheritEnvironments": [ "msvc_x64_x64" ], + "variables": [ + { + "name": "BUILD_SHARED_LIBS", + "value": "True", + "type": "BOOL" + }, + { + "name": "BUILD_TOOLS", + "value": "True", + "type": "BOOL" + }, + { + "name": "LAMMPS_EXCEPTIONS", + "value": "True", + "type": "BOOL" + } + ] } ] } \ No newline at end of file From 71a24580b8eadcff62d11c88630d4e173941dd19 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sat, 23 Oct 2021 04:24:54 -0400 Subject: [PATCH 261/372] remove parser_error exception class ambiguity completely --- src/EXTRA-FIX/fix_ttm.cpp | 17 ++--------------- src/EXTRA-FIX/fix_ttm_grid.cpp | 16 ++-------------- src/EXTRA-FIX/fix_ttm_mod.cpp | 16 ++-------------- src/QEQ/fix_qeq.cpp | 12 ++++++------ src/REAXFF/fix_acks2_reaxff.cpp | 20 ++++++-------------- src/REAXFF/fix_qeq_reaxff.cpp | 17 +++++------------ src/REAXFF/reaxff_control.cpp | 23 +++++++++++------------ src/REAXFF/reaxff_ffield.cpp | 14 ++++++-------- src/tokenizer.h | 6 +++--- 9 files changed, 43 insertions(+), 98 deletions(-) diff --git a/src/EXTRA-FIX/fix_ttm.cpp b/src/EXTRA-FIX/fix_ttm.cpp index 4c0d2e9cd5..de4b0a4c7e 100644 --- a/src/EXTRA-FIX/fix_ttm.cpp +++ b/src/EXTRA-FIX/fix_ttm.cpp @@ -28,7 +28,6 @@ #include "random_mars.h" #include "respa.h" #include "potential_file_reader.h" -#include "tokenizer.h" #include "update.h" #include @@ -46,18 +45,6 @@ using namespace FixConst; static constexpr int OFFSET = 16384; static constexpr double SHIFT = 0.0; -// helper class - -namespace { - class parser_error : public std::exception { - std::string message; - - public: - parser_error(const std::string &mesg) { message = mesg; } - const char *what() const noexcept { return message.c_str(); } - }; -} - /* ---------------------------------------------------------------------- */ FixTTM::FixTTM(LAMMPS *lmp, int narg, char **arg) : @@ -503,10 +490,10 @@ void FixTTM::read_electron_temperatures(const std::string &filename) // check correctness of input data if ((ix < 0) || (ix >= nxgrid) || (iy < 0) || (iy >= nygrid) || (iz < 0) || (iz >= nzgrid)) - throw parser_error("Fix ttm invalid grid index in fix ttm grid file"); + throw TokenizerException("Fix ttm invalid grid index in fix ttm grid file",""); if (T_tmp < 0.0) - throw parser_error("Fix ttm electron temperatures must be > 0.0"); + throw TokenizerException("Fix ttm electron temperatures must be > 0.0",""); T_electron[iz][iy][ix] = T_tmp; T_initial_set[iz][iy][ix] = 1; diff --git a/src/EXTRA-FIX/fix_ttm_grid.cpp b/src/EXTRA-FIX/fix_ttm_grid.cpp index b42b876a3b..8890750818 100644 --- a/src/EXTRA-FIX/fix_ttm_grid.cpp +++ b/src/EXTRA-FIX/fix_ttm_grid.cpp @@ -41,18 +41,6 @@ static constexpr int MAXLINE = 256; static constexpr int CHUNK = 1024; static constexpr int OFFSET = 16384; -// helper class - -namespace { - class parser_error : public std::exception { - std::string message; - - public: - parser_error(const std::string &mesg) { message = mesg; } - const char *what() const noexcept { return message.c_str(); } - }; -} - /* ---------------------------------------------------------------------- */ FixTTMGrid::FixTTMGrid(LAMMPS *lmp, int narg, char **arg) : @@ -318,7 +306,7 @@ void FixTTMGrid::read_electron_temperatures(const std::string &filename) int iz = values.next_int(); if (ix < 0 || ix >= nxgrid || iy < 0 || iy >= nygrid || iz < 0 || iz >= nzgrid) - throw parser_error("Fix ttm/grid invalid grid index in input"); + throw TokenizerException("Fix ttm/grid invalid grid index in input",""); if (ix >= nxlo_in && ix <= nxhi_in && iy >= nylo_in && iy <= nyhi_in && iz >= nzlo_in && iz <= nzhi_in) { @@ -326,7 +314,7 @@ void FixTTMGrid::read_electron_temperatures(const std::string &filename) T_initial_set[iz][iy][ix] = 1; } } else { - throw parser_error("Incorrect format in fix ttm electron grid file"); + throw TokenizerException("Incorrect format in fix ttm electron grid file",""); } } catch (std::exception &e) { error->one(FLERR,e.what()); diff --git a/src/EXTRA-FIX/fix_ttm_mod.cpp b/src/EXTRA-FIX/fix_ttm_mod.cpp index d39d50c9e5..233f877e8c 100644 --- a/src/EXTRA-FIX/fix_ttm_mod.cpp +++ b/src/EXTRA-FIX/fix_ttm_mod.cpp @@ -41,18 +41,6 @@ using namespace LAMMPS_NS; using namespace FixConst; using namespace MathConst; -// helper class - -namespace { - class parser_error : public std::exception { - std::string message; - - public: - parser_error(const std::string &mesg) { message = mesg; } - const char *what() const noexcept { return message.c_str(); } - }; -} - // OFFSET avoids outside-of-box atoms being rounded to grid pts incorrectly // SHIFT = 0.0 assigns atoms to lower-left grid pt // SHIFT = 0.5 assigns atoms to nearest grid pt @@ -596,10 +584,10 @@ void FixTTMMod::read_electron_temperatures(const std::string &filename) // check correctness of input data if ((ix < 0) || (ix >= nxgrid) || (iy < 0) || (iy >= nygrid) || (iz < 0) || (iz >= nzgrid)) - throw parser_error("Fix ttm invalid grid index in fix ttm/mod grid file"); + throw TokenizerException("Fix ttm invalid grid index in fix ttm/mod grid file",""); if (T_tmp < 0.0) - throw parser_error("Fix ttm electron temperatures must be > 0.0"); + throw TokenizerException("Fix ttm electron temperatures must be > 0.0",""); T_electron[iz][iy][ix] = T_tmp; T_initial_set[iz][iy][ix] = 1; diff --git a/src/QEQ/fix_qeq.cpp b/src/QEQ/fix_qeq.cpp index b43afb00d6..5a4e4e4e7d 100644 --- a/src/QEQ/fix_qeq.cpp +++ b/src/QEQ/fix_qeq.cpp @@ -43,10 +43,10 @@ using namespace FixConst; #define MAXLINE 1024 namespace { - class parser_error : public std::exception { + class qeq_parser_error : public std::exception { std::string message; public: - parser_error(const std::string &mesg) { message = mesg; } + explicit qeq_parser_error(const std::string &mesg) { message = mesg; } const char *what() const noexcept { return message.c_str(); } }; } @@ -761,8 +761,8 @@ void FixQEq::read_file(char *file) FILE *fp = utils::open_potential(file,lmp,nullptr); if (fp == nullptr) - throw parser_error(fmt::format("Cannot open fix qeq parameter file {}:" - " {}", file,utils::getsyserror())); + throw qeq_parser_error(fmt::format("Cannot open fix qeq parameter file {}: {}", + file,utils::getsyserror())); TextFileReader reader(fp, "qeq parameter"); while (1) { @@ -770,12 +770,12 @@ void FixQEq::read_file(char *file) if (values.count() == 0) continue; if (values.count() < 6) - throw parser_error("Invalid qeq parameter file"); + throw qeq_parser_error("Invalid qeq parameter file"); auto word = values.next_string(); utils::bounds(FLERR,word,1,ntypes,nlo,nhi,nullptr); if ((nlo < 0) || (nhi < 0)) - throw parser_error("Invalid atom type range"); + throw qeq_parser_error(fmt::format("Invalid atom type range: {}",word)); val = values.next_double(); for (int n=nlo; n <= nhi; ++n) chi[n] = val; diff --git a/src/REAXFF/fix_acks2_reaxff.cpp b/src/REAXFF/fix_acks2_reaxff.cpp index ec14ed72b2..b6789b1b2e 100644 --- a/src/REAXFF/fix_acks2_reaxff.cpp +++ b/src/REAXFF/fix_acks2_reaxff.cpp @@ -43,15 +43,6 @@ using namespace LAMMPS_NS; using namespace FixConst; -namespace { - class parser_error : public std::exception { - std::string message; - public: - parser_error(const std::string &mesg) { message = mesg; } - const char *what() const noexcept { return message.c_str(); } - }; -} - static const char cite_fix_acks2_reax[] = "fix acks2/reaxff command:\n\n" "@Article{O'Hearn2020,\n" @@ -175,26 +166,27 @@ void FixACKS2ReaxFF::pertype_parameters(char *arg) const char *line = reader.next_line(); if (!line) - throw parser_error("Invalid parameter file for fix acks2/reaxff"); + throw TokenizerException("Invalid parameter file for fix acks2/reaxff",""); ValueTokenizer values(line); if (values.count() != 1) - throw parser_error("Fix acks2/reaxff: Incorrect format of parameter file"); + throw TokenizerException("Fix acks2/reaxff: Incorrect parameter file format",""); bond_softness = values.next_double(); for (int i = 1; i <= ntypes; i++) { const char *line = reader.next_line(); if (!line) - throw parser_error("Invalid parameter file for fix acks2/reaxff"); + throw TokenizerException("Fix acks2/reaxff: Incorrect parameter file format",""); ValueTokenizer values(line); if (values.count() != 5) - throw parser_error("Fix acks2/reaxff: Incorrect format of parameter file"); + throw TokenizerException("Fix acks2/reaxff: Incorrect parameter file format",""); int itype = values.next_int(); if ((itype < 1) || (itype > ntypes)) - throw parser_error("Fix acks2/reaxff: invalid atom type in parameter file"); + throw TokenizerException("Fix acks2/reaxff: invalid atom type in parameter file", + std::to_string(itype)); chi[itype] = values.next_double(); eta[itype] = values.next_double(); diff --git a/src/REAXFF/fix_qeq_reaxff.cpp b/src/REAXFF/fix_qeq_reaxff.cpp index 89ee3f338f..874a10bbae 100644 --- a/src/REAXFF/fix_qeq_reaxff.cpp +++ b/src/REAXFF/fix_qeq_reaxff.cpp @@ -45,19 +45,11 @@ #include #include #include +#include using namespace LAMMPS_NS; using namespace FixConst; -namespace { - class parser_error : public std::exception { - std::string message; - public: - parser_error(const std::string &mesg) { message = mesg; } - const char *what() const noexcept { return message.c_str(); } - }; -} - static constexpr double EV_TO_KCAL_PER_MOL = 14.4; static constexpr double SMALL = 1.0e-14; @@ -243,15 +235,16 @@ void FixQEqReaxFF::pertype_parameters(char *arg) for (int i = 1; i <= ntypes; i++) { const char *line = reader.next_line(); if (!line) - throw parser_error("Invalid param file for fix qeq/reaxff"); + throw TokenizerException("Fix qeq/reaxff: Invalid param file format",""); ValueTokenizer values(line); if (values.count() != 4) - throw parser_error("Fix qeq/reaxff: Incorrect format of param file"); + throw TokenizerException("Fix qeq/reaxff: Incorrect format of param file",""); int itype = values.next_int(); if ((itype < 1) || (itype > ntypes)) - throw parser_error("Fix qeq/reaxff: invalid atom type in param file"); + throw TokenizerException("Fix qeq/reaxff: invalid atom type in param file", + std::to_string(itype)); chi[itype] = values.next_double(); eta[itype] = values.next_double(); diff --git a/src/REAXFF/reaxff_control.cpp b/src/REAXFF/reaxff_control.cpp index 90f12b2031..a95ec1d4ac 100644 --- a/src/REAXFF/reaxff_control.cpp +++ b/src/REAXFF/reaxff_control.cpp @@ -40,15 +40,6 @@ using LAMMPS_NS::utils::sfgets; using LAMMPS_NS::utils::logmesg; using LAMMPS_NS::ValueTokenizer; -namespace { - class parser_error : public std::exception { - std::string message; - public: - parser_error(const std::string &mesg) { message = mesg; } - const char *what() const noexcept { return message.c_str(); } - }; -} - namespace ReaxFF { static std::unordered_set inactive_keywords = { "ensemble_type", "nsteps", "dt", "proc_by_dim", "random_vel", @@ -63,6 +54,15 @@ namespace ReaxFF { "energy_update_freq", "atom_info", "atom_velocities", "atom_forces", "bond_info", "angle_info" }; + class control_parser_error : public std::exception { + std::string message; + public: + explicit control_parser_error(const std::string &format, const std::string &keyword) { + message = fmt::format(format, keyword); + } + const char *what() const noexcept { return message.c_str(); } + }; + // NOTE: this function is run on MPI rank 0 only void Read_Control_File(const char *control_file, control_params *control) @@ -92,7 +92,7 @@ namespace ReaxFF { auto keyword = values.next_string(); if (!values.has_next()) - throw parser_error(fmt::format("No value(s) for control parameter: {}\n",keyword)); + throw control_parser_error("No value(s) for control parameter: {}\n", keyword); if (inactive_keywords.find(keyword) != inactive_keywords.end()) { error->warning(FLERR,fmt::format("Ignoring inactive control " @@ -114,8 +114,7 @@ namespace ReaxFF { error->warning(FLERR,"Support for writing native trajectories has " "been removed after LAMMPS version 8 April 2021"); } else { - throw parser_error(fmt::format("Unknown parameter {} in " - "control file", keyword)); + throw control_parser_error("Unknown parameter {} in control file", keyword); } } } catch (LAMMPS_NS::EOFException &) { diff --git a/src/REAXFF/reaxff_ffield.cpp b/src/REAXFF/reaxff_ffield.cpp index db4a63972e..34db1c232d 100644 --- a/src/REAXFF/reaxff_ffield.cpp +++ b/src/REAXFF/reaxff_ffield.cpp @@ -41,16 +41,14 @@ using LAMMPS_NS::utils::open_potential; using LAMMPS_NS::utils::getsyserror; using LAMMPS_NS::utils::uppercase; -namespace { - class parser_error : public std::exception { +namespace ReaxFF { + + class ffield_parser_error : public std::exception { std::string message; public: - parser_error(const std::string &mesg) { message = mesg; } + explicit ffield_parser_error(const std::string &mesg) { message = mesg; } const char *what() const noexcept { return message.c_str(); } }; -} - -namespace ReaxFF { void Read_Force_Field(const char *filename, reax_interaction *reax, control_params *control, MPI_Comm world) @@ -63,7 +61,7 @@ namespace ReaxFF { // read and parse the force field only on rank 0 #define THROW_ERROR(txt) \ - throw parser_error(fmt::format("{}:{}: {}",filename,lineno,txt)) + throw ffield_parser_error(fmt::format("{}:{}: {}",filename,lineno,txt)) if (control->me == 0) { FILE *fp = LAMMPS_NS::utils::open_potential(filename, lmp, nullptr); @@ -165,7 +163,7 @@ namespace ReaxFF { // copy element symbol in uppercase and truncate stored element symbol if necessary auto element = uppercase(values.next_string()); - strncpy(sbp[i].name,element.c_str(),4); + strncpy(sbp[i].name,element.c_str(),3); sbp[i].name[3] = '\0'; sbp[i].r_s = values.next_double(); diff --git a/src/tokenizer.h b/src/tokenizer.h index 247afd0240..060e1bf6e3 100644 --- a/src/tokenizer.h +++ b/src/tokenizer.h @@ -60,7 +60,7 @@ class TokenizerException : public std::exception { * * \param msg String with error message * \param token String of the token/word that caused the error */ - TokenizerException(const std::string &msg, const std::string &token); + explicit TokenizerException(const std::string &msg, const std::string &token); ~TokenizerException() noexcept {} @@ -74,7 +74,7 @@ class InvalidIntegerException : public TokenizerException { /** Thrown during converting string to integer number * * \param token String of the token/word that caused the error */ - InvalidIntegerException(const std::string &token) : + explicit InvalidIntegerException(const std::string &token) : TokenizerException("Not a valid integer number", token) { } @@ -85,7 +85,7 @@ class InvalidFloatException : public TokenizerException { /** Thrown during converting string to floating point number * * \param token String of the token/word that caused the error */ - InvalidFloatException(const std::string &token) : + explicit InvalidFloatException(const std::string &token) : TokenizerException("Not a valid floating-point number", token) { } From 29a44e7065abfdba9aa06b32d6c675d63bf9098b Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sat, 23 Oct 2021 04:24:54 -0400 Subject: [PATCH 262/372] remove parser_error exception class ambiguity completely --- src/EXTRA-FIX/fix_ttm.cpp | 17 ++--------------- src/EXTRA-FIX/fix_ttm_grid.cpp | 16 ++-------------- src/EXTRA-FIX/fix_ttm_mod.cpp | 16 ++-------------- src/QEQ/fix_qeq.cpp | 12 ++++++------ src/REAXFF/fix_acks2_reaxff.cpp | 20 ++++++-------------- src/REAXFF/fix_qeq_reaxff.cpp | 17 +++++------------ src/REAXFF/reaxff_control.cpp | 23 +++++++++++------------ src/REAXFF/reaxff_ffield.cpp | 14 ++++++-------- src/tokenizer.h | 6 +++--- 9 files changed, 43 insertions(+), 98 deletions(-) diff --git a/src/EXTRA-FIX/fix_ttm.cpp b/src/EXTRA-FIX/fix_ttm.cpp index 4c0d2e9cd5..de4b0a4c7e 100644 --- a/src/EXTRA-FIX/fix_ttm.cpp +++ b/src/EXTRA-FIX/fix_ttm.cpp @@ -28,7 +28,6 @@ #include "random_mars.h" #include "respa.h" #include "potential_file_reader.h" -#include "tokenizer.h" #include "update.h" #include @@ -46,18 +45,6 @@ using namespace FixConst; static constexpr int OFFSET = 16384; static constexpr double SHIFT = 0.0; -// helper class - -namespace { - class parser_error : public std::exception { - std::string message; - - public: - parser_error(const std::string &mesg) { message = mesg; } - const char *what() const noexcept { return message.c_str(); } - }; -} - /* ---------------------------------------------------------------------- */ FixTTM::FixTTM(LAMMPS *lmp, int narg, char **arg) : @@ -503,10 +490,10 @@ void FixTTM::read_electron_temperatures(const std::string &filename) // check correctness of input data if ((ix < 0) || (ix >= nxgrid) || (iy < 0) || (iy >= nygrid) || (iz < 0) || (iz >= nzgrid)) - throw parser_error("Fix ttm invalid grid index in fix ttm grid file"); + throw TokenizerException("Fix ttm invalid grid index in fix ttm grid file",""); if (T_tmp < 0.0) - throw parser_error("Fix ttm electron temperatures must be > 0.0"); + throw TokenizerException("Fix ttm electron temperatures must be > 0.0",""); T_electron[iz][iy][ix] = T_tmp; T_initial_set[iz][iy][ix] = 1; diff --git a/src/EXTRA-FIX/fix_ttm_grid.cpp b/src/EXTRA-FIX/fix_ttm_grid.cpp index b42b876a3b..8890750818 100644 --- a/src/EXTRA-FIX/fix_ttm_grid.cpp +++ b/src/EXTRA-FIX/fix_ttm_grid.cpp @@ -41,18 +41,6 @@ static constexpr int MAXLINE = 256; static constexpr int CHUNK = 1024; static constexpr int OFFSET = 16384; -// helper class - -namespace { - class parser_error : public std::exception { - std::string message; - - public: - parser_error(const std::string &mesg) { message = mesg; } - const char *what() const noexcept { return message.c_str(); } - }; -} - /* ---------------------------------------------------------------------- */ FixTTMGrid::FixTTMGrid(LAMMPS *lmp, int narg, char **arg) : @@ -318,7 +306,7 @@ void FixTTMGrid::read_electron_temperatures(const std::string &filename) int iz = values.next_int(); if (ix < 0 || ix >= nxgrid || iy < 0 || iy >= nygrid || iz < 0 || iz >= nzgrid) - throw parser_error("Fix ttm/grid invalid grid index in input"); + throw TokenizerException("Fix ttm/grid invalid grid index in input",""); if (ix >= nxlo_in && ix <= nxhi_in && iy >= nylo_in && iy <= nyhi_in && iz >= nzlo_in && iz <= nzhi_in) { @@ -326,7 +314,7 @@ void FixTTMGrid::read_electron_temperatures(const std::string &filename) T_initial_set[iz][iy][ix] = 1; } } else { - throw parser_error("Incorrect format in fix ttm electron grid file"); + throw TokenizerException("Incorrect format in fix ttm electron grid file",""); } } catch (std::exception &e) { error->one(FLERR,e.what()); diff --git a/src/EXTRA-FIX/fix_ttm_mod.cpp b/src/EXTRA-FIX/fix_ttm_mod.cpp index d39d50c9e5..233f877e8c 100644 --- a/src/EXTRA-FIX/fix_ttm_mod.cpp +++ b/src/EXTRA-FIX/fix_ttm_mod.cpp @@ -41,18 +41,6 @@ using namespace LAMMPS_NS; using namespace FixConst; using namespace MathConst; -// helper class - -namespace { - class parser_error : public std::exception { - std::string message; - - public: - parser_error(const std::string &mesg) { message = mesg; } - const char *what() const noexcept { return message.c_str(); } - }; -} - // OFFSET avoids outside-of-box atoms being rounded to grid pts incorrectly // SHIFT = 0.0 assigns atoms to lower-left grid pt // SHIFT = 0.5 assigns atoms to nearest grid pt @@ -596,10 +584,10 @@ void FixTTMMod::read_electron_temperatures(const std::string &filename) // check correctness of input data if ((ix < 0) || (ix >= nxgrid) || (iy < 0) || (iy >= nygrid) || (iz < 0) || (iz >= nzgrid)) - throw parser_error("Fix ttm invalid grid index in fix ttm/mod grid file"); + throw TokenizerException("Fix ttm invalid grid index in fix ttm/mod grid file",""); if (T_tmp < 0.0) - throw parser_error("Fix ttm electron temperatures must be > 0.0"); + throw TokenizerException("Fix ttm electron temperatures must be > 0.0",""); T_electron[iz][iy][ix] = T_tmp; T_initial_set[iz][iy][ix] = 1; diff --git a/src/QEQ/fix_qeq.cpp b/src/QEQ/fix_qeq.cpp index b43afb00d6..5a4e4e4e7d 100644 --- a/src/QEQ/fix_qeq.cpp +++ b/src/QEQ/fix_qeq.cpp @@ -43,10 +43,10 @@ using namespace FixConst; #define MAXLINE 1024 namespace { - class parser_error : public std::exception { + class qeq_parser_error : public std::exception { std::string message; public: - parser_error(const std::string &mesg) { message = mesg; } + explicit qeq_parser_error(const std::string &mesg) { message = mesg; } const char *what() const noexcept { return message.c_str(); } }; } @@ -761,8 +761,8 @@ void FixQEq::read_file(char *file) FILE *fp = utils::open_potential(file,lmp,nullptr); if (fp == nullptr) - throw parser_error(fmt::format("Cannot open fix qeq parameter file {}:" - " {}", file,utils::getsyserror())); + throw qeq_parser_error(fmt::format("Cannot open fix qeq parameter file {}: {}", + file,utils::getsyserror())); TextFileReader reader(fp, "qeq parameter"); while (1) { @@ -770,12 +770,12 @@ void FixQEq::read_file(char *file) if (values.count() == 0) continue; if (values.count() < 6) - throw parser_error("Invalid qeq parameter file"); + throw qeq_parser_error("Invalid qeq parameter file"); auto word = values.next_string(); utils::bounds(FLERR,word,1,ntypes,nlo,nhi,nullptr); if ((nlo < 0) || (nhi < 0)) - throw parser_error("Invalid atom type range"); + throw qeq_parser_error(fmt::format("Invalid atom type range: {}",word)); val = values.next_double(); for (int n=nlo; n <= nhi; ++n) chi[n] = val; diff --git a/src/REAXFF/fix_acks2_reaxff.cpp b/src/REAXFF/fix_acks2_reaxff.cpp index ec14ed72b2..b6789b1b2e 100644 --- a/src/REAXFF/fix_acks2_reaxff.cpp +++ b/src/REAXFF/fix_acks2_reaxff.cpp @@ -43,15 +43,6 @@ using namespace LAMMPS_NS; using namespace FixConst; -namespace { - class parser_error : public std::exception { - std::string message; - public: - parser_error(const std::string &mesg) { message = mesg; } - const char *what() const noexcept { return message.c_str(); } - }; -} - static const char cite_fix_acks2_reax[] = "fix acks2/reaxff command:\n\n" "@Article{O'Hearn2020,\n" @@ -175,26 +166,27 @@ void FixACKS2ReaxFF::pertype_parameters(char *arg) const char *line = reader.next_line(); if (!line) - throw parser_error("Invalid parameter file for fix acks2/reaxff"); + throw TokenizerException("Invalid parameter file for fix acks2/reaxff",""); ValueTokenizer values(line); if (values.count() != 1) - throw parser_error("Fix acks2/reaxff: Incorrect format of parameter file"); + throw TokenizerException("Fix acks2/reaxff: Incorrect parameter file format",""); bond_softness = values.next_double(); for (int i = 1; i <= ntypes; i++) { const char *line = reader.next_line(); if (!line) - throw parser_error("Invalid parameter file for fix acks2/reaxff"); + throw TokenizerException("Fix acks2/reaxff: Incorrect parameter file format",""); ValueTokenizer values(line); if (values.count() != 5) - throw parser_error("Fix acks2/reaxff: Incorrect format of parameter file"); + throw TokenizerException("Fix acks2/reaxff: Incorrect parameter file format",""); int itype = values.next_int(); if ((itype < 1) || (itype > ntypes)) - throw parser_error("Fix acks2/reaxff: invalid atom type in parameter file"); + throw TokenizerException("Fix acks2/reaxff: invalid atom type in parameter file", + std::to_string(itype)); chi[itype] = values.next_double(); eta[itype] = values.next_double(); diff --git a/src/REAXFF/fix_qeq_reaxff.cpp b/src/REAXFF/fix_qeq_reaxff.cpp index 89ee3f338f..874a10bbae 100644 --- a/src/REAXFF/fix_qeq_reaxff.cpp +++ b/src/REAXFF/fix_qeq_reaxff.cpp @@ -45,19 +45,11 @@ #include #include #include +#include using namespace LAMMPS_NS; using namespace FixConst; -namespace { - class parser_error : public std::exception { - std::string message; - public: - parser_error(const std::string &mesg) { message = mesg; } - const char *what() const noexcept { return message.c_str(); } - }; -} - static constexpr double EV_TO_KCAL_PER_MOL = 14.4; static constexpr double SMALL = 1.0e-14; @@ -243,15 +235,16 @@ void FixQEqReaxFF::pertype_parameters(char *arg) for (int i = 1; i <= ntypes; i++) { const char *line = reader.next_line(); if (!line) - throw parser_error("Invalid param file for fix qeq/reaxff"); + throw TokenizerException("Fix qeq/reaxff: Invalid param file format",""); ValueTokenizer values(line); if (values.count() != 4) - throw parser_error("Fix qeq/reaxff: Incorrect format of param file"); + throw TokenizerException("Fix qeq/reaxff: Incorrect format of param file",""); int itype = values.next_int(); if ((itype < 1) || (itype > ntypes)) - throw parser_error("Fix qeq/reaxff: invalid atom type in param file"); + throw TokenizerException("Fix qeq/reaxff: invalid atom type in param file", + std::to_string(itype)); chi[itype] = values.next_double(); eta[itype] = values.next_double(); diff --git a/src/REAXFF/reaxff_control.cpp b/src/REAXFF/reaxff_control.cpp index 90f12b2031..a95ec1d4ac 100644 --- a/src/REAXFF/reaxff_control.cpp +++ b/src/REAXFF/reaxff_control.cpp @@ -40,15 +40,6 @@ using LAMMPS_NS::utils::sfgets; using LAMMPS_NS::utils::logmesg; using LAMMPS_NS::ValueTokenizer; -namespace { - class parser_error : public std::exception { - std::string message; - public: - parser_error(const std::string &mesg) { message = mesg; } - const char *what() const noexcept { return message.c_str(); } - }; -} - namespace ReaxFF { static std::unordered_set inactive_keywords = { "ensemble_type", "nsteps", "dt", "proc_by_dim", "random_vel", @@ -63,6 +54,15 @@ namespace ReaxFF { "energy_update_freq", "atom_info", "atom_velocities", "atom_forces", "bond_info", "angle_info" }; + class control_parser_error : public std::exception { + std::string message; + public: + explicit control_parser_error(const std::string &format, const std::string &keyword) { + message = fmt::format(format, keyword); + } + const char *what() const noexcept { return message.c_str(); } + }; + // NOTE: this function is run on MPI rank 0 only void Read_Control_File(const char *control_file, control_params *control) @@ -92,7 +92,7 @@ namespace ReaxFF { auto keyword = values.next_string(); if (!values.has_next()) - throw parser_error(fmt::format("No value(s) for control parameter: {}\n",keyword)); + throw control_parser_error("No value(s) for control parameter: {}\n", keyword); if (inactive_keywords.find(keyword) != inactive_keywords.end()) { error->warning(FLERR,fmt::format("Ignoring inactive control " @@ -114,8 +114,7 @@ namespace ReaxFF { error->warning(FLERR,"Support for writing native trajectories has " "been removed after LAMMPS version 8 April 2021"); } else { - throw parser_error(fmt::format("Unknown parameter {} in " - "control file", keyword)); + throw control_parser_error("Unknown parameter {} in control file", keyword); } } } catch (LAMMPS_NS::EOFException &) { diff --git a/src/REAXFF/reaxff_ffield.cpp b/src/REAXFF/reaxff_ffield.cpp index db4a63972e..34db1c232d 100644 --- a/src/REAXFF/reaxff_ffield.cpp +++ b/src/REAXFF/reaxff_ffield.cpp @@ -41,16 +41,14 @@ using LAMMPS_NS::utils::open_potential; using LAMMPS_NS::utils::getsyserror; using LAMMPS_NS::utils::uppercase; -namespace { - class parser_error : public std::exception { +namespace ReaxFF { + + class ffield_parser_error : public std::exception { std::string message; public: - parser_error(const std::string &mesg) { message = mesg; } + explicit ffield_parser_error(const std::string &mesg) { message = mesg; } const char *what() const noexcept { return message.c_str(); } }; -} - -namespace ReaxFF { void Read_Force_Field(const char *filename, reax_interaction *reax, control_params *control, MPI_Comm world) @@ -63,7 +61,7 @@ namespace ReaxFF { // read and parse the force field only on rank 0 #define THROW_ERROR(txt) \ - throw parser_error(fmt::format("{}:{}: {}",filename,lineno,txt)) + throw ffield_parser_error(fmt::format("{}:{}: {}",filename,lineno,txt)) if (control->me == 0) { FILE *fp = LAMMPS_NS::utils::open_potential(filename, lmp, nullptr); @@ -165,7 +163,7 @@ namespace ReaxFF { // copy element symbol in uppercase and truncate stored element symbol if necessary auto element = uppercase(values.next_string()); - strncpy(sbp[i].name,element.c_str(),4); + strncpy(sbp[i].name,element.c_str(),3); sbp[i].name[3] = '\0'; sbp[i].r_s = values.next_double(); diff --git a/src/tokenizer.h b/src/tokenizer.h index 247afd0240..060e1bf6e3 100644 --- a/src/tokenizer.h +++ b/src/tokenizer.h @@ -60,7 +60,7 @@ class TokenizerException : public std::exception { * * \param msg String with error message * \param token String of the token/word that caused the error */ - TokenizerException(const std::string &msg, const std::string &token); + explicit TokenizerException(const std::string &msg, const std::string &token); ~TokenizerException() noexcept {} @@ -74,7 +74,7 @@ class InvalidIntegerException : public TokenizerException { /** Thrown during converting string to integer number * * \param token String of the token/word that caused the error */ - InvalidIntegerException(const std::string &token) : + explicit InvalidIntegerException(const std::string &token) : TokenizerException("Not a valid integer number", token) { } @@ -85,7 +85,7 @@ class InvalidFloatException : public TokenizerException { /** Thrown during converting string to floating point number * * \param token String of the token/word that caused the error */ - InvalidFloatException(const std::string &token) : + explicit InvalidFloatException(const std::string &token) : TokenizerException("Not a valid floating-point number", token) { } From a782f8f8e051e1be5afb72322dfa882233f27efa Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sun, 24 Oct 2021 17:59:30 -0400 Subject: [PATCH 263/372] more specific warning about atoms inability to move --- src/verlet.cpp | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/src/verlet.cpp b/src/verlet.cpp index 3ea9d72a9e..0a5a66ebc2 100644 --- a/src/verlet.cpp +++ b/src/verlet.cpp @@ -22,6 +22,7 @@ #include "dihedral.h" #include "domain.h" #include "error.h" +#include "fix.h" #include "force.h" #include "improper.h" #include "kspace.h" @@ -49,10 +50,14 @@ void Verlet::init() { Integrate::init(); - // warn if no fixes + // warn if no fixes doing time integration - if (modify->nfix == 0 && comm->me == 0) - error->warning(FLERR,"No fixes defined, atoms won't move"); + bool do_time_integrate = false; + for (auto fix : modify->get_fix_list()) + if (fix->time_integrate) do_time_integrate; + + if (!do_time_integrate && (comm->me == 0)) + error->warning(FLERR,"No fixes with time integration, atoms won't move"); // virial_style: // VIRIAL_PAIR if computed explicitly in pair via sum over pair interactions From d0416757b7111ef66a3d41e0857a340f58d42c73 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sun, 24 Oct 2021 18:00:15 -0400 Subject: [PATCH 264/372] simplify using new APIs --- src/comm.cpp | 25 ++++++++++--------------- src/group.cpp | 4 ++-- src/info.cpp | 6 ++---- src/write_data.cpp | 31 ++++++++++++++----------------- src/write_data.h | 2 +- src/write_restart.cpp | 6 +++--- 6 files changed, 32 insertions(+), 42 deletions(-) diff --git a/src/comm.cpp b/src/comm.cpp index afe074cb5c..c32183ad35 100644 --- a/src/comm.cpp +++ b/src/comm.cpp @@ -201,8 +201,9 @@ void Comm::init() if (ghost_velocity) size_forward += atom->avec->size_velocity; if (ghost_velocity) size_border += atom->avec->size_velocity; - for (int i = 0; i < modify->nfix; i++) - size_border += modify->fix[i]->comm_border; + const auto &fix_list = modify->get_fix_list(); + for (auto fix : fix_list) + size_border += fix->comm_border; // per-atom limits for communication // maxexchange = max # of datums in exchange comm, set in exchange() @@ -217,9 +218,9 @@ void Comm::init() if (force->pair) maxforward = MAX(maxforward,force->pair->comm_forward); if (force->pair) maxreverse = MAX(maxreverse,force->pair->comm_reverse); - for (int i = 0; i < modify->nfix; i++) { - maxforward = MAX(maxforward,modify->fix[i]->comm_forward); - maxreverse = MAX(maxreverse,modify->fix[i]->comm_reverse); + for (auto fix : fix_list) { + maxforward = MAX(maxforward,fix->comm_forward); + maxreverse = MAX(maxreverse,fix->comm_reverse); } for (int i = 0; i < modify->ncompute; i++) { @@ -241,12 +242,9 @@ void Comm::init() maxexchange_atom = atom->avec->maxexchange; - int nfix = modify->nfix; - Fix **fix = modify->fix; - maxexchange_fix_dynamic = 0; - for (int i = 0; i < nfix; i++) - if (fix[i]->maxexchange_dynamic) maxexchange_fix_dynamic = 1; + for (auto fix : fix_list) + if (fix->maxexchange_dynamic) maxexchange_fix_dynamic = 1; if ((mode == Comm::MULTI) && (neighbor->style != Neighbor::MULTI)) error->all(FLERR,"Cannot use comm mode multi without multi-style neighbor lists"); @@ -267,12 +265,9 @@ void Comm::init() void Comm::init_exchange() { - int nfix = modify->nfix; - Fix **fix = modify->fix; - maxexchange_fix = 0; - for (int i = 0; i < nfix; i++) - maxexchange_fix += fix[i]->maxexchange; + for (auto fix : modify->get_fix_list()) + maxexchange_fix += fix->maxexchange; maxexchange = maxexchange_atom + maxexchange_fix; bufextra = maxexchange + BUFEXTRA; diff --git a/src/group.cpp b/src/group.cpp index 57c701a7fa..cfe0d2cc06 100644 --- a/src/group.cpp +++ b/src/group.cpp @@ -105,8 +105,8 @@ void Group::assign(int narg, char **arg) int igroup = find(arg[0]); if (igroup == -1) error->all(FLERR,"Could not find group delete group ID"); if (igroup == 0) error->all(FLERR,"Cannot delete group all"); - for (i = 0; i < modify->nfix; i++) - if (modify->fix[i]->igroup == igroup) + for (auto fix : modify->get_fix_list()) + if (fix->igroup == igroup) error->all(FLERR,"Cannot delete group currently used by a fix"); for (i = 0; i < modify->ncompute; i++) if (modify->compute[i]->igroup == igroup) diff --git a/src/info.cpp b/src/info.cpp index 61781c9b3e..8f04e14ae4 100644 --- a/src/info.cpp +++ b/src/info.cpp @@ -906,10 +906,8 @@ bool Info::is_defined(const char *category, const char *name) return true; } } else if (strcmp(category,"fix") == 0) { - int nfix = modify->nfix; - Fix **fix = modify->fix; - for (int i=0; i < nfix; ++i) { - if (strcmp(fix[i]->id,name) == 0) + for (auto fix : modify->get_fix_list()) { + if (strcmp(fix->id,name) == 0) return true; } } else if (strcmp(category,"group") == 0) { diff --git a/src/write_data.cpp b/src/write_data.cpp index 82c237a07e..9684ae6901 100644 --- a/src/write_data.cpp +++ b/src/write_data.cpp @@ -213,9 +213,9 @@ void WriteData::write(const std::string &file) // extra sections managed by fixes if (fixflag) - for (int i = 0; i < modify->nfix; i++) - if (modify->fix[i]->wd_section) - for (int m = 0; m < modify->fix[i]->wd_section; m++) fix(i,m); + for (auto ifix : modify->get_fix_list()) + if (ifix->wd_section) + for (int m = 0; m < ifix->wd_section; m++) fix(ifix,m); // close data file @@ -267,22 +267,19 @@ void WriteData::header() // fix info if (fixflag) - for (int i = 0; i < modify->nfix; i++) - if (modify->fix[i]->wd_header) - for (int m = 0; m < modify->fix[i]->wd_header; m++) - modify->fix[i]->write_data_header(fp,m); + for (auto ifix : modify->get_fix_list()) + if (ifix->wd_header) + for (int m = 0; m < ifix->wd_header; m++) + ifix->write_data_header(fp,m); // box info - auto box = fmt::format("\n{} {} xlo xhi" - "\n{} {} ylo yhi" - "\n{} {} zlo zhi\n", + auto box = fmt::format("\n{} {} xlo xhi\n{} {} ylo yhi\n{} {} zlo zhi\n", domain->boxlo[0],domain->boxhi[0], domain->boxlo[1],domain->boxhi[1], domain->boxlo[2],domain->boxhi[2]); if (domain->triclinic) - box += fmt::format("{} {} {} xy xz yz\n", - domain->xy,domain->xz,domain->yz); + box += fmt::format("{} {} {} xy xz yz\n",domain->xy,domain->xz,domain->yz); fputs(box.c_str(),fp); } @@ -722,13 +719,13 @@ void WriteData::bonus(int flag) write out Mth section of data file owned by Fix ifix ------------------------------------------------------------------------- */ -void WriteData::fix(int ifix, int mth) +void WriteData::fix(Fix *ifix, int mth) { // communication buffer for Fix info // maxrow X ncol = largest buffer needed by any proc int sendrow,ncol; - modify->fix[ifix]->write_data_section_size(mth,sendrow,ncol); + ifix->write_data_section_size(mth,sendrow,ncol); int maxrow; MPI_Allreduce(&sendrow,&maxrow,1,MPI_INT,MPI_MAX,world); @@ -738,7 +735,7 @@ void WriteData::fix(int ifix, int mth) // pack my fix data into buf - modify->fix[ifix]->write_data_section_pack(mth,buf); + ifix->write_data_section_pack(mth,buf); // write one chunk of info per proc to file // proc 0 pings each proc, receives its chunk, writes to file @@ -751,7 +748,7 @@ void WriteData::fix(int ifix, int mth) MPI_Status status; MPI_Request request; - modify->fix[ifix]->write_data_section_keyword(mth,fp); + ifix->write_data_section_keyword(mth,fp); for (int iproc = 0; iproc < nprocs; iproc++) { if (iproc) { MPI_Irecv(&buf[0][0],maxrow*ncol,MPI_DOUBLE,iproc,0,world,&request); @@ -761,7 +758,7 @@ void WriteData::fix(int ifix, int mth) recvrow /= ncol; } else recvrow = sendrow; - modify->fix[ifix]->write_data_section(mth,fp,recvrow,buf,index); + ifix->write_data_section(mth,fp,recvrow,buf,index); index += recvrow; } diff --git a/src/write_data.h b/src/write_data.h index 74e7e6136e..d62f048894 100644 --- a/src/write_data.h +++ b/src/write_data.h @@ -51,7 +51,7 @@ class WriteData : public Command { void dihedrals(); void impropers(); void bonus(int); - void fix(int, int); + void fix(class Fix *, int); }; } // namespace LAMMPS_NS diff --git a/src/write_restart.cpp b/src/write_restart.cpp index 4333fa5416..5580a564c7 100644 --- a/src/write_restart.cpp +++ b/src/write_restart.cpp @@ -413,9 +413,9 @@ void WriteRestart::write(const std::string &file) // invoke any fixes that write their own restart file - for (int ifix = 0; ifix < modify->nfix; ifix++) - if (modify->fix[ifix]->restart_file) - modify->fix[ifix]->write_restart_file(file.c_str()); + for (auto fix : modify->get_fix_list()) + if (fix->restart_file) + fix->write_restart_file(file.c_str()); } /* ---------------------------------------------------------------------- From 52d99700ec36ee4cfcd797cac983fe71e1ea6a42 Mon Sep 17 00:00:00 2001 From: Yury Lysogorskiy Date: Mon, 25 Oct 2021 17:34:08 +0200 Subject: [PATCH 265/372] Download and compile modified YAML-cpp 0.6.3 in namespace YAML_PACE --- cmake/Modules/Packages/ML-PACE.cmake | 69 ++++------------------------ lib/pace/Install.py | 3 +- 2 files changed, 11 insertions(+), 61 deletions(-) diff --git a/cmake/Modules/Packages/ML-PACE.cmake b/cmake/Modules/Packages/ML-PACE.cmake index 5ab56de62b..263df9f24d 100644 --- a/cmake/Modules/Packages/ML-PACE.cmake +++ b/cmake/Modules/Packages/ML-PACE.cmake @@ -1,61 +1,10 @@ -# try to find system libyaml-cpp v.0.6.3 library -find_package(yaml-cpp 0.6.3 EXACT QUIET) - - -if(yaml-cpp_FOUND) - message(STATUS "Library yaml-cpp(v0.6.3) found") - #message(STATUS "YAML_CPP_LIBRARY_DIRS=${YAML_CPP_LIBRARY_DIRS}") - -# get_cmake_property(_variableNames VARIABLES) -# list (SORT _variableNames) -# foreach (_variableName ${_variableNames}) -# message(STATUS "${_variableName}=${${_variableName}}") -# endforeach() - - find_path(YAML_CPP_INCLUDE_DIR - NAMES yaml.h - PATHS ${YAML_CPP_INCLUDE_DIRS}) - - if(NOT YAML_CPP_LIBRARIES) - find_library(YAML_CPP_LIBRARY - NAMES yaml-cpp - PATHS ${YAML_CPP_LIBRARY_DIRS}) - else() - set(YAML_CPP_LIBRARY ${YAML_CPP_LIBRARIES}) - endif() -else() - message(STATUS "Library yaml-cpp(v0.6.3) not found, downloading") - - set(YAML_063_URL "https://github.com/jbeder/yaml-cpp/archive/refs/tags/yaml-cpp-0.6.3.tar.gz" CACHE STRING "URL for yaml-cpp (v.0.6.3) library sources") - set(YAML_063_MD5 "b45bf1089a382e81f6b661062c10d0c2" CACHE STRING "MD5 checksum of yaml-cpp (v.0.6.3) library tarball") - mark_as_advanced(YAML_063_URL) - mark_as_advanced(YAML_063_MD5) - - # download library sources to build folder - file(DOWNLOAD ${YAML_063_URL} ${CMAKE_BINARY_DIR}/yaml-cpp-0.6.3.tar.gz SHOW_PROGRESS EXPECTED_HASH MD5=${YAML_063_MD5}) - - execute_process( - COMMAND ${CMAKE_COMMAND} -E remove_directory yaml-cpp-yaml-cpp-0.6.3* - COMMAND ${CMAKE_COMMAND} -E tar xzf yaml-cpp-0.6.3.tar.gz - WORKING_DIRECTORY ${CMAKE_BINARY_DIR} - ) - - set(YAML_DIR ${CMAKE_BINARY_DIR}/yaml-cpp-yaml-cpp-0.6.3) - - add_subdirectory(${YAML_DIR} build-yaml-cpp EXCLUDE_FROM_ALL) - set(YAML_CPP_INCLUDE_DIR ${YAML_DIR}/include) - set(YAML_CPP_LIBRARY yaml-cpp) -endif() - - - -set(PACELIB_URL "https://github.com/ICAMS/lammps-user-pace/archive/refs/tags/v.2021.9.28.upd1.tar.gz" CACHE STRING "URL for PACE evaluator library sources") -set(PACELIB_MD5 "ec75bc491edd75e10560cdbf129d91a7" CACHE STRING "MD5 checksum of PACE evaluator library tarball") +set(PACELIB_URL "https://github.com/ICAMS/lammps-user-pace/archive/refs/tags/v.2021.10.25.yaml_pace.tar.gz" CACHE STRING "URL for PACE evaluator library sources") +set(PACELIB_MD5 "4c84c1cb1e2d8c690e3f797433ed2886" CACHE STRING "MD5 checksum of PACE evaluator library tarball") mark_as_advanced(PACELIB_URL) mark_as_advanced(PACELIB_MD5) # download library sources to build folder -file(DOWNLOAD ${PACELIB_URL} ${CMAKE_BINARY_DIR}/libpace.tar.gz SHOW_PROGRESS EXPECTED_HASH MD5=${PACELIB_MD5}) +file(DOWNLOAD ${PACELIB_URL} ${CMAKE_BINARY_DIR}/libpace.tar.gz EXPECTED_HASH MD5=${PACELIB_MD5}) #SHOW_PROGRESS # uncompress downloaded sources execute_process( @@ -65,9 +14,8 @@ execute_process( ) file(GLOB lib-pace ${CMAKE_BINARY_DIR}/lammps-user-pace-*) - -message(STATUS "YAML_CPP_INCLUDE_DIR=${YAML_CPP_INCLUDE_DIR}") -message(STATUS "YAML_CPP_LIBRARY=${YAML_CPP_LIBRARY}") +add_subdirectory(${lib-pace}/yaml-cpp build-yaml-cpp) +set(YAML_CPP_INCLUDE_DIR ${lib-pace}/yaml-cpp/include) file(GLOB PACE_EVALUATOR_INCLUDE_DIR ${lib-pace}/ML-PACE) file(GLOB PACE_EVALUATOR_SOURCES ${lib-pace}/ML-PACE/*.cpp) @@ -75,8 +23,9 @@ list(FILTER PACE_EVALUATOR_SOURCES EXCLUDE REGEX pair_pace.cpp) add_library(pace STATIC ${PACE_EVALUATOR_SOURCES}) set_target_properties(pace PROPERTIES CXX_EXTENSIONS ON OUTPUT_NAME lammps_pace${LAMMPS_MACHINE}) -target_include_directories(pace PRIVATE ${YAML_CPP_INCLUDE_DIR}) -target_include_directories(pace PUBLIC ${PACE_EVALUATOR_INCLUDE_DIR}) +target_include_directories(pace PUBLIC ${PACE_EVALUATOR_INCLUDE_DIR} ${YAML_CPP_INCLUDE_DIR}) + + +target_link_libraries(pace PRIVATE yaml-cpp-pace) target_link_libraries(lammps PRIVATE pace) -target_link_libraries(lammps PRIVATE ${YAML_CPP_LIBRARY}) diff --git a/lib/pace/Install.py b/lib/pace/Install.py index 946c29676a..1c243c0446 100644 --- a/lib/pace/Install.py +++ b/lib/pace/Install.py @@ -15,13 +15,14 @@ from install_helpers import fullpath, geturl, checkmd5sum # settings thisdir = fullpath('.') -version = 'v.2021.9.28' +version = 'v.2021.10.25.yaml_pace' # known checksums for different PACE versions. used to validate the download. checksums = { \ 'v.2021.2.3.upd2' : '8fd1162724d349b930e474927197f20d', 'v.2021.4.9' : '4db54962fbd6adcf8c18d46e1798ceb5', 'v.2021.9.28' : 'f98363bb98adc7295ea63974738c2a1b', + 'v.2021.10.25.yaml_pace' : '4c84c1cb1e2d8c690e3f797433ed2886' } From 8bf016eaeff8c249605b8fdee5eafdb7b3fb6ce1 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Mon, 25 Oct 2021 21:41:57 -0400 Subject: [PATCH 266/372] use references when looping over fixes from list --- src/GRANULAR/pair_gran_hooke_history.cpp | 4 ++-- src/GRANULAR/pair_granular.cpp | 4 ++-- src/comm.cpp | 8 ++++---- src/group.cpp | 2 +- src/info.cpp | 8 ++++---- src/verlet.cpp | 2 +- src/write_data.cpp | 4 ++-- src/write_restart.cpp | 2 +- 8 files changed, 17 insertions(+), 17 deletions(-) diff --git a/src/GRANULAR/pair_gran_hooke_history.cpp b/src/GRANULAR/pair_gran_hooke_history.cpp index f212bdf97a..c9cdba1e35 100644 --- a/src/GRANULAR/pair_gran_hooke_history.cpp +++ b/src/GRANULAR/pair_gran_hooke_history.cpp @@ -481,12 +481,12 @@ void PairGranHookeHistory::init_style() int itype; for (i = 1; i <= atom->ntypes; i++) { onerad_dynamic[i] = onerad_frozen[i] = 0.0; - for (auto ipour : pours) { + for (auto &ipour : pours) { itype = i; double maxrad = *((double *) ipour->extract("radius", itype)); if (maxrad > 0.0) onerad_dynamic[i] = maxrad; } - for (auto idep : deps) { + for (auto &idep : deps) { itype = i; double maxrad = *((double *) idep->extract("radius", itype)); if (maxrad > 0.0) onerad_dynamic[i] = maxrad; diff --git a/src/GRANULAR/pair_granular.cpp b/src/GRANULAR/pair_granular.cpp index fc18d3f521..8bcfc723ac 100644 --- a/src/GRANULAR/pair_granular.cpp +++ b/src/GRANULAR/pair_granular.cpp @@ -1160,12 +1160,12 @@ void PairGranular::init_style() int itype; for (i = 1; i <= atom->ntypes; i++) { onerad_dynamic[i] = onerad_frozen[i] = 0.0; - for (auto ipour : pours) { + for (auto &ipour : pours) { itype = i; double maxrad = *((double *) ipour->extract("radius", itype)); if (maxrad > 0.0) onerad_dynamic[i] = maxrad; } - for (auto idep : deps) { + for (auto &idep : deps) { itype = i; double maxrad = *((double *) idep->extract("radius", itype)); if (maxrad > 0.0) onerad_dynamic[i] = maxrad; diff --git a/src/comm.cpp b/src/comm.cpp index c32183ad35..48dae2368a 100644 --- a/src/comm.cpp +++ b/src/comm.cpp @@ -202,7 +202,7 @@ void Comm::init() if (ghost_velocity) size_border += atom->avec->size_velocity; const auto &fix_list = modify->get_fix_list(); - for (auto fix : fix_list) + for (const auto &fix : fix_list) size_border += fix->comm_border; // per-atom limits for communication @@ -218,7 +218,7 @@ void Comm::init() if (force->pair) maxforward = MAX(maxforward,force->pair->comm_forward); if (force->pair) maxreverse = MAX(maxreverse,force->pair->comm_reverse); - for (auto fix : fix_list) { + for (const auto &fix : fix_list) { maxforward = MAX(maxforward,fix->comm_forward); maxreverse = MAX(maxreverse,fix->comm_reverse); } @@ -243,7 +243,7 @@ void Comm::init() maxexchange_atom = atom->avec->maxexchange; maxexchange_fix_dynamic = 0; - for (auto fix : fix_list) + for (const auto &fix : fix_list) if (fix->maxexchange_dynamic) maxexchange_fix_dynamic = 1; if ((mode == Comm::MULTI) && (neighbor->style != Neighbor::MULTI)) @@ -266,7 +266,7 @@ void Comm::init() void Comm::init_exchange() { maxexchange_fix = 0; - for (auto fix : modify->get_fix_list()) + for (const auto &fix : modify->get_fix_list()) maxexchange_fix += fix->maxexchange; maxexchange = maxexchange_atom + maxexchange_fix; diff --git a/src/group.cpp b/src/group.cpp index cfe0d2cc06..0dc0a560dd 100644 --- a/src/group.cpp +++ b/src/group.cpp @@ -105,7 +105,7 @@ void Group::assign(int narg, char **arg) int igroup = find(arg[0]); if (igroup == -1) error->all(FLERR,"Could not find group delete group ID"); if (igroup == 0) error->all(FLERR,"Cannot delete group all"); - for (auto fix : modify->get_fix_list()) + for (const auto &fix : modify->get_fix_list()) if (fix->igroup == igroup) error->all(FLERR,"Cannot delete group currently used by a fix"); for (i = 0; i < modify->ncompute; i++) diff --git a/src/info.cpp b/src/info.cpp index 8f04e14ae4..4e95a58759 100644 --- a/src/info.cpp +++ b/src/info.cpp @@ -569,7 +569,7 @@ void Info::command(int narg, char **arg) int i = 0; char **names = group->names; fputs("\nCompute information:\n",out); - for (auto compute : modify->get_compute_list()) + for (const auto &compute : modify->get_compute_list()) fmt::print(out,"Compute[{:3d}]: {:16} style = {:16} group = {}\n", i++, std::string(compute->id)+',',std::string(compute->style)+',', names[compute->igroup]); @@ -598,7 +598,7 @@ void Info::command(int narg, char **arg) int i = 0; char **names = group->names; fputs("\nFix information:\n",out); - for (auto fix : modify->get_fix_list()) + for (const auto &fix : modify->get_fix_list()) fmt::print(out, "Fix[{:3d}]: {:16} style = {:16} group = {}\n",i++, std::string(fix->id)+',',std::string(fix->style)+',',names[fix->igroup]); } @@ -906,7 +906,7 @@ bool Info::is_defined(const char *category, const char *name) return true; } } else if (strcmp(category,"fix") == 0) { - for (auto fix : modify->get_fix_list()) { + for (const auto &fix : modify->get_fix_list()) { if (strcmp(fix->id,name) == 0) return true; } @@ -1011,7 +1011,7 @@ static std::vector get_style_names(std::map std::vector names; names.reserve(styles->size()); - for (auto const& kv : *styles) { + for (auto const &kv : *styles) { // skip "secret" styles if (isupper(kv.first[0])) continue; names.push_back(kv.first); diff --git a/src/verlet.cpp b/src/verlet.cpp index 0a5a66ebc2..aa180f5644 100644 --- a/src/verlet.cpp +++ b/src/verlet.cpp @@ -53,7 +53,7 @@ void Verlet::init() // warn if no fixes doing time integration bool do_time_integrate = false; - for (auto fix : modify->get_fix_list()) + for (const auto &fix : modify->get_fix_list()) if (fix->time_integrate) do_time_integrate; if (!do_time_integrate && (comm->me == 0)) diff --git a/src/write_data.cpp b/src/write_data.cpp index 9684ae6901..c2c59fd046 100644 --- a/src/write_data.cpp +++ b/src/write_data.cpp @@ -213,7 +213,7 @@ void WriteData::write(const std::string &file) // extra sections managed by fixes if (fixflag) - for (auto ifix : modify->get_fix_list()) + for (auto &ifix : modify->get_fix_list()) if (ifix->wd_section) for (int m = 0; m < ifix->wd_section; m++) fix(ifix,m); @@ -267,7 +267,7 @@ void WriteData::header() // fix info if (fixflag) - for (auto ifix : modify->get_fix_list()) + for (auto &ifix : modify->get_fix_list()) if (ifix->wd_header) for (int m = 0; m < ifix->wd_header; m++) ifix->write_data_header(fp,m); diff --git a/src/write_restart.cpp b/src/write_restart.cpp index 5580a564c7..261429c95d 100644 --- a/src/write_restart.cpp +++ b/src/write_restart.cpp @@ -413,7 +413,7 @@ void WriteRestart::write(const std::string &file) // invoke any fixes that write their own restart file - for (auto fix : modify->get_fix_list()) + for (auto &fix : modify->get_fix_list()) if (fix->restart_file) fix->write_restart_file(file.c_str()); } From 4551bf4bc0ea31a255b9536a0ee9e1ed044640ba Mon Sep 17 00:00:00 2001 From: Yury Lysogorskiy Date: Tue, 26 Oct 2021 10:19:11 +0200 Subject: [PATCH 267/372] yaml-cpp-pace: bugfix in CMakeLists.txt --- cmake/Modules/Packages/ML-PACE.cmake | 5 +++-- lib/pace/Install.py | 3 ++- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/cmake/Modules/Packages/ML-PACE.cmake b/cmake/Modules/Packages/ML-PACE.cmake index 263df9f24d..0086475354 100644 --- a/cmake/Modules/Packages/ML-PACE.cmake +++ b/cmake/Modules/Packages/ML-PACE.cmake @@ -1,5 +1,6 @@ -set(PACELIB_URL "https://github.com/ICAMS/lammps-user-pace/archive/refs/tags/v.2021.10.25.yaml_pace.tar.gz" CACHE STRING "URL for PACE evaluator library sources") -set(PACELIB_MD5 "4c84c1cb1e2d8c690e3f797433ed2886" CACHE STRING "MD5 checksum of PACE evaluator library tarball") +set(PACELIB_URL "https://github.com/ICAMS/lammps-user-pace/archive/refs/tags/v.2021.10.25.yaml_pace.upd2.tar.gz" CACHE STRING "URL for PACE evaluator library sources") + +set(PACELIB_MD5 "6ba037a6149bd5c9472ead6356288a6a" CACHE STRING "MD5 checksum of PACE evaluator library tarball") mark_as_advanced(PACELIB_URL) mark_as_advanced(PACELIB_MD5) diff --git a/lib/pace/Install.py b/lib/pace/Install.py index 1c243c0446..7c2c798146 100644 --- a/lib/pace/Install.py +++ b/lib/pace/Install.py @@ -15,7 +15,7 @@ from install_helpers import fullpath, geturl, checkmd5sum # settings thisdir = fullpath('.') -version = 'v.2021.10.25.yaml_pace' +version = 'v.2021.10.25.yaml_pace.upd2' # known checksums for different PACE versions. used to validate the download. checksums = { \ @@ -23,6 +23,7 @@ checksums = { \ 'v.2021.4.9' : '4db54962fbd6adcf8c18d46e1798ceb5', 'v.2021.9.28' : 'f98363bb98adc7295ea63974738c2a1b', 'v.2021.10.25.yaml_pace' : '4c84c1cb1e2d8c690e3f797433ed2886' + 'v.2021.10.25.yaml_pace.upd2': '6ba037a6149bd5c9472ead6356288a6a' } From 30001f2698dc29e03617a41380cd0962d4d38109 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Tue, 26 Oct 2021 06:37:59 -0400 Subject: [PATCH 268/372] use preprocessor --- src/MGPT/pair_mgpt.cpp | 36 ++++++++++++++++++------------------ 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/src/MGPT/pair_mgpt.cpp b/src/MGPT/pair_mgpt.cpp index fde6fc7084..4744693b0f 100644 --- a/src/MGPT/pair_mgpt.cpp +++ b/src/MGPT/pair_mgpt.cpp @@ -191,24 +191,24 @@ static inline double mtrace(int n,double A[8][8],double B[8][8]) { void PairMGPT::make_triplet(bond_data *ij_bond,bond_data *ik_bond, triplet_data *triptr) { - if (true) { - const trmul_fun tr_mul = linalg.tr_mul; - tr_mul(&(ij_bond->H.m[1][0]), &(ik_bond->H.m[1][0]) ,&(triptr->H1H2.m[1][0]) ); - tr_mul(&(ij_bond->Hx.m[1][0]),&(ik_bond->H.m[1][0]) ,&(triptr->H1xH2.m[1][0])); - tr_mul(&(ij_bond->Hy.m[1][0]),&(ik_bond->H.m[1][0]) ,&(triptr->H1yH2.m[1][0])); - tr_mul(&(ij_bond->Hz.m[1][0]),&(ik_bond->H.m[1][0]) ,&(triptr->H1zH2.m[1][0])); - tr_mul(&(ij_bond->H.m[1][0]) ,&(ik_bond->Hx.m[1][0]),&(triptr->H1H2x.m[1][0])); - tr_mul(&(ij_bond->H.m[1][0]) ,&(ik_bond->Hy.m[1][0]),&(triptr->H1H2y.m[1][0])); - tr_mul(&(ij_bond->H.m[1][0]) ,&(ik_bond->Hz.m[1][0]),&(triptr->H1H2z.m[1][0])); - } else { - transprod(ij_bond->H, ik_bond->H ,triptr->H1H2 ); - transprod(ij_bond->Hx,ik_bond->H ,triptr->H1xH2); - transprod(ij_bond->Hy,ik_bond->H ,triptr->H1yH2); - transprod(ij_bond->Hz,ik_bond->H ,triptr->H1zH2); - transprod(ij_bond->H ,ik_bond->Hx,triptr->H1H2x); - transprod(ij_bond->H ,ik_bond->Hy,triptr->H1H2y); - transprod(ij_bond->H ,ik_bond->Hz,triptr->H1H2z); - } +#if 1 + const trmul_fun tr_mul = linalg.tr_mul; + tr_mul(&(ij_bond->H.m[1][0]), &(ik_bond->H.m[1][0]) ,&(triptr->H1H2.m[1][0]) ); + tr_mul(&(ij_bond->Hx.m[1][0]),&(ik_bond->H.m[1][0]) ,&(triptr->H1xH2.m[1][0])); + tr_mul(&(ij_bond->Hy.m[1][0]),&(ik_bond->H.m[1][0]) ,&(triptr->H1yH2.m[1][0])); + tr_mul(&(ij_bond->Hz.m[1][0]),&(ik_bond->H.m[1][0]) ,&(triptr->H1zH2.m[1][0])); + tr_mul(&(ij_bond->H.m[1][0]) ,&(ik_bond->Hx.m[1][0]),&(triptr->H1H2x.m[1][0])); + tr_mul(&(ij_bond->H.m[1][0]) ,&(ik_bond->Hy.m[1][0]),&(triptr->H1H2y.m[1][0])); + tr_mul(&(ij_bond->H.m[1][0]) ,&(ik_bond->Hz.m[1][0]),&(triptr->H1H2z.m[1][0])); +#else + transprod(ij_bond->H, ik_bond->H ,triptr->H1H2 ); + transprod(ij_bond->Hx,ik_bond->H ,triptr->H1xH2); + transprod(ij_bond->Hy,ik_bond->H ,triptr->H1yH2); + transprod(ij_bond->Hz,ik_bond->H ,triptr->H1zH2); + transprod(ij_bond->H ,ik_bond->Hx,triptr->H1H2x); + transprod(ij_bond->H ,ik_bond->Hy,triptr->H1H2y); + transprod(ij_bond->H ,ik_bond->Hz,triptr->H1H2z); +#endif } static double t_make_t = 0.0,t_make_b = 0.0,n_make = 0.0; From 5141a8014272c5e6af68d595220be3c133789674 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Tue, 26 Oct 2021 06:38:35 -0400 Subject: [PATCH 269/372] remove useless logical --- src/PTM/ptm_convex_hull_incremental.cpp | 25 ++++++++++++------------- 1 file changed, 12 insertions(+), 13 deletions(-) diff --git a/src/PTM/ptm_convex_hull_incremental.cpp b/src/PTM/ptm_convex_hull_incremental.cpp index 23b8e3a89d..304b1f9d2d 100644 --- a/src/PTM/ptm_convex_hull_incremental.cpp +++ b/src/PTM/ptm_convex_hull_incremental.cpp @@ -8,12 +8,13 @@ The above copyright notice and this permission notice shall be included in all c THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ +#include "ptm_convex_hull_incremental.h" +#include "ptm_constants.h" + #include #include #include #include -#include "ptm_convex_hull_incremental.h" -#include "ptm_constants.h" namespace ptm { @@ -252,19 +253,18 @@ static int initialize_convex_hull(int num_points, const double (*points)[3], int int get_convex_hull(int num_points, const double (*points)[3], convexhull_t* ch, int8_t simplex[][3]) { - assert( num_points == PTM_NUM_POINTS_FCC - || num_points == PTM_NUM_POINTS_HCP - || num_points == PTM_NUM_POINTS_BCC - || num_points == PTM_NUM_POINTS_ICO - || num_points == PTM_NUM_POINTS_SC - || num_points == PTM_NUM_POINTS_DCUB - || num_points == PTM_NUM_POINTS_DHEX); + assert(num_points == PTM_NUM_POINTS_FCC + || num_points == PTM_NUM_POINTS_HCP + || num_points == PTM_NUM_POINTS_BCC + || num_points == PTM_NUM_POINTS_ICO + || num_points == PTM_NUM_POINTS_SC + || num_points == PTM_NUM_POINTS_DCUB + || num_points == PTM_NUM_POINTS_DHEX); int ret = 0; int num_prev = ch->num_prev; ch->num_prev = num_points; - if (!ch->ok || false) - { + if (!ch->ok) { ret = initialize_convex_hull(num_points, points, ch->facets, ch->plane_normal, ch->processed, ch->initial_vertices, ch->barycentre); if (ret != 0) return ret; @@ -273,8 +273,7 @@ int get_convex_hull(int num_points, const double (*points)[3], convexhull_t* ch, num_prev = 0; } - for (int i = num_prev;iprocessed[i]) continue; ch->processed[i] = true; From 886d6702c40f6b69f3a82a3b910db5eba32681d3 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Tue, 26 Oct 2021 06:38:47 -0400 Subject: [PATCH 270/372] remove dead code --- src/REAXFF/reaxff_allocate.cpp | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/src/REAXFF/reaxff_allocate.cpp b/src/REAXFF/reaxff_allocate.cpp index b81b8ed222..16b71d041c 100644 --- a/src/REAXFF/reaxff_allocate.cpp +++ b/src/REAXFF/reaxff_allocate.cpp @@ -231,14 +231,11 @@ namespace ReaxFF { auto error = system->error_ptr; reallocate_data *wsr = &(workspace->realloc); - if (system->n >= DANGER_ZONE * system->local_cap || - (false && system->n <= LOOSE_ZONE * system->local_cap)) { + if (system->n >= DANGER_ZONE * system->local_cap) system->local_cap = MAX((int)(system->n * safezone), mincap); - } int Nflag = 0; - if (system->N >= DANGER_ZONE * system->total_cap || - (false && system->N <= LOOSE_ZONE * system->total_cap)) { + if (system->N >= DANGER_ZONE * system->total_cap) { Nflag = 1; system->total_cap = MAX((int)(system->N * safezone), mincap); } @@ -271,8 +268,7 @@ namespace ReaxFF { /* hydrogen bonds list */ if (control->hbond_cut > 0) { Hflag = 0; - if (system->numH >= DANGER_ZONE * system->Hcap || - (false && system->numH <= LOOSE_ZONE * system->Hcap)) { + if (system->numH >= DANGER_ZONE * system->Hcap) { Hflag = 1; system->Hcap = int(MAX(system->numH * saferzone, mincap)); } From 2a9a8adfc0c2ded77a735bbfee963796da6cd6c9 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Tue, 26 Oct 2021 06:41:00 -0400 Subject: [PATCH 271/372] apply clang-format --- src/PTM/ptm_convex_hull_incremental.cpp | 511 +++++++++++------------- 1 file changed, 241 insertions(+), 270 deletions(-) diff --git a/src/PTM/ptm_convex_hull_incremental.cpp b/src/PTM/ptm_convex_hull_incremental.cpp index 304b1f9d2d..25ff54c787 100644 --- a/src/PTM/ptm_convex_hull_incremental.cpp +++ b/src/PTM/ptm_convex_hull_incremental.cpp @@ -1,4 +1,3 @@ -// clang-format off /*Copyright (c) 2016 PM Larsen Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: @@ -11,10 +10,10 @@ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLI #include "ptm_convex_hull_incremental.h" #include "ptm_constants.h" -#include -#include -#include #include +#include +#include +#include namespace ptm { @@ -23,352 +22,324 @@ namespace ptm { #define BOTH 3 #define TOLERANCE 1E-8 -static double norm_squared(double* p) +static double norm_squared(double *p) { - double x = p[0]; - double y = p[1]; - double z = p[2]; + double x = p[0]; + double y = p[1]; + double z = p[2]; - return x*x + y*y + z*z; + return x * x + y * y + z * z; } -static double dot_product(const double* a, const double* b) +static double dot_product(const double *a, const double *b) { - return a[0]*b[0] + a[1]*b[1] + a[2]*b[2]; + return a[0] * b[0] + a[1] * b[1] + a[2] * b[2]; } -static void cross_product(double* a, double* b, double* c) +static void cross_product(double *a, double *b, double *c) { - c[0] = a[1] * b[2] - a[2] * b[1]; - c[1] = a[2] * b[0] - a[0] * b[2]; - c[2] = a[0] * b[1] - a[1] * b[0]; + c[0] = a[1] * b[2] - a[2] * b[1]; + c[1] = a[2] * b[0] - a[0] * b[2]; + c[2] = a[0] * b[1] - a[1] * b[0]; } -static void calculate_plane_normal(const double (*points)[3], int a, int b, int c, double* plane_normal) +static void calculate_plane_normal(const double (*points)[3], int a, int b, int c, + double *plane_normal) { - double u[3] = { points[b][0] - points[a][0], - points[b][1] - points[a][1], - points[b][2] - points[a][2] }; + double u[3] = {points[b][0] - points[a][0], points[b][1] - points[a][1], + points[b][2] - points[a][2]}; - double v[3] = { points[c][0] - points[a][0], - points[c][1] - points[a][1], - points[c][2] - points[a][2] }; + double v[3] = {points[c][0] - points[a][0], points[c][1] - points[a][1], + points[c][2] - points[a][2]}; - cross_product(u, v, plane_normal); - double norm = sqrt(norm_squared(plane_normal)); - plane_normal[0] /= norm; - plane_normal[1] /= norm; - plane_normal[2] /= norm; + cross_product(u, v, plane_normal); + double norm = sqrt(norm_squared(plane_normal)); + plane_normal[0] /= norm; + plane_normal[1] /= norm; + plane_normal[2] /= norm; } -static double point_plane_distance(const double* w, const double* plane_point, const double* plane_cross) +static double point_plane_distance(const double *w, const double *plane_point, + const double *plane_cross) { - return plane_cross[0] * (plane_point[0] - w[0]) - + plane_cross[1] * (plane_point[1] - w[1]) - + plane_cross[2] * (plane_point[2] - w[2]); + return plane_cross[0] * (plane_point[0] - w[0]) + plane_cross[1] * (plane_point[1] - w[1]) + + plane_cross[2] * (plane_point[2] - w[2]); } -static bool calc_max_extent(int num_points, const double (*points)[3], int* min_index, int* max_index) +static bool calc_max_extent(int num_points, const double (*points)[3], int *min_index, + int *max_index) { - for (int j=0;j<3;j++) - { - double dmin = DBL_MAX, dmax = -DBL_MAX; - int imin = 0, imax = 0; + for (int j = 0; j < 3; j++) { + double dmin = DBL_MAX, dmax = -DBL_MAX; + int imin = 0, imax = 0; - for (int i = 0;i dmax) - { - dmax = d; - imax = i; - } - } + for (int i = 0; i < num_points; i++) { + double d = points[i][j]; + if (d < dmin) { + dmin = d; + imin = i; + } + if (d > dmax) { + dmax = d; + imax = i; + } + } - if (imin == imax) - return false; //degenerate point set + if (imin == imax) return false; //degenerate point set - min_index[j] = imin; - max_index[j] = imax; - } + min_index[j] = imin; + max_index[j] = imax; + } - return true; + return true; } -static bool find_third_point(int num_points, const double (*points)[3], int a, int b, int* p_c) +static bool find_third_point(int num_points, const double (*points)[3], int a, int b, int *p_c) { - const double* x1 = points[a]; - const double* x2 = points[b]; + const double *x1 = points[a]; + const double *x2 = points[b]; - double x2x1[3] = {x2[0] - x1[0], x2[1] - x1[1], x2[2] - x1[2]}; - double ns_x2x1 = norm_squared(x2x1); + double x2x1[3] = {x2[0] - x1[0], x2[1] - x1[1], x2[2] - x1[2]}; + double ns_x2x1 = norm_squared(x2x1); - int bi = -1; - double max_dist = 0.0; - for (int i = 0;i max_dist) - { - max_dist = dist; - bi = i; - } - } + if (dist > max_dist) { + max_dist = dist; + bi = i; + } + } - *p_c = bi; - return max_dist > TOLERANCE; + *p_c = bi; + return max_dist > TOLERANCE; } -static bool find_fourth_point(int num_points, const double (*points)[3], int a, int b, int c, int* p_d) +static bool find_fourth_point(int num_points, const double (*points)[3], int a, int b, int c, + int *p_d) { - double plane_normal[3]; - calculate_plane_normal(points, a, b, c, plane_normal); + double plane_normal[3]; + calculate_plane_normal(points, a, b, c, plane_normal); + int bi = -1; + double max_dist = 0.0; + for (int i = 0; i < num_points; i++) { + if (i == a || i == b || i == c) continue; - int bi = -1; - double max_dist = 0.0; - for (int i = 0;i max_dist) { + max_dist = dist; + bi = i; + } + } - const double* x0 = points[i]; - double dist = fabs(point_plane_distance(x0, points[a], plane_normal)); - if (dist > max_dist) - { - max_dist = dist; - bi = i; - } - } - - *p_d = bi; - return max_dist > TOLERANCE; + *p_d = bi; + return max_dist > TOLERANCE; } -static int initial_simplex(int num_points, const double (*points)[3], int* initial_vertices) +static int initial_simplex(int num_points, const double (*points)[3], int *initial_vertices) { - int min_index[3] = {0}; - int max_index[3] = {0}; - if (!calc_max_extent(num_points, points, min_index, max_index)) - return -1; + int min_index[3] = {0}; + int max_index[3] = {0}; + if (!calc_max_extent(num_points, points, min_index, max_index)) return -1; - int bi = -1; - double max_dist = 0.0; - for (int i = 0;i<3;i++) - { - int a = min_index[i], b = max_index[i]; - double delta[3] = { points[a][0] - points[b][0], - points[a][1] - points[b][1], - points[a][2] - points[b][2] }; - double dist = norm_squared(delta); - if (dist > max_dist) - { - bi = i; - max_dist = dist; - } - } + int bi = -1; + double max_dist = 0.0; + for (int i = 0; i < 3; i++) { + int a = min_index[i], b = max_index[i]; + double delta[3] = {points[a][0] - points[b][0], points[a][1] - points[b][1], + points[a][2] - points[b][2]}; + double dist = norm_squared(delta); + if (dist > max_dist) { + bi = i; + max_dist = dist; + } + } - //first two points are (a, b) - int a = min_index[bi], b = max_index[bi], c = -1, d = -1; + //first two points are (a, b) + int a = min_index[bi], b = max_index[bi], c = -1, d = -1; - if (!find_third_point(num_points, points, a, b, &c)) - return -2; + if (!find_third_point(num_points, points, a, b, &c)) return -2; - if (!find_fourth_point(num_points, points, a, b, c, &d)) - return -3; + if (!find_fourth_point(num_points, points, a, b, c, &d)) return -3; - initial_vertices[0] = a; - initial_vertices[1] = b; - initial_vertices[2] = c; - initial_vertices[3] = d; - return 0; + initial_vertices[0] = a; + initial_vertices[1] = b; + initial_vertices[2] = c; + initial_vertices[3] = d; + return 0; } -static bool visible(const double* w, const double* plane_point, const double* plane_normal) +static bool visible(const double *w, const double *plane_point, const double *plane_normal) { - return point_plane_distance(w, plane_point, plane_normal) > 0; + return point_plane_distance(w, plane_point, plane_normal) > 0; } -void add_facet(const double (*points)[3], int a, int b, int c, int8_t* facet, double* plane_normal, double* barycentre) +void add_facet(const double (*points)[3], int a, int b, int c, int8_t *facet, double *plane_normal, + double *barycentre) { - calculate_plane_normal(points, a, b, c, plane_normal); - if (visible(barycentre, points[a], plane_normal)) - { - plane_normal[0] = -plane_normal[0]; - plane_normal[1] = -plane_normal[1]; - plane_normal[2] = -plane_normal[2]; + calculate_plane_normal(points, a, b, c, plane_normal); + if (visible(barycentre, points[a], plane_normal)) { + plane_normal[0] = -plane_normal[0]; + plane_normal[1] = -plane_normal[1]; + plane_normal[2] = -plane_normal[2]; - facet[0] = b; - facet[1] = a; - facet[2] = c; - } - else - { - facet[0] = a; - facet[1] = b; - facet[2] = c; - } + facet[0] = b; + facet[1] = a; + facet[2] = c; + } else { + facet[0] = a; + facet[1] = b; + facet[2] = c; + } } -static int initialize_convex_hull(int num_points, const double (*points)[3], int8_t facets[][3], double plane_normal[][3], bool* processed, int* initial_vertices, double* barycentre) +static int initialize_convex_hull(int num_points, const double (*points)[3], int8_t facets[][3], + double plane_normal[][3], bool *processed, int *initial_vertices, + double *barycentre) { - memset(processed, 0, PTM_MAX_POINTS * sizeof(bool)); - memset(barycentre, 0, 3 * sizeof(double)); - int ret = initial_simplex(num_points, points, initial_vertices); - if (ret != 0) - return ret; + memset(processed, 0, PTM_MAX_POINTS * sizeof(bool)); + memset(barycentre, 0, 3 * sizeof(double)); + int ret = initial_simplex(num_points, points, initial_vertices); + if (ret != 0) return ret; - for (int i = 0;i<4;i++) - { - int a = initial_vertices[i]; - processed[a] = true; + for (int i = 0; i < 4; i++) { + int a = initial_vertices[i]; + processed[a] = true; - barycentre[0] += points[a][0]; - barycentre[1] += points[a][1]; - barycentre[2] += points[a][2]; - } - barycentre[0] /= 4; - barycentre[1] /= 4; - barycentre[2] /= 4; + barycentre[0] += points[a][0]; + barycentre[1] += points[a][1]; + barycentre[2] += points[a][2]; + } + barycentre[0] /= 4; + barycentre[1] /= 4; + barycentre[2] /= 4; - add_facet(points, initial_vertices[0], initial_vertices[1], initial_vertices[2], facets[0], plane_normal[0], barycentre); - add_facet(points, initial_vertices[0], initial_vertices[1], initial_vertices[3], facets[1], plane_normal[1], barycentre); - add_facet(points, initial_vertices[0], initial_vertices[2], initial_vertices[3], facets[2], plane_normal[2], barycentre); - add_facet(points, initial_vertices[1], initial_vertices[2], initial_vertices[3], facets[3], plane_normal[3], barycentre); - return 0; + add_facet(points, initial_vertices[0], initial_vertices[1], initial_vertices[2], facets[0], + plane_normal[0], barycentre); + add_facet(points, initial_vertices[0], initial_vertices[1], initial_vertices[3], facets[1], + plane_normal[1], barycentre); + add_facet(points, initial_vertices[0], initial_vertices[2], initial_vertices[3], facets[2], + plane_normal[2], barycentre); + add_facet(points, initial_vertices[1], initial_vertices[2], initial_vertices[3], facets[3], + plane_normal[3], barycentre); + return 0; } -int get_convex_hull(int num_points, const double (*points)[3], convexhull_t* ch, int8_t simplex[][3]) +int get_convex_hull(int num_points, const double (*points)[3], convexhull_t *ch, + int8_t simplex[][3]) { - assert(num_points == PTM_NUM_POINTS_FCC - || num_points == PTM_NUM_POINTS_HCP - || num_points == PTM_NUM_POINTS_BCC - || num_points == PTM_NUM_POINTS_ICO - || num_points == PTM_NUM_POINTS_SC - || num_points == PTM_NUM_POINTS_DCUB - || num_points == PTM_NUM_POINTS_DHEX); + assert(num_points == PTM_NUM_POINTS_FCC || num_points == PTM_NUM_POINTS_HCP || + num_points == PTM_NUM_POINTS_BCC || num_points == PTM_NUM_POINTS_ICO || + num_points == PTM_NUM_POINTS_SC || num_points == PTM_NUM_POINTS_DCUB || + num_points == PTM_NUM_POINTS_DHEX); - int ret = 0; - int num_prev = ch->num_prev; - ch->num_prev = num_points; - if (!ch->ok) { - ret = initialize_convex_hull(num_points, points, ch->facets, ch->plane_normal, ch->processed, ch->initial_vertices, ch->barycentre); - if (ret != 0) - return ret; + int ret = 0; + int num_prev = ch->num_prev; + ch->num_prev = num_points; + if (!ch->ok) { + ret = initialize_convex_hull(num_points, points, ch->facets, ch->plane_normal, ch->processed, + ch->initial_vertices, ch->barycentre); + if (ret != 0) return ret; - ch->num_facets = 4; - num_prev = 0; - } + ch->num_facets = 4; + num_prev = 0; + } - for (int i = num_prev;iprocessed[i]) - continue; - ch->processed[i] = true; + for (int i = num_prev; i < num_points; i++) { + if (ch->processed[i]) continue; + ch->processed[i] = true; - int num_to_add = 0; - int8_t to_add[PTM_MAX_FACETS][3]; - int8_t edge_visible[PTM_MAX_POINTS][PTM_MAX_POINTS]; - memset(edge_visible, 0, sizeof(int8_t) * PTM_MAX_POINTS * PTM_MAX_POINTS); - for (int j = 0;jnum_facets;j++) - { - int a = ch->facets[j][0]; - int b = ch->facets[j][1]; - int c = ch->facets[j][2]; + int num_to_add = 0; + int8_t to_add[PTM_MAX_FACETS][3]; + int8_t edge_visible[PTM_MAX_POINTS][PTM_MAX_POINTS]; + memset(edge_visible, 0, sizeof(int8_t) * PTM_MAX_POINTS * PTM_MAX_POINTS); + for (int j = 0; j < ch->num_facets; j++) { + int a = ch->facets[j][0]; + int b = ch->facets[j][1]; + int c = ch->facets[j][2]; - int u = 0, v = 0, w = 0; + int u = 0, v = 0, w = 0; - double distance = point_plane_distance(points[i], points[a], ch->plane_normal[j]); - bool vis = distance > TOLERANCE; - if (vis) - { - u = edge_visible[a][b] |= VISIBLE; - edge_visible[b][a] |= VISIBLE; + double distance = point_plane_distance(points[i], points[a], ch->plane_normal[j]); + bool vis = distance > TOLERANCE; + if (vis) { + u = edge_visible[a][b] |= VISIBLE; + edge_visible[b][a] |= VISIBLE; - v = edge_visible[b][c] |= VISIBLE; - edge_visible[c][b] |= VISIBLE; + v = edge_visible[b][c] |= VISIBLE; + edge_visible[c][b] |= VISIBLE; - w = edge_visible[c][a] |= VISIBLE; - edge_visible[a][c] |= VISIBLE; + w = edge_visible[c][a] |= VISIBLE; + edge_visible[a][c] |= VISIBLE; - memcpy(ch->facets[j], ch->facets[ch->num_facets-1], 3 * sizeof(int8_t)); - memcpy(ch->plane_normal[j], ch->plane_normal[ch->num_facets-1], 3 * sizeof(double)); - ch->num_facets--; - j--; - } - else - { - u = edge_visible[a][b] |= INVISIBLE; - edge_visible[b][a] |= INVISIBLE; + memcpy(ch->facets[j], ch->facets[ch->num_facets - 1], 3 * sizeof(int8_t)); + memcpy(ch->plane_normal[j], ch->plane_normal[ch->num_facets - 1], 3 * sizeof(double)); + ch->num_facets--; + j--; + } else { + u = edge_visible[a][b] |= INVISIBLE; + edge_visible[b][a] |= INVISIBLE; - v = edge_visible[b][c] |= INVISIBLE; - edge_visible[c][b] |= INVISIBLE; + v = edge_visible[b][c] |= INVISIBLE; + edge_visible[c][b] |= INVISIBLE; - w = edge_visible[c][a] |= INVISIBLE; - edge_visible[a][c] |= INVISIBLE; - } + w = edge_visible[c][a] |= INVISIBLE; + edge_visible[a][c] |= INVISIBLE; + } - if (u == BOTH) - { - to_add[num_to_add][0] = i; - to_add[num_to_add][1] = a; - to_add[num_to_add][2] = b; - num_to_add++; - } + if (u == BOTH) { + to_add[num_to_add][0] = i; + to_add[num_to_add][1] = a; + to_add[num_to_add][2] = b; + num_to_add++; + } - if (v == BOTH) - { - to_add[num_to_add][0] = i; - to_add[num_to_add][1] = b; - to_add[num_to_add][2] = c; - num_to_add++; - } + if (v == BOTH) { + to_add[num_to_add][0] = i; + to_add[num_to_add][1] = b; + to_add[num_to_add][2] = c; + num_to_add++; + } - if (w == BOTH) - { - to_add[num_to_add][0] = i; - to_add[num_to_add][1] = c; - to_add[num_to_add][2] = a; - num_to_add++; - } - } + if (w == BOTH) { + to_add[num_to_add][0] = i; + to_add[num_to_add][1] = c; + to_add[num_to_add][2] = a; + num_to_add++; + } + } - for (int j = 0;jnum_facets >= PTM_MAX_FACETS) - return -4; + for (int j = 0; j < num_to_add; j++) { + if (ch->num_facets >= PTM_MAX_FACETS) return -4; - add_facet(points, to_add[j][0], to_add[j][1], to_add[j][2], ch->facets[ch->num_facets], ch->plane_normal[ch->num_facets], ch->barycentre); ch->num_facets++; - } - } + add_facet(points, to_add[j][0], to_add[j][1], to_add[j][2], ch->facets[ch->num_facets], + ch->plane_normal[ch->num_facets], ch->barycentre); + ch->num_facets++; + } + } - for (int i=0;inum_facets;i++) - { - int a = ch->facets[i][0]; - int b = ch->facets[i][1]; - int c = ch->facets[i][2]; - if (a == 0 || b == 0 || c == 0) - return 1; //central atom contained in convex hull + for (int i = 0; i < ch->num_facets; i++) { + int a = ch->facets[i][0]; + int b = ch->facets[i][1]; + int c = ch->facets[i][2]; + if (a == 0 || b == 0 || c == 0) return 1; //central atom contained in convex hull - simplex[i][0] = a - 1; - simplex[i][1] = b - 1; - simplex[i][2] = c - 1; - } - - return ret; -} + simplex[i][0] = a - 1; + simplex[i][1] = b - 1; + simplex[i][2] = c - 1; + } + return ret; } +} // namespace ptm From f783958e39948d48ce9b2714e1fa8477809fd380 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Tue, 26 Oct 2021 12:11:28 -0400 Subject: [PATCH 272/372] add test for create_atoms() --- unittest/python/python-commands.py | 41 ++++++++++++++++++++++++++++-- 1 file changed, 39 insertions(+), 2 deletions(-) diff --git a/unittest/python/python-commands.py b/unittest/python/python-commands.py index f3526d6d4b..bd8512894f 100644 --- a/unittest/python/python-commands.py +++ b/unittest/python/python-commands.py @@ -1,6 +1,6 @@ -import sys,os,unittest -from lammps import lammps, LMP_VAR_ATOM, LMP_STYLE_GLOBAL, LMP_TYPE_VECTOR +import sys,os,unittest,ctypes +from lammps import lammps, LMP_VAR_ATOM, LMP_STYLE_GLOBAL, LMP_TYPE_VECTOR, LAMMPS_DOUBLE_2D, LAMMPS_AUTODETECT has_manybody=False try: @@ -494,6 +494,43 @@ create_atoms 1 single & self.assertEqual(self.lmp.extract_global("sublo_lambda"), [0.0, 0.0, 0.0]) self.assertEqual(self.lmp.extract_global("subhi_lambda"), [1.0, 1.0, 1.0]) + def test_create_atoms(self): + self.lmp.command("boundary f p m") + self.lmp.command("region box block 0 10 0 10 0 10") + self.lmp.command("create_box 2 box") + # second atom is outside the box -> dropped + self.lmp.create_atoms(2, [1,2], [1,1], [1.0, 1.0, 3.0, 5.0, 8.0, 12.0]) + self.assertEqual(self.lmp.get_natoms(),1) + # non-zero velocities + self.lmp.create_atoms(2, None, [2,2], [2.0, 2.0, 1.0, 3.0, 4.0, 6.0], v=[0.1, 0.2, 0.3, -0.1, -0.2, -0.3]) + self.assertEqual(self.lmp.get_natoms(),3) + # first atom is dropped, extend shrinkwrapped box for second atom, third atoms is wrapped around PBC. + self.lmp.create_atoms(3, [5,8,10], [1,2,1], [-1.0, 1.0, 3.0, 5.0, 8.0, 12.0, 1.0, -1.0, 1.0], shrinkexceed=True) + self.assertEqual(self.lmp.get_natoms(),5) + # set image flags + self.lmp.create_atoms(1, None, [2], [5.0, 8.0, 1.0], image=[self.lmp.encode_image_flags(1,0,-1)]) + self.assertEqual(self.lmp.get_natoms(),6) + tag = self.lmp.extract_atom("id") + typ = self.lmp.extract_atom("type") + pos = self.lmp.extract_atom("x",LAMMPS_DOUBLE_2D) + vel = self.lmp.extract_atom("v",LAMMPS_DOUBLE_2D) + img = self.lmp.extract_atom("image",LAMMPS_AUTODETECT) + # expected results: tag, type, x, v, image + result = [ [ 1, 1, [1.0, 1.0, 3.0], [ 0.0, 0.0, 0.0], [0, 0, 0]],\ + [ 2, 2, [2.0, 2.0, 1.0], [ 0.1, 0.2, 0.3], [0, 0, 0]],\ + [ 3, 2, [3.0, 4.0, 6.0], [-0.1, -0.2, -0.3], [0, 0, 0]],\ + [ 8, 2, [5.0, 8.0, 12.0], [ 0.0, 0.0, 0.0], [0, 0, 0]],\ + [10, 1, [1.0, 9.0, 1.0], [ 0.0, 0.0, 0.0], [0, 0, 0]],\ + [11, 2, [5.0, 8.0, 1.0], [ 0.0, 0.0, 0.0], [1, 0, -1]] ] + for i in range(len(result)): + self.assertEqual(tag[i],result[i][0]) + self.assertEqual(typ[i],result[i][1]) + for j in range(3): + self.assertEqual(pos[i][0:3],result[i][2]) + self.assertEqual(vel[i][0:3],result[i][3]) + self.assertEqual(self.lmp.decode_image_flags(img[i]), result[i][4]) + + ############################## if __name__ == "__main__": unittest.main() From 3044923cbfff0a857c03bc18413a418d2d1d3479 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Tue, 26 Oct 2021 12:12:21 -0400 Subject: [PATCH 273/372] less ambiguous tests for arguments being not None --- python/lammps/core.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/python/lammps/core.py b/python/lammps/core.py index 7dea6e5e6e..1588709d92 100644 --- a/python/lammps/core.py +++ b/python/lammps/core.py @@ -1361,7 +1361,7 @@ class lammps(object): This function is a wrapper around the :cpp:func:`lammps_create_atoms` function of the C-library interface, and the behavior is similar except that the *v*, *image*, and *shrinkexceed* arguments are optional and - default to *None*, *None*, and *False*, respectively. With none being + default to *None*, *None*, and *False*, respectively. With *None* being equivalent to a ``NULL`` pointer in C. The lists of coordinates, types, atom IDs, velocities, image flags can @@ -1389,7 +1389,7 @@ class lammps(object): :return: number of atoms created. 0 if insufficient or invalid data :rtype: int """ - if id: + if id != None: id_lmp = (self.c_tagint*n)() try: id_lmp[:] = id[0:n] @@ -1411,7 +1411,7 @@ class lammps(object): except ValueError: return 0 - if v: + if v != None: v_lmp = (c_double*(three_n))() try: v_lmp[:] = v[0:three_n] @@ -1420,7 +1420,7 @@ class lammps(object): else: v_lmp = None - if image: + if image != None: img_lmp = (self.c_imageint*n)() try: img_lmp[:] = image[0:n] From 3d9e4638a73db69849b306d44c3e61a7d0d6ada2 Mon Sep 17 00:00:00 2001 From: Daniel Arndt Date: Tue, 26 Oct 2021 13:08:03 -0400 Subject: [PATCH 274/372] Don't use -restrict for icpx --- cmake/CMakeLists.txt | 2 +- examples/plugins/CMakeLists.txt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt index ec4a9c2eb7..449a9b3141 100644 --- a/cmake/CMakeLists.txt +++ b/cmake/CMakeLists.txt @@ -81,7 +81,7 @@ check_for_autogen_files(${LAMMPS_SOURCE_DIR}) include(CheckIncludeFileCXX) # set required compiler flags and compiler/CPU arch specific optimizations -if((CMAKE_CXX_COMPILER_ID STREQUAL "Intel") OR (CMAKE_CXX_COMPILER_ID STREQUAL "IntelLLVM")) +if(CMAKE_CXX_COMPILER_ID STREQUAL "Intel") if(CMAKE_SYSTEM_NAME STREQUAL "Windows") if (CMAKE_CXX_COMPILER_ID STREQUAL "Intel") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /Qrestrict") diff --git a/examples/plugins/CMakeLists.txt b/examples/plugins/CMakeLists.txt index c61454870a..0ca2c025e2 100644 --- a/examples/plugins/CMakeLists.txt +++ b/examples/plugins/CMakeLists.txt @@ -41,7 +41,7 @@ set(CMAKE_CXX_STANDARD 11) set(CMAKE_CXX_STANDARD_REQUIRED ON) # Need -restrict with Intel compilers -if((CMAKE_CXX_COMPILER_ID STREQUAL "Intel") OR (CMAKE_CXX_COMPILER_ID STREQUAL "IntelLLVM")) +if(CMAKE_CXX_COMPILER_ID STREQUAL "Intel") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -restrict") endif() From fe9dfc60957e49d6908f25b95947a065057fc36f Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Tue, 26 Oct 2021 14:17:31 -0400 Subject: [PATCH 275/372] follow Python style guidelines --- python/lammps/core.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/python/lammps/core.py b/python/lammps/core.py index 1588709d92..5e51a7bba0 100644 --- a/python/lammps/core.py +++ b/python/lammps/core.py @@ -1389,7 +1389,7 @@ class lammps(object): :return: number of atoms created. 0 if insufficient or invalid data :rtype: int """ - if id != None: + if id is not None: id_lmp = (self.c_tagint*n)() try: id_lmp[:] = id[0:n] @@ -1411,7 +1411,7 @@ class lammps(object): except ValueError: return 0 - if v != None: + if v is not None: v_lmp = (c_double*(three_n))() try: v_lmp[:] = v[0:three_n] @@ -1420,7 +1420,7 @@ class lammps(object): else: v_lmp = None - if image != None: + if image is not None: img_lmp = (self.c_imageint*n)() try: img_lmp[:] = image[0:n] From 008013ddfbf58e9698ec504bbdeb59783ae3dd57 Mon Sep 17 00:00:00 2001 From: Richard Berger Date: Tue, 26 Oct 2021 15:00:12 -0400 Subject: [PATCH 276/372] Explicitly check for None --- python/lammps/core.py | 10 +++++----- python/lammps/pylammps.py | 10 +++++----- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/python/lammps/core.py b/python/lammps/core.py index 5e51a7bba0..fcd5c76ad5 100644 --- a/python/lammps/core.py +++ b/python/lammps/core.py @@ -99,7 +99,7 @@ class lammps(object): # load a shared object. try: - if ptr: self.lib = CDLL("",RTLD_GLOBAL) + if ptr is not None: self.lib = CDLL("",RTLD_GLOBAL) except OSError: self.lib = None @@ -329,7 +329,7 @@ class lammps(object): # ptr is the desired instance of LAMMPS # just convert it to ctypes ptr and store in self.lmp - if not ptr: + if ptr is None: # with mpi4py v2+, we can pass MPI communicators to LAMMPS # need to adjust for type of MPI communicator object @@ -338,7 +338,7 @@ class lammps(object): from mpi4py import MPI self.MPI = MPI - if comm: + if comm is not None: if not self.has_mpi_support: raise Exception('LAMMPS not compiled with real MPI library') if not self.has_mpi4py: @@ -354,7 +354,7 @@ class lammps(object): narg = 0 cargs = None - if cmdargs: + if cmdargs is not None: cmdargs.insert(0,"lammps") narg = len(cmdargs) for i in range(narg): @@ -376,7 +376,7 @@ class lammps(object): if self.has_mpi4py and self.has_mpi_support: self.comm = self.MPI.COMM_WORLD self.opened = 1 - if cmdargs: + if cmdargs is not None: cmdargs.insert(0,"lammps") narg = len(cmdargs) for i in range(narg): diff --git a/python/lammps/pylammps.py b/python/lammps/pylammps.py index a6e3578aef..abd4d6da98 100644 --- a/python/lammps/pylammps.py +++ b/python/lammps/pylammps.py @@ -854,30 +854,30 @@ class IPyLammps(PyLammps): """ cmd_args = [group, "image", filename, color, diameter] - if size: + if size is not None: width = size[0] height = size[1] cmd_args += ["size", width, height] - if view: + if view is not None: theta = view[0] phi = view[1] cmd_args += ["view", theta, phi] - if center: + if center is not None: flag = center[0] Cx = center[1] Cy = center[2] Cz = center[3] cmd_args += ["center", flag, Cx, Cy, Cz] - if up: + if up is not None: Ux = up[0] Uy = up[1] Uz = up[2] cmd_args += ["up", Ux, Uy, Uz] - if zoom: + if zoom is not None: cmd_args += ["zoom", zoom] cmd_args.append("modify backcolor " + background_color) From 3376f3daa8c41b0510d4ea9a85975d34f89bef47 Mon Sep 17 00:00:00 2001 From: Richard Berger Date: Tue, 26 Oct 2021 16:45:57 -0400 Subject: [PATCH 277/372] Remove unused import --- python/examples/matplotlib_plot.py | 1 - python/examples/simple.py | 1 - 2 files changed, 2 deletions(-) diff --git a/python/examples/matplotlib_plot.py b/python/examples/matplotlib_plot.py index b85d40c4c4..0c918507ad 100755 --- a/python/examples/matplotlib_plot.py +++ b/python/examples/matplotlib_plot.py @@ -62,7 +62,6 @@ if me == 0: plt.show(block=False) # run nfreq steps at a time w/out pre/post, query compute, refresh plot -import time while ntimestep < nsteps: lmp.command("run %d pre no post no" % nfreq) diff --git a/python/examples/simple.py b/python/examples/simple.py index 861a208895..8925ce48c0 100755 --- a/python/examples/simple.py +++ b/python/examples/simple.py @@ -13,7 +13,6 @@ from __future__ import print_function import sys -import numpy as np import ctypes # parse command line From f0318fb87429b5439c1f5494edd4ad35384c8666 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Tue, 26 Oct 2021 19:16:13 -0400 Subject: [PATCH 278/372] try to make changing LMP_INC settings less confusing to inexperienced people --- doc/src/Build_settings.rst | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/doc/src/Build_settings.rst b/doc/src/Build_settings.rst index 01bd8e2c80..b68313aaed 100644 --- a/doc/src/Build_settings.rst +++ b/doc/src/Build_settings.rst @@ -321,9 +321,7 @@ following settings: .. code-block:: make - LMP_INC = -DLAMMPS_JPEG - LMP_INC = -DLAMMPS_PNG - LMP_INC = -DLAMMPS_FFMPEG + LMP_INC = -DLAMMPS_JPEG -DLAMMPS_PNG -DLAMMPS_FFMPEG JPG_INC = -I/usr/local/include # path to jpeglib.h, png.h, zlib.h header files if make cannot find them JPG_PATH = -L/usr/lib # paths to libjpeg.a, libpng.a, libz.a (.so) files if make cannot find them @@ -372,7 +370,7 @@ including :doc:`read_data `, :doc:`rerun `, and .. code-block:: make - LMP_INC = -DLAMMPS_GZIP + LMP_INC = -DLAMMPS_GZIP This option requires that your operating system fully supports the "popen()" function in the standard runtime library and that a ``gzip`` @@ -454,7 +452,7 @@ those systems: .. code-block:: make - LMP_INC = -DLAMMPS_LONGLONG_TO_LONG + LMP_INC = -DLAMMPS_LONGLONG_TO_LONG ---------- @@ -481,7 +479,7 @@ e.g. to Python. Of course, the calling code has to be set up to .. code-block:: make - LMP_INC = -DLAMMPS_EXCEPTIONS + LMP_INC = -DLAMMPS_EXCEPTIONS .. note:: @@ -522,7 +520,7 @@ executable, not the library. .. code-block:: make - LMP_INC = -DLAMMPS_TRAP_FPE + LMP_INC = -DLAMMPS_TRAP_FPE After compilation with this flag set, the LAMMPS executable will stop and produce a core dump when a division by zero, overflow, illegal math From 1247f4d67b96a2d34b881a025b5173e9fba5ec8d Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Tue, 26 Oct 2021 19:54:09 -0400 Subject: [PATCH 279/372] add function to print information about available compressions tools --- doc/src/Developer_platform.rst | 3 +++ src/info.cpp | 1 + src/lammps.cpp | 2 ++ src/platform.cpp | 24 +++++++++++++++++++++--- src/platform.h | 9 +++++++++ 5 files changed, 36 insertions(+), 3 deletions(-) diff --git a/doc/src/Developer_platform.rst b/doc/src/Developer_platform.rst index 4cea36f94c..c9ecd30cec 100644 --- a/doc/src/Developer_platform.rst +++ b/doc/src/Developer_platform.rst @@ -42,6 +42,9 @@ Platform information functions .. doxygenfunction:: mpi_info :project: progguide +.. doxygenfunction:: compress_info + :project: progguide + File and path functions and global constants ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ diff --git a/src/info.cpp b/src/info.cpp index bbc94fbccb..a726b2f00b 100644 --- a/src/info.cpp +++ b/src/info.cpp @@ -309,6 +309,7 @@ void Info::command(int narg, char **arg) #else // defined(LAMMPS_SMALLSMALL) fputs("-DLAMMPS_SMALLSMALL\n",out); #endif + if (has_gzip_support()) fmt::print(out,"\n{}\n",platform::compress_info()); int ncword, ncline = 0; fputs("\nInstalled packages:\n\n",out); diff --git a/src/lammps.cpp b/src/lammps.cpp index 5d571b88dd..0829c4fdbd 100644 --- a/src/lammps.cpp +++ b/src/lammps.cpp @@ -1379,6 +1379,8 @@ void LAMMPS::print_config(FILE *fp) sizeof(smallint)*8, sizeof(imageint)*8, sizeof(tagint)*8, sizeof(bigint)*8); + if (Info::has_gzip_support()) fmt::print(fp,"\n{}\n",platform::compress_info()); + fputs("\nInstalled packages:\n\n",fp); for (int i = 0; nullptr != (pkg = installed_packages[i]); ++i) { ncword = strlen(pkg); diff --git a/src/platform.cpp b/src/platform.cpp index 555026b2ac..bd0fcd9dfe 100644 --- a/src/platform.cpp +++ b/src/platform.cpp @@ -418,6 +418,24 @@ std::string platform::mpi_info(int &major, int &minor) return {version}; } +/* ---------------------------------------------------------------------- + collect available compression tool info +------------------------------------------------------------------------- */ + +std::string platform::compress_info() +{ + std::string buf = "Available compression formats:\n\n"; + bool none_found = true; + for (const auto &cmpi : compress_styles) { + if (cmpi.style == ::compress_info::NONE) continue; + if (find_exe_path(cmpi.command).size()) { + none_found = false; + buf += fmt::format("Extension: .{:6} Command: {}\n", cmpi.extension, cmpi.command); + } + } + if (none_found) buf += "None\n"; + return buf; +} /* ---------------------------------------------------------------------- set environment variable ------------------------------------------------------------------------- */ @@ -930,7 +948,7 @@ bool platform::file_is_readable(const std::string &path) bool platform::has_compress_extension(const std::string &file) { - return find_compress_type(file).style != compress_info::NONE; + return find_compress_type(file).style != ::compress_info::NONE; } /* ---------------------------------------------------------------------- @@ -943,7 +961,7 @@ FILE *platform::compressed_read(const std::string &file) #if defined(LAMMPS_GZIP) auto compress = find_compress_type(file); - if (compress.style == compress_info::NONE) return nullptr; + if (compress.style == ::compress_info::NONE) return nullptr; if (find_exe_path(compress.command).size()) // put quotes around file name so that they may contain blanks @@ -962,7 +980,7 @@ FILE *platform::compressed_write(const std::string &file) #if defined(LAMMPS_GZIP) auto compress = find_compress_type(file); - if (compress.style == compress_info::NONE) return nullptr; + if (compress.style == ::compress_info::NONE) return nullptr; if (find_exe_path(compress.command).size()) // put quotes around file name so that they may contain blanks diff --git a/src/platform.h b/src/platform.h index de8ecce016..95a0c3cc35 100644 --- a/src/platform.h +++ b/src/platform.h @@ -109,6 +109,15 @@ namespace platform { std::string mpi_info(int &major, int &minor); + /*! Return string with list of available compression types and executables + * + * This function tests which of the supported compression executables + * are available for reading or writing compressed files where supported. + * + * \return string with list of available compression tools */ + + std::string compress_info(); + /*! Add variable to the environment * * \param vardef variable name or variable definition (NAME=value) From 11ee3759dfdd85a015a983547656e33e00a2f9a0 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Wed, 27 Oct 2021 08:22:18 -0400 Subject: [PATCH 280/372] use consistent formatting --- cmake/CMakeLists.txt | 2 +- cmake/Modules/LAMMPSUtils.cmake | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt index 449a9b3141..00a254197d 100644 --- a/cmake/CMakeLists.txt +++ b/cmake/CMakeLists.txt @@ -83,7 +83,7 @@ include(CheckIncludeFileCXX) # set required compiler flags and compiler/CPU arch specific optimizations if(CMAKE_CXX_COMPILER_ID STREQUAL "Intel") if(CMAKE_SYSTEM_NAME STREQUAL "Windows") - if (CMAKE_CXX_COMPILER_ID STREQUAL "Intel") + if(CMAKE_CXX_COMPILER_ID STREQUAL "Intel") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /Qrestrict") endif() if(CMAKE_CXX_COMPILER_VERSION VERSION_EQUAL 17.3 OR CMAKE_CXX_COMPILER_VERSION VERSION_EQUAL 17.4) diff --git a/cmake/Modules/LAMMPSUtils.cmake b/cmake/Modules/LAMMPSUtils.cmake index 74102ab244..28ad99fa31 100644 --- a/cmake/Modules/LAMMPSUtils.cmake +++ b/cmake/Modules/LAMMPSUtils.cmake @@ -85,7 +85,7 @@ endfunction(GenerateBinaryHeader) # fetch missing potential files function(FetchPotentials pkgfolder potfolder) - if (EXISTS "${pkgfolder}/potentials.txt") + if(EXISTS "${pkgfolder}/potentials.txt") file(STRINGS "${pkgfolder}/potentials.txt" linelist REGEX "^[^#].") foreach(line ${linelist}) string(FIND ${line} " " blank) From c911cd52bbf1406eb8aa5c17cedd75ffdd1df434 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Wed, 27 Oct 2021 08:24:07 -0400 Subject: [PATCH 281/372] whitespace --- cmake/Modules/Packages/ML-PACE.cmake | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cmake/Modules/Packages/ML-PACE.cmake b/cmake/Modules/Packages/ML-PACE.cmake index 0086475354..ec3fa23f4c 100644 --- a/cmake/Modules/Packages/ML-PACE.cmake +++ b/cmake/Modules/Packages/ML-PACE.cmake @@ -5,7 +5,7 @@ mark_as_advanced(PACELIB_URL) mark_as_advanced(PACELIB_MD5) # download library sources to build folder -file(DOWNLOAD ${PACELIB_URL} ${CMAKE_BINARY_DIR}/libpace.tar.gz EXPECTED_HASH MD5=${PACELIB_MD5}) #SHOW_PROGRESS +file(DOWNLOAD ${PACELIB_URL} ${CMAKE_BINARY_DIR}/libpace.tar.gz EXPECTED_HASH MD5=${PACELIB_MD5}) #SHOW_PROGRESS # uncompress downloaded sources execute_process( From a063209b2bd13389f235a2f51c3ad202176bb1e6 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Wed, 27 Oct 2021 08:31:36 -0400 Subject: [PATCH 282/372] update URL and filename for offline scripts --- tools/offline/scripts/init_http_cache.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tools/offline/scripts/init_http_cache.sh b/tools/offline/scripts/init_http_cache.sh index 44a07da35a..ea234c8fbb 100755 --- a/tools/offline/scripts/init_http_cache.sh +++ b/tools/offline/scripts/init_http_cache.sh @@ -51,7 +51,7 @@ KOKKOS_URL="https://github.com/kokkos/kokkos/archive/3.4.01.tar.gz" KIM_URL="https://s3.openkim.org/kim-api/kim-api-2.2.1.txz" MSCG_URL="https://github.com/uchicago-voth/MSCG-release/archive/1.7.3.1.tar.gz" PLUMED_URL="https://github.com/plumed/plumed2/releases/download/v2.7.2/plumed-src-2.7.2.tgz" -PACELIB_URL="https://github.com/ICAMS/lammps-user-pace/archive/refs/tags/v.2021.4.9.tar.gz" +PACELIB_URL="https://github.com/ICAMS/lammps-user-pace/archive/refs/tags/v.2021.10.25.yaml_pace.upd2.tar.gz" LATTE_URL="https://github.com/lanl/LATTE/archive/v1.2.2.tar.gz" SCAFACOS_URL="https://github.com/scafacos/scafacos/releases/download/v1.0.1/scafacos-1.0.1.tar.gz" MDI_URL="https://github.com/MolSSI-MDI/MDI_Library/archive/v1.2.9.tar.gz" @@ -62,7 +62,7 @@ CUB_FILENAME="cub-1.12.0.tar.gz" KOKKOS_FILENAME="kokkos-3.4.01.tar.gz" MSCG_FILENAME="mscg-1.7.3.1.tar.gz" LATTE_FILENAME="latte-1.2.2.tar.gz" -PACELIB_FILENAME="pacelib-2021.4.9.tar.gz" +PACELIB_FILENAME="v.2021.10.25.yaml_pace.upd2.tar.gz" TARBALLS=( MPICH2_WIN64_DEVEL_URL From 9895d8436ab4327b5067d71802907e9c304ffa6d Mon Sep 17 00:00:00 2001 From: Yury Lysogorskiy Date: Wed, 27 Oct 2021 16:03:44 +0200 Subject: [PATCH 283/372] update/clean downloading the ML-PACE/v.2021.10.25.tar.gz --- cmake/Modules/Packages/ML-PACE.cmake | 4 ++-- lib/pace/Install.py | 5 ++--- tools/offline/scripts/init_http_cache.sh | 4 ++-- 3 files changed, 6 insertions(+), 7 deletions(-) diff --git a/cmake/Modules/Packages/ML-PACE.cmake b/cmake/Modules/Packages/ML-PACE.cmake index ec3fa23f4c..6b7c13eafe 100644 --- a/cmake/Modules/Packages/ML-PACE.cmake +++ b/cmake/Modules/Packages/ML-PACE.cmake @@ -1,6 +1,6 @@ -set(PACELIB_URL "https://github.com/ICAMS/lammps-user-pace/archive/refs/tags/v.2021.10.25.yaml_pace.upd2.tar.gz" CACHE STRING "URL for PACE evaluator library sources") +set(PACELIB_URL "https://github.com/ICAMS/lammps-user-pace/archive/refs/tags/v.2021.10.25.tar.gz" CACHE STRING "URL for PACE evaluator library sources") -set(PACELIB_MD5 "6ba037a6149bd5c9472ead6356288a6a" CACHE STRING "MD5 checksum of PACE evaluator library tarball") +set(PACELIB_MD5 "9cb2ad286abacdc86faf5a9e3a8abd71" CACHE STRING "MD5 checksum of PACE evaluator library tarball") mark_as_advanced(PACELIB_URL) mark_as_advanced(PACELIB_MD5) diff --git a/lib/pace/Install.py b/lib/pace/Install.py index 7c2c798146..7825207f6c 100644 --- a/lib/pace/Install.py +++ b/lib/pace/Install.py @@ -15,15 +15,14 @@ from install_helpers import fullpath, geturl, checkmd5sum # settings thisdir = fullpath('.') -version = 'v.2021.10.25.yaml_pace.upd2' +version = 'v.2021.10.25' # known checksums for different PACE versions. used to validate the download. checksums = { \ 'v.2021.2.3.upd2' : '8fd1162724d349b930e474927197f20d', 'v.2021.4.9' : '4db54962fbd6adcf8c18d46e1798ceb5', 'v.2021.9.28' : 'f98363bb98adc7295ea63974738c2a1b', - 'v.2021.10.25.yaml_pace' : '4c84c1cb1e2d8c690e3f797433ed2886' - 'v.2021.10.25.yaml_pace.upd2': '6ba037a6149bd5c9472ead6356288a6a' + 'v.2021.10.25' : '9cb2ad286abacdc86faf5a9e3a8abd71' } diff --git a/tools/offline/scripts/init_http_cache.sh b/tools/offline/scripts/init_http_cache.sh index ea234c8fbb..8633120d05 100755 --- a/tools/offline/scripts/init_http_cache.sh +++ b/tools/offline/scripts/init_http_cache.sh @@ -51,7 +51,7 @@ KOKKOS_URL="https://github.com/kokkos/kokkos/archive/3.4.01.tar.gz" KIM_URL="https://s3.openkim.org/kim-api/kim-api-2.2.1.txz" MSCG_URL="https://github.com/uchicago-voth/MSCG-release/archive/1.7.3.1.tar.gz" PLUMED_URL="https://github.com/plumed/plumed2/releases/download/v2.7.2/plumed-src-2.7.2.tgz" -PACELIB_URL="https://github.com/ICAMS/lammps-user-pace/archive/refs/tags/v.2021.10.25.yaml_pace.upd2.tar.gz" +PACELIB_URL="https://github.com/ICAMS/lammps-user-pace/archive/refs/tags/v.2021.10.25.tar.gz" LATTE_URL="https://github.com/lanl/LATTE/archive/v1.2.2.tar.gz" SCAFACOS_URL="https://github.com/scafacos/scafacos/releases/download/v1.0.1/scafacos-1.0.1.tar.gz" MDI_URL="https://github.com/MolSSI-MDI/MDI_Library/archive/v1.2.9.tar.gz" @@ -62,7 +62,7 @@ CUB_FILENAME="cub-1.12.0.tar.gz" KOKKOS_FILENAME="kokkos-3.4.01.tar.gz" MSCG_FILENAME="mscg-1.7.3.1.tar.gz" LATTE_FILENAME="latte-1.2.2.tar.gz" -PACELIB_FILENAME="v.2021.10.25.yaml_pace.upd2.tar.gz" +PACELIB_FILENAME="v.2021.10.25.tar.gz" TARBALLS=( MPICH2_WIN64_DEVEL_URL From c0c45be357537b88cbe977f90ce33e78998961e7 Mon Sep 17 00:00:00 2001 From: Yury Lysogorskiy Date: Wed, 27 Oct 2021 17:19:18 +0200 Subject: [PATCH 284/372] bugfix Fedora CMake compilation --- cmake/Modules/Packages/ML-PACE.cmake | 2 +- lib/pace/Install.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/cmake/Modules/Packages/ML-PACE.cmake b/cmake/Modules/Packages/ML-PACE.cmake index 6b7c13eafe..d46197114d 100644 --- a/cmake/Modules/Packages/ML-PACE.cmake +++ b/cmake/Modules/Packages/ML-PACE.cmake @@ -1,6 +1,6 @@ set(PACELIB_URL "https://github.com/ICAMS/lammps-user-pace/archive/refs/tags/v.2021.10.25.tar.gz" CACHE STRING "URL for PACE evaluator library sources") -set(PACELIB_MD5 "9cb2ad286abacdc86faf5a9e3a8abd71" CACHE STRING "MD5 checksum of PACE evaluator library tarball") +set(PACELIB_MD5 "a2ac3315c41a1a4a5c912bcb1bc9c5cc" CACHE STRING "MD5 checksum of PACE evaluator library tarball") mark_as_advanced(PACELIB_URL) mark_as_advanced(PACELIB_MD5) diff --git a/lib/pace/Install.py b/lib/pace/Install.py index 7825207f6c..5b968732c9 100644 --- a/lib/pace/Install.py +++ b/lib/pace/Install.py @@ -22,7 +22,7 @@ checksums = { \ 'v.2021.2.3.upd2' : '8fd1162724d349b930e474927197f20d', 'v.2021.4.9' : '4db54962fbd6adcf8c18d46e1798ceb5', 'v.2021.9.28' : 'f98363bb98adc7295ea63974738c2a1b', - 'v.2021.10.25' : '9cb2ad286abacdc86faf5a9e3a8abd71' + 'v.2021.10.25' : 'a2ac3315c41a1a4a5c912bcb1bc9c5cc' } From b5e3d69c82ce73641af48532ee2daaaae4bbbb64 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Wed, 27 Oct 2021 14:23:53 -0400 Subject: [PATCH 285/372] change downloaded archive name to more closely follow the confvention --- tools/offline/scripts/init_http_cache.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/offline/scripts/init_http_cache.sh b/tools/offline/scripts/init_http_cache.sh index 8633120d05..d18105ad96 100755 --- a/tools/offline/scripts/init_http_cache.sh +++ b/tools/offline/scripts/init_http_cache.sh @@ -62,7 +62,7 @@ CUB_FILENAME="cub-1.12.0.tar.gz" KOKKOS_FILENAME="kokkos-3.4.01.tar.gz" MSCG_FILENAME="mscg-1.7.3.1.tar.gz" LATTE_FILENAME="latte-1.2.2.tar.gz" -PACELIB_FILENAME="v.2021.10.25.tar.gz" +PACELIB_FILENAME="pacelib-2021.10.25.tar.gz" TARBALLS=( MPICH2_WIN64_DEVEL_URL From 28d86578a3dbc5968304a24d09aabf187f84a457 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Wed, 27 Oct 2021 15:26:58 -0400 Subject: [PATCH 286/372] update version strings for next patch release --- doc/lammps.1 | 2 +- src/version.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/doc/lammps.1 b/doc/lammps.1 index 0e2831f5ca..78b6c9fd67 100644 --- a/doc/lammps.1 +++ b/doc/lammps.1 @@ -1,4 +1,4 @@ -.TH LAMMPS "1" "29 September 2021" "2021-09-29" +.TH LAMMPS "1" "27 October 2021" "2021-10-27" .SH NAME .B LAMMPS \- Molecular Dynamics Simulator. diff --git a/src/version.h b/src/version.h index c1b2b627a8..21f49398e0 100644 --- a/src/version.h +++ b/src/version.h @@ -1 +1 @@ -#define LAMMPS_VERSION "29 Sep 2021" +#define LAMMPS_VERSION "27 Oct 2021" From a329de81bf864b7267f840d3d5a18949e21a4ba8 Mon Sep 17 00:00:00 2001 From: Richard Berger Date: Wed, 27 Oct 2021 15:56:28 -0400 Subject: [PATCH 287/372] Update source URLs for offline compilation tool --- tools/offline/scripts/init_http_cache.sh | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/tools/offline/scripts/init_http_cache.sh b/tools/offline/scripts/init_http_cache.sh index 44a07da35a..3c8f5cc715 100755 --- a/tools/offline/scripts/init_http_cache.sh +++ b/tools/offline/scripts/init_http_cache.sh @@ -40,12 +40,12 @@ echo "Dowloading thirdparty tarballs..." MPICH2_WIN64_DEVEL_URL="${LAMMPS_THIRDPARTY_URL}/mpich2-win64-devel.tar.gz" MPICH2_WIN32_DEVEL_URL="${LAMMPS_THIRDPARTY_URL}/mpich2-win32-devel.tar.gz" VORO_URL="${LAMMPS_THIRDPARTY_URL}/voro++-0.4.6.tar.gz" -OPENCL_LOADER_URL="${LAMMPS_THIRDPARTY_URL}/opencl-loader-2021.06.30.tar.gz" +OPENCL_LOADER_URL="${LAMMPS_THIRDPARTY_URL}/opencl-loader-2021.09.18.tar.gz" SCAFACOS_FIX_URL="${LAMMPS_THIRDPARTY_URL}/scafacos-1.0.1-fix.diff" -GTEST_URL="https://github.com/google/googletest/archive/release-1.10.0.tar.gz" +GTEST_URL="https://github.com/google/googletest/archive/release-1.11.0.tar.gz" YAML_URL="https://pyyaml.org/download/libyaml/yaml-0.2.5.tar.gz" MATHJAX_URL="https://github.com/mathjax/MathJax/archive/3.1.3.tar.gz" -EIGEN3_URL="https://gitlab.com/libeigen/eigen/-/archive/3.3.7/eigen-3.3.7.tar.gz" +EIGEN3_URL="https://download.lammps.org/thirdparty/eigen-3.4.0.tar.gz" CUB_URL="https://github.com/NVlabs/cub/archive/1.12.0.tar.gz" KOKKOS_URL="https://github.com/kokkos/kokkos/archive/3.4.01.tar.gz" KIM_URL="https://s3.openkim.org/kim-api/kim-api-2.2.1.txz" @@ -55,14 +55,16 @@ PACELIB_URL="https://github.com/ICAMS/lammps-user-pace/archive/refs/tags/v.2021. LATTE_URL="https://github.com/lanl/LATTE/archive/v1.2.2.tar.gz" SCAFACOS_URL="https://github.com/scafacos/scafacos/releases/download/v1.0.1/scafacos-1.0.1.tar.gz" MDI_URL="https://github.com/MolSSI-MDI/MDI_Library/archive/v1.2.9.tar.gz" +N2P2_URL="https://github.com/CompPhysVienna/n2p2/archive/v2.1.4.tar.gz" -GTEST_FILENAME="gtest-1.10.0.tar.gz" +GTEST_FILENAME="gtest-1.11.0.tar.gz" MATHJAX_FILENAME="mathjax-3.1.3.tar.gz" CUB_FILENAME="cub-1.12.0.tar.gz" KOKKOS_FILENAME="kokkos-3.4.01.tar.gz" MSCG_FILENAME="mscg-1.7.3.1.tar.gz" LATTE_FILENAME="latte-1.2.2.tar.gz" PACELIB_FILENAME="pacelib-2021.4.9.tar.gz" +N2P2_FILENAME="n2p2-2.1.4.tar.gz" TARBALLS=( MPICH2_WIN64_DEVEL_URL @@ -83,6 +85,7 @@ TARBALLS=( LATTE_URL SCAFACOS_URL MDI_URL + N2P2_URL ) ############################################################################### From 51bd05bb77fafb959d2dcb2b8d44ed44cf019759 Mon Sep 17 00:00:00 2001 From: Richard Berger Date: Wed, 27 Oct 2021 16:20:47 -0400 Subject: [PATCH 288/372] Make update_downloads.sh detect new URLs and report error --- tools/offline/scripts/update_downloads.sh | 34 +++++++++++++++++++++-- 1 file changed, 32 insertions(+), 2 deletions(-) diff --git a/tools/offline/scripts/update_downloads.sh b/tools/offline/scripts/update_downloads.sh index 247b92e562..28cd267c27 100755 --- a/tools/offline/scripts/update_downloads.sh +++ b/tools/offline/scripts/update_downloads.sh @@ -14,11 +14,41 @@ function update_setting() sed -i "/^$1=/c$1=\"$2\"" init_http_cache.sh } +DETECTED_URLS=$(grep -PoRh "\w+_URL" ../../../cmake/ | sort | uniq | grep -v ^LAMMPS) +KNOWN_URLS=$(grep -Rh "_URL=" init_http_cache.sh | grep -v ^LAMMPS | grep -v SCAFACOS_FIX | cut -d= -f1) -URLS=$(grep -Rh "_URL=" init_http_cache.sh | grep -v ^LAMMPS | grep -v SCAFACOS_FIX | cut -d= -f1) +# check if init_http_cache.sh contains all URLs +for URL in $DETECTED_URLS +do + grep -q ^$URL= init_http_cache.sh + if [ $? -ne 0 ] + then + FILENAME_VAR="${URL/_URL/_FILENAME}" + echo $URL is not known. Please update 'init_http_cache.sh' as follows: + echo + echo 1. add the following line: + echo + echo $URL="" + echo + echo 2. Define a new $FILENAME_VAR if necessary + echo + echo $FILENAME_VAR="pkgname-0.0.0.tar.gz" + echo + echo 3. extend TARBALLS with $URL + echo + echo TARBALLS=\( + echo " ..." + echo " $URL" + echo \) + echo + echo 4. Rerun this script + echo + exit 1 + fi +done # update URLs by grabbing the latest ones from cmake files -for URL in $URLS +for URL in $KNOWN_URLS do extract_setting "$URL" update_setting "$URL" ${!URL} From 153e77864dc95e53f9b8e3ca8b65336faecf92d1 Mon Sep 17 00:00:00 2001 From: Richard Berger Date: Wed, 27 Oct 2021 16:44:40 -0400 Subject: [PATCH 289/372] Use LAMMPS_THIRDPARTY_URL variable for EIGEN3_URL --- cmake/Modules/Packages/MACHDYN.cmake | 2 +- tools/offline/scripts/init_http_cache.sh | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/cmake/Modules/Packages/MACHDYN.cmake b/cmake/Modules/Packages/MACHDYN.cmake index 8729d80dbf..d90ca8146c 100644 --- a/cmake/Modules/Packages/MACHDYN.cmake +++ b/cmake/Modules/Packages/MACHDYN.cmake @@ -8,7 +8,7 @@ option(DOWNLOAD_EIGEN3 "Download Eigen3 instead of using an already installed on if(DOWNLOAD_EIGEN3) message(STATUS "Eigen3 download requested - we will build our own") - set(EIGEN3_URL "https://download.lammps.org/thirdparty/eigen-3.4.0.tar.gz" CACHE STRING "URL for Eigen3 tarball") + set(EIGEN3_URL "${LAMMPS_THIRDPARTY_URL}/eigen-3.4.0.tar.gz" CACHE STRING "URL for Eigen3 tarball") set(EIGEN3_MD5 "4c527a9171d71a72a9d4186e65bea559" CACHE STRING "MD5 checksum of Eigen3 tarball") mark_as_advanced(EIGEN3_URL) mark_as_advanced(EIGEN3_MD5) diff --git a/tools/offline/scripts/init_http_cache.sh b/tools/offline/scripts/init_http_cache.sh index b003aa08b3..926a74f499 100755 --- a/tools/offline/scripts/init_http_cache.sh +++ b/tools/offline/scripts/init_http_cache.sh @@ -45,7 +45,7 @@ SCAFACOS_FIX_URL="${LAMMPS_THIRDPARTY_URL}/scafacos-1.0.1-fix.diff" GTEST_URL="https://github.com/google/googletest/archive/release-1.11.0.tar.gz" YAML_URL="https://pyyaml.org/download/libyaml/yaml-0.2.5.tar.gz" MATHJAX_URL="https://github.com/mathjax/MathJax/archive/3.1.3.tar.gz" -EIGEN3_URL="https://download.lammps.org/thirdparty/eigen-3.4.0.tar.gz" +EIGEN3_URL="${LAMMPS_THIRDPARTY_URL}/eigen-3.4.0.tar.gz" CUB_URL="https://github.com/NVlabs/cub/archive/1.12.0.tar.gz" KOKKOS_URL="https://github.com/kokkos/kokkos/archive/3.4.01.tar.gz" KIM_URL="https://s3.openkim.org/kim-api/kim-api-2.2.1.txz" From 9424571ce2582ea81403e3590f792e16ddb66f3a Mon Sep 17 00:00:00 2001 From: Richard Berger Date: Wed, 27 Oct 2021 17:00:31 -0400 Subject: [PATCH 290/372] Use correct sizeof in memset --- src/write_restart.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/write_restart.cpp b/src/write_restart.cpp index 4333fa5416..e9be7f9c36 100644 --- a/src/write_restart.cpp +++ b/src/write_restart.cpp @@ -269,7 +269,7 @@ void WriteRestart::write(const std::string &file) double *buf; memory->create(buf,max_size,"write_restart:buf"); - memset(buf,0,max_size*sizeof(buf)); + memset(buf,0,max_size*sizeof(double)); // all procs write file layout info which may include per-proc sizes From 18a7c1544159f96d18899761ff2dc002ace87283 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Wed, 27 Oct 2021 17:21:38 -0400 Subject: [PATCH 291/372] forward DYN_LIB variable to Makefile.mpi --- src/MAKE/Makefile.mpi | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/MAKE/Makefile.mpi b/src/MAKE/Makefile.mpi index cf796be69b..933da9663e 100644 --- a/src/MAKE/Makefile.mpi +++ b/src/MAKE/Makefile.mpi @@ -65,7 +65,7 @@ JPG_INC = JPG_PATH = JPG_LIB = -# library for loading shared objects (defaults to -ldl) +# library for loading shared objects (defaults to -ldl, should be empty on Windows) # uncomment to change the default # override DYN_LIB = @@ -79,7 +79,7 @@ include Makefile.package EXTRA_INC = $(LMP_INC) $(PKG_INC) $(MPI_INC) $(FFT_INC) $(JPG_INC) $(PKG_SYSINC) EXTRA_PATH = $(PKG_PATH) $(MPI_PATH) $(FFT_PATH) $(JPG_PATH) $(PKG_SYSPATH) -EXTRA_LIB = $(PKG_LIB) $(MPI_LIB) $(FFT_LIB) $(JPG_LIB) $(PKG_SYSLIB) +EXTRA_LIB = $(PKG_LIB) $(MPI_LIB) $(FFT_LIB) $(JPG_LIB) $(PKG_SYSLIB) $(DYN_LIB) EXTRA_CPP_DEPENDS = $(PKG_CPP_DEPENDS) EXTRA_LINK_DEPENDS = $(PKG_LINK_DEPENDS) From 95d08c6667a282f3266802bdc7d0a51bec8b1386 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Wed, 27 Oct 2021 17:41:16 -0400 Subject: [PATCH 292/372] update all makefiles to use DYN_LIB variable from master makefile --- src/MAKE/MACHINES/Makefile.aarch64_arm_openmpi_armpl | 7 ++++++- src/MAKE/MACHINES/Makefile.aarch64_arm_serial_armpl | 7 ++++++- src/MAKE/MACHINES/Makefile.aarch64_g++_openmpi_armpl | 7 ++++++- src/MAKE/MACHINES/Makefile.aarch64_g++_serial_armpl | 7 ++++++- src/MAKE/MACHINES/Makefile.astra_arm | 7 ++++++- src/MAKE/MACHINES/Makefile.bgq | 2 +- src/MAKE/MACHINES/Makefile.cori2 | 7 ++++++- src/MAKE/MACHINES/Makefile.cygwin | 5 +++-- src/MAKE/MACHINES/Makefile.mac | 7 ++++++- src/MAKE/MACHINES/Makefile.mac_mpi | 7 ++++++- src/MAKE/MACHINES/Makefile.power | 7 ++++++- src/MAKE/MACHINES/Makefile.summit_kokkos | 7 ++++++- src/MAKE/MACHINES/Makefile.theta | 7 ++++++- src/MAKE/MACHINES/Makefile.ubuntu | 7 ++++++- src/MAKE/MACHINES/Makefile.ubuntu_simple | 7 ++++++- src/MAKE/MACHINES/Makefile.white | 7 ++++++- src/MAKE/MACHINES/Makefile.xe6 | 7 ++++++- src/MAKE/OPTIONS/Makefile.big | 7 ++++++- src/MAKE/OPTIONS/Makefile.fftw | 7 ++++++- src/MAKE/OPTIONS/Makefile.g++_mpich | 7 ++++++- src/MAKE/OPTIONS/Makefile.g++_mpich_link | 7 ++++++- src/MAKE/OPTIONS/Makefile.g++_openmpi | 7 ++++++- src/MAKE/OPTIONS/Makefile.g++_openmpi_link | 7 ++++++- src/MAKE/OPTIONS/Makefile.g++_serial | 7 ++++++- src/MAKE/OPTIONS/Makefile.gpu | 7 ++++++- src/MAKE/OPTIONS/Makefile.hip | 7 ++++++- src/MAKE/OPTIONS/Makefile.icc_mpich | 7 ++++++- src/MAKE/OPTIONS/Makefile.icc_mpich_link | 7 ++++++- src/MAKE/OPTIONS/Makefile.icc_openmpi | 7 ++++++- src/MAKE/OPTIONS/Makefile.icc_openmpi_link | 7 ++++++- src/MAKE/OPTIONS/Makefile.icc_serial | 7 ++++++- src/MAKE/OPTIONS/Makefile.intel_coprocessor | 7 ++++++- src/MAKE/OPTIONS/Makefile.intel_cpu_intelmpi | 7 ++++++- src/MAKE/OPTIONS/Makefile.intel_cpu_mpich | 7 ++++++- src/MAKE/OPTIONS/Makefile.intel_cpu_openmpi | 7 ++++++- src/MAKE/OPTIONS/Makefile.jpeg | 7 ++++++- src/MAKE/OPTIONS/Makefile.knl | 7 ++++++- src/MAKE/OPTIONS/Makefile.kokkos_cuda_mpi | 7 ++++++- src/MAKE/OPTIONS/Makefile.kokkos_mpi_only | 7 ++++++- src/MAKE/OPTIONS/Makefile.kokkos_omp | 7 ++++++- src/MAKE/OPTIONS/Makefile.kokkos_phi | 7 ++++++- src/MAKE/OPTIONS/Makefile.mgptfast | 7 ++++++- src/MAKE/OPTIONS/Makefile.omp | 7 ++++++- src/MAKE/OPTIONS/Makefile.oneapi | 7 ++++++- src/MAKE/OPTIONS/Makefile.opt | 7 ++++++- src/MAKE/OPTIONS/Makefile.pgi_mpich_link | 7 ++++++- src/MAKE/OPTIONS/Makefile.png | 7 ++++++- 47 files changed, 274 insertions(+), 48 deletions(-) diff --git a/src/MAKE/MACHINES/Makefile.aarch64_arm_openmpi_armpl b/src/MAKE/MACHINES/Makefile.aarch64_arm_openmpi_armpl index ead00277c6..050670804e 100644 --- a/src/MAKE/MACHINES/Makefile.aarch64_arm_openmpi_armpl +++ b/src/MAKE/MACHINES/Makefile.aarch64_arm_openmpi_armpl @@ -66,6 +66,11 @@ JPG_INC = JPG_PATH = JPG_LIB = +# library for loading shared objects (defaults to -ldl, should be empty on Windows) +# uncomment to change the default + +# override DYN_LIB = + # --------------------------------------------------------------------- # build rules and dependencies # do not edit this section @@ -75,7 +80,7 @@ include Makefile.package EXTRA_INC = $(LMP_INC) $(PKG_INC) $(MPI_INC) $(FFT_INC) $(JPG_INC) $(PKG_SYSINC) EXTRA_PATH = $(PKG_PATH) $(MPI_PATH) $(FFT_PATH) $(JPG_PATH) $(PKG_SYSPATH) -EXTRA_LIB = $(PKG_LIB) $(MPI_LIB) $(FFT_LIB) $(JPG_LIB) $(PKG_SYSLIB) +EXTRA_LIB = $(PKG_LIB) $(MPI_LIB) $(FFT_LIB) $(JPG_LIB) $(PKG_SYSLIB) $(DYN_LIB) EXTRA_CPP_DEPENDS = $(PKG_CPP_DEPENDS) EXTRA_LINK_DEPENDS = $(PKG_LINK_DEPENDS) diff --git a/src/MAKE/MACHINES/Makefile.aarch64_arm_serial_armpl b/src/MAKE/MACHINES/Makefile.aarch64_arm_serial_armpl index 44c83ff1e0..2ad14ab258 100644 --- a/src/MAKE/MACHINES/Makefile.aarch64_arm_serial_armpl +++ b/src/MAKE/MACHINES/Makefile.aarch64_arm_serial_armpl @@ -65,6 +65,11 @@ JPG_INC = JPG_PATH = JPG_LIB = +# library for loading shared objects (defaults to -ldl, should be empty on Windows) +# uncomment to change the default + +# override DYN_LIB = + # --------------------------------------------------------------------- # build rules and dependencies # do not edit this section @@ -74,7 +79,7 @@ include Makefile.package EXTRA_INC = $(LMP_INC) $(PKG_INC) $(MPI_INC) $(FFT_INC) $(JPG_INC) $(PKG_SYSINC) EXTRA_PATH = $(PKG_PATH) $(MPI_PATH) $(FFT_PATH) $(JPG_PATH) $(PKG_SYSPATH) -EXTRA_LIB = $(PKG_LIB) $(MPI_LIB) $(FFT_LIB) $(JPG_LIB) $(PKG_SYSLIB) +EXTRA_LIB = $(PKG_LIB) $(MPI_LIB) $(FFT_LIB) $(JPG_LIB) $(PKG_SYSLIB) $(DYN_LIB) EXTRA_CPP_DEPENDS = $(PKG_CPP_DEPENDS) EXTRA_LINK_DEPENDS = $(PKG_LINK_DEPENDS) diff --git a/src/MAKE/MACHINES/Makefile.aarch64_g++_openmpi_armpl b/src/MAKE/MACHINES/Makefile.aarch64_g++_openmpi_armpl index 2ebd2ac744..efe91aed43 100644 --- a/src/MAKE/MACHINES/Makefile.aarch64_g++_openmpi_armpl +++ b/src/MAKE/MACHINES/Makefile.aarch64_g++_openmpi_armpl @@ -66,6 +66,11 @@ JPG_INC = JPG_PATH = JPG_LIB = +# library for loading shared objects (defaults to -ldl, should be empty on Windows) +# uncomment to change the default + +# override DYN_LIB = + # --------------------------------------------------------------------- # build rules and dependencies # do not edit this section @@ -75,7 +80,7 @@ include Makefile.package EXTRA_INC = $(LMP_INC) $(PKG_INC) $(MPI_INC) $(FFT_INC) $(JPG_INC) $(PKG_SYSINC) EXTRA_PATH = $(PKG_PATH) $(MPI_PATH) $(FFT_PATH) $(JPG_PATH) $(PKG_SYSPATH) -EXTRA_LIB = $(PKG_LIB) $(MPI_LIB) $(FFT_LIB) $(JPG_LIB) $(PKG_SYSLIB) +EXTRA_LIB = $(PKG_LIB) $(MPI_LIB) $(FFT_LIB) $(JPG_LIB) $(PKG_SYSLIB) $(DYN_LIB) EXTRA_CPP_DEPENDS = $(PKG_CPP_DEPENDS) EXTRA_LINK_DEPENDS = $(PKG_LINK_DEPENDS) diff --git a/src/MAKE/MACHINES/Makefile.aarch64_g++_serial_armpl b/src/MAKE/MACHINES/Makefile.aarch64_g++_serial_armpl index 054b530bc8..3c5a552b1b 100644 --- a/src/MAKE/MACHINES/Makefile.aarch64_g++_serial_armpl +++ b/src/MAKE/MACHINES/Makefile.aarch64_g++_serial_armpl @@ -65,6 +65,11 @@ JPG_INC = JPG_PATH = JPG_LIB = +# library for loading shared objects (defaults to -ldl, should be empty on Windows) +# uncomment to change the default + +# override DYN_LIB = + # --------------------------------------------------------------------- # build rules and dependencies # do not edit this section @@ -74,7 +79,7 @@ include Makefile.package EXTRA_INC = $(LMP_INC) $(PKG_INC) $(MPI_INC) $(FFT_INC) $(JPG_INC) $(PKG_SYSINC) EXTRA_PATH = $(PKG_PATH) $(MPI_PATH) $(FFT_PATH) $(JPG_PATH) $(PKG_SYSPATH) -EXTRA_LIB = $(PKG_LIB) $(MPI_LIB) $(FFT_LIB) $(JPG_LIB) $(PKG_SYSLIB) +EXTRA_LIB = $(PKG_LIB) $(MPI_LIB) $(FFT_LIB) $(JPG_LIB) $(PKG_SYSLIB) $(DYN_LIB) EXTRA_CPP_DEPENDS = $(PKG_CPP_DEPENDS) EXTRA_LINK_DEPENDS = $(PKG_LINK_DEPENDS) diff --git a/src/MAKE/MACHINES/Makefile.astra_arm b/src/MAKE/MACHINES/Makefile.astra_arm index f64f4da891..79461626e9 100644 --- a/src/MAKE/MACHINES/Makefile.astra_arm +++ b/src/MAKE/MACHINES/Makefile.astra_arm @@ -64,6 +64,11 @@ JPG_INC = JPG_PATH = JPG_LIB = +# library for loading shared objects (defaults to -ldl, should be empty on Windows) +# uncomment to change the default + +# override DYN_LIB = + # --------------------------------------------------------------------- # build rules and dependencies # do not edit this section @@ -73,7 +78,7 @@ include Makefile.package EXTRA_INC = $(LMP_INC) $(PKG_INC) $(MPI_INC) $(FFT_INC) $(JPG_INC) $(PKG_SYSINC) EXTRA_PATH = $(PKG_PATH) $(MPI_PATH) $(FFT_PATH) $(JPG_PATH) $(PKG_SYSPATH) -EXTRA_LIB = $(PKG_LIB) $(MPI_LIB) $(FFT_LIB) $(JPG_LIB) $(PKG_SYSLIB) +EXTRA_LIB = $(PKG_LIB) $(MPI_LIB) $(FFT_LIB) $(JPG_LIB) $(PKG_SYSLIB) $(DYN_LIB) EXTRA_CPP_DEPENDS = $(PKG_CPP_DEPENDS) EXTRA_LINK_DEPENDS = $(PKG_LINK_DEPENDS) diff --git a/src/MAKE/MACHINES/Makefile.bgq b/src/MAKE/MACHINES/Makefile.bgq index f0401e0758..4baecb9fc3 100644 --- a/src/MAKE/MACHINES/Makefile.bgq +++ b/src/MAKE/MACHINES/Makefile.bgq @@ -15,7 +15,7 @@ include Makefile.package EXTRA_INC = $(LMP_INC) $(PKG_INC) $(MPI_INC) $(FFT_INC) $(JPG_INC) $(PKG_SYSINC) EXTRA_PATH = $(PKG_PATH) $(MPI_PATH) $(FFT_PATH) $(JPG_PATH) $(PKG_SYSPATH) -EXTRA_LIB = $(PKG_LIB) $(MPI_LIB) $(FFT_LIB) $(JPG_LIB) $(PKG_SYSLIB) +EXTRA_LIB = $(PKG_LIB) $(MPI_LIB) $(FFT_LIB) $(JPG_LIB) $(PKG_SYSLIB) $(DYN_LIB) EXTRA_CPP_DEPENDS = $(PKG_CPP_DEPENDS) EXTRA_LINK_DEPENDS = $(PKG_LINK_DEPENDS) diff --git a/src/MAKE/MACHINES/Makefile.cori2 b/src/MAKE/MACHINES/Makefile.cori2 index ca902617fd..8421aedc78 100644 --- a/src/MAKE/MACHINES/Makefile.cori2 +++ b/src/MAKE/MACHINES/Makefile.cori2 @@ -75,6 +75,11 @@ JPG_INC = JPG_PATH = JPG_LIB = #-ljpeg +# library for loading shared objects (defaults to -ldl, should be empty on Windows) +# uncomment to change the default + +# override DYN_LIB = + # --------------------------------------------------------------------- # build rules and dependencies # do not edit this section @@ -84,7 +89,7 @@ include Makefile.package EXTRA_INC = $(LMP_INC) $(PKG_INC) $(MPI_INC) $(FFT_INC) $(JPG_INC) $(PKG_SYSINC) EXTRA_PATH = $(PKG_PATH) $(MPI_PATH) $(FFT_PATH) $(JPG_PATH) $(PKG_SYSPATH) -EXTRA_LIB = $(PKG_LIB) $(MPI_LIB) $(FFT_LIB) $(JPG_LIB) $(PKG_SYSLIB) +EXTRA_LIB = $(PKG_LIB) $(MPI_LIB) $(FFT_LIB) $(JPG_LIB) $(PKG_SYSLIB) $(DYN_LIB) EXTRA_CPP_DEPENDS = $(PKG_CPP_DEPENDS) EXTRA_LINK_DEPENDS = $(PKG_LINK_DEPENDS) diff --git a/src/MAKE/MACHINES/Makefile.cygwin b/src/MAKE/MACHINES/Makefile.cygwin index 1af9cfe802..153ae1e6c0 100644 --- a/src/MAKE/MACHINES/Makefile.cygwin +++ b/src/MAKE/MACHINES/Makefile.cygwin @@ -65,9 +65,10 @@ JPG_INC = JPG_PATH = JPG_LIB = -# library for loading shared objects (defaults to -ldl, but should be empty on Windows) +# library for loading shared objects (defaults to -ldl but must be empty on Windows) override DYN_LIB = + # --------------------------------------------------------------------- # build rules and dependencies # do not edit this section @@ -77,7 +78,7 @@ include Makefile.package EXTRA_INC = $(LMP_INC) $(PKG_INC) $(MPI_INC) $(FFT_INC) $(JPG_INC) $(PKG_SYSINC) EXTRA_PATH = $(PKG_PATH) $(MPI_PATH) $(FFT_PATH) $(JPG_PATH) $(PKG_SYSPATH) -EXTRA_LIB = $(PKG_LIB) $(MPI_LIB) $(FFT_LIB) $(JPG_LIB) $(PKG_SYSLIB) +EXTRA_LIB = $(PKG_LIB) $(MPI_LIB) $(FFT_LIB) $(JPG_LIB) $(PKG_SYSLIB) $(DYN_LIB) EXTRA_CPP_DEPENDS = $(PKG_CPP_DEPENDS) EXTRA_LINK_DEPENDS = $(PKG_LINK_DEPENDS) diff --git a/src/MAKE/MACHINES/Makefile.mac b/src/MAKE/MACHINES/Makefile.mac index fb749b5759..e2a78325a1 100644 --- a/src/MAKE/MACHINES/Makefile.mac +++ b/src/MAKE/MACHINES/Makefile.mac @@ -65,6 +65,11 @@ JPG_INC = JPG_PATH = JPG_LIB = +# library for loading shared objects (defaults to -ldl, should be empty on Windows) +# uncomment to change the default + +# override DYN_LIB = + # --------------------------------------------------------------------- # build rules and dependencies # do not edit this section @@ -74,7 +79,7 @@ include Makefile.package EXTRA_INC = $(LMP_INC) $(PKG_INC) $(MPI_INC) $(FFT_INC) $(JPG_INC) $(PKG_SYSINC) EXTRA_PATH = $(PKG_PATH) $(MPI_PATH) $(FFT_PATH) $(JPG_PATH) $(PKG_SYSPATH) -EXTRA_LIB = $(PKG_LIB) $(MPI_LIB) $(FFT_LIB) $(JPG_LIB) $(PKG_SYSLIB) +EXTRA_LIB = $(PKG_LIB) $(MPI_LIB) $(FFT_LIB) $(JPG_LIB) $(PKG_SYSLIB) $(DYN_LIB) EXTRA_CPP_DEPENDS = $(PKG_CPP_DEPENDS) EXTRA_LINK_DEPENDS = $(PKG_LINK_DEPENDS) diff --git a/src/MAKE/MACHINES/Makefile.mac_mpi b/src/MAKE/MACHINES/Makefile.mac_mpi index 4718c94e51..87f961e12e 100644 --- a/src/MAKE/MACHINES/Makefile.mac_mpi +++ b/src/MAKE/MACHINES/Makefile.mac_mpi @@ -66,6 +66,11 @@ JPG_INC = -I/opt/local/include JPG_PATH = -L/opt/local/lib JPG_LIB = -ljpeg +# library for loading shared objects (defaults to -ldl, should be empty on Windows) +# uncomment to change the default + +# override DYN_LIB = + # --------------------------------------------------------------------- # build rules and dependencies # do not edit this section @@ -75,7 +80,7 @@ include Makefile.package EXTRA_INC = $(LMP_INC) $(PKG_INC) $(MPI_INC) $(FFT_INC) $(JPG_INC) $(PKG_SYSINC) EXTRA_PATH = $(PKG_PATH) $(MPI_PATH) $(FFT_PATH) $(JPG_PATH) $(PKG_SYSPATH) -EXTRA_LIB = $(PKG_LIB) $(MPI_LIB) $(FFT_LIB) $(JPG_LIB) $(PKG_SYSLIB) +EXTRA_LIB = $(PKG_LIB) $(MPI_LIB) $(FFT_LIB) $(JPG_LIB) $(PKG_SYSLIB) $(DYN_LIB) EXTRA_CPP_DEPENDS = $(PKG_CPP_DEPENDS) EXTRA_LINK_DEPENDS = $(PKG_LINK_DEPENDS) diff --git a/src/MAKE/MACHINES/Makefile.power b/src/MAKE/MACHINES/Makefile.power index 1671fd6273..9c8448abc3 100644 --- a/src/MAKE/MACHINES/Makefile.power +++ b/src/MAKE/MACHINES/Makefile.power @@ -66,6 +66,11 @@ JPG_INC = JPG_PATH = JPG_LIB = +# library for loading shared objects (defaults to -ldl, should be empty on Windows) +# uncomment to change the default + +# override DYN_LIB = + # --------------------------------------------------------------------- # build rules and dependencies # do not edit this section @@ -75,7 +80,7 @@ include Makefile.package EXTRA_INC = $(LMP_INC) $(PKG_INC) $(MPI_INC) $(FFT_INC) $(JPG_INC) $(PKG_SYSINC) EXTRA_PATH = $(PKG_PATH) $(MPI_PATH) $(FFT_PATH) $(JPG_PATH) $(PKG_SYSPATH) -EXTRA_LIB = $(PKG_LIB) $(MPI_LIB) $(FFT_LIB) $(JPG_LIB) $(PKG_SYSLIB) +EXTRA_LIB = $(PKG_LIB) $(MPI_LIB) $(FFT_LIB) $(JPG_LIB) $(PKG_SYSLIB) $(DYN_LIB) EXTRA_CPP_DEPENDS = $(PKG_CPP_DEPENDS) EXTRA_LINK_DEPENDS = $(PKG_LINK_DEPENDS) diff --git a/src/MAKE/MACHINES/Makefile.summit_kokkos b/src/MAKE/MACHINES/Makefile.summit_kokkos index 95ee7e39a8..87f8c75da2 100644 --- a/src/MAKE/MACHINES/Makefile.summit_kokkos +++ b/src/MAKE/MACHINES/Makefile.summit_kokkos @@ -72,6 +72,11 @@ JPG_INC = JPG_PATH = JPG_LIB = +# library for loading shared objects (defaults to -ldl, should be empty on Windows) +# uncomment to change the default + +# override DYN_LIB = + # --------------------------------------------------------------------- # build rules and dependencies # do not edit this section @@ -81,7 +86,7 @@ include Makefile.package EXTRA_INC = $(LMP_INC) $(PKG_INC) $(MPI_INC) $(FFT_INC) $(JPG_INC) $(PKG_SYSINC) EXTRA_PATH = $(PKG_PATH) $(MPI_PATH) $(FFT_PATH) $(JPG_PATH) $(PKG_SYSPATH) -EXTRA_LIB = $(PKG_LIB) $(MPI_LIB) $(FFT_LIB) $(JPG_LIB) $(PKG_SYSLIB) +EXTRA_LIB = $(PKG_LIB) $(MPI_LIB) $(FFT_LIB) $(JPG_LIB) $(PKG_SYSLIB) $(DYN_LIB) EXTRA_CPP_DEPENDS = $(PKG_CPP_DEPENDS) EXTRA_LINK_DEPENDS = $(PKG_LINK_DEPENDS) diff --git a/src/MAKE/MACHINES/Makefile.theta b/src/MAKE/MACHINES/Makefile.theta index 62e125152d..8d04d25ac7 100644 --- a/src/MAKE/MACHINES/Makefile.theta +++ b/src/MAKE/MACHINES/Makefile.theta @@ -70,6 +70,11 @@ JPG_INC = JPG_PATH = JPG_LIB = +# library for loading shared objects (defaults to -ldl, should be empty on Windows) +# uncomment to change the default + +# override DYN_LIB = + # --------------------------------------------------------------------- # build rules and dependencies # do not edit this section @@ -79,7 +84,7 @@ include Makefile.package EXTRA_INC = $(LMP_INC) $(PKG_INC) $(MPI_INC) $(FFT_INC) $(JPG_INC) $(PKG_SYSINC) EXTRA_PATH = $(PKG_PATH) $(MPI_PATH) $(FFT_PATH) $(JPG_PATH) $(PKG_SYSPATH) -EXTRA_LIB = $(PKG_LIB) $(MPI_LIB) $(FFT_LIB) $(JPG_LIB) $(PKG_SYSLIB) +EXTRA_LIB = $(PKG_LIB) $(MPI_LIB) $(FFT_LIB) $(JPG_LIB) $(PKG_SYSLIB) $(DYN_LIB) EXTRA_CPP_DEPENDS = $(PKG_CPP_DEPENDS) EXTRA_LINK_DEPENDS = $(PKG_LINK_DEPENDS) diff --git a/src/MAKE/MACHINES/Makefile.ubuntu b/src/MAKE/MACHINES/Makefile.ubuntu index f030ce64df..ed479d8969 100644 --- a/src/MAKE/MACHINES/Makefile.ubuntu +++ b/src/MAKE/MACHINES/Makefile.ubuntu @@ -69,6 +69,11 @@ JPG_INC = JPG_PATH = JPG_LIB = -ljpeg -lpng +# library for loading shared objects (defaults to -ldl, should be empty on Windows) +# uncomment to change the default + +# override DYN_LIB = + # --------------------------------------------------------------------- # build rules and dependencies # do not edit this section @@ -78,7 +83,7 @@ include Makefile.package EXTRA_INC = $(LMP_INC) $(PKG_INC) $(MPI_INC) $(FFT_INC) $(JPG_INC) $(PKG_SYSINC) EXTRA_PATH = $(PKG_PATH) $(MPI_PATH) $(FFT_PATH) $(JPG_PATH) $(PKG_SYSPATH) -EXTRA_LIB = $(PKG_LIB) $(MPI_LIB) $(FFT_LIB) $(JPG_LIB) $(PKG_SYSLIB) +EXTRA_LIB = $(PKG_LIB) $(MPI_LIB) $(FFT_LIB) $(JPG_LIB) $(PKG_SYSLIB) $(DYN_LIB) EXTRA_CPP_DEPENDS = $(PKG_CPP_DEPENDS) EXTRA_LINK_DEPENDS = $(PKG_LINK_DEPENDS) diff --git a/src/MAKE/MACHINES/Makefile.ubuntu_simple b/src/MAKE/MACHINES/Makefile.ubuntu_simple index e8b58fc804..3926777f03 100644 --- a/src/MAKE/MACHINES/Makefile.ubuntu_simple +++ b/src/MAKE/MACHINES/Makefile.ubuntu_simple @@ -68,6 +68,11 @@ JPG_INC = JPG_PATH = JPG_LIB = +# library for loading shared objects (defaults to -ldl, should be empty on Windows) +# uncomment to change the default + +# override DYN_LIB = + # --------------------------------------------------------------------- # build rules and dependencies # do not edit this section @@ -77,7 +82,7 @@ include Makefile.package EXTRA_INC = $(LMP_INC) $(PKG_INC) $(MPI_INC) $(FFT_INC) $(JPG_INC) $(PKG_SYSINC) EXTRA_PATH = $(PKG_PATH) $(MPI_PATH) $(FFT_PATH) $(JPG_PATH) $(PKG_SYSPATH) -EXTRA_LIB = $(PKG_LIB) $(MPI_LIB) $(FFT_LIB) $(JPG_LIB) $(PKG_SYSLIB) +EXTRA_LIB = $(PKG_LIB) $(MPI_LIB) $(FFT_LIB) $(JPG_LIB) $(PKG_SYSLIB) $(DYN_LIB) EXTRA_CPP_DEPENDS = $(PKG_CPP_DEPENDS) EXTRA_LINK_DEPENDS = $(PKG_LINK_DEPENDS) diff --git a/src/MAKE/MACHINES/Makefile.white b/src/MAKE/MACHINES/Makefile.white index ff2103008c..cb101998b3 100644 --- a/src/MAKE/MACHINES/Makefile.white +++ b/src/MAKE/MACHINES/Makefile.white @@ -69,6 +69,11 @@ JPG_INC = JPG_PATH = JPG_LIB = +# library for loading shared objects (defaults to -ldl, should be empty on Windows) +# uncomment to change the default + +# override DYN_LIB = + # --------------------------------------------------------------------- # build rules and dependencies # do not edit this section @@ -78,7 +83,7 @@ include Makefile.package EXTRA_INC = $(LMP_INC) $(PKG_INC) $(MPI_INC) $(FFT_INC) $(JPG_INC) $(PKG_SYSINC) EXTRA_PATH = $(PKG_PATH) $(MPI_PATH) $(FFT_PATH) $(JPG_PATH) $(PKG_SYSPATH) -EXTRA_LIB = $(PKG_LIB) $(MPI_LIB) $(FFT_LIB) $(JPG_LIB) $(PKG_SYSLIB) +EXTRA_LIB = $(PKG_LIB) $(MPI_LIB) $(FFT_LIB) $(JPG_LIB) $(PKG_SYSLIB) $(DYN_LIB) EXTRA_CPP_DEPENDS = $(PKG_CPP_DEPENDS) EXTRA_LINK_DEPENDS = $(PKG_LINK_DEPENDS) diff --git a/src/MAKE/MACHINES/Makefile.xe6 b/src/MAKE/MACHINES/Makefile.xe6 index a6db78a053..9dbe0ba73e 100644 --- a/src/MAKE/MACHINES/Makefile.xe6 +++ b/src/MAKE/MACHINES/Makefile.xe6 @@ -66,6 +66,11 @@ JPG_INC = JPG_PATH = JPG_LIB = +# library for loading shared objects (defaults to -ldl, should be empty on Windows) +# uncomment to change the default + +# override DYN_LIB = + # --------------------------------------------------------------------- # build rules and dependencies # do not edit this section @@ -75,7 +80,7 @@ include Makefile.package EXTRA_INC = $(LMP_INC) $(PKG_INC) $(MPI_INC) $(FFT_INC) $(JPG_INC) $(PKG_SYSINC) EXTRA_PATH = $(PKG_PATH) $(MPI_PATH) $(FFT_PATH) $(JPG_PATH) $(PKG_SYSPATH) -EXTRA_LIB = $(PKG_LIB) $(MPI_LIB) $(FFT_LIB) $(JPG_LIB) $(PKG_SYSLIB) +EXTRA_LIB = $(PKG_LIB) $(MPI_LIB) $(FFT_LIB) $(JPG_LIB) $(PKG_SYSLIB) $(DYN_LIB) EXTRA_CPP_DEPENDS = $(PKG_CPP_DEPENDS) EXTRA_LINK_DEPENDS = $(PKG_LINK_DEPENDS) diff --git a/src/MAKE/OPTIONS/Makefile.big b/src/MAKE/OPTIONS/Makefile.big index bdc093c6ae..d2cbf8a73e 100644 --- a/src/MAKE/OPTIONS/Makefile.big +++ b/src/MAKE/OPTIONS/Makefile.big @@ -65,6 +65,11 @@ JPG_INC = JPG_PATH = JPG_LIB = +# library for loading shared objects (defaults to -ldl, should be empty on Windows) +# uncomment to change the default + +# override DYN_LIB = + # --------------------------------------------------------------------- # build rules and dependencies # do not edit this section @@ -74,7 +79,7 @@ include Makefile.package EXTRA_INC = $(LMP_INC) $(PKG_INC) $(MPI_INC) $(FFT_INC) $(JPG_INC) $(PKG_SYSINC) EXTRA_PATH = $(PKG_PATH) $(MPI_PATH) $(FFT_PATH) $(JPG_PATH) $(PKG_SYSPATH) -EXTRA_LIB = $(PKG_LIB) $(MPI_LIB) $(FFT_LIB) $(JPG_LIB) $(PKG_SYSLIB) +EXTRA_LIB = $(PKG_LIB) $(MPI_LIB) $(FFT_LIB) $(JPG_LIB) $(PKG_SYSLIB) $(DYN_LIB) EXTRA_CPP_DEPENDS = $(PKG_CPP_DEPENDS) EXTRA_LINK_DEPENDS = $(PKG_LINK_DEPENDS) diff --git a/src/MAKE/OPTIONS/Makefile.fftw b/src/MAKE/OPTIONS/Makefile.fftw index dd539fb5dc..65b568d3d2 100644 --- a/src/MAKE/OPTIONS/Makefile.fftw +++ b/src/MAKE/OPTIONS/Makefile.fftw @@ -65,6 +65,11 @@ JPG_INC = JPG_PATH = JPG_LIB = +# library for loading shared objects (defaults to -ldl, should be empty on Windows) +# uncomment to change the default + +# override DYN_LIB = + # --------------------------------------------------------------------- # build rules and dependencies # do not edit this section @@ -74,7 +79,7 @@ include Makefile.package EXTRA_INC = $(LMP_INC) $(PKG_INC) $(MPI_INC) $(FFT_INC) $(JPG_INC) $(PKG_SYSINC) EXTRA_PATH = $(PKG_PATH) $(MPI_PATH) $(FFT_PATH) $(JPG_PATH) $(PKG_SYSPATH) -EXTRA_LIB = $(PKG_LIB) $(MPI_LIB) $(FFT_LIB) $(JPG_LIB) $(PKG_SYSLIB) +EXTRA_LIB = $(PKG_LIB) $(MPI_LIB) $(FFT_LIB) $(JPG_LIB) $(PKG_SYSLIB) $(DYN_LIB) EXTRA_CPP_DEPENDS = $(PKG_CPP_DEPENDS) EXTRA_LINK_DEPENDS = $(PKG_LINK_DEPENDS) diff --git a/src/MAKE/OPTIONS/Makefile.g++_mpich b/src/MAKE/OPTIONS/Makefile.g++_mpich index e0c77437f5..15257a9a45 100644 --- a/src/MAKE/OPTIONS/Makefile.g++_mpich +++ b/src/MAKE/OPTIONS/Makefile.g++_mpich @@ -65,6 +65,11 @@ JPG_INC = JPG_PATH = JPG_LIB = +# library for loading shared objects (defaults to -ldl, should be empty on Windows) +# uncomment to change the default + +# override DYN_LIB = + # --------------------------------------------------------------------- # build rules and dependencies # do not edit this section @@ -74,7 +79,7 @@ include Makefile.package EXTRA_INC = $(LMP_INC) $(PKG_INC) $(MPI_INC) $(FFT_INC) $(JPG_INC) $(PKG_SYSINC) EXTRA_PATH = $(PKG_PATH) $(MPI_PATH) $(FFT_PATH) $(JPG_PATH) $(PKG_SYSPATH) -EXTRA_LIB = $(PKG_LIB) $(MPI_LIB) $(FFT_LIB) $(JPG_LIB) $(PKG_SYSLIB) +EXTRA_LIB = $(PKG_LIB) $(MPI_LIB) $(FFT_LIB) $(JPG_LIB) $(PKG_SYSLIB) $(DYN_LIB) EXTRA_CPP_DEPENDS = $(PKG_CPP_DEPENDS) EXTRA_LINK_DEPENDS = $(PKG_LINK_DEPENDS) diff --git a/src/MAKE/OPTIONS/Makefile.g++_mpich_link b/src/MAKE/OPTIONS/Makefile.g++_mpich_link index 4f2855a9cc..3498842be4 100644 --- a/src/MAKE/OPTIONS/Makefile.g++_mpich_link +++ b/src/MAKE/OPTIONS/Makefile.g++_mpich_link @@ -65,6 +65,11 @@ JPG_INC = JPG_PATH = JPG_LIB = +# library for loading shared objects (defaults to -ldl, should be empty on Windows) +# uncomment to change the default + +# override DYN_LIB = + # --------------------------------------------------------------------- # build rules and dependencies # do not edit this section @@ -74,7 +79,7 @@ include Makefile.package EXTRA_INC = $(LMP_INC) $(PKG_INC) $(MPI_INC) $(FFT_INC) $(JPG_INC) $(PKG_SYSINC) EXTRA_PATH = $(PKG_PATH) $(MPI_PATH) $(FFT_PATH) $(JPG_PATH) $(PKG_SYSPATH) -EXTRA_LIB = $(PKG_LIB) $(MPI_LIB) $(FFT_LIB) $(JPG_LIB) $(PKG_SYSLIB) +EXTRA_LIB = $(PKG_LIB) $(MPI_LIB) $(FFT_LIB) $(JPG_LIB) $(PKG_SYSLIB) $(DYN_LIB) EXTRA_CPP_DEPENDS = $(PKG_CPP_DEPENDS) EXTRA_LINK_DEPENDS = $(PKG_LINK_DEPENDS) diff --git a/src/MAKE/OPTIONS/Makefile.g++_openmpi b/src/MAKE/OPTIONS/Makefile.g++_openmpi index 75c12f9b38..a619beefcc 100644 --- a/src/MAKE/OPTIONS/Makefile.g++_openmpi +++ b/src/MAKE/OPTIONS/Makefile.g++_openmpi @@ -66,6 +66,11 @@ JPG_INC = JPG_PATH = JPG_LIB = +# library for loading shared objects (defaults to -ldl, should be empty on Windows) +# uncomment to change the default + +# override DYN_LIB = + # --------------------------------------------------------------------- # build rules and dependencies # do not edit this section @@ -75,7 +80,7 @@ include Makefile.package EXTRA_INC = $(LMP_INC) $(PKG_INC) $(MPI_INC) $(FFT_INC) $(JPG_INC) $(PKG_SYSINC) EXTRA_PATH = $(PKG_PATH) $(MPI_PATH) $(FFT_PATH) $(JPG_PATH) $(PKG_SYSPATH) -EXTRA_LIB = $(PKG_LIB) $(MPI_LIB) $(FFT_LIB) $(JPG_LIB) $(PKG_SYSLIB) +EXTRA_LIB = $(PKG_LIB) $(MPI_LIB) $(FFT_LIB) $(JPG_LIB) $(PKG_SYSLIB) $(DYN_LIB) EXTRA_CPP_DEPENDS = $(PKG_CPP_DEPENDS) EXTRA_LINK_DEPENDS = $(PKG_LINK_DEPENDS) diff --git a/src/MAKE/OPTIONS/Makefile.g++_openmpi_link b/src/MAKE/OPTIONS/Makefile.g++_openmpi_link index 0c9997dbb0..7d1743fec7 100644 --- a/src/MAKE/OPTIONS/Makefile.g++_openmpi_link +++ b/src/MAKE/OPTIONS/Makefile.g++_openmpi_link @@ -65,6 +65,11 @@ JPG_INC = JPG_PATH = JPG_LIB = +# library for loading shared objects (defaults to -ldl, should be empty on Windows) +# uncomment to change the default + +# override DYN_LIB = + # --------------------------------------------------------------------- # build rules and dependencies # do not edit this section @@ -74,7 +79,7 @@ include Makefile.package EXTRA_INC = $(LMP_INC) $(PKG_INC) $(MPI_INC) $(FFT_INC) $(JPG_INC) $(PKG_SYSINC) EXTRA_PATH = $(PKG_PATH) $(MPI_PATH) $(FFT_PATH) $(JPG_PATH) $(PKG_SYSPATH) -EXTRA_LIB = $(PKG_LIB) $(MPI_LIB) $(FFT_LIB) $(JPG_LIB) $(PKG_SYSLIB) +EXTRA_LIB = $(PKG_LIB) $(MPI_LIB) $(FFT_LIB) $(JPG_LIB) $(PKG_SYSLIB) $(DYN_LIB) EXTRA_CPP_DEPENDS = $(PKG_CPP_DEPENDS) EXTRA_LINK_DEPENDS = $(PKG_LINK_DEPENDS) diff --git a/src/MAKE/OPTIONS/Makefile.g++_serial b/src/MAKE/OPTIONS/Makefile.g++_serial index d6b9bf3221..397a977ead 100644 --- a/src/MAKE/OPTIONS/Makefile.g++_serial +++ b/src/MAKE/OPTIONS/Makefile.g++_serial @@ -65,6 +65,11 @@ JPG_INC = JPG_PATH = JPG_LIB = +# library for loading shared objects (defaults to -ldl, should be empty on Windows) +# uncomment to change the default + +# override DYN_LIB = + # --------------------------------------------------------------------- # build rules and dependencies # do not edit this section @@ -74,7 +79,7 @@ include Makefile.package EXTRA_INC = $(LMP_INC) $(PKG_INC) $(MPI_INC) $(FFT_INC) $(JPG_INC) $(PKG_SYSINC) EXTRA_PATH = $(PKG_PATH) $(MPI_PATH) $(FFT_PATH) $(JPG_PATH) $(PKG_SYSPATH) -EXTRA_LIB = $(PKG_LIB) $(MPI_LIB) $(FFT_LIB) $(JPG_LIB) $(PKG_SYSLIB) +EXTRA_LIB = $(PKG_LIB) $(MPI_LIB) $(FFT_LIB) $(JPG_LIB) $(PKG_SYSLIB) $(DYN_LIB) EXTRA_CPP_DEPENDS = $(PKG_CPP_DEPENDS) EXTRA_LINK_DEPENDS = $(PKG_LINK_DEPENDS) diff --git a/src/MAKE/OPTIONS/Makefile.gpu b/src/MAKE/OPTIONS/Makefile.gpu index 9ad5cf477c..2e183ef746 100644 --- a/src/MAKE/OPTIONS/Makefile.gpu +++ b/src/MAKE/OPTIONS/Makefile.gpu @@ -65,6 +65,11 @@ JPG_INC = JPG_PATH = JPG_LIB = +# library for loading shared objects (defaults to -ldl, should be empty on Windows) +# uncomment to change the default + +# override DYN_LIB = + # --------------------------------------------------------------------- # build rules and dependencies # do not edit this section @@ -74,7 +79,7 @@ include Makefile.package EXTRA_INC = $(LMP_INC) $(PKG_INC) $(MPI_INC) $(FFT_INC) $(JPG_INC) $(PKG_SYSINC) EXTRA_PATH = $(PKG_PATH) $(MPI_PATH) $(FFT_PATH) $(JPG_PATH) $(PKG_SYSPATH) -EXTRA_LIB = $(PKG_LIB) $(MPI_LIB) $(FFT_LIB) $(JPG_LIB) $(PKG_SYSLIB) +EXTRA_LIB = $(PKG_LIB) $(MPI_LIB) $(FFT_LIB) $(JPG_LIB) $(PKG_SYSLIB) $(DYN_LIB) EXTRA_CPP_DEPENDS = $(PKG_CPP_DEPENDS) EXTRA_LINK_DEPENDS = $(PKG_LINK_DEPENDS) diff --git a/src/MAKE/OPTIONS/Makefile.hip b/src/MAKE/OPTIONS/Makefile.hip index 8be9e7260f..ed9f832a42 100644 --- a/src/MAKE/OPTIONS/Makefile.hip +++ b/src/MAKE/OPTIONS/Makefile.hip @@ -66,6 +66,11 @@ JPG_INC = JPG_PATH = JPG_LIB = +# library for loading shared objects (defaults to -ldl, should be empty on Windows) +# uncomment to change the default + +# override DYN_LIB = + # --------------------------------------------------------------------- # build rules and dependencies # do not edit this section @@ -80,7 +85,7 @@ endif EXTRA_INC = $(LMP_INC) $(PKG_INC) $(MPI_INC) $(FFT_INC) $(JPG_INC) $(PKG_SYSINC) EXTRA_PATH = $(PKG_PATH) $(MPI_PATH) $(FFT_PATH) $(JPG_PATH) $(PKG_SYSPATH) -EXTRA_LIB = $(PKG_LIB) $(MPI_LIB) $(FFT_LIB) $(JPG_LIB) $(PKG_SYSLIB) +EXTRA_LIB = $(PKG_LIB) $(MPI_LIB) $(FFT_LIB) $(JPG_LIB) $(PKG_SYSLIB) $(DYN_LIB) EXTRA_CPP_DEPENDS = $(PKG_CPP_DEPENDS) EXTRA_LINK_DEPENDS = $(PKG_LINK_DEPENDS) diff --git a/src/MAKE/OPTIONS/Makefile.icc_mpich b/src/MAKE/OPTIONS/Makefile.icc_mpich index c630c42c26..30d7b3da81 100644 --- a/src/MAKE/OPTIONS/Makefile.icc_mpich +++ b/src/MAKE/OPTIONS/Makefile.icc_mpich @@ -65,6 +65,11 @@ JPG_INC = JPG_PATH = JPG_LIB = +# library for loading shared objects (defaults to -ldl, should be empty on Windows) +# uncomment to change the default + +# override DYN_LIB = + # --------------------------------------------------------------------- # build rules and dependencies # do not edit this section @@ -74,7 +79,7 @@ include Makefile.package EXTRA_INC = $(LMP_INC) $(PKG_INC) $(MPI_INC) $(FFT_INC) $(JPG_INC) $(PKG_SYSINC) EXTRA_PATH = $(PKG_PATH) $(MPI_PATH) $(FFT_PATH) $(JPG_PATH) $(PKG_SYSPATH) -EXTRA_LIB = $(PKG_LIB) $(MPI_LIB) $(FFT_LIB) $(JPG_LIB) $(PKG_SYSLIB) +EXTRA_LIB = $(PKG_LIB) $(MPI_LIB) $(FFT_LIB) $(JPG_LIB) $(PKG_SYSLIB) $(DYN_LIB) EXTRA_CPP_DEPENDS = $(PKG_CPP_DEPENDS) EXTRA_LINK_DEPENDS = $(PKG_LINK_DEPENDS) diff --git a/src/MAKE/OPTIONS/Makefile.icc_mpich_link b/src/MAKE/OPTIONS/Makefile.icc_mpich_link index 8b89d2509a..232475f2e3 100644 --- a/src/MAKE/OPTIONS/Makefile.icc_mpich_link +++ b/src/MAKE/OPTIONS/Makefile.icc_mpich_link @@ -65,6 +65,11 @@ JPG_INC = JPG_PATH = JPG_LIB = +# library for loading shared objects (defaults to -ldl, should be empty on Windows) +# uncomment to change the default + +# override DYN_LIB = + # --------------------------------------------------------------------- # build rules and dependencies # do not edit this section @@ -74,7 +79,7 @@ include Makefile.package EXTRA_INC = $(LMP_INC) $(PKG_INC) $(MPI_INC) $(FFT_INC) $(JPG_INC) $(PKG_SYSINC) EXTRA_PATH = $(PKG_PATH) $(MPI_PATH) $(FFT_PATH) $(JPG_PATH) $(PKG_SYSPATH) -EXTRA_LIB = $(PKG_LIB) $(MPI_LIB) $(FFT_LIB) $(JPG_LIB) $(PKG_SYSLIB) +EXTRA_LIB = $(PKG_LIB) $(MPI_LIB) $(FFT_LIB) $(JPG_LIB) $(PKG_SYSLIB) $(DYN_LIB) EXTRA_CPP_DEPENDS = $(PKG_CPP_DEPENDS) EXTRA_LINK_DEPENDS = $(PKG_LINK_DEPENDS) diff --git a/src/MAKE/OPTIONS/Makefile.icc_openmpi b/src/MAKE/OPTIONS/Makefile.icc_openmpi index 0a2c9598a6..5f3281c021 100644 --- a/src/MAKE/OPTIONS/Makefile.icc_openmpi +++ b/src/MAKE/OPTIONS/Makefile.icc_openmpi @@ -66,6 +66,11 @@ JPG_INC = JPG_PATH = JPG_LIB = +# library for loading shared objects (defaults to -ldl, should be empty on Windows) +# uncomment to change the default + +# override DYN_LIB = + # --------------------------------------------------------------------- # build rules and dependencies # do not edit this section @@ -75,7 +80,7 @@ include Makefile.package EXTRA_INC = $(LMP_INC) $(PKG_INC) $(MPI_INC) $(FFT_INC) $(JPG_INC) $(PKG_SYSINC) EXTRA_PATH = $(PKG_PATH) $(MPI_PATH) $(FFT_PATH) $(JPG_PATH) $(PKG_SYSPATH) -EXTRA_LIB = $(PKG_LIB) $(MPI_LIB) $(FFT_LIB) $(JPG_LIB) $(PKG_SYSLIB) +EXTRA_LIB = $(PKG_LIB) $(MPI_LIB) $(FFT_LIB) $(JPG_LIB) $(PKG_SYSLIB) $(DYN_LIB) EXTRA_CPP_DEPENDS = $(PKG_CPP_DEPENDS) EXTRA_LINK_DEPENDS = $(PKG_LINK_DEPENDS) diff --git a/src/MAKE/OPTIONS/Makefile.icc_openmpi_link b/src/MAKE/OPTIONS/Makefile.icc_openmpi_link index 825d4cdff0..ab3909fd1e 100644 --- a/src/MAKE/OPTIONS/Makefile.icc_openmpi_link +++ b/src/MAKE/OPTIONS/Makefile.icc_openmpi_link @@ -65,6 +65,11 @@ JPG_INC = JPG_PATH = JPG_LIB = +# library for loading shared objects (defaults to -ldl, should be empty on Windows) +# uncomment to change the default + +# override DYN_LIB = + # --------------------------------------------------------------------- # build rules and dependencies # do not edit this section @@ -74,7 +79,7 @@ include Makefile.package EXTRA_INC = $(LMP_INC) $(PKG_INC) $(MPI_INC) $(FFT_INC) $(JPG_INC) $(PKG_SYSINC) EXTRA_PATH = $(PKG_PATH) $(MPI_PATH) $(FFT_PATH) $(JPG_PATH) $(PKG_SYSPATH) -EXTRA_LIB = $(PKG_LIB) $(MPI_LIB) $(FFT_LIB) $(JPG_LIB) $(PKG_SYSLIB) +EXTRA_LIB = $(PKG_LIB) $(MPI_LIB) $(FFT_LIB) $(JPG_LIB) $(PKG_SYSLIB) $(DYN_LIB) EXTRA_CPP_DEPENDS = $(PKG_CPP_DEPENDS) EXTRA_LINK_DEPENDS = $(PKG_LINK_DEPENDS) diff --git a/src/MAKE/OPTIONS/Makefile.icc_serial b/src/MAKE/OPTIONS/Makefile.icc_serial index 2d2da54c68..5ec920c9ef 100644 --- a/src/MAKE/OPTIONS/Makefile.icc_serial +++ b/src/MAKE/OPTIONS/Makefile.icc_serial @@ -65,6 +65,11 @@ JPG_INC = JPG_PATH = JPG_LIB = +# library for loading shared objects (defaults to -ldl, should be empty on Windows) +# uncomment to change the default + +# override DYN_LIB = + # --------------------------------------------------------------------- # build rules and dependencies # do not edit this section @@ -74,7 +79,7 @@ include Makefile.package EXTRA_INC = $(LMP_INC) $(PKG_INC) $(MPI_INC) $(FFT_INC) $(JPG_INC) $(PKG_SYSINC) EXTRA_PATH = $(PKG_PATH) $(MPI_PATH) $(FFT_PATH) $(JPG_PATH) $(PKG_SYSPATH) -EXTRA_LIB = $(PKG_LIB) $(MPI_LIB) $(FFT_LIB) $(JPG_LIB) $(PKG_SYSLIB) +EXTRA_LIB = $(PKG_LIB) $(MPI_LIB) $(FFT_LIB) $(JPG_LIB) $(PKG_SYSLIB) $(DYN_LIB) EXTRA_CPP_DEPENDS = $(PKG_CPP_DEPENDS) EXTRA_LINK_DEPENDS = $(PKG_LINK_DEPENDS) diff --git a/src/MAKE/OPTIONS/Makefile.intel_coprocessor b/src/MAKE/OPTIONS/Makefile.intel_coprocessor index 2b66c20f4a..99e8d22d82 100644 --- a/src/MAKE/OPTIONS/Makefile.intel_coprocessor +++ b/src/MAKE/OPTIONS/Makefile.intel_coprocessor @@ -70,6 +70,11 @@ JPG_INC = JPG_PATH = JPG_LIB = +# library for loading shared objects (defaults to -ldl, should be empty on Windows) +# uncomment to change the default + +# override DYN_LIB = + # --------------------------------------------------------------------- # build rules and dependencies # do not edit this section @@ -79,7 +84,7 @@ include Makefile.package EXTRA_INC = $(LMP_INC) $(PKG_INC) $(MPI_INC) $(FFT_INC) $(JPG_INC) $(PKG_SYSINC) EXTRA_PATH = $(PKG_PATH) $(MPI_PATH) $(FFT_PATH) $(JPG_PATH) $(PKG_SYSPATH) -EXTRA_LIB = $(PKG_LIB) $(MPI_LIB) $(FFT_LIB) $(JPG_LIB) $(PKG_SYSLIB) +EXTRA_LIB = $(PKG_LIB) $(MPI_LIB) $(FFT_LIB) $(JPG_LIB) $(PKG_SYSLIB) $(DYN_LIB) EXTRA_CPP_DEPENDS = $(PKG_CPP_DEPENDS) EXTRA_LINK_DEPENDS = $(PKG_LINK_DEPENDS) diff --git a/src/MAKE/OPTIONS/Makefile.intel_cpu_intelmpi b/src/MAKE/OPTIONS/Makefile.intel_cpu_intelmpi index 04ec1fdc64..0371078bd2 100644 --- a/src/MAKE/OPTIONS/Makefile.intel_cpu_intelmpi +++ b/src/MAKE/OPTIONS/Makefile.intel_cpu_intelmpi @@ -69,6 +69,11 @@ JPG_INC = JPG_PATH = JPG_LIB = +# library for loading shared objects (defaults to -ldl, should be empty on Windows) +# uncomment to change the default + +# override DYN_LIB = + # --------------------------------------------------------------------- # build rules and dependencies # do not edit this section @@ -78,7 +83,7 @@ include Makefile.package EXTRA_INC = $(LMP_INC) $(PKG_INC) $(MPI_INC) $(FFT_INC) $(JPG_INC) $(PKG_SYSINC) EXTRA_PATH = $(PKG_PATH) $(MPI_PATH) $(FFT_PATH) $(JPG_PATH) $(PKG_SYSPATH) -EXTRA_LIB = $(PKG_LIB) $(MPI_LIB) $(FFT_LIB) $(JPG_LIB) $(PKG_SYSLIB) +EXTRA_LIB = $(PKG_LIB) $(MPI_LIB) $(FFT_LIB) $(JPG_LIB) $(PKG_SYSLIB) $(DYN_LIB) EXTRA_CPP_DEPENDS = $(PKG_CPP_DEPENDS) EXTRA_LINK_DEPENDS = $(PKG_LINK_DEPENDS) diff --git a/src/MAKE/OPTIONS/Makefile.intel_cpu_mpich b/src/MAKE/OPTIONS/Makefile.intel_cpu_mpich index dece0092f1..04a60f8f61 100644 --- a/src/MAKE/OPTIONS/Makefile.intel_cpu_mpich +++ b/src/MAKE/OPTIONS/Makefile.intel_cpu_mpich @@ -69,6 +69,11 @@ JPG_INC = JPG_PATH = JPG_LIB = +# library for loading shared objects (defaults to -ldl, should be empty on Windows) +# uncomment to change the default + +# override DYN_LIB = + # --------------------------------------------------------------------- # build rules and dependencies # do not edit this section @@ -78,7 +83,7 @@ include Makefile.package EXTRA_INC = $(LMP_INC) $(PKG_INC) $(MPI_INC) $(FFT_INC) $(JPG_INC) $(PKG_SYSINC) EXTRA_PATH = $(PKG_PATH) $(MPI_PATH) $(FFT_PATH) $(JPG_PATH) $(PKG_SYSPATH) -EXTRA_LIB = $(PKG_LIB) $(MPI_LIB) $(FFT_LIB) $(JPG_LIB) $(PKG_SYSLIB) +EXTRA_LIB = $(PKG_LIB) $(MPI_LIB) $(FFT_LIB) $(JPG_LIB) $(PKG_SYSLIB) $(DYN_LIB) EXTRA_CPP_DEPENDS = $(PKG_CPP_DEPENDS) EXTRA_LINK_DEPENDS = $(PKG_LINK_DEPENDS) diff --git a/src/MAKE/OPTIONS/Makefile.intel_cpu_openmpi b/src/MAKE/OPTIONS/Makefile.intel_cpu_openmpi index 0053aef20a..9041dc797e 100644 --- a/src/MAKE/OPTIONS/Makefile.intel_cpu_openmpi +++ b/src/MAKE/OPTIONS/Makefile.intel_cpu_openmpi @@ -70,6 +70,11 @@ JPG_INC = JPG_PATH = JPG_LIB = +# library for loading shared objects (defaults to -ldl, should be empty on Windows) +# uncomment to change the default + +# override DYN_LIB = + # --------------------------------------------------------------------- # build rules and dependencies # do not edit this section @@ -79,7 +84,7 @@ include Makefile.package EXTRA_INC = $(LMP_INC) $(PKG_INC) $(MPI_INC) $(FFT_INC) $(JPG_INC) $(PKG_SYSINC) EXTRA_PATH = $(PKG_PATH) $(MPI_PATH) $(FFT_PATH) $(JPG_PATH) $(PKG_SYSPATH) -EXTRA_LIB = $(PKG_LIB) $(MPI_LIB) $(FFT_LIB) $(JPG_LIB) $(PKG_SYSLIB) +EXTRA_LIB = $(PKG_LIB) $(MPI_LIB) $(FFT_LIB) $(JPG_LIB) $(PKG_SYSLIB) $(DYN_LIB) EXTRA_CPP_DEPENDS = $(PKG_CPP_DEPENDS) EXTRA_LINK_DEPENDS = $(PKG_LINK_DEPENDS) diff --git a/src/MAKE/OPTIONS/Makefile.jpeg b/src/MAKE/OPTIONS/Makefile.jpeg index 268e7b94e8..c2b7ab6a49 100644 --- a/src/MAKE/OPTIONS/Makefile.jpeg +++ b/src/MAKE/OPTIONS/Makefile.jpeg @@ -65,6 +65,11 @@ JPG_INC = -I/usr/include JPG_PATH = -L/usr/lib JPG_LIB = -ljpeg +# library for loading shared objects (defaults to -ldl, should be empty on Windows) +# uncomment to change the default + +# override DYN_LIB = + # --------------------------------------------------------------------- # build rules and dependencies # do not edit this section @@ -74,7 +79,7 @@ include Makefile.package EXTRA_INC = $(LMP_INC) $(PKG_INC) $(MPI_INC) $(FFT_INC) $(JPG_INC) $(PKG_SYSINC) EXTRA_PATH = $(PKG_PATH) $(MPI_PATH) $(FFT_PATH) $(JPG_PATH) $(PKG_SYSPATH) -EXTRA_LIB = $(PKG_LIB) $(MPI_LIB) $(FFT_LIB) $(JPG_LIB) $(PKG_SYSLIB) +EXTRA_LIB = $(PKG_LIB) $(MPI_LIB) $(FFT_LIB) $(JPG_LIB) $(PKG_SYSLIB) $(DYN_LIB) EXTRA_CPP_DEPENDS = $(PKG_CPP_DEPENDS) EXTRA_LINK_DEPENDS = $(PKG_LINK_DEPENDS) diff --git a/src/MAKE/OPTIONS/Makefile.knl b/src/MAKE/OPTIONS/Makefile.knl index 091fd7558f..c6cf783331 100644 --- a/src/MAKE/OPTIONS/Makefile.knl +++ b/src/MAKE/OPTIONS/Makefile.knl @@ -68,6 +68,11 @@ JPG_INC = JPG_PATH = JPG_LIB = -ljpeg +# library for loading shared objects (defaults to -ldl, should be empty on Windows) +# uncomment to change the default + +# override DYN_LIB = + # --------------------------------------------------------------------- # build rules and dependencies # do not edit this section @@ -77,7 +82,7 @@ include Makefile.package EXTRA_INC = $(LMP_INC) $(PKG_INC) $(MPI_INC) $(FFT_INC) $(JPG_INC) $(PKG_SYSINC) EXTRA_PATH = $(PKG_PATH) $(MPI_PATH) $(FFT_PATH) $(JPG_PATH) $(PKG_SYSPATH) -EXTRA_LIB = $(PKG_LIB) $(MPI_LIB) $(FFT_LIB) $(JPG_LIB) $(PKG_SYSLIB) +EXTRA_LIB = $(PKG_LIB) $(MPI_LIB) $(FFT_LIB) $(JPG_LIB) $(PKG_SYSLIB) $(DYN_LIB) EXTRA_CPP_DEPENDS = $(PKG_CPP_DEPENDS) EXTRA_LINK_DEPENDS = $(PKG_LINK_DEPENDS) diff --git a/src/MAKE/OPTIONS/Makefile.kokkos_cuda_mpi b/src/MAKE/OPTIONS/Makefile.kokkos_cuda_mpi index c6071cf747..cb3ef0e442 100644 --- a/src/MAKE/OPTIONS/Makefile.kokkos_cuda_mpi +++ b/src/MAKE/OPTIONS/Makefile.kokkos_cuda_mpi @@ -70,6 +70,11 @@ JPG_INC = JPG_PATH = JPG_LIB = +# library for loading shared objects (defaults to -ldl, should be empty on Windows) +# uncomment to change the default + +# override DYN_LIB = + # --------------------------------------------------------------------- # build rules and dependencies # do not edit this section @@ -79,7 +84,7 @@ include Makefile.package EXTRA_INC = $(LMP_INC) $(PKG_INC) $(MPI_INC) $(FFT_INC) $(JPG_INC) $(PKG_SYSINC) EXTRA_PATH = $(PKG_PATH) $(MPI_PATH) $(FFT_PATH) $(JPG_PATH) $(PKG_SYSPATH) -EXTRA_LIB = $(PKG_LIB) $(MPI_LIB) $(FFT_LIB) $(JPG_LIB) $(PKG_SYSLIB) +EXTRA_LIB = $(PKG_LIB) $(MPI_LIB) $(FFT_LIB) $(JPG_LIB) $(PKG_SYSLIB) $(DYN_LIB) EXTRA_CPP_DEPENDS = $(PKG_CPP_DEPENDS) EXTRA_LINK_DEPENDS = $(PKG_LINK_DEPENDS) diff --git a/src/MAKE/OPTIONS/Makefile.kokkos_mpi_only b/src/MAKE/OPTIONS/Makefile.kokkos_mpi_only index 0b2e42487f..6d5e8d779e 100644 --- a/src/MAKE/OPTIONS/Makefile.kokkos_mpi_only +++ b/src/MAKE/OPTIONS/Makefile.kokkos_mpi_only @@ -66,6 +66,11 @@ JPG_INC = JPG_PATH = JPG_LIB = +# library for loading shared objects (defaults to -ldl, should be empty on Windows) +# uncomment to change the default + +# override DYN_LIB = + # --------------------------------------------------------------------- # build rules and dependencies # do not edit this section @@ -75,7 +80,7 @@ include Makefile.package EXTRA_INC = $(LMP_INC) $(PKG_INC) $(MPI_INC) $(FFT_INC) $(JPG_INC) $(PKG_SYSINC) EXTRA_PATH = $(PKG_PATH) $(MPI_PATH) $(FFT_PATH) $(JPG_PATH) $(PKG_SYSPATH) -EXTRA_LIB = $(PKG_LIB) $(MPI_LIB) $(FFT_LIB) $(JPG_LIB) $(PKG_SYSLIB) +EXTRA_LIB = $(PKG_LIB) $(MPI_LIB) $(FFT_LIB) $(JPG_LIB) $(PKG_SYSLIB) $(DYN_LIB) EXTRA_CPP_DEPENDS = $(PKG_CPP_DEPENDS) EXTRA_LINK_DEPENDS = $(PKG_LINK_DEPENDS) diff --git a/src/MAKE/OPTIONS/Makefile.kokkos_omp b/src/MAKE/OPTIONS/Makefile.kokkos_omp index 3e8f7ba634..e505da8ae2 100644 --- a/src/MAKE/OPTIONS/Makefile.kokkos_omp +++ b/src/MAKE/OPTIONS/Makefile.kokkos_omp @@ -66,6 +66,11 @@ JPG_INC = JPG_PATH = JPG_LIB = +# library for loading shared objects (defaults to -ldl, should be empty on Windows) +# uncomment to change the default + +# override DYN_LIB = + # --------------------------------------------------------------------- # build rules and dependencies # do not edit this section @@ -75,7 +80,7 @@ include Makefile.package EXTRA_INC = $(LMP_INC) $(PKG_INC) $(MPI_INC) $(FFT_INC) $(JPG_INC) $(PKG_SYSINC) EXTRA_PATH = $(PKG_PATH) $(MPI_PATH) $(FFT_PATH) $(JPG_PATH) $(PKG_SYSPATH) -EXTRA_LIB = $(PKG_LIB) $(MPI_LIB) $(FFT_LIB) $(JPG_LIB) $(PKG_SYSLIB) +EXTRA_LIB = $(PKG_LIB) $(MPI_LIB) $(FFT_LIB) $(JPG_LIB) $(PKG_SYSLIB) $(DYN_LIB) EXTRA_CPP_DEPENDS = $(PKG_CPP_DEPENDS) EXTRA_LINK_DEPENDS = $(PKG_LINK_DEPENDS) diff --git a/src/MAKE/OPTIONS/Makefile.kokkos_phi b/src/MAKE/OPTIONS/Makefile.kokkos_phi index 0e2bec0a5a..b825ad691a 100644 --- a/src/MAKE/OPTIONS/Makefile.kokkos_phi +++ b/src/MAKE/OPTIONS/Makefile.kokkos_phi @@ -67,6 +67,11 @@ JPG_INC = JPG_PATH = JPG_LIB = +# library for loading shared objects (defaults to -ldl, should be empty on Windows) +# uncomment to change the default + +# override DYN_LIB = + # --------------------------------------------------------------------- # build rules and dependencies # do not edit this section @@ -76,7 +81,7 @@ include Makefile.package EXTRA_INC = $(LMP_INC) $(PKG_INC) $(MPI_INC) $(FFT_INC) $(JPG_INC) $(PKG_SYSINC) EXTRA_PATH = $(PKG_PATH) $(MPI_PATH) $(FFT_PATH) $(JPG_PATH) $(PKG_SYSPATH) -EXTRA_LIB = $(PKG_LIB) $(MPI_LIB) $(FFT_LIB) $(JPG_LIB) $(PKG_SYSLIB) +EXTRA_LIB = $(PKG_LIB) $(MPI_LIB) $(FFT_LIB) $(JPG_LIB) $(PKG_SYSLIB) $(DYN_LIB) EXTRA_CPP_DEPENDS = $(PKG_CPP_DEPENDS) EXTRA_LINK_DEPENDS = $(PKG_LINK_DEPENDS) diff --git a/src/MAKE/OPTIONS/Makefile.mgptfast b/src/MAKE/OPTIONS/Makefile.mgptfast index da10701a9a..e7fd82a39c 100644 --- a/src/MAKE/OPTIONS/Makefile.mgptfast +++ b/src/MAKE/OPTIONS/Makefile.mgptfast @@ -65,6 +65,11 @@ JPG_INC = JPG_PATH = JPG_LIB = +# library for loading shared objects (defaults to -ldl, should be empty on Windows) +# uncomment to change the default + +# override DYN_LIB = + # --------------------------------------------------------------------- # build rules and dependencies # do not edit this section @@ -74,7 +79,7 @@ include Makefile.package EXTRA_INC = $(LMP_INC) $(PKG_INC) $(MPI_INC) $(FFT_INC) $(JPG_INC) $(PKG_SYSINC) EXTRA_PATH = $(PKG_PATH) $(MPI_PATH) $(FFT_PATH) $(JPG_PATH) $(PKG_SYSPATH) -EXTRA_LIB = $(PKG_LIB) $(MPI_LIB) $(FFT_LIB) $(JPG_LIB) $(PKG_SYSLIB) +EXTRA_LIB = $(PKG_LIB) $(MPI_LIB) $(FFT_LIB) $(JPG_LIB) $(PKG_SYSLIB) $(DYN_LIB) EXTRA_CPP_DEPENDS = $(PKG_CPP_DEPENDS) EXTRA_LINK_DEPENDS = $(PKG_LINK_DEPENDS) diff --git a/src/MAKE/OPTIONS/Makefile.omp b/src/MAKE/OPTIONS/Makefile.omp index 573c2d826b..7a59d7f10d 100644 --- a/src/MAKE/OPTIONS/Makefile.omp +++ b/src/MAKE/OPTIONS/Makefile.omp @@ -65,6 +65,11 @@ JPG_INC = JPG_PATH = JPG_LIB = +# library for loading shared objects (defaults to -ldl, should be empty on Windows) +# uncomment to change the default + +# override DYN_LIB = + # --------------------------------------------------------------------- # build rules and dependencies # do not edit this section @@ -74,7 +79,7 @@ include Makefile.package EXTRA_INC = $(LMP_INC) $(PKG_INC) $(MPI_INC) $(FFT_INC) $(JPG_INC) $(PKG_SYSINC) EXTRA_PATH = $(PKG_PATH) $(MPI_PATH) $(FFT_PATH) $(JPG_PATH) $(PKG_SYSPATH) -EXTRA_LIB = $(PKG_LIB) $(MPI_LIB) $(FFT_LIB) $(JPG_LIB) $(PKG_SYSLIB) +EXTRA_LIB = $(PKG_LIB) $(MPI_LIB) $(FFT_LIB) $(JPG_LIB) $(PKG_SYSLIB) $(DYN_LIB) EXTRA_CPP_DEPENDS = $(PKG_CPP_DEPENDS) EXTRA_LINK_DEPENDS = $(PKG_LINK_DEPENDS) diff --git a/src/MAKE/OPTIONS/Makefile.oneapi b/src/MAKE/OPTIONS/Makefile.oneapi index 2524773a76..d34f0900c6 100644 --- a/src/MAKE/OPTIONS/Makefile.oneapi +++ b/src/MAKE/OPTIONS/Makefile.oneapi @@ -68,6 +68,11 @@ JPG_INC = JPG_PATH = JPG_LIB = +# library for loading shared objects (defaults to -ldl, should be empty on Windows) +# uncomment to change the default + +# override DYN_LIB = + # --------------------------------------------------------------------- # build rules and dependencies # do not edit this section @@ -77,7 +82,7 @@ include Makefile.package EXTRA_INC = $(LMP_INC) $(PKG_INC) $(MPI_INC) $(FFT_INC) $(JPG_INC) $(PKG_SYSINC) EXTRA_PATH = $(PKG_PATH) $(MPI_PATH) $(FFT_PATH) $(JPG_PATH) $(PKG_SYSPATH) -EXTRA_LIB = $(PKG_LIB) $(MPI_LIB) $(FFT_LIB) $(JPG_LIB) $(PKG_SYSLIB) +EXTRA_LIB = $(PKG_LIB) $(MPI_LIB) $(FFT_LIB) $(JPG_LIB) $(PKG_SYSLIB) $(DYN_LIB) EXTRA_CPP_DEPENDS = $(PKG_CPP_DEPENDS) EXTRA_LINK_DEPENDS = $(PKG_LINK_DEPENDS) diff --git a/src/MAKE/OPTIONS/Makefile.opt b/src/MAKE/OPTIONS/Makefile.opt index 2cb5540fd4..acfd802c44 100644 --- a/src/MAKE/OPTIONS/Makefile.opt +++ b/src/MAKE/OPTIONS/Makefile.opt @@ -65,6 +65,11 @@ JPG_INC = JPG_PATH = JPG_LIB = +# library for loading shared objects (defaults to -ldl, should be empty on Windows) +# uncomment to change the default + +# override DYN_LIB = + # --------------------------------------------------------------------- # build rules and dependencies # do not edit this section @@ -74,7 +79,7 @@ include Makefile.package EXTRA_INC = $(LMP_INC) $(PKG_INC) $(MPI_INC) $(FFT_INC) $(JPG_INC) $(PKG_SYSINC) EXTRA_PATH = $(PKG_PATH) $(MPI_PATH) $(FFT_PATH) $(JPG_PATH) $(PKG_SYSPATH) -EXTRA_LIB = $(PKG_LIB) $(MPI_LIB) $(FFT_LIB) $(JPG_LIB) $(PKG_SYSLIB) +EXTRA_LIB = $(PKG_LIB) $(MPI_LIB) $(FFT_LIB) $(JPG_LIB) $(PKG_SYSLIB) $(DYN_LIB) EXTRA_CPP_DEPENDS = $(PKG_CPP_DEPENDS) EXTRA_LINK_DEPENDS = $(PKG_LINK_DEPENDS) diff --git a/src/MAKE/OPTIONS/Makefile.pgi_mpich_link b/src/MAKE/OPTIONS/Makefile.pgi_mpich_link index daa8a79166..b09efd6fa0 100644 --- a/src/MAKE/OPTIONS/Makefile.pgi_mpich_link +++ b/src/MAKE/OPTIONS/Makefile.pgi_mpich_link @@ -65,6 +65,11 @@ JPG_INC = JPG_PATH = JPG_LIB = +# library for loading shared objects (defaults to -ldl, should be empty on Windows) +# uncomment to change the default + +# override DYN_LIB = + # --------------------------------------------------------------------- # build rules and dependencies # do not edit this section @@ -74,7 +79,7 @@ include Makefile.package EXTRA_INC = $(LMP_INC) $(PKG_INC) $(MPI_INC) $(FFT_INC) $(JPG_INC) $(PKG_SYSINC) EXTRA_PATH = $(PKG_PATH) $(MPI_PATH) $(FFT_PATH) $(JPG_PATH) $(PKG_SYSPATH) -EXTRA_LIB = $(PKG_LIB) $(MPI_LIB) $(FFT_LIB) $(JPG_LIB) $(PKG_SYSLIB) +EXTRA_LIB = $(PKG_LIB) $(MPI_LIB) $(FFT_LIB) $(JPG_LIB) $(PKG_SYSLIB) $(DYN_LIB) EXTRA_CPP_DEPENDS = $(PKG_CPP_DEPENDS) EXTRA_LINK_DEPENDS = $(PKG_LINK_DEPENDS) diff --git a/src/MAKE/OPTIONS/Makefile.png b/src/MAKE/OPTIONS/Makefile.png index 40ebe43d32..8eff543af6 100644 --- a/src/MAKE/OPTIONS/Makefile.png +++ b/src/MAKE/OPTIONS/Makefile.png @@ -65,6 +65,11 @@ JPG_INC = -I/usr/include JPG_PATH = -L/usr/lib JPG_LIB = -lpng +# library for loading shared objects (defaults to -ldl, should be empty on Windows) +# uncomment to change the default + +# override DYN_LIB = + # --------------------------------------------------------------------- # build rules and dependencies # do not edit this section @@ -74,7 +79,7 @@ include Makefile.package EXTRA_INC = $(LMP_INC) $(PKG_INC) $(MPI_INC) $(FFT_INC) $(JPG_INC) $(PKG_SYSINC) EXTRA_PATH = $(PKG_PATH) $(MPI_PATH) $(FFT_PATH) $(JPG_PATH) $(PKG_SYSPATH) -EXTRA_LIB = $(PKG_LIB) $(MPI_LIB) $(FFT_LIB) $(JPG_LIB) $(PKG_SYSLIB) +EXTRA_LIB = $(PKG_LIB) $(MPI_LIB) $(FFT_LIB) $(JPG_LIB) $(PKG_SYSLIB) $(DYN_LIB) EXTRA_CPP_DEPENDS = $(PKG_CPP_DEPENDS) EXTRA_LINK_DEPENDS = $(PKG_LINK_DEPENDS) From e734eb837fe95821daee17d32b6f97656ee584f8 Mon Sep 17 00:00:00 2001 From: Stan Moore Date: Thu, 28 Oct 2021 08:39:17 -0600 Subject: [PATCH 293/372] Revert some changes in 7960a2d7d2c51cb80c5db30ad22f66ea6fd08067 --- src/KOKKOS/fix_qeq_reaxff_kokkos.h | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/KOKKOS/fix_qeq_reaxff_kokkos.h b/src/KOKKOS/fix_qeq_reaxff_kokkos.h index fc4f4bafd5..3256e56aef 100644 --- a/src/KOKKOS/fix_qeq_reaxff_kokkos.h +++ b/src/KOKKOS/fix_qeq_reaxff_kokkos.h @@ -30,6 +30,7 @@ FixStyle(qeq/reax/kk/host,FixQEqReaxFFKokkos); #include "kokkos_type.h" #include "neigh_list.h" #include "neigh_list_kokkos.h" +#include "kokkos_base.h" namespace LAMMPS_NS { @@ -41,7 +42,7 @@ struct TagFixQEqReaxFFPackForwardComm {}; struct TagFixQEqReaxFFUnpackForwardComm {}; template -class FixQEqReaxFFKokkos : public FixQEqReaxFF { +class FixQEqReaxFFKokkos : public FixQEqReaxFF, public KokkosBase { public: typedef DeviceType device_type; typedef ArrayTypes AT; From adf1beea74c605ce570e0af95109702a10292ab2 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Thu, 28 Oct 2021 14:23:27 -0400 Subject: [PATCH 294/372] add mechanism to check for known data file section names using this mechanism we can reject custom section names that will conflict with existing section names and thus avoid misleading errors. apply this also to fix property atom, where the section name is determined by the fix ID. in addition, allow to specify NULL as section name, which will use the fix ID. --- doc/src/read_data.rst | 4 +- src/fix_property_atom.cpp | 10 ++- src/read_data.cpp | 129 +++++++++++++++++++------------------- src/read_data.h | 1 + 4 files changed, 76 insertions(+), 68 deletions(-) diff --git a/doc/src/read_data.rst b/doc/src/read_data.rst index ff212a579a..24f882b658 100644 --- a/doc/src/read_data.rst +++ b/doc/src/read_data.rst @@ -254,7 +254,9 @@ the fix defines the syntax of the header line(s) and section that it reads from the data file. Note that the *header-string* can be specified as NULL, in which case no header lines are passed to the fix. This means the fix can infer the length of its Section from -standard header settings, such as the number of atoms. +standard header settings, such as the number of atoms. Also the +*section-string* may be specified as NULL, and in that case the fix +ID is used as section name. The formatting of individual lines in the data file (indentation, spacing between words and numbers) is not important except that header diff --git a/src/fix_property_atom.cpp b/src/fix_property_atom.cpp index f90d83af4b..f7b9662c24 100644 --- a/src/fix_property_atom.cpp +++ b/src/fix_property_atom.cpp @@ -18,6 +18,7 @@ #include "comm.h" #include "error.h" #include "memory.h" +#include "read_data.h" #include "tokenizer.h" #include @@ -54,8 +55,7 @@ FixPropertyAtom::FixPropertyAtom(LAMMPS *lmp, int narg, char **arg) : while (iarg < narg) { if (strcmp(arg[iarg],"mol") == 0) { if (atom->molecule_flag) - error->all(FLERR,"Fix property/atom mol when atom_style " - "already has molecule attribute"); + error->all(FLERR,"Fix property/atom mol when atom_style already has molecule attribute"); if (molecule_flag) error->all(FLERR,"Fix property/atom cannot specify mol twice"); styles[nvalue] = MOLECULE; @@ -95,6 +95,8 @@ FixPropertyAtom::FixPropertyAtom(LAMMPS *lmp, int narg, char **arg) : index[nvalue] = atom->find_custom(&arg[iarg][2],flag,ncols); if (index[nvalue] >= 0) error->all(FLERR,"Fix property/atom vector name already exists"); + if (ReadData::is_data_section(id)) + error->all(FLERR,"Fix property/atom fix ID must not be a data file section name"); index[nvalue] = atom->add_custom(&arg[iarg][2],0,0); cols[nvalue] = 0; values_peratom++; @@ -107,6 +109,8 @@ FixPropertyAtom::FixPropertyAtom(LAMMPS *lmp, int narg, char **arg) : index[nvalue] = atom->find_custom(&arg[iarg][2],flag,ncols); if (index[nvalue] >= 0) error->all(FLERR,"Fix property/atom vector name already exists"); + if (ReadData::is_data_section(id)) + error->all(FLERR,"Fix property/atom fix ID must not be a data file section name"); index[nvalue] = atom->add_custom(&arg[iarg][2],1,0); cols[nvalue] = 0; values_peratom++; @@ -122,6 +126,8 @@ FixPropertyAtom::FixPropertyAtom(LAMMPS *lmp, int narg, char **arg) : which = atom->find_custom(&arg[iarg][3],flag,ncols); if (which >= 0) error->all(FLERR,"Fix property/atom array name {} already exists", &arg[iarg][3]); + if (ReadData::is_data_section(id)) + error->all(FLERR,"Fix property/atom fix ID must not be a data file section name"); ncols = utils::inumeric(FLERR,arg[iarg+1],true,lmp); if (ncols < 1) diff --git a/src/read_data.cpp b/src/read_data.cpp index 0c7af243ac..7e5d49e65c 100644 --- a/src/read_data.cpp +++ b/src/read_data.cpp @@ -39,6 +39,8 @@ #include #include +#include +#include using namespace LAMMPS_NS; @@ -49,9 +51,27 @@ static constexpr int DELTA = 4; // must be 2 or larger static constexpr int MAXBODY = 32; // max # of lines in one body // customize for new sections -// change when add to header::section_keywords -static constexpr int NSECTIONS = 25; +static std::unordered_set section_keywords = { + "Atoms", "Velocities", "Ellipsoids", "Lines", "Triangles", "Bodies", + "Bonds", "Angles", "Dihedrals", "Impropers", + "Masses", "Pair Coeffs", "PairIJ Coeffs", "Bond Coeffs", "Angle Coeffs", + "Dihedral Coeffs", "Improper Coeffs", + "BondBond Coeffs", "BondAngle Coeffs", "MiddleBondTorsion Coeffs", + "EndBondTorsion Coeffs", "AngleTorsion Coeffs", + "AngleAngleTorsion Coeffs", "BondBond13 Coeffs", "AngleAngle Coeffs" +}; + +// function to check whether a string is a known data section name +// made a static class member, so it can be called from other classes + +bool ReadData::is_data_section(const std::string &keyword) +{ + return section_keywords.count(keyword) > 0; +} + + +// clang-format off enum{NONE,APPEND,VALUE,MERGE}; // pair style suffixes to ignore @@ -266,18 +286,19 @@ void ReadData::command(int narg, char **arg) if (iarg+4 > narg) error->all(FLERR,"Illegal read_data command"); memory->grow(fix_index,nfix+1,"read_data:fix_index"); - fix_header = (char **) - memory->srealloc(fix_header,(nfix+1)*sizeof(char *), - "read_data:fix_header"); - fix_section = (char **) - memory->srealloc(fix_section,(nfix+1)*sizeof(char *), - "read_data:fix_section"); + fix_header = (char **) memory->srealloc(fix_header,(nfix+1)*sizeof(char *), + "read_data:fix_header"); + fix_section = (char **) memory->srealloc(fix_section,(nfix+1)*sizeof(char *), + "read_data:fix_section"); + if (is_data_section(arg[iarg+3])) + error->all(FLERR,"Custom data section name {} for fix {} collides with existing " + "data section",arg[iarg+3],arg[iarg+1]); fix_index[nfix] = modify->find_fix(arg[iarg+1]); - if (fix_index[nfix] < 0) - error->all(FLERR,"Fix ID for read_data does not exist"); + if (fix_index[nfix] < 0) error->all(FLERR,"Fix ID for read_data does not exist"); if (strcmp(arg[iarg+2],"NULL") == 0) fix_header[nfix] = nullptr; else fix_header[nfix] = utils::strdup(arg[iarg+2]); - fix_section[nfix] = utils::strdup(arg[iarg+3]); + if (strcmp(arg[iarg+3],"NULL") == 0) fix_section[nfix] = utils::strdup(arg[iarg+1]); + else fix_section[nfix] = utils::strdup(arg[iarg+3]); nfix++; iarg += 4; @@ -521,6 +542,7 @@ void ReadData::command(int narg, char **arg) "from currently defined atom style"); atoms(); } else skip_lines(natoms); + } else if (strcmp(keyword,"Velocities") == 0) { if (atomflag == 0) error->all(FLERR,"Must read Atoms before Velocities"); @@ -529,52 +551,50 @@ void ReadData::command(int narg, char **arg) } else if (strcmp(keyword,"Bonds") == 0) { topoflag = bondflag = 1; - if (nbonds == 0) - error->all(FLERR,"Invalid data file section: Bonds"); + if (nbonds == 0) error->all(FLERR,"Invalid data file section: Bonds"); if (atomflag == 0) error->all(FLERR,"Must read Atoms before Bonds"); bonds(firstpass); + } else if (strcmp(keyword,"Angles") == 0) { topoflag = angleflag = 1; - if (nangles == 0) - error->all(FLERR,"Invalid data file section: Angles"); + if (nangles == 0) error->all(FLERR,"Invalid data file section: Angles"); if (atomflag == 0) error->all(FLERR,"Must read Atoms before Angles"); angles(firstpass); + } else if (strcmp(keyword,"Dihedrals") == 0) { topoflag = dihedralflag = 1; - if (ndihedrals == 0) - error->all(FLERR,"Invalid data file section: Dihedrals"); + if (ndihedrals == 0) error->all(FLERR,"Invalid data file section: Dihedrals"); if (atomflag == 0) error->all(FLERR,"Must read Atoms before Dihedrals"); dihedrals(firstpass); + } else if (strcmp(keyword,"Impropers") == 0) { topoflag = improperflag = 1; - if (nimpropers == 0) - error->all(FLERR,"Invalid data file section: Impropers"); + if (nimpropers == 0) error->all(FLERR,"Invalid data file section: Impropers"); if (atomflag == 0) error->all(FLERR,"Must read Atoms before Impropers"); impropers(firstpass); } else if (strcmp(keyword,"Ellipsoids") == 0) { ellipsoidflag = 1; - if (!avec_ellipsoid) - error->all(FLERR,"Invalid data file section: Ellipsoids"); - if (atomflag == 0) - error->all(FLERR,"Must read Atoms before Ellipsoids"); + if (!avec_ellipsoid) error->all(FLERR,"Invalid data file section: Ellipsoids"); + if (atomflag == 0) error->all(FLERR,"Must read Atoms before Ellipsoids"); if (firstpass) bonus(nellipsoids,(AtomVec *) avec_ellipsoid,"ellipsoids"); else skip_lines(nellipsoids); + } else if (strcmp(keyword,"Lines") == 0) { lineflag = 1; - if (!avec_line) - error->all(FLERR,"Invalid data file section: Lines"); + if (!avec_line) error->all(FLERR,"Invalid data file section: Lines"); if (atomflag == 0) error->all(FLERR,"Must read Atoms before Lines"); if (firstpass) bonus(nlines,(AtomVec *) avec_line,"lines"); else skip_lines(nlines); + } else if (strcmp(keyword,"Triangles") == 0) { triflag = 1; - if (!avec_tri) - error->all(FLERR,"Invalid data file section: Triangles"); + if (!avec_tri) error->all(FLERR,"Invalid data file section: Triangles"); if (atomflag == 0) error->all(FLERR,"Must read Atoms before Triangles"); if (firstpass) bonus(ntris,(AtomVec *) avec_tri,"triangles"); else skip_lines(ntris); + } else if (strcmp(keyword,"Bodies") == 0) { bodyflag = 1; if (!avec_body) @@ -655,6 +675,7 @@ void ReadData::command(int narg, char **arg) error->all(FLERR,"Must define angle_style before BondBond Coeffs"); if (firstpass) anglecoeffs(1); else skip_lines(nangletypes); + } else if (strcmp(keyword,"BondAngle Coeffs") == 0) { if (atom->avec->angles_allow == 0) error->all(FLERR,"Invalid data file section: BondAngle Coeffs"); @@ -665,46 +686,41 @@ void ReadData::command(int narg, char **arg) } else if (strcmp(keyword,"MiddleBondTorsion Coeffs") == 0) { if (atom->avec->dihedrals_allow == 0) - error->all(FLERR, - "Invalid data file section: MiddleBondTorsion Coeffs"); + error->all(FLERR,"Invalid data file section: MiddleBondTorsion Coeffs"); if (force->dihedral == nullptr) - error->all(FLERR, - "Must define dihedral_style before " - "MiddleBondTorsion Coeffs"); + error->all(FLERR,"Must define dihedral_style before MiddleBondTorsion Coeffs"); if (firstpass) dihedralcoeffs(1); else skip_lines(ndihedraltypes); + } else if (strcmp(keyword,"EndBondTorsion Coeffs") == 0) { if (atom->avec->dihedrals_allow == 0) error->all(FLERR,"Invalid data file section: EndBondTorsion Coeffs"); if (force->dihedral == nullptr) - error->all(FLERR, - "Must define dihedral_style before EndBondTorsion Coeffs"); + error->all(FLERR,"Must define dihedral_style before EndBondTorsion Coeffs"); if (firstpass) dihedralcoeffs(2); else skip_lines(ndihedraltypes); + } else if (strcmp(keyword,"AngleTorsion Coeffs") == 0) { if (atom->avec->dihedrals_allow == 0) error->all(FLERR,"Invalid data file section: AngleTorsion Coeffs"); if (force->dihedral == nullptr) - error->all(FLERR, - "Must define dihedral_style before AngleTorsion Coeffs"); + error->all(FLERR,"Must define dihedral_style before AngleTorsion Coeffs"); if (firstpass) dihedralcoeffs(3); else skip_lines(ndihedraltypes); + } else if (strcmp(keyword,"AngleAngleTorsion Coeffs") == 0) { if (atom->avec->dihedrals_allow == 0) - error->all(FLERR, - "Invalid data file section: AngleAngleTorsion Coeffs"); + error->all(FLERR,"Invalid data file section: AngleAngleTorsion Coeffs"); if (force->dihedral == nullptr) - error->all(FLERR, - "Must define dihedral_style before " - "AngleAngleTorsion Coeffs"); + error->all(FLERR,"Must define dihedral_style before AngleAngleTorsion Coeffs"); if (firstpass) dihedralcoeffs(4); else skip_lines(ndihedraltypes); + } else if (strcmp(keyword,"BondBond13 Coeffs") == 0) { if (atom->avec->dihedrals_allow == 0) error->all(FLERR,"Invalid data file section: BondBond13 Coeffs"); if (force->dihedral == nullptr) - error->all(FLERR, - "Must define dihedral_style before BondBond13 Coeffs"); + error->all(FLERR,"Must define dihedral_style before BondBond13 Coeffs"); if (firstpass) dihedralcoeffs(5); else skip_lines(ndihedraltypes); @@ -712,8 +728,7 @@ void ReadData::command(int narg, char **arg) if (atom->avec->impropers_allow == 0) error->all(FLERR,"Invalid data file section: AngleAngle Coeffs"); if (force->improper == nullptr) - error->all(FLERR, - "Must define improper_style before AngleAngle Coeffs"); + error->all(FLERR,"Must define improper_style before AngleAngle Coeffs"); if (firstpass) impropercoeffs(1); else skip_lines(nimpropertypes); @@ -724,8 +739,7 @@ void ReadData::command(int narg, char **arg) for (i = 0; i < nfix; i++) if (strcmp(keyword,fix_section[i]) == 0) { if (firstpass) fix(fix_index[i],keyword); - else skip_lines(modify->fix[fix_index[i]]-> - read_data_skip_lines(keyword)); + else skip_lines(modify->fix[fix_index[i]]->read_data_skip_lines(keyword)); parse_keyword(0); break; } @@ -882,8 +896,7 @@ void ReadData::command(int narg, char **arg) bigint nblocal = atom->nlocal; MPI_Allreduce(&nblocal,&natoms,1,MPI_LMP_BIGINT,MPI_SUM,world); if (natoms != atom->natoms) - error->all(FLERR, - "Read_data shrink wrap did not assign all atoms correctly"); + error->all(FLERR,"Read_data shrink wrap did not assign all atoms correctly"); } // restore old styles, when reading with nocoeff flag given @@ -947,17 +960,6 @@ void ReadData::header(int firstpass) atom->nimpropertypes = extra_improper_types; } - // customize for new sections - - const char *section_keywords[NSECTIONS] = - {"Atoms","Velocities","Ellipsoids","Lines","Triangles","Bodies", - "Bonds","Angles","Dihedrals","Impropers", - "Masses","Pair Coeffs","PairIJ Coeffs","Bond Coeffs","Angle Coeffs", - "Dihedral Coeffs","Improper Coeffs", - "BondBond Coeffs","BondAngle Coeffs","MiddleBondTorsion Coeffs", - "EndBondTorsion Coeffs","AngleTorsion Coeffs", - "AngleAngleTorsion Coeffs","BondBond13 Coeffs","AngleAngle Coeffs"}; - // skip 1st line of file if (me == 0) { @@ -1186,9 +1188,7 @@ void ReadData::header(int firstpass) // check that exiting string is a valid section keyword parse_keyword(1); - for (n = 0; n < NSECTIONS; n++) - if (strcmp(keyword,section_keywords[n]) == 0) break; - if (n == NSECTIONS) + if (!is_data_section(keyword)) error->all(FLERR,"Unknown identifier in data file: {}",keyword); // error checks on header values @@ -1730,8 +1730,7 @@ void ReadData::bodies(int firstpass, AtomVec *ptr) error->one(FLERR,"Too many values in body lines in data file"); if (onebody+1 > MAXBODY) - error->one(FLERR, - "Too many lines in one body in data file - boost MAXBODY"); + error->one(FLERR,"Too many lines in one body in data file - boost MAXBODY"); nchunk++; nline += onebody+1; diff --git a/src/read_data.h b/src/read_data.h index 3374f48be0..090e70484b 100644 --- a/src/read_data.h +++ b/src/read_data.h @@ -29,6 +29,7 @@ class ReadData : public Command { ReadData(class LAMMPS *); ~ReadData(); void command(int, char **); + static bool is_data_section(const std::string &); private: int me, compressed; From 7dbbb9a0e61cc85848500d4818d3793e74461dca Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Thu, 28 Oct 2021 16:54:53 -0400 Subject: [PATCH 295/372] refactor fix cmap to use current style and modernized parsing --- src/MOLECULE/fix_cmap.cpp | 96 +++++++++++++++++++++------------------ 1 file changed, 51 insertions(+), 45 deletions(-) diff --git a/src/MOLECULE/fix_cmap.cpp b/src/MOLECULE/fix_cmap.cpp index 4bc035fdf5..26a0ab2542 100644 --- a/src/MOLECULE/fix_cmap.cpp +++ b/src/MOLECULE/fix_cmap.cpp @@ -30,18 +30,19 @@ #include "fix_cmap.h" -#include - -#include #include "atom.h" -#include "update.h" -#include "respa.h" -#include "domain.h" -#include "force.h" #include "comm.h" +#include "domain.h" +#include "error.h" +#include "force.h" #include "math_const.h" #include "memory.h" -#include "error.h" +#include "respa.h" +#include "tokenizer.h" +#include "update.h" + +#include +#include using namespace LAMMPS_NS; using namespace FixConst; @@ -1043,12 +1044,24 @@ void FixCMAP::bc_interpol(double x1, double x2, int low1, int low2, double *gs, void FixCMAP::read_data_header(char *line) { - if (strstr(line,"crossterms")) { - sscanf(line,BIGINT_FORMAT,&ncmap); - } else error->all(FLERR,"Invalid read data header line for fix cmap"); + ValueTokenizer values(line); - // didn't set in constructor because this fix could be defined - // before newton command + try { + ncmap = values.next_bigint(); + if (values.count() == 2) { + if (values.next_string() != "crossterms") + throw TokenizerException("invalid format",utils::trim(line)); + } else if (values.count() == 3) { + if ((values.next_string() != "cmap") || (values.next_string() != "crossterms")) + throw TokenizerException("invalid format",utils::trim(line)); + } else { + throw TokenizerException("valid format",utils::trim(line)); + } + } catch (std::exception &e) { + error->all(FLERR,"Invalid read data header line for fix cmap: {}", e.what()); + } + + // not set in constructor because this fix could be defined before newton command newton_bond = force->newton_bond; } @@ -1064,26 +1077,28 @@ void FixCMAP::read_data_section(char *keyword, int n, char *buf, { int m,tmp,itype; tagint atom1,atom2,atom3,atom4,atom5; - char *next; - next = strchr(buf,'\n'); - *next = '\0'; - int nwords = utils::count_words(utils::trim_comment(buf)); - *next = '\n'; - - if (nwords != 7) - error->all(FLERR,"Incorrect {} format in data file",keyword); + auto lines = utils::split_lines(buf); + if (lines.size() == 0) return; // loop over lines of CMAP crossterms // tokenize the line into values // add crossterm to one of my atoms, depending on newton_bond - for (int i = 0; i < n; i++) { - next = strchr(buf,'\n'); - *next = '\0'; - sscanf(buf,"%d %d " TAGINT_FORMAT " " TAGINT_FORMAT " " TAGINT_FORMAT - " " TAGINT_FORMAT " " TAGINT_FORMAT, - &tmp,&itype,&atom1,&atom2,&atom3,&atom4,&atom5); + for (const auto &line : lines) { + ValueTokenizer values(line); + try { + values.skip(); + itype = values.next_int(); + atom1 = values.next_tagint(); + atom2 = values.next_tagint(); + atom3 = values.next_tagint(); + atom4 = values.next_tagint(); + atom5 = values.next_tagint(); + if (values.has_next()) throw TokenizerException("too many items",line); + } catch (std::exception &e) { + error->all(FLERR,"Incorrect format of CMAP section: {}", e.what()); + } atom1 += id_offset; atom2 += id_offset; @@ -1092,8 +1107,7 @@ void FixCMAP::read_data_section(char *keyword, int n, char *buf, atom5 += id_offset; if ((m = atom->map(atom1)) >= 0) { - if (num_crossterm[m] == CMAPMAX) - error->one(FLERR,"Too many CMAP crossterms for one atom"); + if (num_crossterm[m] == CMAPMAX) error->one(FLERR,"Too many CMAP crossterms for one atom"); crossterm_type[m][num_crossterm[m]] = itype; crossterm_atom1[m][num_crossterm[m]] = atom1; crossterm_atom2[m][num_crossterm[m]] = atom2; @@ -1104,8 +1118,7 @@ void FixCMAP::read_data_section(char *keyword, int n, char *buf, } if ((m = atom->map(atom2)) >= 0) { - if (num_crossterm[m] == CMAPMAX) - error->one(FLERR,"Too many CMAP crossterms for one atom"); + if (num_crossterm[m] == CMAPMAX) error->one(FLERR,"Too many CMAP crossterms for one atom"); crossterm_type[m][num_crossterm[m]] = itype; crossterm_atom1[m][num_crossterm[m]] = atom1; crossterm_atom2[m][num_crossterm[m]] = atom2; @@ -1116,8 +1129,7 @@ void FixCMAP::read_data_section(char *keyword, int n, char *buf, } if ((m = atom->map(atom3)) >= 0) { - if (num_crossterm[m] == CMAPMAX) - error->one(FLERR,"Too many CMAP crossterms for one atom"); + if (num_crossterm[m] == CMAPMAX) error->one(FLERR,"Too many CMAP crossterms for one atom"); crossterm_type[m][num_crossterm[m]] = itype; crossterm_atom1[m][num_crossterm[m]] = atom1; crossterm_atom2[m][num_crossterm[m]] = atom2; @@ -1128,8 +1140,7 @@ void FixCMAP::read_data_section(char *keyword, int n, char *buf, } if ((m = atom->map(atom4)) >= 0) { - if (num_crossterm[m] == CMAPMAX) - error->one(FLERR,"Too many CMAP crossterms for one atom"); + if (num_crossterm[m] == CMAPMAX) error->one(FLERR,"Too many CMAP crossterms for one atom"); crossterm_type[m][num_crossterm[m]] = itype; crossterm_atom1[m][num_crossterm[m]] = atom1; crossterm_atom2[m][num_crossterm[m]] = atom2; @@ -1140,8 +1151,7 @@ void FixCMAP::read_data_section(char *keyword, int n, char *buf, } if ((m = atom->map(atom5)) >= 0) { - if (num_crossterm[m] == CMAPMAX) - error->one(FLERR,"Too many CMAP crossterms for one atom"); + if (num_crossterm[m] == CMAPMAX) error->one(FLERR,"Too many CMAP crossterms for one atom"); crossterm_type[m][num_crossterm[m]] = itype; crossterm_atom1[m][num_crossterm[m]] = atom1; crossterm_atom2[m][num_crossterm[m]] = atom2; @@ -1150,8 +1160,6 @@ void FixCMAP::read_data_section(char *keyword, int n, char *buf, crossterm_atom5[m][num_crossterm[m]] = atom5; num_crossterm[m]++; } - - buf = next + 1; } } @@ -1169,7 +1177,7 @@ bigint FixCMAP::read_data_skip_lines(char * /*keyword*/) void FixCMAP::write_data_header(FILE *fp, int /*mth*/) { - fprintf(fp,BIGINT_FORMAT " cmap crossterms\n",ncmap); + fmt::print(fp,"{} crossterms\n",ncmap); } /* ---------------------------------------------------------------------- @@ -1247,11 +1255,9 @@ void FixCMAP::write_data_section(int /*mth*/, FILE *fp, int n, double **buf, int index) { for (int i = 0; i < n; i++) - fprintf(fp,"%d %d " TAGINT_FORMAT " " TAGINT_FORMAT - " " TAGINT_FORMAT " " TAGINT_FORMAT " " TAGINT_FORMAT "\n", - index+i,(int) ubuf(buf[i][0]).i,(tagint) ubuf(buf[i][1]).i, - (tagint) ubuf(buf[i][2]).i,(tagint) ubuf(buf[i][3]).i, - (tagint) ubuf(buf[i][4]).i,(tagint) ubuf(buf[i][5]).i); + fmt::print(fp,"{} {} {} {} {} {} {}\n", + index+i,ubuf(buf[i][0]).i, ubuf(buf[i][1]).i, ubuf(buf[i][2]).i, + ubuf(buf[i][3]).i,ubuf(buf[i][4]).i,ubuf(buf[i][5]).i); } // ---------------------------------------------------------------------- From 440a517a5ecce5e6513466fdaacfcbca8b115b01 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Thu, 28 Oct 2021 17:01:12 -0400 Subject: [PATCH 296/372] update fix rigid + property/atom example to avoid runtime failure --- examples/rigid/data.rigid-property | 2 +- examples/rigid/in.rigid.property | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/examples/rigid/data.rigid-property b/examples/rigid/data.rigid-property index 66fc42d2d2..31c555afeb 100644 --- a/examples/rigid/data.rigid-property +++ b/examples/rigid/data.rigid-property @@ -99,7 +99,7 @@ Atoms 80 1 10 9.5 0 81 1 10 10 0 -Bodies +Clumps 1 1 2 1 diff --git a/examples/rigid/in.rigid.property b/examples/rigid/in.rigid.property index 53d62776e6..323781cd45 100644 --- a/examples/rigid/in.rigid.property +++ b/examples/rigid/in.rigid.property @@ -8,7 +8,7 @@ pair_style lj/cut 2.5 fix 0 all property/atom i_bodies -read_data data.rigid-property fix 0 NULL Bodies +read_data data.rigid-property fix 0 NULL Clumps velocity all create 100.0 4928459 From 212d699078e2a1f1db6e11d6e05cb85026e6d890 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Thu, 28 Oct 2021 23:24:38 -0400 Subject: [PATCH 297/372] implement Domain::get_region_by_id() --- src/domain.cpp | 12 ++++++++++++ src/domain.h | 1 + 2 files changed, 13 insertions(+) diff --git a/src/domain.cpp b/src/domain.cpp index 71fb27a4e6..34baccdab6 100644 --- a/src/domain.cpp +++ b/src/domain.cpp @@ -1843,6 +1843,18 @@ int Domain::find_region(const std::string &name) const return -1; } +/* ---------------------------------------------------------------------- + return pointer to region name matches existing region ID + return null if no match +------------------------------------------------------------------------- */ + +Region *Domain::get_region_by_id(const std::string &name) const +{ + for (int iregion = 0; iregion < nregion; iregion++) + if (name == regions[iregion]->id) return regions[iregion]; + return nullptr; +} + /* ---------------------------------------------------------------------- look up pointers to regions by region style name return vector with matching pointers diff --git a/src/domain.h b/src/domain.h index 361979b887..234bdbb837 100644 --- a/src/domain.h +++ b/src/domain.h @@ -140,6 +140,7 @@ class Domain : protected Pointers { void delete_region(int); void delete_region(const std::string &); int find_region(const std::string &) const; + Region *get_region_by_id(const std::string &) const; const std::vector get_region_by_style(const std::string &) const; void set_boundary(int, char **, int); void set_box(int, char **); From ac4f2b2a32b30f647e6858d8768971caf289b060 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Thu, 28 Oct 2021 23:25:04 -0400 Subject: [PATCH 298/372] use updated APIs --- src/fix_deposit.cpp | 49 +++++++++++++++++++-------------------------- src/fix_deposit.h | 3 ++- 2 files changed, 23 insertions(+), 29 deletions(-) diff --git a/src/fix_deposit.cpp b/src/fix_deposit.cpp index 7f153cd172..36c6609ca3 100644 --- a/src/fix_deposit.cpp +++ b/src/fix_deposit.cpp @@ -74,18 +74,18 @@ FixDeposit::FixDeposit(LAMMPS *lmp, int narg, char **arg) : // error checks on region and its extent being inside simulation box - if (iregion == -1) error->all(FLERR,"Must specify a region in fix deposit"); - if (domain->regions[iregion]->bboxflag == 0) + if (!iregion) error->all(FLERR,"Must specify a region in fix deposit"); + if (iregion->bboxflag == 0) error->all(FLERR,"Fix deposit region does not support a bounding box"); - if (domain->regions[iregion]->dynamic_check()) + if (iregion->dynamic_check()) error->all(FLERR,"Fix deposit region cannot be dynamic"); - xlo = domain->regions[iregion]->extent_xlo; - xhi = domain->regions[iregion]->extent_xhi; - ylo = domain->regions[iregion]->extent_ylo; - yhi = domain->regions[iregion]->extent_yhi; - zlo = domain->regions[iregion]->extent_zlo; - zhi = domain->regions[iregion]->extent_zhi; + xlo = iregion->extent_xlo; + xhi = iregion->extent_xhi; + ylo = iregion->extent_ylo; + yhi = iregion->extent_yhi; + zlo = iregion->extent_zlo; + zhi = iregion->extent_zhi; if (domain->triclinic == 0) { if (xlo < domain->boxlo[0] || xhi > domain->boxhi[0] || @@ -227,23 +227,19 @@ void FixDeposit::init() { // set index and check validity of region - iregion = domain->find_region(idregion); - if (iregion == -1) - error->all(FLERR,"Region ID for fix deposit does not exist"); + iregion = domain->get_region_by_id(idregion); + if (!iregion) error->all(FLERR,"Region ID {} for fix deposit does not exist", idregion); // if rigidflag defined, check for rigid/small fix // its molecule template must be same as this one fixrigid = nullptr; if (rigidflag) { - int ifix = modify->find_fix(idrigid); - if (ifix < 0) error->all(FLERR,"Fix deposit rigid fix does not exist"); - fixrigid = modify->fix[ifix]; + fixrigid = modify->get_fix_by_id(idrigid); + if (!fixrigid) error->all(FLERR,"Fix deposit rigid fix ID {} does not exist", idrigid); int tmp; if (onemols != (Molecule **) fixrigid->extract("onemol",tmp)) - error->all(FLERR, - "Fix deposit and fix rigid/small not using " - "same molecule template ID"); + error->all(FLERR, "Fix deposit and rigid fix are not using the same molecule template ID"); } // if shakeflag defined, check for SHAKE fix @@ -251,13 +247,11 @@ void FixDeposit::init() fixshake = nullptr; if (shakeflag) { - int ifix = modify->find_fix(idshake); - if (ifix < 0) error->all(FLERR,"Fix deposit shake fix does not exist"); - fixshake = modify->fix[ifix]; + fixshake = modify->get_fix_by_id(idshake); + if (!fixshake) error->all(FLERR,"Fix deposit shake fix ID {} does not exist", idshake); int tmp; if (onemols != (Molecule **) fixshake->extract("onemol",tmp)) - error->all(FLERR,"Fix deposit and fix shake not using " - "same molecule template ID"); + error->all(FLERR,"Fix deposit and fix shake are not using the same molecule template ID"); } // for finite size spherical particles: @@ -357,13 +351,13 @@ void FixDeposit::pre_exchange() coord[0] = xlo + random->uniform() * (xhi-xlo); coord[1] = ylo + random->uniform() * (yhi-ylo); coord[2] = zlo + random->uniform() * (zhi-zlo); - } while (domain->regions[iregion]->match(coord[0],coord[1],coord[2]) == 0); + } while (iregion->match(coord[0],coord[1],coord[2]) == 0); } else if (distflag == DIST_GAUSSIAN) { do { coord[0] = xmid + random->gaussian() * sigma; coord[1] = ymid + random->gaussian() * sigma; coord[2] = zmid + random->gaussian() * sigma; - } while (domain->regions[iregion]->match(coord[0],coord[1],coord[2]) == 0); + } while (iregion->match(coord[0],coord[1],coord[2]) == 0); } else error->all(FLERR,"Unknown particle distribution in fix deposit"); // adjust vertical coord by offset @@ -662,7 +656,7 @@ void FixDeposit::options(int narg, char **arg) { // defaults - iregion = -1; + iregion = nullptr; idregion = nullptr; mode = ATOM; molfrac = nullptr; @@ -691,8 +685,7 @@ void FixDeposit::options(int narg, char **arg) while (iarg < narg) { if (strcmp(arg[iarg],"region") == 0) { if (iarg+2 > narg) error->all(FLERR,"Illegal fix deposit command"); - iregion = domain->find_region(arg[iarg+1]); - if (iregion == -1) + if (!domain->get_region_by_id(arg[iarg+1])) error->all(FLERR,"Region ID for fix deposit does not exist"); idregion = utils::strdup(arg[iarg+1]); iarg += 2; diff --git a/src/fix_deposit.h b/src/fix_deposit.h index a7c506beb6..cc7d482fb0 100644 --- a/src/fix_deposit.h +++ b/src/fix_deposit.h @@ -38,12 +38,13 @@ class FixDeposit : public Fix { private: int ninsert, ntype, nfreq, seed; - int iregion, globalflag, localflag, maxattempt, rateflag, scaleflag, targetflag; + int globalflag, localflag, maxattempt, rateflag, scaleflag, targetflag; int mode, rigidflag, shakeflag, idnext, distflag, orientflag; double lo, hi, deltasq, nearsq, rate, sigma; double vxlo, vxhi, vylo, vyhi, vzlo, vzhi; double xlo, xhi, ylo, yhi, zlo, zhi, xmid, ymid, zmid; double rx, ry, rz, tx, ty, tz; + class Region *iregion; char *idregion; char *idrigid, *idshake; From 4395530756b5f3f95a7e7325601bfe58a85ad9e9 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Thu, 28 Oct 2021 23:38:32 -0400 Subject: [PATCH 299/372] bugfix --- src/fix_deposit.cpp | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/src/fix_deposit.cpp b/src/fix_deposit.cpp index 36c6609ca3..c18a0e23dd 100644 --- a/src/fix_deposit.cpp +++ b/src/fix_deposit.cpp @@ -685,16 +685,15 @@ void FixDeposit::options(int narg, char **arg) while (iarg < narg) { if (strcmp(arg[iarg],"region") == 0) { if (iarg+2 > narg) error->all(FLERR,"Illegal fix deposit command"); - if (!domain->get_region_by_id(arg[iarg+1])) - error->all(FLERR,"Region ID for fix deposit does not exist"); + iregion = domain->get_region_by_id(arg[iarg+1]); + if (!iregion) error->all(FLERR,"Region ID {} for fix deposit does not exist",arg[iarg+1]); idregion = utils::strdup(arg[iarg+1]); iarg += 2; } else if (strcmp(arg[iarg],"mol") == 0) { if (iarg+2 > narg) error->all(FLERR,"Illegal fix deposit command"); int imol = atom->find_molecule(arg[iarg+1]); - if (imol == -1) - error->all(FLERR,"Molecule template ID for fix deposit does not exist"); + if (imol == -1) error->all(FLERR,"Molecule template ID for fix deposit does not exist"); mode = MOLECULE; onemols = &atom->molecules[imol]; nmol = onemols[0]->nset; From c5d6a310d863a6fa943c55386481bea067e01725 Mon Sep 17 00:00:00 2001 From: Paul Zeiger Date: Fri, 29 Oct 2021 11:32:03 +0200 Subject: [PATCH 300/372] Fixed cmake build script for QUIP in cases where MATH_LINKOPTS variable not set --- cmake/Modules/Packages/ML-QUIP.cmake | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/cmake/Modules/Packages/ML-QUIP.cmake b/cmake/Modules/Packages/ML-QUIP.cmake index 92418e8939..947c555842 100644 --- a/cmake/Modules/Packages/ML-QUIP.cmake +++ b/cmake/Modules/Packages/ML-QUIP.cmake @@ -32,7 +32,8 @@ if(DOWNLOAD_QUIP) foreach(flag ${LAPACK_LIBRARIES}) set(temp "${temp} ${flag}") endforeach() - set(temp "${temp}\n") + # Fix cmake crashing when MATH_LINKOPTS not set, required for e.g. recent Cray Programming Environment + set(temp "${temp} -L/_DUMMY_PATH_\n") set(temp "${temp}PYTHON=python\nPIP=pip\nEXTRA_LINKOPTS=\n") set(temp "${temp}HAVE_CP2K=0\nHAVE_VASP=0\nHAVE_TB=0\nHAVE_PRECON=1\nHAVE_LOTF=0\nHAVE_ONIOM=0\n") set(temp "${temp}HAVE_LOCAL_E_MIX=0\nHAVE_QC=0\nHAVE_GAP=1\nHAVE_DESCRIPTORS_NONCOMMERCIAL=1\n") From 4f0f79141734a97d57bd1db5cf5142e238ea45f3 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sun, 31 Oct 2021 16:26:52 -0400 Subject: [PATCH 301/372] use new API, join loops, modernize --- src/OPENMP/respa_omp.cpp | 26 +++++----- src/fix_ave_time.cpp | 6 +-- src/fix_vector.cpp | 100 +++++++++++++++++---------------------- src/modify.h | 2 + src/respa.cpp | 2 +- src/special.cpp | 5 +- src/update.cpp | 36 +++++--------- 7 files changed, 77 insertions(+), 100 deletions(-) diff --git a/src/OPENMP/respa_omp.cpp b/src/OPENMP/respa_omp.cpp index cc4d3925b1..c6500185ad 100644 --- a/src/OPENMP/respa_omp.cpp +++ b/src/OPENMP/respa_omp.cpp @@ -67,21 +67,23 @@ void RespaOMP::init() void RespaOMP::setup(int flag) { if (comm->me == 0 && screen) { - fprintf(screen,"Setting up r-RESPA/omp run ...\n"); + std::string mesg = "Setting up r-RESPA/omp run ...\n"; if (flag) { - fprintf(screen," Unit style : %s\n", update->unit_style); - fprintf(screen," Current step : " BIGINT_FORMAT "\n", update->ntimestep); - fprintf(screen," Time steps :"); - for (int ilevel=0; ilevel < nlevels; ++ilevel) - fprintf(screen," %d:%g",ilevel+1, step[ilevel]); - fprintf(screen,"\n r-RESPA fixes :"); - for (int l=0; l < modify->n_post_force_respa; ++l) { - Fix *f = modify->fix[modify->list_post_force_respa[l]]; + mesg += fmt::format(" Unit style : {}\n", update->unit_style); + mesg += fmt::format(" Current step : {}\n", update->ntimestep); + + mesg += " Time steps :"; + for (int ilevel = 0; ilevel < nlevels; ++ilevel) + mesg += fmt::format(" {}:{}", ilevel + 1, step[ilevel]); + + mesg += "\n r-RESPA fixes :"; + for (int l = 0; l < modify->n_post_force_respa; ++l) { + Fix *f = modify->get_fix_by_index(modify->list_post_force_respa[l]); if (f->respa_level >= 0) - fprintf(screen," %d:%s[%s]", - MIN(f->respa_level+1,nlevels),f->style,f->id); + mesg += fmt::format(" {}:{}[{}]", MIN(f->respa_level + 1, nlevels), f->style, f->id); } - fprintf(screen,"\n"); + mesg += "\n"; + fputs(mesg.c_str(), screen); timer->print_timeout(screen); } } diff --git a/src/fix_ave_time.cpp b/src/fix_ave_time.cpp index a3da6e6a3d..836121fdc2 100644 --- a/src/fix_ave_time.cpp +++ b/src/fix_ave_time.cpp @@ -243,10 +243,8 @@ FixAveTime::FixAveTime(LAMMPS *lmp, int narg, char **arg) : if (any_variable_length && (nrepeat > 1 || ave == RUNNING || ave == WINDOW)) { for (int i = 0; i < nvalues; i++) - if (varlen[i] && which[i] == ArgInfo::COMPUTE) { - int icompute = modify->find_compute(ids[i]); - modify->compute[icompute]->lock_enable(); - } + if (varlen[i] && which[i] == ArgInfo::COMPUTE) + modify->get_compute_by_id(ids[i])->lock_enable(); lockforever = 0; } diff --git a/src/fix_vector.cpp b/src/fix_vector.cpp index 9066182ed1..e916b8e9fe 100644 --- a/src/fix_vector.cpp +++ b/src/fix_vector.cpp @@ -65,64 +65,54 @@ FixVector::FixVector(LAMMPS *lmp, int narg, char **arg) : // setup and error check // for fix inputs, check that fix frequency is acceptable - - for (int i = 0; i < nvalues; i++) { - if (which[i] == ArgInfo::COMPUTE) { - int icompute = modify->find_compute(ids[i]); - if (icompute < 0) - error->all(FLERR,"Compute ID for fix vector does not exist"); - if (argindex[i] == 0 && modify->compute[icompute]->scalar_flag == 0) - error->all(FLERR,"Fix vector compute does not calculate a scalar"); - if (argindex[i] && modify->compute[icompute]->vector_flag == 0) - error->all(FLERR,"Fix vector compute does not calculate a vector"); - if (argindex[i] && argindex[i] > modify->compute[icompute]->size_vector) - error->all(FLERR, - "Fix vector compute vector is accessed out-of-range"); - - } else if (which[i] == ArgInfo::FIX) { - int ifix = modify->find_fix(ids[i]); - if (ifix < 0) - error->all(FLERR,"Fix ID for fix vector does not exist"); - if (argindex[i] == 0 && modify->fix[ifix]->scalar_flag == 0) - error->all(FLERR,"Fix vector fix does not calculate a scalar"); - if (argindex[i] && modify->fix[ifix]->vector_flag == 0) - error->all(FLERR,"Fix vector fix does not calculate a vector"); - if (argindex[i] && argindex[i] > modify->fix[ifix]->size_vector) - error->all(FLERR,"Fix vector fix vector is accessed out-of-range"); - if (nevery % modify->fix[ifix]->global_freq) - error->all(FLERR, - "Fix for fix vector not computed at compatible time"); - - } else if (which[i] == ArgInfo::VARIABLE) { - int ivariable = input->variable->find(ids[i]); - if (ivariable < 0) - error->all(FLERR,"Variable name for fix vector does not exist"); - if (argindex[i] == 0 && input->variable->equalstyle(ivariable) == 0) - error->all(FLERR,"Fix vector variable is not equal-style variable"); - if (argindex[i] && input->variable->vectorstyle(ivariable) == 0) - error->all(FLERR,"Fix vector variable is not vector-style variable"); - } - } - // this fix produces either a global vector or array // intensive/extensive flags set by compute,fix,variable that produces value int value,finalvalue; for (int i = 0; i < nvalues; i++) { if (which[i] == ArgInfo::COMPUTE) { - Compute *compute = modify->compute[modify->find_compute(ids[i])]; - if (argindex[0] == 0) value = compute->extscalar; - else if (compute->extvector >= 0) value = compute->extvector; - else value = compute->extlist[argindex[0]-1]; + auto icompute = modify->get_compute_by_id(ids[i]); + if (!icompute) error->all(FLERR,"Compute ID {} for fix vector does not exist",ids[i]); + if (argindex[i] == 0 && icompute->scalar_flag == 0) + error->all(FLERR,"Fix vector compute {} does not calculate a scalar",ids[i]); + if (argindex[i] && icompute->vector_flag == 0) + error->all(FLERR,"Fix vector compute {} does not calculate a vector",ids[i]); + if (argindex[i] && argindex[i] > icompute->size_vector) + error->all(FLERR,"Fix vector compute {} vector is accessed out-of-range",ids[i]); + + if (argindex[i] == 0) value = icompute->extscalar; + else if (icompute->extvector >= 0) value = icompute->extvector; + else value = icompute->extlist[argindex[i]-1]; + } else if (which[i] == ArgInfo::FIX) { - Fix *fix = modify->fix[modify->find_fix(ids[i])]; - if (argindex[i] == 0) value = fix->extvector; - else value = fix->extarray; - } else if (which[i] == ArgInfo::VARIABLE) value = 0; + auto ifix = modify->get_fix_by_id(ids[i]); + if (!ifix) error->all(FLERR,"Fix ID {} for fix vector does not exist",ids[i]); + if (argindex[i] == 0 && ifix->scalar_flag == 0) + error->all(FLERR,"Fix vector fix {} does not calculate a scalar",ids[i]); + if (argindex[i] && ifix->vector_flag == 0) + error->all(FLERR,"Fix vector fix {} does not calculate a vector",ids[i]); + if (argindex[i] && argindex[i] > ifix->size_vector) + error->all(FLERR,"Fix vector fix {} vector is accessed out-of-range",ids[i]); + if (nevery % ifix->global_freq) + error->all(FLERR,"Fix for fix {} vector not computed at compatible time",ids[i]); + + if (argindex[i] == 0) value = ifix->extvector; + else value = ifix->extarray; + + } else if (which[i] == ArgInfo::VARIABLE) { + int ivariable = input->variable->find(ids[i]); + if (ivariable < 0) + error->all(FLERR,"Variable name {} for fix vector does not exist",ids[i]); + if (argindex[i] == 0 && input->variable->equalstyle(ivariable) == 0) + error->all(FLERR,"Fix vector variable {} is not equal-style variable",ids[i]); + if (argindex[i] && input->variable->vectorstyle(ivariable) == 0) + error->all(FLERR,"Fix vector variable {} is not vector-style variable",ids[i]); + value = 0; + } + if (i == 0) finalvalue = value; else if (value != finalvalue) - error->all(FLERR,"Fix vector cannot set output array " - "intensive/extensive from these inputs"); + error->all(FLERR,"Fix vector cannot set output array intensive/extensive from these inputs"); } if (nvalues == 1) { @@ -191,14 +181,12 @@ void FixVector::init() for (int i = 0; i < nvalues; i++) { if (which[i] == ArgInfo::COMPUTE) { int icompute = modify->find_compute(ids[i]); - if (icompute < 0) - error->all(FLERR,"Compute ID for fix vector does not exist"); + if (icompute < 0) error->all(FLERR,"Compute ID {} for fix vector does not exist",id[i]); value2index[i] = icompute; } else if (which[i] == ArgInfo::FIX) { int ifix = modify->find_fix(ids[i]); - if (ifix < 0) - error->all(FLERR,"Fix ID for fix vector does not exist"); + if (ifix < 0) error->all(FLERR,"Fix ID {} for fix vector does not exist",id[i]); value2index[i] = ifix; } else if (which[i] == ArgInfo::VARIABLE) { @@ -254,7 +242,7 @@ void FixVector::end_of_step() // invoke compute if not previously invoked if (which[i] == ArgInfo::COMPUTE) { - Compute *compute = modify->compute[m]; + auto compute = modify->get_compute_by_index(m); if (argindex[i] == 0) { if (!(compute->invoked_flag & Compute::INVOKED_SCALAR)) { @@ -274,9 +262,9 @@ void FixVector::end_of_step() } else if (which[i] == ArgInfo::FIX) { if (argindex[i] == 0) - result[i] = modify->fix[m]->compute_scalar(); + result[i] = modify->get_fix_by_index(m)->compute_scalar(); else - result[i] = modify->fix[m]->compute_vector(argindex[i]-1); + result[i] = modify->get_fix_by_index(m)->compute_vector(argindex[i]-1); // evaluate equal-style or vector-style variable diff --git a/src/modify.h b/src/modify.h index 60365cd56c..c4f8c2ef02 100644 --- a/src/modify.h +++ b/src/modify.h @@ -113,6 +113,7 @@ class Modify : protected Pointers { int find_fix(const std::string &); // new API Fix *get_fix_by_id(const std::string &) const; + Fix *get_fix_by_index(int idx) const { return fix[idx]; } const std::vector get_fix_by_style(const std::string &) const; const std::vector &get_fix_list(); @@ -126,6 +127,7 @@ class Modify : protected Pointers { int find_compute(const std::string &); // new API Compute *get_compute_by_id(const std::string &) const; + Compute *get_compute_by_index(int idx) const { return compute[idx]; } const std::vector get_compute_by_style(const std::string &) const; const std::vector &get_compute_list(); diff --git a/src/respa.cpp b/src/respa.cpp index af8b0c21ac..9690105d40 100644 --- a/src/respa.cpp +++ b/src/respa.cpp @@ -373,7 +373,7 @@ void Respa::setup(int flag) mesg += "\n r-RESPA fixes :"; for (int l = 0; l < modify->n_post_force_respa; ++l) { - Fix *f = modify->fix[modify->list_post_force_respa[l]]; + Fix *f = modify->get_fix_by_index(modify->list_post_force_respa[l]); if (f->respa_level >= 0) mesg += fmt::format(" {}:{}[{}]", MIN(f->respa_level + 1, nlevels), f->style, f->id); } diff --git a/src/special.cpp b/src/special.cpp index 9f480da78f..ceba160be2 100644 --- a/src/special.cpp +++ b/src/special.cpp @@ -1290,9 +1290,8 @@ int Special::rendezvous_pairs(int n, char *inbuf, int &flag, int *&proclist, void Special::fix_alteration() { - for (int ifix = 0; ifix < modify->nfix; ifix++) - if (modify->fix[ifix]->special_alter_flag) - modify->fix[ifix]->rebuild_special(); + for (const auto &ifix : modify->get_fix_list()) + if (ifix->special_alter_flag) ifix->rebuild_special(); } /* ---------------------------------------------------------------------- diff --git a/src/update.cpp b/src/update.cpp index 72b60c3d3b..95dc47573e 100644 --- a/src/update.cpp +++ b/src/update.cpp @@ -488,41 +488,29 @@ void Update::reset_timestep(bigint newstep) output->reset_timestep(ntimestep); - for (int i = 0; i < modify->nfix; i++) { - if (modify->fix[i]->time_depend) - error->all(FLERR, - "Cannot reset timestep with a time-dependent fix defined"); - } + for (const auto &ifix : modify->get_fix_list()) + if (ifix->time_depend) + error->all(FLERR, "Cannot reset timestep with time-dependent fix {} defined",ifix->style); // reset eflag/vflag global so no commands will think eng/virial are current eflag_global = vflag_global = -1; - // reset invoked flags of computes, - // so no commands will think they are current between runs - - for (int i = 0; i < modify->ncompute; i++) { - modify->compute[i]->invoked_scalar = -1; - modify->compute[i]->invoked_vector = -1; - modify->compute[i]->invoked_array = -1; - modify->compute[i]->invoked_peratom = -1; - modify->compute[i]->invoked_local = -1; - } - + // reset invoked flags of computes, so no commands will think they are current between runs // clear timestep list of computes that store future invocation times - for (int i = 0; i < modify->ncompute; i++) - if (modify->compute[i]->timeflag) modify->compute[i]->clearstep(); + for (const auto &icompute : modify->get_compute_list()) { + icompute->invoked_scalar = -1; + icompute->invoked_vector = -1; + icompute->invoked_array = -1; + icompute->invoked_peratom = -1; + icompute->invoked_local = -1; + if (icompute->timeflag) icompute->clearstep(); + } // Neighbor Bin/Stencil/Pair classes store timestamps that need to be cleared neighbor->reset_timestep(ntimestep); - - // NOTE: 7Jun12, adding rerun command, don't think this is required - - //for (int i = 0; i < domain->nregion; i++) - // if (domain->regions[i]->dynamic_check()) - // error->all(FLERR,"Cannot reset timestep with a dynamic region defined"); } /* ---------------------------------------------------------------------- From 64764cc7b00a6b8a0a3df6a1034665b056885ae7 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Thu, 28 Oct 2021 09:46:58 -0400 Subject: [PATCH 302/372] clarify the difference between C++ and Fortran versions of MEAM --- doc/src/pair_meam.rst | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/doc/src/pair_meam.rst b/doc/src/pair_meam.rst index d091496325..022de60f98 100644 --- a/doc/src/pair_meam.rst +++ b/doc/src/pair_meam.rst @@ -28,16 +28,16 @@ Description as of November 2010; see description below of the mixture_ref_t parameter -Style *meam* computes pairwise interactions for a variety of materials -using modified embedded-atom method (MEAM) potentials +Pair style *meam* computes non-bonded interactions for a variety of materials +using the modified embedded-atom method (MEAM) :ref:`(Baskes) `. Conceptually, it is an extension to the original -:doc:`EAM potentials ` which adds angular forces. It is +:doc:`EAM method ` which adds angular forces. It is thus suitable for modeling metals and alloys with fcc, bcc, hcp and -diamond cubic structures, as well as covalently bonded materials like -silicon and carbon. Style *meam* is a translation of the (now obsolete) -*meam* code from Fortran to C++. It is functionally equivalent to *meam* -but more efficient, and thus *meam* has been removed from LAMMPS after -the 12 December 2018 release. +diamond cubic structures, as well as materials with covalent interactions +like silicon and carbon. This *meam* pair style is a translation of the +original Fortran version to C++. It is functionally equivalent but more +efficient and has additional features. The Fortran version of the *meam* +pair style has been removed from LAMMPS after the 12 December 2018 release. In the MEAM formulation, the total energy E of a system of atoms is given by: From 3887b08c1de27ccd8ed1cc5f3a7b82dc2e116107 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Thu, 28 Oct 2021 10:08:35 -0400 Subject: [PATCH 303/372] update new LAMMPS paper citation info --- doc/src/Intro_citing.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/src/Intro_citing.rst b/doc/src/Intro_citing.rst index 0e10b7559a..08f82fac33 100644 --- a/doc/src/Intro_citing.rst +++ b/doc/src/Intro_citing.rst @@ -16,7 +16,7 @@ source code design, the program structure, the spatial decomposition approach, the neighbor finding, basic communications algorithms, and how users and developers have contributed to LAMMPS is: - `LAMMPS - A flexible simulation tool for particle-based materials modeling at the atomic, meso, and continuum scales, Comp. Phys. Comm. (accepted 09/2021), DOI:10.1016/j.cpc.2021.108171 `_ + `LAMMPS - A flexible simulation tool for particle-based materials modeling at the atomic, meso, and continuum scales, Comp. Phys. Comm. 271, 108171 (2022) `_ So a project using LAMMPS or a derivative application that uses LAMMPS as a simulation engine should cite this paper. The paper is expected to From bbbde3cc15d2e4791f9232d881ce6d1544b2cc73 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sun, 31 Oct 2021 16:18:32 -0400 Subject: [PATCH 304/372] fix indexing bug --- src/fix_vector.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/fix_vector.cpp b/src/fix_vector.cpp index 9066182ed1..1f6411c5bc 100644 --- a/src/fix_vector.cpp +++ b/src/fix_vector.cpp @@ -111,9 +111,9 @@ FixVector::FixVector(LAMMPS *lmp, int narg, char **arg) : for (int i = 0; i < nvalues; i++) { if (which[i] == ArgInfo::COMPUTE) { Compute *compute = modify->compute[modify->find_compute(ids[i])]; - if (argindex[0] == 0) value = compute->extscalar; + if (argindex[i] == 0) value = compute->extscalar; else if (compute->extvector >= 0) value = compute->extvector; - else value = compute->extlist[argindex[0]-1]; + else value = compute->extlist[argindex[i]-1]; } else if (which[i] == ArgInfo::FIX) { Fix *fix = modify->fix[modify->find_fix(ids[i])]; if (argindex[i] == 0) value = fix->extvector; From 6b3ddb8a72a535d3d37d7806dd46af6a54f931c4 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sun, 31 Oct 2021 19:29:12 -0400 Subject: [PATCH 305/372] fix logic bug --- src/modify.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/modify.cpp b/src/modify.cpp index 1ff4986a43..2f7abe27fa 100644 --- a/src/modify.cpp +++ b/src/modify.cpp @@ -991,7 +991,7 @@ Fix *Modify::replace_fix(const char *replaceID, int narg, char **arg, int trysuf // requires some error checking on arguments for new fix if (narg < 3) error->all(FLERR,"Illegal replace_fix invocation"); - if (!get_fix_by_id(arg[0])) error->all(FLERR,"Replace_fix ID is already in use"); + if (get_fix_by_id(arg[0])) error->all(FLERR,"Replace_fix ID {} is already in use",arg[0]); delete[] oldfix->id; oldfix->id = utils::strdup(arg[0]); From 0bc9f887ec2062f460a06e8da8eace77add8c5ca Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sun, 31 Oct 2021 19:46:37 -0400 Subject: [PATCH 306/372] fix index error --- src/domain.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/domain.cpp b/src/domain.cpp index 34baccdab6..22c38c977a 100644 --- a/src/domain.cpp +++ b/src/domain.cpp @@ -1742,7 +1742,7 @@ void Domain::add_region(int narg, char **arg) if (narg < 2) error->all(FLERR,"Illegal region command"); if (strcmp(arg[1],"delete") == 0) { - delete_region(arg[2]); + delete_region(arg[0]); return; } From d5bfa09faa792300cea5340b13c531584482547e Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Mon, 1 Nov 2021 09:19:33 -0400 Subject: [PATCH 307/372] modernize argument parsing --- src/REAXFF/fix_reaxff_species.cpp | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/REAXFF/fix_reaxff_species.cpp b/src/REAXFF/fix_reaxff_species.cpp index a839469d35..3438d57977 100644 --- a/src/REAXFF/fix_reaxff_species.cpp +++ b/src/REAXFF/fix_reaxff_species.cpp @@ -63,9 +63,9 @@ FixReaxFFSpecies::FixReaxFFSpecies(LAMMPS *lmp, int narg, char **arg) : MPI_Comm_size(world,&nprocs); ntypes = atom->ntypes; - nevery = atoi(arg[3]); - nrepeat = atoi(arg[4]); - global_freq = nfreq = atoi(arg[5]); + nevery = utils::inumeric(FLERR,arg[3],false,lmp); + nrepeat = utils::inumeric(FLERR,arg[4],false,lmp); + global_freq = nfreq = utils::inumeric(FLERR,arg[5],false,lmp); comm_forward = 4; @@ -155,9 +155,9 @@ FixReaxFFSpecies::FixReaxFFSpecies(LAMMPS *lmp, int narg, char **arg) : // set BO cutoff if (strcmp(arg[iarg],"cutoff") == 0) { if (iarg+4 > narg) error->all(FLERR,"Illegal fix reaxff/species command"); - itype = atoi(arg[iarg+1]); - jtype = atoi(arg[iarg+2]); - bo_cut = atof(arg[iarg+3]); + itype = utils::inumeric(FLERR,arg[iarg+1],false,lmp); + jtype = utils::inumeric(FLERR,arg[iarg+2],false,lmp); + bo_cut = utils::numeric(FLERR,arg[iarg+3],false,lmp); if (itype > ntypes || jtype > ntypes) error->all(FLERR,"Illegal fix reaxff/species command"); if (itype <= 0 || jtype <= 0) @@ -187,7 +187,7 @@ FixReaxFFSpecies::FixReaxFFSpecies(LAMMPS *lmp, int narg, char **arg) : } else if (strcmp(arg[iarg],"position") == 0) { if (iarg+3 > narg) error->all(FLERR,"Illegal fix reaxff/species command"); posflag = 1; - posfreq = atoi(arg[iarg+1]); + posfreq = utils::inumeric(FLERR,arg[iarg+1],false,lmp); if (posfreq < nfreq || (posfreq%nfreq != 0)) error->all(FLERR,"Illegal fix reaxff/species command"); From 9caad2be4db8a1353656a00a48538e1521448e37 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Mon, 1 Nov 2021 09:59:38 -0400 Subject: [PATCH 308/372] update security statement --- SECURITY.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/SECURITY.md b/SECURITY.md index 9f65e2f88e..f06b781d11 100644 --- a/SECURITY.md +++ b/SECURITY.md @@ -23,6 +23,10 @@ either a user mistake or a bug in the code. Bugs can be reported in the LAMMPS project [issue tracker on GitHub](https://github.com/lammps/lammps/issues). +To mitigate issues with using homoglyphs or bidirectional reordering in +unicode, which have been demonstrated as a vector to obfuscate and hide +malicious changes to the source code, all LAMMPS submissions are checked +for unicode characters and only all-ASCII source code is accepted. # Version Updates From 7a228eedd2ac5c9eee5a66b0f13413e56eeb5c5f Mon Sep 17 00:00:00 2001 From: Steve Plimpton Date: Mon, 1 Nov 2021 15:16:39 -0600 Subject: [PATCH 309/372] move dump_modify options specific to image/movie to dump image doc page --- doc/src/dump_image.rst | 489 +++++++++++++++++++++++++++++++++++++--- doc/src/dump_modify.rst | 461 +++---------------------------------- 2 files changed, 488 insertions(+), 462 deletions(-) diff --git a/doc/src/dump_image.rst b/doc/src/dump_image.rst index be14a237e5..9738b48ff4 100644 --- a/doc/src/dump_image.rst +++ b/doc/src/dump_image.rst @@ -15,7 +15,7 @@ Syntax * ID = user-assigned name for the dump * group-ID = ID of the group of atoms to be imaged -* style = *image* or *movie* = style of dump command (other styles *atom* or *cfg* or *dcd* or *xtc* or *xyz* or *local* or *custom* are discussed on the :doc:`dump ` doc page) +* style = *image* or *movie* = style of dump command (other styles such as *atom* or *cfg* or *dcd* or *xtc* or *xyz* or *local* or *custom* are discussed on the :doc:`dump ` doc page) * N = dump every this many timesteps * file = name of file to write image to * color = atom attribute that determines color of each atom @@ -79,6 +79,61 @@ Syntax seed = random # seed (positive integer) dfactor = strength of shading from 0.0 to 1.0 +.. parsed-literal:: + + dump_modify dump-ID keyword values ... + +* these keywords apply only to the *image* and *movie* styles +* keyword = *acolor* or *adiam* or *amap* or *backcolor* or *bcolor* or *bdiam* or *boxcolor* or *color* or *bitrate* or *framerate* +* these keywords are documented on this page +* see the :doc:`dump modify ` doc page for other, more general options + + .. parsed-literal:: + + *acolor* args = type color + type = atom type or range of types (see below) + color = name of color or color1/color2/... + *adiam* args = type diam + type = atom type or range of types (see below) + diam = diameter of atoms of that type (distance units) + *amap* args = lo hi style delta N entry1 entry2 ... entryN + lo = number or *min* = lower bound of range of color map + hi = number or *max* = upper bound of range of color map + style = 2 letters = "c" or "d" or "s" plus "a" or "f" + "c" for continuous + "d" for discrete + "s" for sequential + "a" for absolute + "f" for fractional + delta = binsize (only used for style "s", otherwise ignored) + binsize = range is divided into bins of this width + N = # of subsequent entries + entry = value color (for continuous style) + value = number or *min* or *max* = single value within range + color = name of color used for that value + entry = lo hi color (for discrete style) + lo/hi = number or *min* or *max* = lower/upper bound of subset of range + color = name of color used for that subset of values + entry = color (for sequential style) + color = name of color used for a bin of values + *backcolor* arg = color + color = name of color for background + *bcolor* args = type color + type = bond type or range of types (see below) + color = name of color or color1/color2/... + *bdiam* args = type diam + type = bond type or range of types (see below) + diam = diameter of bonds of that type (distance units) + *boxcolor* arg = color + color = name of color for simulation box lines and processor sub-domain lines + *color* args = name R G B + name = name of color + R,G,B = red/green/blue numeric values from 0.0 to 1.0 + *bitrate* arg = rate + rate = target bitrate for movie in kbps + *framerate* arg = fps + fps = frames per second for movie + Examples """""""" @@ -91,6 +146,8 @@ Examples dump m1 all movie 1000 movie.avi type type size 640 480 dump m2 all movie 100 movie.m4v type type zoom 1.8 adiam v_value size 1280 720 + dump_modify 1 amap min max cf 0.0 3 min green 0.5 yellow max blue boxcolor red + Description """"""""""" @@ -145,10 +202,10 @@ is used. Similarly, the format of the resulting movie is chosen with the *movie* dump style. This is handled by the underlying FFmpeg converter and thus details have to be looked up in the `FFmpeg documentation -`_. -Typical examples are: .avi, .mpg, .m4v, .mp4, .mkv, .flv, .mov, .gif -Additional settings of the movie compression like bitrate and -framerate can be set using the :doc:`dump_modify ` command. +`_. Typical examples are: .avi, .mpg, +.m4v, .mp4, .mkv, .flv, .mov, .gif Additional settings of the movie +compression like bitrate and framerate can be set using the +dump_modify command as described below. To write out JPEG and PNG format files, you must build LAMMPS with support for the corresponding JPEG or PNG library. To convert images @@ -210,19 +267,20 @@ to colors is as follows: * type 6 = cyan and repeats itself for types > 6. This mapping can be changed by the -:doc:`dump_modify acolor ` command. +"dump_modify acolor" command, as described below. If *type* is specified for the *diameter* setting then the diameter of each atom is determined by its atom type. By default all types have -diameter 1.0. This mapping can be changed by the :doc:`dump_modify adiam ` command. +diameter 1.0. This mapping can be changed by the "dump_modify adiam" +command, as described below. If *element* is specified for the *color* and/or *diameter* setting, then the color and/or diameter of each atom is determined by which element it is, which in turn is specified by the element-to-type -mapping specified by the "dump_modify element" command. By default -every atom type is C (carbon). Every element has a color and diameter -associated with it, which is the same as the colors and sizes used by -the `AtomEye `_ visualization package. +mapping specified by the "dump_modify element" command, as described +below. By default every atom type is C (carbon). Every element has a +color and diameter associated with it, which is the same as the colors +and sizes used by the `AtomEye `_ visualization package. .. _atomeye: http://li.mit.edu/Archive/Graphics/A/ @@ -232,13 +290,13 @@ settings, they are interpreted in the following way. If "vx", for example, is used as the *color* setting, then the color of the atom will depend on the x-component of its velocity. The association of a per-atom value with a specific color is determined by -a "color map", which can be specified via the -:doc:`dump_modify ` command. The basic idea is that the -atom-attribute will be within a range of values, and every value -within the range is mapped to a specific color. Depending on how the -color map is defined, that mapping can take place via interpolation so -that a value of -3.2 is halfway between "red" and "blue", or -discretely so that the value of -3.2 is "orange". +a "color map", which can be specified via the dump_modify command, as +described below. The basic idea is that the atom-attribute will be +within a range of values, and every value within the range is mapped +to a specific color. Depending on how the color map is defined, that +mapping can take place via interpolation so that a value of -3.2 is +halfway between "red" and "blue", or discretely so that the value of +-3.2 is "orange". If "vx", for example, is used as the *diameter* setting, then the atom will be rendered using the x-component of its velocity as the @@ -251,9 +309,10 @@ diameter, which can be used as the *diameter* setting. The various keywords listed above control how the image is rendered. As listed below, all of the keywords have defaults, most of which you -will likely not need to change. The :doc:`dump modify ` -also has options specific to the dump image style, particularly for -assigning colors to atoms, bonds, and other image features. +will likely not need to change. As described below, the dump modify +command also has options specific to the dump image style, +particularly for assigning colors to atoms, bonds, and other image +features. ---------- @@ -295,7 +354,7 @@ types to colors is as follows: * type 6 = cyan and repeats itself for bond types > 6. This mapping can be changed by -the :doc:`dump_modify bcolor ` command. +the "dump_modify bcolor" command, as described below. The bond *width* value can be a numeric value or *atom* or *type* (or *none* as indicated above). @@ -310,7 +369,8 @@ of the 2 atoms in the bond. If *type* is specified for the *width* value then the diameter of each bond is determined by its bond type. By default all types have -diameter 0.5. This mapping can be changed by the :doc:`dump_modify bdiam ` command. +diameter 0.5. This mapping can be changed by the "dump_modify bdiam" command, +as described below. ---------- @@ -330,7 +390,7 @@ mapping of types to colors is as follows: * type 6 = cyan and repeats itself for types > 6. There is not yet an option to -change this via the :doc:`dump_modify ` command. +change this via the dump_modify command. The line *width* can only be a numeric value, which specifies that all lines will be drawn as cylinders with that diameter, e.g. 1.0, which @@ -357,7 +417,7 @@ default the mapping of types to colors is as follows: * type 6 = cyan and repeats itself for types > 6. There is not yet an option to -change this via the :doc:`dump_modify ` command. +change this via the dump_modify command. ---------- @@ -390,7 +450,7 @@ particle. By default the mapping of types to colors is as follows: * type 6 = cyan and repeats itself for types > 6. There is not yet an option to -change this via the :doc:`dump_modify ` command. +change this via the dump_modify command. ---------- @@ -414,7 +474,7 @@ the mapping of types to colors is as follows: * type 6 = cyan and repeats itself for types > 6. There is not yet an option to -change this via the :doc:`dump_modify ` command. +change this via the dump_modify command. ---------- @@ -488,7 +548,8 @@ are rendered as thin cylinders in the image. If *no* is set, then the box boundaries are not drawn and the *diam* setting is ignored. If *yes* is set, the 12 edges of the box are drawn, with a diameter that is a fraction of the shortest box length in x,y,z (for 3d) or x,y (for -2d). The color of the box boundaries can be set with the :doc:`dump_modify boxcolor ` command. +2d). The color of the box boundaries can be set with the "dump_modify +boxcolor" command. The *axes* keyword determines if and how the coordinate axes are rendered as thin cylinders in the image. If *no* is set, then the @@ -507,7 +568,8 @@ set (default), then the sub-domain boundaries are not drawn and the *diam* setting is ignored. If *yes* is set, the 12 edges of each processor sub-domain are drawn, with a diameter that is a fraction of the shortest box length in x,y,z (for 3d) or x,y (for 2d). The color -of the sub-domain boundaries can be set with the :doc:`dump_modify boxcolor ` command. +of the sub-domain boundaries can be set with the "dump_modify +boxcolor" command. ---------- @@ -607,9 +669,272 @@ Play the movie: ---------- -See the :doc:`Modify ` page for information on how to add -new compute and fix styles to LAMMPS to calculate per-atom quantities -which could then be output into dump files. +Dump_modify keywords for dump image and dump movie +"""""""""""""""""""""""""""""""""""""""""""""""""" + +The following dump_modify keywords apply only to the dump image and +dump movie styles. Any keyword that works with dump image also works +with dump movie, since the movie is simply a collection of images. +Some of the keywords only affect the dump movie style. The +descriptions give details. + +---------- + +The *acolor* keyword can be used with the dump image command, when its +atom color setting is *type*, to set the color that atoms of each type +will be drawn in the image. + +The specified *type* should be an integer from 1 to Ntypes = the +number of atom types. A wildcard asterisk can be used in place of or +in conjunction with the *type* argument to specify a range of atom +types. This takes the form "\*" or "\*n" or "n\*" or "m\*n". If N = +the number of atom types, then an asterisk with no numeric values +means all types from 1 to N. A leading asterisk means all types from +1 to n (inclusive). A trailing asterisk means all types from n to N +(inclusive). A middle asterisk means all types from m to n +(inclusive). + +The specified *color* can be a single color which is any of the 140 +pre-defined colors (see below) or a color name defined by the +"dump_modify color" command, as described below. Or it can be two or +more colors separated by a "/" character, e.g. red/green/blue. In the +former case, that color is assigned to all the specified atom types. +In the latter case, the list of colors are assigned in a round-robin +fashion to each of the specified atom types. + +---------- + +The *adiam* keyword can be used with the dump image command, when its +atom diameter setting is *type*, to set the size that atoms of each +type will be drawn in the image. The specified *type* should be an +integer from 1 to Ntypes. As with the *acolor* keyword, a wildcard +asterisk can be used as part of the *type* argument to specify a range +of atom types. The specified *diam* is the size in whatever distance +:doc:`units ` the input script is using, e.g. Angstroms. + +---------- + +The *amap* keyword can be used with the dump image command, with its +*atom* keyword, when its atom setting is an atom-attribute, to setup a +color map. The color map is used to assign a specific RGB +(red/green/blue) color value to an individual atom when it is drawn, +based on the atom's attribute, which is a numeric value, e.g. its +x-component of velocity if the atom-attribute "vx" was specified. + +The basic idea of a color map is that the atom-attribute will be +within a range of values, and that range is associated with a series +of colors (e.g. red, blue, green). An atom's specific value (vx = +-3.2) can then mapped to the series of colors (e.g. halfway between +red and blue), and a specific color is determined via an interpolation +procedure. + +There are many possible options for the color map, enabled by the +*amap* keyword. Here are the details. + +The *lo* and *hi* settings determine the range of values allowed for +the atom attribute. If numeric values are used for *lo* and/or *hi*, +then values that are lower/higher than that value are set to the +value. I.e. the range is static. If *lo* is specified as *min* or +*hi* as *max* then the range is dynamic, and the lower and/or +upper bound will be calculated each time an image is drawn, based +on the set of atoms being visualized. + +The *style* setting is two letters, such as "ca". The first letter is +either "c" for continuous, "d" for discrete, or "s" for sequential. +The second letter is either "a" for absolute, or "f" for fractional. + +A continuous color map is one in which the color changes continuously +from value to value within the range. A discrete color map is one in +which discrete colors are assigned to sub-ranges of values within the +range. A sequential color map is one in which discrete colors are +assigned to a sequence of sub-ranges of values covering the entire +range. + +An absolute color map is one in which the values to which colors are +assigned are specified explicitly as values within the range. A +fractional color map is one in which the values to which colors are +assigned are specified as a fractional portion of the range. For +example if the range is from -10.0 to 10.0, and the color red is to be +assigned to atoms with a value of 5.0, then for an absolute color map +the number 5.0 would be used. But for a fractional map, the number +0.75 would be used since 5.0 is 3/4 of the way from -10.0 to 10.0. + +The *delta* setting must be specified for all styles, but is only used +for the sequential style; otherwise the value is ignored. It +specifies the bin size to use within the range for assigning +consecutive colors to. For example, if the range is from -10.0 to +10.0 and a *delta* of 1.0 is used, then 20 colors will be assigned to +the range. The first will be from -10.0 <= color1 < -9.0, then second +from -9.0 <= color2 < -8.0, etc. + +The *N* setting is how many entries follow. The format of the entries +depends on whether the color map style is continuous, discrete or +sequential. In all cases the *color* setting can be any of the 140 +pre-defined colors (see below) or a color name defined by the +dump_modify color option. + +For continuous color maps, each entry has a *value* and a *color*\ . +The *value* is either a number within the range of values or *min* or +*max*\ . The *value* of the first entry must be *min* and the *value* +of the last entry must be *max*\ . Any entries in between must have +increasing values. Note that numeric values can be specified either +as absolute numbers or as fractions (0.0 to 1.0) of the range, +depending on the "a" or "f" in the style setting for the color map. + +Here is how the entries are used to determine the color of an +individual atom, given the value X of its atom attribute. X will fall +between 2 of the entry values. The color of the atom is linearly +interpolated (in each of the RGB values) between the 2 colors +associated with those entries. For example, if X = -5.0 and the 2 +surrounding entries are "red" at -10.0 and "blue" at 0.0, then the +atom's color will be halfway between "red" and "blue", which happens +to be "purple". + +For discrete color maps, each entry has a *lo* and *hi* value and a +*color*\ . The *lo* and *hi* settings are either numbers within the +range of values or *lo* can be *min* or *hi* can be *max*\ . The *lo* +and *hi* settings of the last entry must be *min* and *max*\ . Other +entries can have any *lo* and *hi* values and the sub-ranges of +different values can overlap. Note that numeric *lo* and *hi* values +can be specified either as absolute numbers or as fractions (0.0 to +1.0) of the range, depending on the "a" or "f" in the style setting +for the color map. + +Here is how the entries are used to determine the color of an +individual atom, given the value X of its atom attribute. The entries +are scanned from first to last. The first time that *lo* <= X <= +*hi*, X is assigned the color associated with that entry. You can +think of the last entry as assigning a default color (since it will +always be matched by X), and the earlier entries as colors that +override the default. Also note that no interpolation of a color RGB +is done. All atoms will be drawn with one of the colors in the list +of entries. + +For sequential color maps, each entry has only a *color*\ . Here is how +the entries are used to determine the color of an individual atom, +given the value X of its atom attribute. The range is partitioned +into N bins of width *binsize*\ . Thus X will fall in a specific bin +from 1 to N, say the Mth bin. If it falls on a boundary between 2 +bins, it is considered to be in the higher of the 2 bins. Each bin is +assigned a color from the E entries. If E < N, then the colors are +repeated. For example if 2 entries with colors red and green are +specified, then the odd numbered bins will be red and the even bins +green. The color of the atom is the color of its bin. Note that the +sequential color map is really a shorthand way of defining a discrete +color map without having to specify where all the bin boundaries are. + +Here is an example of using a sequential color map to color all the +atoms in individual molecules with a different color. See the +examples/pour/in.pour.2d.molecule input script for an example of how +this is used. + +.. code-block:: LAMMPS + + variable colors string & + "red green blue yellow white & + purple pink orange lime gray" + variable mol atom mol%10 + dump 1 all image 250 image.*.jpg v_mol type & + zoom 1.6 adiam 1.5 + dump_modify 1 pad 5 amap 0 10 sa 1 10 ${colors} + +In this case, 10 colors are defined, and molecule IDs are +mapped to one of the colors, even if there are 1000s of molecules. + +---------- + +The *backcolor* sets the background color of the images. The color +name can be any of the 140 pre-defined colors (see below) or a color +name defined by the dump_modify color option. + +---------- + +The *bcolor* keyword can be used with the dump image command, with its +*bond* keyword, when its color setting is *type*, to set the color +that bonds of each type will be drawn in the image. + +The specified *type* should be an integer from 1 to Nbondtypes = the +number of bond types. A wildcard asterisk can be used in place of or +in conjunction with the *type* argument to specify a range of bond +types. This takes the form "\*" or "\*n" or "n\*" or "m\*n". If N = +the number of bond types, then an asterisk with no numeric values +means all types from 1 to N. A leading asterisk means all types from +1 to n (inclusive). A trailing asterisk means all types from n to N +(inclusive). A middle asterisk means all types from m to n +(inclusive). + +The specified *color* can be a single color which is any of the 140 +pre-defined colors (see below) or a color name defined by the +dump_modify color option. Or it can be two or more colors separated +by a "/" character, e.g. red/green/blue. In the former case, that +color is assigned to all the specified bond types. In the latter +case, the list of colors are assigned in a round-robin fashion to each +of the specified bond types. + +---------- + +The *bdiam* keyword can be used with the dump image command, with its +*bond* keyword, when its diam setting is *type*, to set the diameter +that bonds of each type will be drawn in the image. The specified +*type* should be an integer from 1 to Nbondtypes. As with the +*bcolor* keyword, a wildcard asterisk can be used as part of the +*type* argument to specify a range of bond types. The specified +*diam* is the size in whatever distance :doc:`units ` you are +using, e.g. Angstroms. + +---------- + +The *bitrate* keyword can be used with the :doc:`dump movie +` command to define the size of the resulting movie file +and its quality via setting how many kbits per second are to be used +for the movie file. Higher bitrates require less compression and will +result in higher quality movies. The quality is also determined by +the compression format and encoder. The default setting is 2000 +kbit/s, which will result in average quality with older compression +formats. + +.. note:: + + Not all movie file formats supported by dump movie allow the + bitrate to be set. If not, the setting is silently ignored. + +---------- + +The *boxcolor* keyword sets the color of the simulation box drawn +around the atoms in each image as well as the color of processor +sub-domain boundaries. See the "dump image box" command for how to +specify that a box be drawn via the *box* keyword, and the sub-domain +boundaries via the *subbox* keyword. The color name can be any of the +140 pre-defined colors (see below) or a color name defined by the +dump_modify color option. + +---------- + +The *color* keyword allows definition of a new color name, in addition +to the 140-predefined colors (see below), and associates 3 +red/green/blue RGB values with that color name. The color name can +then be used with any other dump_modify keyword that takes a color +name as a value. The RGB values should each be floating point values +between 0.0 and 1.0 inclusive. + +When a color name is converted to RGB values, the user-defined color +names are searched first, then the 140 pre-defined color names. This +means you can also use the *color* keyword to overwrite one of the +pre-defined color names with new RBG values. + +---------- + +The *framerate* keyword can be used with the :doc:`dump movie +` command to define the duration of the resulting movie +file. Movie files written by the dump *movie* command have a default +frame rate of 24 frames per second and the images generated will be +converted at that rate. Thus a sequence of 1000 dump images will +result in a movie of about 42 seconds. To make a movie run longer you +can either generate images more frequently or lower the frame rate. +To speed a movie up, you can do the inverse. Using a frame rate +higher than 24 is not recommended, as it will result in simply +dropping the rendered images. It is more efficient to dump images less +frequently. ---------- @@ -664,7 +989,7 @@ Related commands Default """"""" -The defaults for the keywords are as follows: +The defaults for the dump image and dump movie keywords are as follows: * adiam = not specified (use diameter setting) * atom = yes @@ -682,3 +1007,101 @@ The defaults for the keywords are as follows: * subbox no 0.0 * shiny = 1.0 * ssao = no + +---------- + +The defaults for the dump_modify keywords specific to dump image and dump movie are as follows: + +* acolor = \* red/green/blue/yellow/aqua/cyan +* adiam = \* 1.0 +* amap = min max cf 0.0 2 min blue max red +* backcolor = black +* bcolor = \* red/green/blue/yellow/aqua/cyan +* bdiam = \* 0.5 +* bitrate = 2000 +* boxcolor = yellow +* color = 140 color names are pre-defined as listed below +* framerate = 24 + +---------- + +These are the standard 109 element names that LAMMPS pre-defines for +use with the dump image and dump_modify commands. + +* 1-10 = "H", "He", "Li", "Be", "B", "C", "N", "O", "F", "Ne" +* 11-20 = "Na", "Mg", "Al", "Si", "P", "S", "Cl", "Ar", "K", "Ca" +* 21-30 = "Sc", "Ti", "V", "Cr", "Mn", "Fe", "Co", "Ni", "Cu", "Zn" +* 31-40 = "Ga", "Ge", "As", "Se", "Br", "Kr", "Rb", "Sr", "Y", "Zr" +* 41-50 = "Nb", "Mo", "Tc", "Ru", "Rh", "Pd", "Ag", "Cd", "In", "Sn" +* 51-60 = "Sb", "Te", "I", "Xe", "Cs", "Ba", "La", "Ce", "Pr", "Nd" +* 61-70 = "Pm", "Sm", "Eu", "Gd", "Tb", "Dy", "Ho", "Er", "Tm", "Yb" +* 71-80 = "Lu", "Hf", "Ta", "W", "Re", "Os", "Ir", "Pt", "Au", "Hg" +* 81-90 = "Tl", "Pb", "Bi", "Po", "At", "Rn", "Fr", "Ra", "Ac", "Th" +* 91-100 = "Pa", "U", "Np", "Pu", "Am", "Cm", "Bk", "Cf", "Es", "Fm" +* 101-109 = "Md", "No", "Lr", "Rf", "Db", "Sg", "Bh", "Hs", "Mt" + +---------- + +These are the 140 colors that LAMMPS pre-defines for use with the dump +image and dump_modify commands. Additional colors can be defined with +the dump_modify color command. The 3 numbers listed for each name are +the RGB (red/green/blue) values. Divide each value by 255 to get the +equivalent 0.0 to 1.0 value. + ++-------------------------------+--------------------------------------+---------------------------------+--------------------------------+--------------------------------+ +| aliceblue = 240, 248, 255 | antiquewhite = 250, 235, 215 | aqua = 0, 255, 255 | aquamarine = 127, 255, 212 | azure = 240, 255, 255 | ++-------------------------------+--------------------------------------+---------------------------------+--------------------------------+--------------------------------+ +| beige = 245, 245, 220 | bisque = 255, 228, 196 | black = 0, 0, 0 | blanchedalmond = 255, 255, 205 | blue = 0, 0, 255 | ++-------------------------------+--------------------------------------+---------------------------------+--------------------------------+--------------------------------+ +| blueviolet = 138, 43, 226 | brown = 165, 42, 42 | burlywood = 222, 184, 135 | cadetblue = 95, 158, 160 | chartreuse = 127, 255, 0 | ++-------------------------------+--------------------------------------+---------------------------------+--------------------------------+--------------------------------+ +| chocolate = 210, 105, 30 | coral = 255, 127, 80 | cornflowerblue = 100, 149, 237 | cornsilk = 255, 248, 220 | crimson = 220, 20, 60 | ++-------------------------------+--------------------------------------+---------------------------------+--------------------------------+--------------------------------+ +| cyan = 0, 255, 255 | darkblue = 0, 0, 139 | darkcyan = 0, 139, 139 | darkgoldenrod = 184, 134, 11 | darkgray = 169, 169, 169 | ++-------------------------------+--------------------------------------+---------------------------------+--------------------------------+--------------------------------+ +| darkgreen = 0, 100, 0 | darkkhaki = 189, 183, 107 | darkmagenta = 139, 0, 139 | darkolivegreen = 85, 107, 47 | darkorange = 255, 140, 0 | ++-------------------------------+--------------------------------------+---------------------------------+--------------------------------+--------------------------------+ +| darkorchid = 153, 50, 204 | darkred = 139, 0, 0 | darksalmon = 233, 150, 122 | darkseagreen = 143, 188, 143 | darkslateblue = 72, 61, 139 | ++-------------------------------+--------------------------------------+---------------------------------+--------------------------------+--------------------------------+ +| darkslategray = 47, 79, 79 | darkturquoise = 0, 206, 209 | darkviolet = 148, 0, 211 | deeppink = 255, 20, 147 | deepskyblue = 0, 191, 255 | ++-------------------------------+--------------------------------------+---------------------------------+--------------------------------+--------------------------------+ +| dimgray = 105, 105, 105 | dodgerblue = 30, 144, 255 | firebrick = 178, 34, 34 | floralwhite = 255, 250, 240 | forestgreen = 34, 139, 34 | ++-------------------------------+--------------------------------------+---------------------------------+--------------------------------+--------------------------------+ +| fuchsia = 255, 0, 255 | gainsboro = 220, 220, 220 | ghostwhite = 248, 248, 255 | gold = 255, 215, 0 | goldenrod = 218, 165, 32 | ++-------------------------------+--------------------------------------+---------------------------------+--------------------------------+--------------------------------+ +| gray = 128, 128, 128 | green = 0, 128, 0 | greenyellow = 173, 255, 47 | honeydew = 240, 255, 240 | hotpink = 255, 105, 180 | ++-------------------------------+--------------------------------------+---------------------------------+--------------------------------+--------------------------------+ +| indianred = 205, 92, 92 | indigo = 75, 0, 130 | ivory = 255, 240, 240 | khaki = 240, 230, 140 | lavender = 230, 230, 250 | ++-------------------------------+--------------------------------------+---------------------------------+--------------------------------+--------------------------------+ +| lavenderblush = 255, 240, 245 | lawngreen = 124, 252, 0 | lemonchiffon = 255, 250, 205 | lightblue = 173, 216, 230 | lightcoral = 240, 128, 128 | ++-------------------------------+--------------------------------------+---------------------------------+--------------------------------+--------------------------------+ +| lightcyan = 224, 255, 255 | lightgoldenrodyellow = 250, 250, 210 | lightgreen = 144, 238, 144 | lightgrey = 211, 211, 211 | lightpink = 255, 182, 193 | ++-------------------------------+--------------------------------------+---------------------------------+--------------------------------+--------------------------------+ +| lightsalmon = 255, 160, 122 | lightseagreen = 32, 178, 170 | lightskyblue = 135, 206, 250 | lightslategray = 119, 136, 153 | lightsteelblue = 176, 196, 222 | ++-------------------------------+--------------------------------------+---------------------------------+--------------------------------+--------------------------------+ +| lightyellow = 255, 255, 224 | lime = 0, 255, 0 | limegreen = 50, 205, 50 | linen = 250, 240, 230 | magenta = 255, 0, 255 | ++-------------------------------+--------------------------------------+---------------------------------+--------------------------------+--------------------------------+ +| maroon = 128, 0, 0 | mediumaquamarine = 102, 205, 170 | mediumblue = 0, 0, 205 | mediumorchid = 186, 85, 211 | mediumpurple = 147, 112, 219 | ++-------------------------------+--------------------------------------+---------------------------------+--------------------------------+--------------------------------+ +| mediumseagreen = 60, 179, 113 | mediumslateblue = 123, 104, 238 | mediumspringgreen = 0, 250, 154 | mediumturquoise = 72, 209, 204 | mediumvioletred = 199, 21, 133 | ++-------------------------------+--------------------------------------+---------------------------------+--------------------------------+--------------------------------+ +| midnightblue = 25, 25, 112 | mintcream = 245, 255, 250 | mistyrose = 255, 228, 225 | moccasin = 255, 228, 181 | navajowhite = 255, 222, 173 | ++-------------------------------+--------------------------------------+---------------------------------+--------------------------------+--------------------------------+ +| navy = 0, 0, 128 | oldlace = 253, 245, 230 | olive = 128, 128, 0 | olivedrab = 107, 142, 35 | orange = 255, 165, 0 | ++-------------------------------+--------------------------------------+---------------------------------+--------------------------------+--------------------------------+ +| orangered = 255, 69, 0 | orchid = 218, 112, 214 | palegoldenrod = 238, 232, 170 | palegreen = 152, 251, 152 | paleturquoise = 175, 238, 238 | ++-------------------------------+--------------------------------------+---------------------------------+--------------------------------+--------------------------------+ +| palevioletred = 219, 112, 147 | papayawhip = 255, 239, 213 | peachpuff = 255, 239, 213 | peru = 205, 133, 63 | pink = 255, 192, 203 | ++-------------------------------+--------------------------------------+---------------------------------+--------------------------------+--------------------------------+ +| plum = 221, 160, 221 | powderblue = 176, 224, 230 | purple = 128, 0, 128 | red = 255, 0, 0 | rosybrown = 188, 143, 143 | ++-------------------------------+--------------------------------------+---------------------------------+--------------------------------+--------------------------------+ +| royalblue = 65, 105, 225 | saddlebrown = 139, 69, 19 | salmon = 250, 128, 114 | sandybrown = 244, 164, 96 | seagreen = 46, 139, 87 | ++-------------------------------+--------------------------------------+---------------------------------+--------------------------------+--------------------------------+ +| seashell = 255, 245, 238 | sienna = 160, 82, 45 | silver = 192, 192, 192 | skyblue = 135, 206, 235 | slateblue = 106, 90, 205 | ++-------------------------------+--------------------------------------+---------------------------------+--------------------------------+--------------------------------+ +| slategray = 112, 128, 144 | snow = 255, 250, 250 | springgreen = 0, 255, 127 | steelblue = 70, 130, 180 | tan = 210, 180, 140 | ++-------------------------------+--------------------------------------+---------------------------------+--------------------------------+--------------------------------+ +| teal = 0, 128, 128 | thistle = 216, 191, 216 | tomato = 253, 99, 71 | turquoise = 64, 224, 208 | violet = 238, 130, 238 | ++-------------------------------+--------------------------------------+---------------------------------+--------------------------------+--------------------------------+ +| wheat = 245, 222, 179 | white = 255, 255, 255 | whitesmoke = 245, 245, 245 | yellow = 255, 255, 0 | yellowgreen = 154, 205, 50 | ++-------------------------------+--------------------------------------+---------------------------------+--------------------------------+--------------------------------+ diff --git a/doc/src/dump_modify.rst b/doc/src/dump_modify.rst index 5fea976e70..56fb593f2e 100644 --- a/doc/src/dump_modify.rst +++ b/doc/src/dump_modify.rst @@ -12,8 +12,9 @@ Syntax * dump-ID = ID of dump to modify * one or more keyword/value pairs may be appended + * these keywords apply to various dump styles -* keyword = *append* or *at* or *buffer* or *delay* or *element* or *every* or *fileper* or *first* or *flush* or *format* or *image* or *label* or *maxfiles* or *nfile* or *pad* or *pbc* or *precision* or *region* or *refresh* or *scale* or *sfactor* or *sort* or *tfactor* or *thermo* or *thresh* or *time* or *units* or *unwrap* +* keyword = *append* or *at* or *buffer* or *delay* or *element* or *every* or *fileper* or *first* or *flush* or *format* or *header* or *image* or *label* or *maxfiles* or *nfile* or *pad* or *pbc* or *precision* or *region* or *refresh* or *scale* or *sfactor* or *sort* or *tfactor* or *thermo* or *thresh* or *time* or *units* or *unwrap* .. parsed-literal:: @@ -35,6 +36,9 @@ Syntax *format* args = *line* string, *int* string, *float* string, M string, or *none* string = C-style format string M = integer from 1 to N, where N = # of per-atom quantities being output + *header* arg = *yes* or *no* + *yes* to write the header + *no* to not write the header *image* arg = *yes* or *no* *label* arg = string string = character string (e.g. BONDS) to use in header of dump local file @@ -66,56 +70,11 @@ Syntax *unwrap* arg = *yes* or *no* * these keywords apply only to the *image* and *movie* :doc:`styles ` -* keyword = *acolor* or *adiam* or *amap* or *backcolor* or *bcolor* or *bdiam* or *boxcolor* or *color* or *bitrate* or *framerate* or *header* +* keyword = *acolor* or *adiam* or *amap* or *backcolor* or *bcolor* or *bdiam* or *boxcolor* or *color* or *bitrate* or *framerate* .. parsed-literal:: - *acolor* args = type color - type = atom type or range of types (see below) - color = name of color or color1/color2/... - *adiam* args = type diam - type = atom type or range of types (see below) - diam = diameter of atoms of that type (distance units) - *amap* args = lo hi style delta N entry1 entry2 ... entryN - lo = number or *min* = lower bound of range of color map - hi = number or *max* = upper bound of range of color map - style = 2 letters = "c" or "d" or "s" plus "a" or "f" - "c" for continuous - "d" for discrete - "s" for sequential - "a" for absolute - "f" for fractional - delta = binsize (only used for style "s", otherwise ignored) - binsize = range is divided into bins of this width - N = # of subsequent entries - entry = value color (for continuous style) - value = number or *min* or *max* = single value within range - color = name of color used for that value - entry = lo hi color (for discrete style) - lo/hi = number or *min* or *max* = lower/upper bound of subset of range - color = name of color used for that subset of values - entry = color (for sequential style) - color = name of color used for a bin of values - *backcolor* arg = color - color = name of color for background - *bcolor* args = type color - type = bond type or range of types (see below) - color = name of color or color1/color2/... - *bdiam* args = type diam - type = bond type or range of types (see below) - diam = diameter of bonds of that type (distance units) - *boxcolor* arg = color - color = name of color for simulation box lines and processor sub-domain lines - *color* args = name R G B - name = name of color - R,G,B = red/green/blue numeric values from 0.0 to 1.0 - *bitrate* arg = rate - rate = target bitrate for movie in kbps - *framerate* arg = fps - fps = frames per second for movie - *header* arg = *yes* or *no* - *yes* to write the header - *no* to not write the header + see the :doc:`dump image ` doc page for details * these keywords apply only to the */gz* and */zstd* dump styles * keyword = *compression_level* @@ -126,7 +85,7 @@ Syntax level = integer specifying the compression level that should be used (see below for supported levels) * these keywords apply only to the */zstd* dump styles -* keyword = *compression_level* +* keyword = *checksum* .. parsed-literal:: @@ -144,7 +103,6 @@ Examples dump_modify xtcdump precision 10000 sfactor 0.1 dump_modify 1 every 1000 nfile 20 dump_modify 1 every v_myVar - dump_modify 1 amap min max cf 0.0 3 min green 0.5 yellow max blue boxcolor red Description """"""""""" @@ -163,8 +121,9 @@ which allow for use of MPI-IO. ---------- -These keywords apply to various dump styles, including the :doc:`dump image ` and :doc:`dump movie ` styles. The -description gives details. +Unless otherwise noted, the following keywords apply to all the +various dump styles, including the :doc:`dump image ` and +:doc:`dump movie ` styles. ---------- @@ -380,6 +339,13 @@ The *fileper* keyword is documented below with the *nfile* keyword. ---------- +The *header* keyword toggles whether the dump file will include a header. +Excluding a header will reduce the size of the dump file for fixes such as +:doc:`fix pair/tracker ` which do not require the information +typically written to the header. + +---------- + The *image* keyword applies only to the dump *atom* style. If the image value is *yes*, 3 flags are appended to each atom's coords which are the absolute box image of the atom in each dimension. For @@ -715,297 +681,27 @@ box size stored with the snapshot. ---------- -These keywords apply only to the :doc:`dump image ` and -:doc:`dump movie ` styles. Any keyword that affects an -image, also affects a movie, since the movie is simply a collection of -images. Some of the keywords only affect the :doc:`dump movie ` style. The descriptions give details. +The COMPRESS package offers both GZ and Zstd compression variants of +styles atom, custom, local, cfg, and xyz. When using these styles the +compression level can be controlled by the :code:`compression_level` +keyword. File names with these styles have to end in either +:code:`.gz` or :code:`.zst`. ----------- - -The *acolor* keyword can be used with the :doc:`dump image ` -command, when its atom color setting is *type*, to set the color that -atoms of each type will be drawn in the image. - -The specified *type* should be an integer from 1 to Ntypes = the -number of atom types. A wildcard asterisk can be used in place of or -in conjunction with the *type* argument to specify a range of atom -types. This takes the form "\*" or "\*n" or "n\*" or "m\*n". If N = the -number of atom types, then an asterisk with no numeric values means -all types from 1 to N. A leading asterisk means all types from 1 to n -(inclusive). A trailing asterisk means all types from n to N -(inclusive). A middle asterisk means all types from m to n -(inclusive). - -The specified *color* can be a single color which is any of the 140 -pre-defined colors (see below) or a color name defined by the -dump_modify color option. Or it can be two or more colors separated -by a "/" character, e.g. red/green/blue. In the former case, that -color is assigned to all the specified atom types. In the latter -case, the list of colors are assigned in a round-robin fashion to each -of the specified atom types. - ----------- - -The *adiam* keyword can be used with the :doc:`dump image ` -command, when its atom diameter setting is *type*, to set the size -that atoms of each type will be drawn in the image. The specified -*type* should be an integer from 1 to Ntypes. As with the *acolor* -keyword, a wildcard asterisk can be used as part of the *type* -argument to specify a range of atom types. The specified *diam* is -the size in whatever distance :doc:`units ` the input script is -using, e.g. Angstroms. - ----------- - -The *amap* keyword can be used with the :doc:`dump image ` -command, with its *atom* keyword, when its atom setting is an -atom-attribute, to setup a color map. The color map is used to assign -a specific RGB (red/green/blue) color value to an individual atom when -it is drawn, based on the atom's attribute, which is a numeric value, -e.g. its x-component of velocity if the atom-attribute "vx" was -specified. - -The basic idea of a color map is that the atom-attribute will be -within a range of values, and that range is associated with a series -of colors (e.g. red, blue, green). An atom's specific value (vx = --3.2) can then mapped to the series of colors (e.g. halfway between -red and blue), and a specific color is determined via an interpolation -procedure. - -There are many possible options for the color map, enabled by the -*amap* keyword. Here are the details. - -The *lo* and *hi* settings determine the range of values allowed for -the atom attribute. If numeric values are used for *lo* and/or *hi*, -then values that are lower/higher than that value are set to the -value. I.e. the range is static. If *lo* is specified as *min* or -*hi* as *max* then the range is dynamic, and the lower and/or -upper bound will be calculated each time an image is drawn, based -on the set of atoms being visualized. - -The *style* setting is two letters, such as "ca". The first letter is -either "c" for continuous, "d" for discrete, or "s" for sequential. -The second letter is either "a" for absolute, or "f" for fractional. - -A continuous color map is one in which the color changes continuously -from value to value within the range. A discrete color map is one in -which discrete colors are assigned to sub-ranges of values within the -range. A sequential color map is one in which discrete colors are -assigned to a sequence of sub-ranges of values covering the entire -range. - -An absolute color map is one in which the values to which colors are -assigned are specified explicitly as values within the range. A -fractional color map is one in which the values to which colors are -assigned are specified as a fractional portion of the range. For -example if the range is from -10.0 to 10.0, and the color red is to be -assigned to atoms with a value of 5.0, then for an absolute color map -the number 5.0 would be used. But for a fractional map, the number -0.75 would be used since 5.0 is 3/4 of the way from -10.0 to 10.0. - -The *delta* setting must be specified for all styles, but is only used -for the sequential style; otherwise the value is ignored. It -specifies the bin size to use within the range for assigning -consecutive colors to. For example, if the range is from -10.0 to -10.0 and a *delta* of 1.0 is used, then 20 colors will be assigned to -the range. The first will be from -10.0 <= color1 < -9.0, then second -from -9.0 <= color2 < -8.0, etc. - -The *N* setting is how many entries follow. The format of the entries -depends on whether the color map style is continuous, discrete or -sequential. In all cases the *color* setting can be any of the 140 -pre-defined colors (see below) or a color name defined by the -dump_modify color option. - -For continuous color maps, each entry has a *value* and a *color*\ . -The *value* is either a number within the range of values or *min* or -*max*\ . The *value* of the first entry must be *min* and the *value* -of the last entry must be *max*\ . Any entries in between must have -increasing values. Note that numeric values can be specified either -as absolute numbers or as fractions (0.0 to 1.0) of the range, -depending on the "a" or "f" in the style setting for the color map. - -Here is how the entries are used to determine the color of an -individual atom, given the value X of its atom attribute. X will fall -between 2 of the entry values. The color of the atom is linearly -interpolated (in each of the RGB values) between the 2 colors -associated with those entries. For example, if X = -5.0 and the 2 -surrounding entries are "red" at -10.0 and "blue" at 0.0, then the -atom's color will be halfway between "red" and "blue", which happens -to be "purple". - -For discrete color maps, each entry has a *lo* and *hi* value and a -*color*\ . The *lo* and *hi* settings are either numbers within the -range of values or *lo* can be *min* or *hi* can be *max*\ . The *lo* -and *hi* settings of the last entry must be *min* and *max*\ . Other -entries can have any *lo* and *hi* values and the sub-ranges of -different values can overlap. Note that numeric *lo* and *hi* values -can be specified either as absolute numbers or as fractions (0.0 to -1.0) of the range, depending on the "a" or "f" in the style setting -for the color map. - -Here is how the entries are used to determine the color of an -individual atom, given the value X of its atom attribute. The entries -are scanned from first to last. The first time that *lo* <= X <= -*hi*, X is assigned the color associated with that entry. You can -think of the last entry as assigning a default color (since it will -always be matched by X), and the earlier entries as colors that -override the default. Also note that no interpolation of a color RGB -is done. All atoms will be drawn with one of the colors in the list -of entries. - -For sequential color maps, each entry has only a *color*\ . Here is how -the entries are used to determine the color of an individual atom, -given the value X of its atom attribute. The range is partitioned -into N bins of width *binsize*\ . Thus X will fall in a specific bin -from 1 to N, say the Mth bin. If it falls on a boundary between 2 -bins, it is considered to be in the higher of the 2 bins. Each bin is -assigned a color from the E entries. If E < N, then the colors are -repeated. For example if 2 entries with colors red and green are -specified, then the odd numbered bins will be red and the even bins -green. The color of the atom is the color of its bin. Note that the -sequential color map is really a shorthand way of defining a discrete -color map without having to specify where all the bin boundaries are. - -Here is an example of using a sequential color map to color all the -atoms in individual molecules with a different color. See the -examples/pour/in.pour.2d.molecule input script for an example of how -this is used. - -.. code-block:: LAMMPS - - variable colors string & - "red green blue yellow white & - purple pink orange lime gray" - variable mol atom mol%10 - dump 1 all image 250 image.*.jpg v_mol type & - zoom 1.6 adiam 1.5 - dump_modify 1 pad 5 amap 0 10 sa 1 10 ${colors} - -In this case, 10 colors are defined, and molecule IDs are -mapped to one of the colors, even if there are 1000s of molecules. - ----------- - -The *backcolor* sets the background color of the images. The color -name can be any of the 140 pre-defined colors (see below) or a color -name defined by the dump_modify color option. - ----------- - -The *bcolor* keyword can be used with the :doc:`dump image ` -command, with its *bond* keyword, when its color setting is *type*, to -set the color that bonds of each type will be drawn in the image. - -The specified *type* should be an integer from 1 to Nbondtypes = the -number of bond types. A wildcard asterisk can be used in place of or -in conjunction with the *type* argument to specify a range of bond -types. This takes the form "\*" or "\*n" or "n\*" or "m\*n". If N = the -number of bond types, then an asterisk with no numeric values means -all types from 1 to N. A leading asterisk means all types from 1 to n -(inclusive). A trailing asterisk means all types from n to N -(inclusive). A middle asterisk means all types from m to n -(inclusive). - -The specified *color* can be a single color which is any of the 140 -pre-defined colors (see below) or a color name defined by the -dump_modify color option. Or it can be two or more colors separated -by a "/" character, e.g. red/green/blue. In the former case, that -color is assigned to all the specified bond types. In the latter -case, the list of colors are assigned in a round-robin fashion to each -of the specified bond types. - ----------- - -The *bdiam* keyword can be used with the :doc:`dump image ` -command, with its *bond* keyword, when its diam setting is *type*, to -set the diameter that bonds of each type will be drawn in the image. -The specified *type* should be an integer from 1 to Nbondtypes. As -with the *bcolor* keyword, a wildcard asterisk can be used as part of -the *type* argument to specify a range of bond types. The specified -*diam* is the size in whatever distance :doc:`units ` you are -using, e.g. Angstroms. - ----------- - -The *bitrate* keyword can be used with the :doc:`dump movie ` command to define the size of the resulting -movie file and its quality via setting how many kbits per second are -to be used for the movie file. Higher bitrates require less -compression and will result in higher quality movies. The quality is -also determined by the compression format and encoder. The default -setting is 2000 kbit/s, which will result in average quality with -older compression formats. - -.. note:: - - Not all movie file formats supported by dump movie allow the - bitrate to be set. If not, the setting is silently ignored. - ----------- - -The *boxcolor* keyword sets the color of the simulation box drawn -around the atoms in each image as well as the color of processor -sub-domain boundaries. See the "dump image box" command for how to -specify that a box be drawn via the *box* keyword, and the sub-domain -boundaries via the *subbox* keyword. The color name can be any of the -140 pre-defined colors (see below) or a color name defined by the -dump_modify color option. - ----------- - -The *color* keyword allows definition of a new color name, in addition -to the 140-predefined colors (see below), and associates 3 -red/green/blue RGB values with that color name. The color name can -then be used with any other dump_modify keyword that takes a color -name as a value. The RGB values should each be floating point values -between 0.0 and 1.0 inclusive. - -When a color name is converted to RGB values, the user-defined color -names are searched first, then the 140 pre-defined color names. This -means you can also use the *color* keyword to overwrite one of the -pre-defined color names with new RBG values. - ----------- - -The *framerate* keyword can be used with the :doc:`dump movie ` command to define the duration of the resulting -movie file. Movie files written by the dump *movie* command have a -default frame rate of 24 frames per second and the images generated -will be converted at that rate. Thus a sequence of 1000 dump images -will result in a movie of about 42 seconds. To make a movie run -longer you can either generate images more frequently or lower the -frame rate. To speed a movie up, you can do the inverse. Using a -frame rate higher than 24 is not recommended, as it will result in -simply dropping the rendered images. It is more efficient to dump -images less frequently. - ----------- - -The *header* keyword toggles whether the dump file will include a header. -Excluding a header will reduce the size of the dump file for fixes such as -:doc:`fix pair/tracker ` which do not require the information -typically written to the header. - ----------- - -The COMPRESS package offers both GZ and Zstd compression variants of styles -atom, custom, local, cfg, and xyz. When using these styles the compression -level can be controlled by the :code:`compression_level` parameter. File names -with these styles have to end in either :code:`.gz` or :code:`.zst`. - -GZ supports compression levels from -1 (default), 0 (no compression), and 1 to -9. 9 being the best compression. The COMPRESS :code:`/gz` styles use 9 as -default compression level. +GZ supports compression levels from -1 (default), 0 (no compression), +and 1 to +9. 9 being the best compression. The COMPRESS :code:`/gz` styles use 9 +as default compression level. Zstd offers a wider range of compression levels, including negative -levels that sacrifice compression for performance. 0 is the -default, positive levels are 1 to 22, with 22 being the most expensive +levels that sacrifice compression for performance. 0 is the default, +positive levels are 1 to 22, with 22 being the most expensive compression. Zstd promises higher compression/decompression speeds for similar compression ratios. For more details see `http://facebook.github.io/zstd/`. -In addition, Zstd compressed files can have a checksum of the entire -contents. The Zstd enabled dump styles enable this feature by default and it -can be disabled with the :code:`checksum` parameter. +In addition, Zstd compressed files can include a checksum of the +entire contents. The Zstd enabled dump styles enable this feature by +default and it can be disabled with the :code:`checksum` keyword. ---------- @@ -1046,100 +742,7 @@ The option defaults are * units = no * unwrap = no -* acolor = \* red/green/blue/yellow/aqua/cyan -* adiam = \* 1.0 -* amap = min max cf 0.0 2 min blue max red -* backcolor = black -* bcolor = \* red/green/blue/yellow/aqua/cyan -* bdiam = \* 0.5 -* bitrate = 2000 -* boxcolor = yellow -* color = 140 color names are pre-defined as listed below -* framerate = 24 - * compression_level = 9 (gz variants) * compression_level = 0 (zstd variants) * checksum = yes (zstd variants) ----------- - -These are the standard 109 element names that LAMMPS pre-defines for -use with the :doc:`dump image ` and dump_modify commands. - -* 1-10 = "H", "He", "Li", "Be", "B", "C", "N", "O", "F", "Ne" -* 11-20 = "Na", "Mg", "Al", "Si", "P", "S", "Cl", "Ar", "K", "Ca" -* 21-30 = "Sc", "Ti", "V", "Cr", "Mn", "Fe", "Co", "Ni", "Cu", "Zn" -* 31-40 = "Ga", "Ge", "As", "Se", "Br", "Kr", "Rb", "Sr", "Y", "Zr" -* 41-50 = "Nb", "Mo", "Tc", "Ru", "Rh", "Pd", "Ag", "Cd", "In", "Sn" -* 51-60 = "Sb", "Te", "I", "Xe", "Cs", "Ba", "La", "Ce", "Pr", "Nd" -* 61-70 = "Pm", "Sm", "Eu", "Gd", "Tb", "Dy", "Ho", "Er", "Tm", "Yb" -* 71-80 = "Lu", "Hf", "Ta", "W", "Re", "Os", "Ir", "Pt", "Au", "Hg" -* 81-90 = "Tl", "Pb", "Bi", "Po", "At", "Rn", "Fr", "Ra", "Ac", "Th" -* 91-100 = "Pa", "U", "Np", "Pu", "Am", "Cm", "Bk", "Cf", "Es", "Fm" -* 101-109 = "Md", "No", "Lr", "Rf", "Db", "Sg", "Bh", "Hs", "Mt" - ----------- - -These are the 140 colors that LAMMPS pre-defines for use with the -:doc:`dump image ` and dump_modify commands. Additional -colors can be defined with the dump_modify color command. The 3 -numbers listed for each name are the RGB (red/green/blue) values. -Divide each value by 255 to get the equivalent 0.0 to 1.0 value. - -+-------------------------------+--------------------------------------+---------------------------------+--------------------------------+--------------------------------+ -| aliceblue = 240, 248, 255 | antiquewhite = 250, 235, 215 | aqua = 0, 255, 255 | aquamarine = 127, 255, 212 | azure = 240, 255, 255 | -+-------------------------------+--------------------------------------+---------------------------------+--------------------------------+--------------------------------+ -| beige = 245, 245, 220 | bisque = 255, 228, 196 | black = 0, 0, 0 | blanchedalmond = 255, 255, 205 | blue = 0, 0, 255 | -+-------------------------------+--------------------------------------+---------------------------------+--------------------------------+--------------------------------+ -| blueviolet = 138, 43, 226 | brown = 165, 42, 42 | burlywood = 222, 184, 135 | cadetblue = 95, 158, 160 | chartreuse = 127, 255, 0 | -+-------------------------------+--------------------------------------+---------------------------------+--------------------------------+--------------------------------+ -| chocolate = 210, 105, 30 | coral = 255, 127, 80 | cornflowerblue = 100, 149, 237 | cornsilk = 255, 248, 220 | crimson = 220, 20, 60 | -+-------------------------------+--------------------------------------+---------------------------------+--------------------------------+--------------------------------+ -| cyan = 0, 255, 255 | darkblue = 0, 0, 139 | darkcyan = 0, 139, 139 | darkgoldenrod = 184, 134, 11 | darkgray = 169, 169, 169 | -+-------------------------------+--------------------------------------+---------------------------------+--------------------------------+--------------------------------+ -| darkgreen = 0, 100, 0 | darkkhaki = 189, 183, 107 | darkmagenta = 139, 0, 139 | darkolivegreen = 85, 107, 47 | darkorange = 255, 140, 0 | -+-------------------------------+--------------------------------------+---------------------------------+--------------------------------+--------------------------------+ -| darkorchid = 153, 50, 204 | darkred = 139, 0, 0 | darksalmon = 233, 150, 122 | darkseagreen = 143, 188, 143 | darkslateblue = 72, 61, 139 | -+-------------------------------+--------------------------------------+---------------------------------+--------------------------------+--------------------------------+ -| darkslategray = 47, 79, 79 | darkturquoise = 0, 206, 209 | darkviolet = 148, 0, 211 | deeppink = 255, 20, 147 | deepskyblue = 0, 191, 255 | -+-------------------------------+--------------------------------------+---------------------------------+--------------------------------+--------------------------------+ -| dimgray = 105, 105, 105 | dodgerblue = 30, 144, 255 | firebrick = 178, 34, 34 | floralwhite = 255, 250, 240 | forestgreen = 34, 139, 34 | -+-------------------------------+--------------------------------------+---------------------------------+--------------------------------+--------------------------------+ -| fuchsia = 255, 0, 255 | gainsboro = 220, 220, 220 | ghostwhite = 248, 248, 255 | gold = 255, 215, 0 | goldenrod = 218, 165, 32 | -+-------------------------------+--------------------------------------+---------------------------------+--------------------------------+--------------------------------+ -| gray = 128, 128, 128 | green = 0, 128, 0 | greenyellow = 173, 255, 47 | honeydew = 240, 255, 240 | hotpink = 255, 105, 180 | -+-------------------------------+--------------------------------------+---------------------------------+--------------------------------+--------------------------------+ -| indianred = 205, 92, 92 | indigo = 75, 0, 130 | ivory = 255, 240, 240 | khaki = 240, 230, 140 | lavender = 230, 230, 250 | -+-------------------------------+--------------------------------------+---------------------------------+--------------------------------+--------------------------------+ -| lavenderblush = 255, 240, 245 | lawngreen = 124, 252, 0 | lemonchiffon = 255, 250, 205 | lightblue = 173, 216, 230 | lightcoral = 240, 128, 128 | -+-------------------------------+--------------------------------------+---------------------------------+--------------------------------+--------------------------------+ -| lightcyan = 224, 255, 255 | lightgoldenrodyellow = 250, 250, 210 | lightgreen = 144, 238, 144 | lightgrey = 211, 211, 211 | lightpink = 255, 182, 193 | -+-------------------------------+--------------------------------------+---------------------------------+--------------------------------+--------------------------------+ -| lightsalmon = 255, 160, 122 | lightseagreen = 32, 178, 170 | lightskyblue = 135, 206, 250 | lightslategray = 119, 136, 153 | lightsteelblue = 176, 196, 222 | -+-------------------------------+--------------------------------------+---------------------------------+--------------------------------+--------------------------------+ -| lightyellow = 255, 255, 224 | lime = 0, 255, 0 | limegreen = 50, 205, 50 | linen = 250, 240, 230 | magenta = 255, 0, 255 | -+-------------------------------+--------------------------------------+---------------------------------+--------------------------------+--------------------------------+ -| maroon = 128, 0, 0 | mediumaquamarine = 102, 205, 170 | mediumblue = 0, 0, 205 | mediumorchid = 186, 85, 211 | mediumpurple = 147, 112, 219 | -+-------------------------------+--------------------------------------+---------------------------------+--------------------------------+--------------------------------+ -| mediumseagreen = 60, 179, 113 | mediumslateblue = 123, 104, 238 | mediumspringgreen = 0, 250, 154 | mediumturquoise = 72, 209, 204 | mediumvioletred = 199, 21, 133 | -+-------------------------------+--------------------------------------+---------------------------------+--------------------------------+--------------------------------+ -| midnightblue = 25, 25, 112 | mintcream = 245, 255, 250 | mistyrose = 255, 228, 225 | moccasin = 255, 228, 181 | navajowhite = 255, 222, 173 | -+-------------------------------+--------------------------------------+---------------------------------+--------------------------------+--------------------------------+ -| navy = 0, 0, 128 | oldlace = 253, 245, 230 | olive = 128, 128, 0 | olivedrab = 107, 142, 35 | orange = 255, 165, 0 | -+-------------------------------+--------------------------------------+---------------------------------+--------------------------------+--------------------------------+ -| orangered = 255, 69, 0 | orchid = 218, 112, 214 | palegoldenrod = 238, 232, 170 | palegreen = 152, 251, 152 | paleturquoise = 175, 238, 238 | -+-------------------------------+--------------------------------------+---------------------------------+--------------------------------+--------------------------------+ -| palevioletred = 219, 112, 147 | papayawhip = 255, 239, 213 | peachpuff = 255, 239, 213 | peru = 205, 133, 63 | pink = 255, 192, 203 | -+-------------------------------+--------------------------------------+---------------------------------+--------------------------------+--------------------------------+ -| plum = 221, 160, 221 | powderblue = 176, 224, 230 | purple = 128, 0, 128 | red = 255, 0, 0 | rosybrown = 188, 143, 143 | -+-------------------------------+--------------------------------------+---------------------------------+--------------------------------+--------------------------------+ -| royalblue = 65, 105, 225 | saddlebrown = 139, 69, 19 | salmon = 250, 128, 114 | sandybrown = 244, 164, 96 | seagreen = 46, 139, 87 | -+-------------------------------+--------------------------------------+---------------------------------+--------------------------------+--------------------------------+ -| seashell = 255, 245, 238 | sienna = 160, 82, 45 | silver = 192, 192, 192 | skyblue = 135, 206, 235 | slateblue = 106, 90, 205 | -+-------------------------------+--------------------------------------+---------------------------------+--------------------------------+--------------------------------+ -| slategray = 112, 128, 144 | snow = 255, 250, 250 | springgreen = 0, 255, 127 | steelblue = 70, 130, 180 | tan = 210, 180, 140 | -+-------------------------------+--------------------------------------+---------------------------------+--------------------------------+--------------------------------+ -| teal = 0, 128, 128 | thistle = 216, 191, 216 | tomato = 253, 99, 71 | turquoise = 64, 224, 208 | violet = 238, 130, 238 | -+-------------------------------+--------------------------------------+---------------------------------+--------------------------------+--------------------------------+ -| wheat = 245, 222, 179 | white = 255, 255, 255 | whitesmoke = 245, 245, 245 | yellow = 255, 255, 0 | yellowgreen = 154, 205, 50 | -+-------------------------------+--------------------------------------+---------------------------------+--------------------------------+--------------------------------+ From dfc68e3c752fbbe76c52be60ae313cf0886055b9 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Tue, 2 Nov 2021 08:49:34 -0400 Subject: [PATCH 310/372] add header for dump_modify command summary --- doc/src/dump_image.rst | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/doc/src/dump_image.rst b/doc/src/dump_image.rst index 9738b48ff4..521412f0eb 100644 --- a/doc/src/dump_image.rst +++ b/doc/src/dump_image.rst @@ -79,6 +79,12 @@ Syntax seed = random # seed (positive integer) dfactor = strength of shading from 0.0 to 1.0 +dump_modify command +=================== + +Syntax +"""""" + .. parsed-literal:: dump_modify dump-ID keyword values ... From a58242f24ba90b81d8bd1a2ca0bbd2ddf2b733b8 Mon Sep 17 00:00:00 2001 From: Steve Plimpton Date: Tue, 2 Nov 2021 09:27:27 -0600 Subject: [PATCH 311/372] couple last tweaks to make the pages easier to navigate --- doc/src/dump_image.rst | 8 +++++--- doc/src/dump_modify.rst | 3 +++ 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/doc/src/dump_image.rst b/doc/src/dump_image.rst index 521412f0eb..4932775f02 100644 --- a/doc/src/dump_image.rst +++ b/doc/src/dump_image.rst @@ -6,6 +6,9 @@ dump image command dump movie command ================== +dump_modify command for image/movie options +=========================================== + Syntax """""" @@ -89,10 +92,9 @@ Syntax dump_modify dump-ID keyword values ... -* these keywords apply only to the *image* and *movie* styles +* these keywords apply only to the *image* and *movie* styles and are documented on this page * keyword = *acolor* or *adiam* or *amap* or *backcolor* or *bcolor* or *bdiam* or *boxcolor* or *color* or *bitrate* or *framerate* -* these keywords are documented on this page -* see the :doc:`dump modify ` doc page for other, more general options +* see the :doc:`dump modify ` doc page for more general keywords .. parsed-literal:: diff --git a/doc/src/dump_modify.rst b/doc/src/dump_modify.rst index 56fb593f2e..33f7141762 100644 --- a/doc/src/dump_modify.rst +++ b/doc/src/dump_modify.rst @@ -3,6 +3,9 @@ dump_modify command =================== +:doc:`dump_modify ` command for image/movie options +=============================================================== + Syntax """""" From 628091c51079e6c2198b8808692e23dd6dd780e5 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Tue, 2 Nov 2021 13:33:08 -0400 Subject: [PATCH 312/372] add reference instead of replicating headline --- doc/src/dump_image.rst | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/doc/src/dump_image.rst b/doc/src/dump_image.rst index 4932775f02..35a0aa415a 100644 --- a/doc/src/dump_image.rst +++ b/doc/src/dump_image.rst @@ -6,8 +6,7 @@ dump image command dump movie command ================== -dump_modify command for image/movie options -=========================================== +(see below for image/move specific :ref:`dump_modify options `) Syntax """""" @@ -82,8 +81,11 @@ Syntax seed = random # seed (positive integer) dfactor = strength of shading from 0.0 to 1.0 -dump_modify command -=================== + +.. _dump_modify_image: + +dump_modify options for dump image/movie +======================================== Syntax """""" From 59c060cc0ed7efbd4e34916b96a682eed34891a1 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Tue, 2 Nov 2021 14:14:08 -0400 Subject: [PATCH 313/372] switch to https protocol for cloning MathJax https://github.blog/2021-09-01-improving-git-protocol-security-github/ --- doc/Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/Makefile b/doc/Makefile index d61f844a1b..a082018dfb 100644 --- a/doc/Makefile +++ b/doc/Makefile @@ -230,7 +230,7 @@ $(VENV): ) $(MATHJAX): - @git clone -b 3.2.0 -c advice.detachedHead=0 --depth 1 git://github.com/mathjax/MathJax.git $@ + @git clone -b 3.2.0 -c advice.detachedHead=0 --depth 1 https://github.com/mathjax/MathJax.git $@ $(ANCHORCHECK): $(VENV) @( \ From 175f967051448841e43ca426e927d9d7d26afa55 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Tue, 2 Nov 2021 14:25:57 -0400 Subject: [PATCH 314/372] change references to git:// protocol for accessing github to https:// --- doc/src/Install_git.rst | 6 +++--- doc/src/kspace_style.rst | 2 +- doc/utils/requirements.txt | 2 +- tools/offline/scripts/use_git_cache.sh | 6 +++--- tools/offline/use_caches.sh | 2 +- tools/singularity/README.md | 2 +- 6 files changed, 10 insertions(+), 10 deletions(-) diff --git a/doc/src/Install_git.rst b/doc/src/Install_git.rst index 4e7db77873..7ad6ca18c1 100644 --- a/doc/src/Install_git.rst +++ b/doc/src/Install_git.rst @@ -156,9 +156,9 @@ changed. How to do this depends on the build system you are using. .. admonition:: Git protocols :class: note - The servers at github.com support the "git://" and "https://" access - protocols for anonymous, read-only access. If you have a suitably - configured GitHub account, you may also use SSH protocol with the + The servers at github.com support the "https://" access protocol for + anonymous, read-only access. If you have a suitably configured GitHub + account, you may also use SSH protocol with the URL "git@github.com:lammps/lammps.git". The LAMMPS GitHub project is currently managed by Axel Kohlmeyer diff --git a/doc/src/kspace_style.rst b/doc/src/kspace_style.rst index 1dec62bb43..b6287650b9 100644 --- a/doc/src/kspace_style.rst +++ b/doc/src/kspace_style.rst @@ -310,7 +310,7 @@ Forschungszentrum Juelich. The library is available for download at "http://scafacos.de" or can be cloned from the git-repository -"git://github.com/scafacos/scafacos.git". +"https://github.com/scafacos/scafacos.git". In order to use this KSpace style, you must download and build the ScaFaCoS library, then build LAMMPS with the SCAFACOS package diff --git a/doc/utils/requirements.txt b/doc/utils/requirements.txt index 9b8e106875..9797d4d119 100644 --- a/doc/utils/requirements.txt +++ b/doc/utils/requirements.txt @@ -1,6 +1,6 @@ Sphinx sphinxcontrib-spelling -git+git://github.com/akohlmey/sphinx-fortran@parallel-read +git+https://github.com/akohlmey/sphinx-fortran@parallel-read sphinx_tabs breathe Pygments diff --git a/tools/offline/scripts/use_git_cache.sh b/tools/offline/scripts/use_git_cache.sh index 46e42ca7bd..e65c06c8ed 100644 --- a/tools/offline/scripts/use_git_cache.sh +++ b/tools/offline/scripts/use_git_cache.sh @@ -8,12 +8,12 @@ fi export GIT_CONFIG_COUNT=1 export GIT_CONFIG_KEY_0="url.$GITHUB_PROXY_DIR/.insteadOf" -export GIT_CONFIG_VALUE_0=git://github.com/ +export GIT_CONFIG_VALUE_0=https://github.com/ -echo "Redirecting git://github.com urls to local cache..." +echo "Redirecting https://github.com urls to local cache..." function deactivate_git_cache { - echo "Removing git://github.com redirect..." + echo "Removing https://github.com redirect..." unset GIT_CONFIG_COUNT unset GIT_CONFIG_KEY_0 unset GIT_CONFIG_VALUE_0 diff --git a/tools/offline/use_caches.sh b/tools/offline/use_caches.sh index 71d955fe4c..5db78fd765 100644 --- a/tools/offline/use_caches.sh +++ b/tools/offline/use_caches.sh @@ -63,7 +63,7 @@ echo "or" echo echo "-D LAMMPS_DOWNLOADS_URL=${HTTP_CACHE_URL} -C \"${LAMMPS_HTTP_CACHE_CONFIG}\"" echo -echo "pip installations and git clones (from git://) are automatically redirected" +echo "pip installations and git clones (from https://) are automatically redirected" echo echo Use 'deactivate_caches' to revert changes echo diff --git a/tools/singularity/README.md b/tools/singularity/README.md index bd13d75ad7..db7aa9e3b0 100644 --- a/tools/singularity/README.md +++ b/tools/singularity/README.md @@ -15,7 +15,7 @@ built CentOS 7.x singularity container. ``` cd some/work/directory -git clone --depth 500 git://github.com/lammps/lammps.git lammps +git clone --depth 500 https://github.com/lammps/lammps.git lammps mkdir build-centos7 cd build-centos7 sudo singularity build centos7.sif ../tools/singularity/centos7.def From 278e531c148238455fea47b2dd221fe6a43fc275 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Tue, 2 Nov 2021 14:33:00 -0400 Subject: [PATCH 315/372] fix typo --- doc/src/dump_image.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/src/dump_image.rst b/doc/src/dump_image.rst index 35a0aa415a..ff9cb4ab14 100644 --- a/doc/src/dump_image.rst +++ b/doc/src/dump_image.rst @@ -6,7 +6,7 @@ dump image command dump movie command ================== -(see below for image/move specific :ref:`dump_modify options `) +(see below for image/movie specific :ref:`dump_modify options `) Syntax """""" From 817e38fe68887eeba76c8d5eb08f1fe4cc8cfde0 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Tue, 2 Nov 2021 14:25:57 -0400 Subject: [PATCH 316/372] change references to git:// protocol for accessing github to https:// --- doc/src/Install_git.rst | 6 +++--- doc/src/kspace_style.rst | 2 +- doc/utils/requirements.txt | 2 +- tools/offline/scripts/use_git_cache.sh | 6 +++--- tools/offline/use_caches.sh | 2 +- tools/singularity/README.md | 2 +- 6 files changed, 10 insertions(+), 10 deletions(-) diff --git a/doc/src/Install_git.rst b/doc/src/Install_git.rst index 4e7db77873..7ad6ca18c1 100644 --- a/doc/src/Install_git.rst +++ b/doc/src/Install_git.rst @@ -156,9 +156,9 @@ changed. How to do this depends on the build system you are using. .. admonition:: Git protocols :class: note - The servers at github.com support the "git://" and "https://" access - protocols for anonymous, read-only access. If you have a suitably - configured GitHub account, you may also use SSH protocol with the + The servers at github.com support the "https://" access protocol for + anonymous, read-only access. If you have a suitably configured GitHub + account, you may also use SSH protocol with the URL "git@github.com:lammps/lammps.git". The LAMMPS GitHub project is currently managed by Axel Kohlmeyer diff --git a/doc/src/kspace_style.rst b/doc/src/kspace_style.rst index 1dec62bb43..b6287650b9 100644 --- a/doc/src/kspace_style.rst +++ b/doc/src/kspace_style.rst @@ -310,7 +310,7 @@ Forschungszentrum Juelich. The library is available for download at "http://scafacos.de" or can be cloned from the git-repository -"git://github.com/scafacos/scafacos.git". +"https://github.com/scafacos/scafacos.git". In order to use this KSpace style, you must download and build the ScaFaCoS library, then build LAMMPS with the SCAFACOS package diff --git a/doc/utils/requirements.txt b/doc/utils/requirements.txt index 9b8e106875..9797d4d119 100644 --- a/doc/utils/requirements.txt +++ b/doc/utils/requirements.txt @@ -1,6 +1,6 @@ Sphinx sphinxcontrib-spelling -git+git://github.com/akohlmey/sphinx-fortran@parallel-read +git+https://github.com/akohlmey/sphinx-fortran@parallel-read sphinx_tabs breathe Pygments diff --git a/tools/offline/scripts/use_git_cache.sh b/tools/offline/scripts/use_git_cache.sh index 46e42ca7bd..e65c06c8ed 100644 --- a/tools/offline/scripts/use_git_cache.sh +++ b/tools/offline/scripts/use_git_cache.sh @@ -8,12 +8,12 @@ fi export GIT_CONFIG_COUNT=1 export GIT_CONFIG_KEY_0="url.$GITHUB_PROXY_DIR/.insteadOf" -export GIT_CONFIG_VALUE_0=git://github.com/ +export GIT_CONFIG_VALUE_0=https://github.com/ -echo "Redirecting git://github.com urls to local cache..." +echo "Redirecting https://github.com urls to local cache..." function deactivate_git_cache { - echo "Removing git://github.com redirect..." + echo "Removing https://github.com redirect..." unset GIT_CONFIG_COUNT unset GIT_CONFIG_KEY_0 unset GIT_CONFIG_VALUE_0 diff --git a/tools/offline/use_caches.sh b/tools/offline/use_caches.sh index 71d955fe4c..5db78fd765 100644 --- a/tools/offline/use_caches.sh +++ b/tools/offline/use_caches.sh @@ -63,7 +63,7 @@ echo "or" echo echo "-D LAMMPS_DOWNLOADS_URL=${HTTP_CACHE_URL} -C \"${LAMMPS_HTTP_CACHE_CONFIG}\"" echo -echo "pip installations and git clones (from git://) are automatically redirected" +echo "pip installations and git clones (from https://) are automatically redirected" echo echo Use 'deactivate_caches' to revert changes echo diff --git a/tools/singularity/README.md b/tools/singularity/README.md index bd13d75ad7..db7aa9e3b0 100644 --- a/tools/singularity/README.md +++ b/tools/singularity/README.md @@ -15,7 +15,7 @@ built CentOS 7.x singularity container. ``` cd some/work/directory -git clone --depth 500 git://github.com/lammps/lammps.git lammps +git clone --depth 500 https://github.com/lammps/lammps.git lammps mkdir build-centos7 cd build-centos7 sudo singularity build centos7.sif ../tools/singularity/centos7.def From 91e6586e0599210bcaeda477262a902b31df7b89 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Tue, 2 Nov 2021 14:35:36 -0400 Subject: [PATCH 317/372] reorder --- doc/src/dump_image.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/src/dump_image.rst b/doc/src/dump_image.rst index ff9cb4ab14..9b8c7febf4 100644 --- a/doc/src/dump_image.rst +++ b/doc/src/dump_image.rst @@ -6,7 +6,7 @@ dump image command dump movie command ================== -(see below for image/movie specific :ref:`dump_modify options `) +(see below for :ref:`dump_modify options ` specific to dump image/movie) Syntax """""" From b044a2f88b9093c91445ae9cef6c3eb15a0c99c6 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Tue, 2 Nov 2021 14:14:08 -0400 Subject: [PATCH 318/372] switch to https protocol for cloning MathJax https://github.blog/2021-09-01-improving-git-protocol-security-github/ --- doc/Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/Makefile b/doc/Makefile index d61f844a1b..a082018dfb 100644 --- a/doc/Makefile +++ b/doc/Makefile @@ -230,7 +230,7 @@ $(VENV): ) $(MATHJAX): - @git clone -b 3.2.0 -c advice.detachedHead=0 --depth 1 git://github.com/mathjax/MathJax.git $@ + @git clone -b 3.2.0 -c advice.detachedHead=0 --depth 1 https://github.com/mathjax/MathJax.git $@ $(ANCHORCHECK): $(VENV) @( \ From a9c6f943e1def3abc01b292ab41abd25ff119445 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Tue, 2 Nov 2021 22:47:26 -0400 Subject: [PATCH 319/372] correct test comparisons --- unittest/commands/test_simple_commands.cpp | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/unittest/commands/test_simple_commands.cpp b/unittest/commands/test_simple_commands.cpp index 4d68b54c21..1844752d33 100644 --- a/unittest/commands/test_simple_commands.cpp +++ b/unittest/commands/test_simple_commands.cpp @@ -431,8 +431,7 @@ TEST_F(SimpleCommandsTest, Plugin) lmp->input->one("plugin unload pair nve2"); text = ::testing::internal::GetCapturedStdout(); if (verbose) std::cout << text; - ASSERT_THAT(text, MatchesRegex(".*Ignoring unload of pair style nve2: " - "not loaded from a plugin.*")); + ASSERT_THAT(text, MatchesRegex(".*Ignoring unload of pair style nve2: not from a plugin.*")); ::testing::internal::CaptureStdout(); lmp->input->one("plugin unload fix nve2"); @@ -444,8 +443,7 @@ TEST_F(SimpleCommandsTest, Plugin) lmp->input->one("plugin unload fix nve"); text = ::testing::internal::GetCapturedStdout(); if (verbose) std::cout << text; - ASSERT_THAT(text, MatchesRegex(".*Ignoring unload of fix style nve: " - "not loaded from a plugin.*")); + ASSERT_THAT(text, MatchesRegex(".*Ignoring unload of fix style nve: not from a plugin.*")); ::testing::internal::CaptureStdout(); lmp->input->one("plugin list"); From 50f39cd752f7469cdbc46849a0aaf8a4dd8abf6f Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Wed, 3 Nov 2021 10:53:10 -0400 Subject: [PATCH 320/372] implement and use a platform neutral abstraction of unsetenv(3) --- doc/src/Developer_platform.rst | 3 +++ src/platform.cpp | 24 +++++++++++++++++++++--- src/platform.h | 7 +++++++ unittest/cplusplus/test_lammps_class.cpp | 6 +----- unittest/utils/test_platform.cpp | 10 +++++++++- 5 files changed, 41 insertions(+), 9 deletions(-) diff --git a/doc/src/Developer_platform.rst b/doc/src/Developer_platform.rst index c9ecd30cec..cdc4bb6770 100644 --- a/doc/src/Developer_platform.rst +++ b/doc/src/Developer_platform.rst @@ -118,6 +118,9 @@ Environment variable functions .. doxygenfunction:: putenv :project: progguide +.. doxygenfunction:: unsetenv + :project: progguide + .. doxygenfunction:: list_pathenv :project: progguide diff --git a/src/platform.cpp b/src/platform.cpp index c701c37a80..708a42be8a 100644 --- a/src/platform.cpp +++ b/src/platform.cpp @@ -446,11 +446,11 @@ int platform::putenv(const std::string &vardef) auto found = vardef.find_first_of('='); #ifdef _WIN32 - // must assign a value to variable with _putenv() + // must assign a value to variable with _putenv_s() if (found == std::string::npos) - return _putenv(utils::strdup(vardef + "=1")); + return _putenv_s(vardef.c_str(), "1"); else - return _putenv(utils::strdup(vardef)); + return _putenv_s(vardef.substr(0, found).c_str(), vardef.substr(found+1).c_str()); #else if (found == std::string::npos) return setenv(vardef.c_str(), "", 1); @@ -460,6 +460,24 @@ int platform::putenv(const std::string &vardef) return -1; } +/* ---------------------------------------------------------------------- + unset environment variable +------------------------------------------------------------------------- */ + +int platform::unsetenv(const std::string &variable) +{ + if (variable.size() == 0) return -1; +#ifdef _WIN32 + // emulate POSIX semantics by returning -1 on trying to unset non-existing variable + const char *ptr = getenv(variable.c_str()); + if (!ptr) return -1; + // empty _putenv_s() definition deletes variable + return _putenv_s(variable.c_str(),""); +#else + return ::unsetenv(variable.c_str()); +#endif +} + /* ---------------------------------------------------------------------- split a "path" environment variable into a list ------------------------------------------------------------------------- */ diff --git a/src/platform.h b/src/platform.h index 95a0c3cc35..c079fd2cd1 100644 --- a/src/platform.h +++ b/src/platform.h @@ -125,6 +125,13 @@ namespace platform { int putenv(const std::string &vardef); + /*! Delete variable from the environment + * + * \param variable variable name + * \return -1 if failure otherwise 0 */ + + int unsetenv(const std::string &variable); + /*! Get list of entries in a path environment variable * * This provides a list of strings of the entries in an environment diff --git a/unittest/cplusplus/test_lammps_class.cpp b/unittest/cplusplus/test_lammps_class.cpp index 663c7358d9..3a1bde51ff 100644 --- a/unittest/cplusplus/test_lammps_class.cpp +++ b/unittest/cplusplus/test_lammps_class.cpp @@ -363,11 +363,7 @@ TEST(LAMMPS_init, NoOpenMP) FILE *fp = fopen("in.lammps_class_noomp", "w"); fputs("\n", fp); fclose(fp); -#if defined(__WIN32) - _putenv("OMP_NUM_THREADS"); -#else - unsetenv("OMP_NUM_THREADS"); -#endif + platform::unsetenv("OMP_NUM_THREADS"); const char *args[] = {"LAMMPS_init", "-in", "in.lammps_class_noomp", "-log", "none", "-nocite"}; char **argv = (char **)args; diff --git a/unittest/utils/test_platform.cpp b/unittest/utils/test_platform.cpp index 0f39534c31..ace546ba90 100644 --- a/unittest/utils/test_platform.cpp +++ b/unittest/utils/test_platform.cpp @@ -37,7 +37,7 @@ TEST(Platform, clock) ASSERT_GT(ct_used, 1e-4); } -TEST(Platform, putenv) +TEST(Platform, putenv_unsetenv) { const char *var = getenv("UNITTEST_VAR1"); ASSERT_EQ(var, nullptr); @@ -65,6 +65,14 @@ TEST(Platform, putenv) ASSERT_THAT(var, StrEq("one=two")); ASSERT_EQ(platform::putenv(""), -1); + + ASSERT_EQ(platform::unsetenv(""), -1); + ASSERT_EQ(platform::unsetenv("UNITTEST_VAR3=two"), -1); + var = getenv("UNITTEST_VAR1"); + ASSERT_NE(var, nullptr); + ASSERT_EQ(platform::unsetenv("UNITTEST_VAR1"), 0); + var = getenv("UNITTEST_VAR1"); + ASSERT_EQ(var, nullptr); } TEST(Platform, list_pathenv) From 1ad982aa853afdc3ad9b6db052943d44a1c9d35f Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Wed, 3 Nov 2021 10:54:21 -0400 Subject: [PATCH 321/372] improve portability of unit test code for windows compilers --- unittest/force-styles/test_error_stats.cpp | 5 +++++ unittest/utils/test_math_eigen_impl.cpp | 4 ++-- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/unittest/force-styles/test_error_stats.cpp b/unittest/force-styles/test_error_stats.cpp index 52ba3baae3..cadb4e7f2a 100644 --- a/unittest/force-styles/test_error_stats.cpp +++ b/unittest/force-styles/test_error_stats.cpp @@ -9,6 +9,11 @@ #include "fmtlib_format.cpp" #include "fmtlib_os.cpp" +// Windows may define this as a macro +#if defined(max) +#undef max +#endif + TEST(ErrorStats, test) { ErrorStats stats; diff --git a/unittest/utils/test_math_eigen_impl.cpp b/unittest/utils/test_math_eigen_impl.cpp index 895a35080c..47ca8d9cca 100644 --- a/unittest/utils/test_math_eigen_impl.cpp +++ b/unittest/utils/test_math_eigen_impl.cpp @@ -48,7 +48,7 @@ inline static bool SimilarVec(Vector a, Vector b, int n, Scalar eps = 1.0e-06, Scalar ratio = 1.0e-06, Scalar ratio_denom = 1.0) { for (int i = 0; i < n; i++) - if (not Similar(a[i], b[i], eps, ratio, ratio_denom)) return false; + if (! Similar(a[i], b[i], eps, ratio, ratio_denom)) return false; return true; } @@ -61,7 +61,7 @@ inline static bool SimilarVecUnsigned(Vector a, Vector b, int n, Scalar eps = 1. return true; else { for (int i = 0; i < n; i++) - if (not Similar(a[i], -b[i], eps, ratio, ratio_denom)) return false; + if (! Similar(a[i], -b[i], eps, ratio, ratio_denom)) return false; return true; } } From eb3f928f318e5207a07bf86e69ec913808f02978 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Wed, 3 Nov 2021 10:54:40 -0400 Subject: [PATCH 322/372] tweak epsilon for portability with windows --- unittest/force-styles/tests/atomic-pair-eim.yaml | 2 +- unittest/force-styles/tests/manybody-pair-meam.yaml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/unittest/force-styles/tests/atomic-pair-eim.yaml b/unittest/force-styles/tests/atomic-pair-eim.yaml index 4814029a3c..e705e88614 100644 --- a/unittest/force-styles/tests/atomic-pair-eim.yaml +++ b/unittest/force-styles/tests/atomic-pair-eim.yaml @@ -1,7 +1,7 @@ --- lammps_version: 10 Feb 2021 date_generated: Fri Feb 26 23:09:02 2021 -epsilon: 1e-11 +epsilon: 2e-11 prerequisites: ! | pair eim pre_commands: ! "" diff --git a/unittest/force-styles/tests/manybody-pair-meam.yaml b/unittest/force-styles/tests/manybody-pair-meam.yaml index 4237f5ffc2..fed2a060cf 100644 --- a/unittest/force-styles/tests/manybody-pair-meam.yaml +++ b/unittest/force-styles/tests/manybody-pair-meam.yaml @@ -1,7 +1,7 @@ --- lammps_version: 10 Feb 2021 date_generated: Fri Feb 26 23:09:15 2021 -epsilon: 7.5e-12 +epsilon: 1e-10 prerequisites: ! | pair meam pre_commands: ! | From b95e12bb6ca31d5fb7757778e1ac06c467e40078 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Wed, 3 Nov 2021 11:50:39 -0400 Subject: [PATCH 323/372] add additional function argument where we can supply our own CMakeLists.txt file --- cmake/Modules/ExternalCMakeProject.cmake | 15 +++++++++-- cmake/Modules/Packages/MSCG.cmake | 2 +- unittest/CMakeLists.txt | 2 +- unittest/force-styles/CMakeLists.libyaml | 33 ++++++++++++++++++++++++ unittest/force-styles/CMakeLists.txt | 6 ++--- 5 files changed, 51 insertions(+), 7 deletions(-) create mode 100644 unittest/force-styles/CMakeLists.libyaml diff --git a/cmake/Modules/ExternalCMakeProject.cmake b/cmake/Modules/ExternalCMakeProject.cmake index d8138f9088..026e3c393b 100644 --- a/cmake/Modules/ExternalCMakeProject.cmake +++ b/cmake/Modules/ExternalCMakeProject.cmake @@ -2,7 +2,7 @@ # The sources will be unpacked to ${CMAKE_BINARY_DIR}/_deps/${target}-src # The binaries will be built in ${CMAKE_BINARY_DIR}/_deps/${target}-build # -function(ExternalCMakeProject target url hash basedir cmakedir) +function(ExternalCMakeProject target url hash basedir cmakedir cmakefile) # change settings locally set(BUILD_SHARED_LIBS OFF) set(CMAKE_POSITION_INDEPENDENT_CODE ON) @@ -23,6 +23,9 @@ function(ExternalCMakeProject target url hash basedir cmakedir) endif() file(REMOVE_RECURSE ${CMAKE_BINARY_DIR}/_deps/${target}-src) file(RENAME ${TARGET_SOURCE} ${CMAKE_BINARY_DIR}/_deps/${target}-src) + if(NOT (cmakefile STREQUAL "")) + file(COPY ${cmakefile} ${CMAKE_BINARY_DIR}/_deps/${target}-src/${cmakedir}/CMakeLists.txt) + endif() add_subdirectory("${CMAKE_BINARY_DIR}/_deps/${target}-src/${cmakedir}" "${CMAKE_BINARY_DIR}/_deps/${target}-build") else() @@ -30,6 +33,14 @@ function(ExternalCMakeProject target url hash basedir cmakedir) message(STATUS "Downloading ${url}") FetchContent_Declare(${target} URL ${url} URL_HASH MD5=${hash} SOURCE_SUBDIR ${cmakedir}) message(STATUS "Unpacking and configuring ${archive}") - FetchContent_MakeAvailable(${target}) + FetchContent_GetProperties(${target}) + FetchContent_Populate(${target}) + if(NOT (cmakefile STREQUAL "")) + file(COPY "${cmakefile}" DESTINATION "${${target}_SOURCE_DIR}/${cmakedir}/") + get_filename_component(_cmakefile "${cmakefile}" NAME) + file(RENAME "${${target}_SOURCE_DIR}/${cmakedir}/${_cmakefile}" + "${${target}_SOURCE_DIR}/${cmakedir}/CMakeLists.txt") + endif() + add_subdirectory("${${target}_SOURCE_DIR}/${cmakedir}" "${${target}_BINARY_DIR}") endif() endfunction(ExternalCMakeProject) diff --git a/cmake/Modules/Packages/MSCG.cmake b/cmake/Modules/Packages/MSCG.cmake index dbfe437f67..e4260e059e 100644 --- a/cmake/Modules/Packages/MSCG.cmake +++ b/cmake/Modules/Packages/MSCG.cmake @@ -13,7 +13,7 @@ if(DOWNLOAD_MSCG) mark_as_advanced(MSCG_MD5) include(ExternalCMakeProject) - ExternalCMakeProject(mscg ${MSCG_URL} ${MSCG_MD5} MSCG-release src/CMake) + ExternalCMakeProject(mscg ${MSCG_URL} ${MSCG_MD5} MSCG-release src/CMake "") # set include and link library target_include_directories(lammps PRIVATE "${CMAKE_BINARY_DIR}/_deps/mscg-src/src") diff --git a/unittest/CMakeLists.txt b/unittest/CMakeLists.txt index f6638b839e..be6d20c19a 100644 --- a/unittest/CMakeLists.txt +++ b/unittest/CMakeLists.txt @@ -12,7 +12,7 @@ mark_as_advanced(GTEST_MD5) set(gtest_force_shared_crt ON CACHE BOOL "" FORCE) include(ExternalCMakeProject) -ExternalCMakeProject(googletest ${GTEST_URL} ${GTEST_MD5} googletest .) +ExternalCMakeProject(googletest ${GTEST_URL} ${GTEST_MD5} googletest . "") add_library(GTest::GTest ALIAS gtest) add_library(GTest::GMock ALIAS gmock) add_library(GTest::GTestMain ALIAS gtest_main) diff --git a/unittest/force-styles/CMakeLists.libyaml b/unittest/force-styles/CMakeLists.libyaml new file mode 100644 index 0000000000..c1f25f7e2c --- /dev/null +++ b/unittest/force-styles/CMakeLists.libyaml @@ -0,0 +1,33 @@ +# Custom CMake file for libyaml + +cmake_minimum_required(VERSION 3.10) +project(libyaml VERSION 0.2.5 + DESCRIPTION "LibYAML a YAML parser and emitter library" + LANGUAGES C + HOMEPAGE_URL https://pyyaml.org/wiki/LibYAML) + +# compilation settings and options +option(BUILD_SHARED_LIBS "Build libYAML as a shared library" OFF) +option(CMAKE_POSITION_INDEPENDENT_CODE "Create objects compatible with shared libraries" ON) + +include(GNUInstallDirs) + +add_library(yaml + src/api.c + src/dumper.c + src/emitter.c + src/loader.c + src/parser.c + src/reader.c + src/scanner.c + src/writer.c + ) + +set (YAML_VERSION_MAJOR ${libyaml_VERSION_MAJOR}) +set (YAML_VERSION_MINOR ${libyaml_VERSION_MINOR}) +set (YAML_VERSION_PATCH ${libyaml_VERSION_PATCH}) +set (YAML_VERSION_STRING "${YAML_VERSION_MAJOR}.${YAML_VERSION_MINOR}.${YAML_VERSION_PATCH}") + +configure_file(cmake/config.h.in config.h) +target_compile_definitions(yaml PRIVATE YAML_DECLARE_STATIC HAVE_CONFIG_H) +target_include_directories(yaml PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/include ${CMAKE_CURRENT_BINARY_DIR}) diff --git a/unittest/force-styles/CMakeLists.txt b/unittest/force-styles/CMakeLists.txt index 6624993321..0ec8be68e1 100644 --- a/unittest/force-styles/CMakeLists.txt +++ b/unittest/force-styles/CMakeLists.txt @@ -1,14 +1,14 @@ find_package(YAML) if(NOT YAML_FOUND) - set(YAML_URL "https://github.com/akohlmey/libyaml/archive/refs/heads/new-cmake.tar.gz" CACHE STRING "URL for libyaml tarball") - set(YAML_MD5 "1683f5957a79d7a823e09575b0488df2" CACHE STRING "MD5 checksum of libyaml tarball") + set(YAML_URL "https://pyyaml.org/download/libyaml/yaml-0.2.5.tar.gz" CACHE STRING "URL for libyaml tarball") + set(YAML_MD5 "bb15429d8fb787e7d3f1c83ae129a999" CACHE STRING "MD5 checksum of libyaml tarball") mark_as_advanced(YAML_URL) mark_as_advanced(YAML_MD5) # download and build a local copy of libyaml include(ExternalCMakeProject) - ExternalCMakeProject(libyaml ${YAML_URL} ${YAML_MD5} libyaml .) + ExternalCMakeProject(libyaml ${YAML_URL} ${YAML_MD5} libyaml . CMakeLists.libyaml) add_library(Yaml::Yaml ALIAS yaml) endif() From 7f0b2334a55509ad219f41bf3034ff1eddf3f258 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Wed, 3 Nov 2021 11:52:32 -0400 Subject: [PATCH 324/372] update plugin loader test --- unittest/commands/test_simple_commands.cpp | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/unittest/commands/test_simple_commands.cpp b/unittest/commands/test_simple_commands.cpp index 0ad47f4e96..1844752d33 100644 --- a/unittest/commands/test_simple_commands.cpp +++ b/unittest/commands/test_simple_commands.cpp @@ -384,7 +384,12 @@ TEST_F(SimpleCommandsTest, Units) #if defined(LMP_PLUGIN) TEST_F(SimpleCommandsTest, Plugin) { - std::string loadfmt("plugin load {}plugin.so"); + const char *bindir = getenv("LAMMPS_PLUGIN_BIN_DIR"); + const char *config = getenv("CMAKE_CONFIG_TYPE"); + if (!bindir) GTEST_SKIP(); + std::string loadfmt = platform::path_join("plugin load ", bindir); + if (config) loadfmt = platform::path_join(loadfmt, config); + loadfmt = platform::path_join(loadfmt, "{}plugin.so"); ::testing::internal::CaptureStdout(); lmp->input->one(fmt::format(loadfmt, "hello")); auto text = ::testing::internal::GetCapturedStdout(); @@ -395,7 +400,7 @@ TEST_F(SimpleCommandsTest, Plugin) lmp->input->one(fmt::format(loadfmt, "xxx")); text = ::testing::internal::GetCapturedStdout(); if (verbose) std::cout << text; - ASSERT_THAT(text, MatchesRegex(".*Open of file xxx.* failed.*")); + ASSERT_THAT(text, MatchesRegex(".*Open of file .*xxx.* failed.*")); ::testing::internal::CaptureStdout(); lmp->input->one(fmt::format(loadfmt, "nve2")); @@ -426,8 +431,7 @@ TEST_F(SimpleCommandsTest, Plugin) lmp->input->one("plugin unload pair nve2"); text = ::testing::internal::GetCapturedStdout(); if (verbose) std::cout << text; - ASSERT_THAT(text, MatchesRegex(".*Ignoring unload of pair style nve2: " - "not loaded from a plugin.*")); + ASSERT_THAT(text, MatchesRegex(".*Ignoring unload of pair style nve2: not from a plugin.*")); ::testing::internal::CaptureStdout(); lmp->input->one("plugin unload fix nve2"); @@ -439,8 +443,7 @@ TEST_F(SimpleCommandsTest, Plugin) lmp->input->one("plugin unload fix nve"); text = ::testing::internal::GetCapturedStdout(); if (verbose) std::cout << text; - ASSERT_THAT(text, MatchesRegex(".*Ignoring unload of fix style nve: " - "not loaded from a plugin.*")); + ASSERT_THAT(text, MatchesRegex(".*Ignoring unload of fix style nve: not from a plugin.*")); ::testing::internal::CaptureStdout(); lmp->input->one("plugin list"); From b7bf60ea53b7e91180b5ab933f3b674be93f4861 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Wed, 3 Nov 2021 14:26:50 -0400 Subject: [PATCH 325/372] use the portable platform::unlink() instead of unlink() --- unittest/commands/test_variables.cpp | 6 +++--- unittest/formats/test_text_file_reader.cpp | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/unittest/commands/test_variables.cpp b/unittest/commands/test_variables.cpp index 4f603df5ac..86d880f22c 100644 --- a/unittest/commands/test_variables.cpp +++ b/unittest/commands/test_variables.cpp @@ -59,8 +59,8 @@ protected: void TearDown() override { LAMMPSTest::TearDown(); - unlink("test_variable.file"); - unlink("test_variable.atomfile"); + platform::unlink("test_variable.file"); + platform::unlink("test_variable.atomfile"); } void atomic_system() @@ -165,7 +165,7 @@ TEST_F(VariableTest, CreateDelete) fputs(" ", fp); fclose(fp); ASSERT_THAT(variable->retrieve("file"), StrEq("1")); - unlink("MYFILE"); + platform::unlink("MYFILE"); ASSERT_THAT(variable->retrieve("file"), StrEq("0")); BEGIN_HIDE_OUTPUT(); diff --git a/unittest/formats/test_text_file_reader.cpp b/unittest/formats/test_text_file_reader.cpp index f0f695ae54..36f1c8d87c 100644 --- a/unittest/formats/test_text_file_reader.cpp +++ b/unittest/formats/test_text_file_reader.cpp @@ -35,8 +35,8 @@ class TextFileReaderTest : public ::testing::Test { protected: void TearDown() override { - unlink("text_reader_one.file"); - unlink("text_reader_two.file"); + platform::unlink("text_reader_one.file"); + platform::unlink("text_reader_two.file"); } void test_files() @@ -73,7 +73,7 @@ TEST_F(TextFileReaderTest, permissions) chmod("text_reader_noperms.file", 0); ASSERT_THROW({ TextFileReader reader("text_reader_noperms.file", "test"); }, FileReaderException); - unlink("text_reader_noperms.file"); + platform::unlink("text_reader_noperms.file"); } TEST_F(TextFileReaderTest, nofp) From 37dfc9e1419d9b559a727ed0da2ec1f3e9d8256e Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Wed, 3 Nov 2021 14:43:18 -0400 Subject: [PATCH 326/372] simplify by not trying to use fetchcontent but do all steps manually as it turns out, fetchcontent is calling external_project internally at some point which to avoid is why this function was started in the first place --- cmake/Modules/ExternalCMakeProject.cmake | 57 +++++++++--------------- 1 file changed, 22 insertions(+), 35 deletions(-) diff --git a/cmake/Modules/ExternalCMakeProject.cmake b/cmake/Modules/ExternalCMakeProject.cmake index 026e3c393b..fdccdee6fb 100644 --- a/cmake/Modules/ExternalCMakeProject.cmake +++ b/cmake/Modules/ExternalCMakeProject.cmake @@ -7,40 +7,27 @@ function(ExternalCMakeProject target url hash basedir cmakedir cmakefile) set(BUILD_SHARED_LIBS OFF) set(CMAKE_POSITION_INDEPENDENT_CODE ON) - if(CMAKE_VERSION VERSION_LESS 3.14) - get_filename_component(archive ${url} NAME) - file(MAKE_DIRECTORY ${CMAKE_BINARY_DIR}/_deps/src) - message(STATUS "Downloading ${url}") - file(DOWNLOAD ${url} ${CMAKE_BINARY_DIR}/_deps/${archive} EXPECTED_HASH MD5=${hash} SHOW_PROGRESS) - message(STATUS "Unpacking and configuring ${archive}") - execute_process(COMMAND ${CMAKE_COMMAND} -E tar xzf ${CMAKE_BINARY_DIR}/_deps/${archive} - WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/_deps/src) - file(GLOB TARGET_SOURCE "${CMAKE_BINARY_DIR}/_deps/src/${basedir}*") - list(LENGTH TARGET_SOURCE _num) - if(_num GREATER 1) - message(FATAL_ERROR "Inconsistent ${target} library sources. " - "Please delete ${CMAKE_BINARY_DIR}/_deps/src and re-run cmake") - endif() - file(REMOVE_RECURSE ${CMAKE_BINARY_DIR}/_deps/${target}-src) - file(RENAME ${TARGET_SOURCE} ${CMAKE_BINARY_DIR}/_deps/${target}-src) - if(NOT (cmakefile STREQUAL "")) - file(COPY ${cmakefile} ${CMAKE_BINARY_DIR}/_deps/${target}-src/${cmakedir}/CMakeLists.txt) - endif() - add_subdirectory("${CMAKE_BINARY_DIR}/_deps/${target}-src/${cmakedir}" - "${CMAKE_BINARY_DIR}/_deps/${target}-build") - else() - include(FetchContent) - message(STATUS "Downloading ${url}") - FetchContent_Declare(${target} URL ${url} URL_HASH MD5=${hash} SOURCE_SUBDIR ${cmakedir}) - message(STATUS "Unpacking and configuring ${archive}") - FetchContent_GetProperties(${target}) - FetchContent_Populate(${target}) - if(NOT (cmakefile STREQUAL "")) - file(COPY "${cmakefile}" DESTINATION "${${target}_SOURCE_DIR}/${cmakedir}/") - get_filename_component(_cmakefile "${cmakefile}" NAME) - file(RENAME "${${target}_SOURCE_DIR}/${cmakedir}/${_cmakefile}" - "${${target}_SOURCE_DIR}/${cmakedir}/CMakeLists.txt") - endif() - add_subdirectory("${${target}_SOURCE_DIR}/${cmakedir}" "${${target}_BINARY_DIR}") + get_filename_component(archive ${url} NAME) + file(MAKE_DIRECTORY ${CMAKE_BINARY_DIR}/_deps/src) + message(STATUS "Downloading ${url}") + file(DOWNLOAD ${url} ${CMAKE_BINARY_DIR}/_deps/${archive} EXPECTED_HASH MD5=${hash} SHOW_PROGRESS) + message(STATUS "Unpacking and configuring ${archive}") + execute_process(COMMAND ${CMAKE_COMMAND} -E tar xzf ${CMAKE_BINARY_DIR}/_deps/${archive} + WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/_deps/src) + file(GLOB TARGET_SOURCE "${CMAKE_BINARY_DIR}/_deps/src/${basedir}*") + list(LENGTH TARGET_SOURCE _num) + if(_num GREATER 1) + message(FATAL_ERROR "Inconsistent ${target} library sources. " + "Please delete ${CMAKE_BINARY_DIR}/_deps/src and re-run cmake") endif() + file(REMOVE_RECURSE ${CMAKE_BINARY_DIR}/_deps/${target}-src) + file(RENAME ${TARGET_SOURCE} ${CMAKE_BINARY_DIR}/_deps/${target}-src) + if(NOT (cmakefile STREQUAL "")) + file(COPY ${cmakefile} DESTINATION ${CMAKE_BINARY_DIR}/_deps/${target}-src/${cmakedir}/) + get_filename_component(_cmakefile ${cmakefile} NAME) + file(RENAME "${CMAKE_BINARY_DIR}/_deps/${target}-src/${cmakedir}/${_cmakefile}" + "${CMAKE_BINARY_DIR}/_deps/${target}-src/${cmakedir}/CMakeLists.txt") + endif() + add_subdirectory("${CMAKE_BINARY_DIR}/_deps/${target}-src/${cmakedir}" + "${CMAKE_BINARY_DIR}/_deps/${target}-build") endfunction(ExternalCMakeProject) From 62fc7b6fa0194923d2c18ade4bad36093748353a Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Wed, 3 Nov 2021 14:44:16 -0400 Subject: [PATCH 327/372] small tweaks to make replacing the CMakeLists.txt file work as expected --- unittest/force-styles/CMakeLists.libyaml | 15 ++++++++------- unittest/force-styles/CMakeLists.txt | 2 +- 2 files changed, 9 insertions(+), 8 deletions(-) diff --git a/unittest/force-styles/CMakeLists.libyaml b/unittest/force-styles/CMakeLists.libyaml index c1f25f7e2c..51e8589f7b 100644 --- a/unittest/force-styles/CMakeLists.libyaml +++ b/unittest/force-styles/CMakeLists.libyaml @@ -1,4 +1,4 @@ -# Custom CMake file for libyaml +# Custom minimal -*- CMake -*- file for libyaml cmake_minimum_required(VERSION 3.10) project(libyaml VERSION 0.2.5 @@ -23,11 +23,12 @@ add_library(yaml src/writer.c ) -set (YAML_VERSION_MAJOR ${libyaml_VERSION_MAJOR}) -set (YAML_VERSION_MINOR ${libyaml_VERSION_MINOR}) -set (YAML_VERSION_PATCH ${libyaml_VERSION_PATCH}) -set (YAML_VERSION_STRING "${YAML_VERSION_MAJOR}.${YAML_VERSION_MINOR}.${YAML_VERSION_PATCH}") - -configure_file(cmake/config.h.in config.h) +set(YAML_VERSION_STRING "${YAML_VERSION_MAJOR}.${YAML_VERSION_MINOR}.${YAML_VERSION_PATCH}") +set(CONFIG_H_FILE "#ifndef LIBYAML_CONFIG_H\n#define LIBYAML_CONFIG_H\n") +set(CONFIG_H_FILE "${CONFIG_H_FILE}#define YAML_VERSION_MAJOR ${libyaml_VERSION_MAJOR}\n") +set(CONFIG_H_FILE "${CONFIG_H_FILE}#define YAML_VERSION_MINOR ${libyaml_VERSION_MINOR}\n") +set(CONFIG_H_FILE "${CONFIG_H_FILE}#define YAML_VERSION_PATCH ${libyaml_VERSION_PATCH}\n") +set(CONFIG_H_FILE "${CONFIG_H_FILE}#define YAML_VERSION_STRING \"${libyaml_VERSION_MAJOR}.${libyaml_VERSION_MINOR}.${libyaml_VERSION_PATCH}\"\n#endif\n") +file(WRITE ${CMAKE_CURRENT_SOURCE_DIR}/include/config.h "${CONFIG_H_FILE}") target_compile_definitions(yaml PRIVATE YAML_DECLARE_STATIC HAVE_CONFIG_H) target_include_directories(yaml PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/include ${CMAKE_CURRENT_BINARY_DIR}) diff --git a/unittest/force-styles/CMakeLists.txt b/unittest/force-styles/CMakeLists.txt index 0ec8be68e1..39730e6aeb 100644 --- a/unittest/force-styles/CMakeLists.txt +++ b/unittest/force-styles/CMakeLists.txt @@ -8,7 +8,7 @@ if(NOT YAML_FOUND) # download and build a local copy of libyaml include(ExternalCMakeProject) - ExternalCMakeProject(libyaml ${YAML_URL} ${YAML_MD5} libyaml . CMakeLists.libyaml) + ExternalCMakeProject(libyaml ${YAML_URL} ${YAML_MD5} yaml . CMakeLists.libyaml) add_library(Yaml::Yaml ALIAS yaml) endif() From 439f997a10d03c98f5253454e91493a59bce58ed Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Wed, 3 Nov 2021 14:54:38 -0400 Subject: [PATCH 328/372] skip test for file not readable due to permissions on windows --- unittest/formats/test_text_file_reader.cpp | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/unittest/formats/test_text_file_reader.cpp b/unittest/formats/test_text_file_reader.cpp index 36f1c8d87c..6fcc21fb33 100644 --- a/unittest/formats/test_text_file_reader.cpp +++ b/unittest/formats/test_text_file_reader.cpp @@ -65,9 +65,14 @@ TEST_F(TextFileReaderTest, nofile) FileReaderException); } +// this test cannot work on windows due to its non unix-like permission system + +#if !defined(_WIN32) TEST_F(TextFileReaderTest, permissions) { + platform::unlink("text_reader_noperms.file"); FILE *fp = fopen("text_reader_noperms.file", "w"); + ASSERT_NE(fp,nullptr); fputs("word\n", fp); fclose(fp); chmod("text_reader_noperms.file", 0); @@ -75,6 +80,7 @@ TEST_F(TextFileReaderTest, permissions) FileReaderException); platform::unlink("text_reader_noperms.file"); } +#endif TEST_F(TextFileReaderTest, nofp) { From 7c80911f66479b0f0e5b2cdec6a9702175d83645 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Wed, 3 Nov 2021 15:23:29 -0400 Subject: [PATCH 329/372] whitespace --- cmake/Modules/ExternalCMakeProject.cmake | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/cmake/Modules/ExternalCMakeProject.cmake b/cmake/Modules/ExternalCMakeProject.cmake index fdccdee6fb..855ce254c9 100644 --- a/cmake/Modules/ExternalCMakeProject.cmake +++ b/cmake/Modules/ExternalCMakeProject.cmake @@ -24,9 +24,9 @@ function(ExternalCMakeProject target url hash basedir cmakedir cmakefile) file(RENAME ${TARGET_SOURCE} ${CMAKE_BINARY_DIR}/_deps/${target}-src) if(NOT (cmakefile STREQUAL "")) file(COPY ${cmakefile} DESTINATION ${CMAKE_BINARY_DIR}/_deps/${target}-src/${cmakedir}/) - get_filename_component(_cmakefile ${cmakefile} NAME) + get_filename_component(_cmakefile ${cmakefile} NAME) file(RENAME "${CMAKE_BINARY_DIR}/_deps/${target}-src/${cmakedir}/${_cmakefile}" - "${CMAKE_BINARY_DIR}/_deps/${target}-src/${cmakedir}/CMakeLists.txt") + "${CMAKE_BINARY_DIR}/_deps/${target}-src/${cmakedir}/CMakeLists.txt") endif() add_subdirectory("${CMAKE_BINARY_DIR}/_deps/${target}-src/${cmakedir}" "${CMAKE_BINARY_DIR}/_deps/${target}-build") From 564098e629f34edd207a150b368650856a4d77bb Mon Sep 17 00:00:00 2001 From: Stan Gerald Moore Date: Thu, 4 Nov 2021 12:45:59 -0600 Subject: [PATCH 330/372] Update Kokkos library in LAMMPS to v3.5.0 --- lib/kokkos/CHANGELOG.md | 160 ++ lib/kokkos/CMakeLists.txt | 11 +- lib/kokkos/Makefile.kokkos | 239 ++- lib/kokkos/Makefile.targets | 11 + lib/kokkos/README.md | 146 +- lib/kokkos/algorithms/CMakeLists.txt | 4 +- lib/kokkos/algorithms/src/Kokkos_Random.hpp | 114 +- lib/kokkos/algorithms/src/Kokkos_Sort.hpp | 5 +- .../algorithms/unit_tests/TestRandom.hpp | 114 +- lib/kokkos/appveyor.yml | 6 +- lib/kokkos/benchmarks/atomic/main.cpp | 6 +- .../benchmarks/bytes_and_flops/bench.hpp | 2 +- .../benchmarks/bytes_and_flops/main.cpp | 2 +- lib/kokkos/benchmarks/gather/main.cpp | 2 +- .../benchmarks/stream/stream-kokkos.cpp | 83 +- lib/kokkos/bin/hpcbind | 8 +- lib/kokkos/bin/nvcc_wrapper | 16 +- lib/kokkos/cmake/CTestConfig.cmake.in | 91 - lib/kokkos/cmake/KokkosCI.cmake | 350 --- lib/kokkos/cmake/KokkosCTest.cmake.in | 261 --- lib/kokkos/cmake/KokkosCore_config.h.in | 16 +- lib/kokkos/cmake/Modules/FindTPLCUDA.cmake | 7 +- .../cmake/Modules/FindTPLLIBQUADMATH.cmake | 1 + lib/kokkos/cmake/deps/quadmath.cmake | 46 + lib/kokkos/cmake/kokkos_arch.cmake | 151 +- lib/kokkos/cmake/kokkos_compiler_id.cmake | 14 +- lib/kokkos/cmake/kokkos_enable_devices.cmake | 6 +- lib/kokkos/cmake/kokkos_enable_options.cmake | 10 + lib/kokkos/cmake/kokkos_functions.cmake | 2 +- lib/kokkos/cmake/kokkos_test_cxx_std.cmake | 2 +- lib/kokkos/cmake/kokkos_tpls.cmake | 7 + lib/kokkos/cmake/tpls/FindTPLquadmath.cmake | 46 + .../performance_tests/TestDynRankView.hpp | 2 +- .../performance_tests/TestGlobal2LocalIds.hpp | 2 +- .../performance_tests/TestScatterView.hpp | 2 +- .../TestUnorderedMapPerformance.hpp | 2 +- lib/kokkos/containers/src/Kokkos_Bitset.hpp | 32 +- lib/kokkos/containers/src/Kokkos_DualView.hpp | 91 +- .../containers/src/Kokkos_DynRankView.hpp | 75 +- .../containers/src/Kokkos_DynamicView.hpp | 393 ++-- .../containers/src/Kokkos_ErrorReporter.hpp | 3 +- .../containers/src/Kokkos_OffsetView.hpp | 9 +- .../containers/src/Kokkos_ScatterView.hpp | 6 +- .../containers/src/Kokkos_StaticCrsGraph.hpp | 4 +- .../containers/src/Kokkos_UnorderedMap.hpp | 21 +- lib/kokkos/containers/src/Kokkos_Vector.hpp | 6 +- .../src/impl/Kokkos_Bitset_impl.hpp | 12 - .../src/impl/Kokkos_Functional_impl.hpp | 2 +- .../containers/unit_tests/TestDualView.hpp | 2 +- .../containers/unit_tests/TestDynViewAPI.hpp | 95 +- .../containers/unit_tests/TestDynamicView.hpp | 2 +- .../containers/unit_tests/TestOffsetView.hpp | 2 +- .../containers/unit_tests/TestScatterView.hpp | 40 + .../unit_tests/TestStaticCrsGraph.hpp | 6 - .../unit_tests/TestUnorderedMap.hpp | 21 +- lib/kokkos/core/cmake/KokkosCore_config.h.in | 104 - lib/kokkos/core/perf_test/CMakeLists.txt | 4 +- .../core/perf_test/PerfTestGramSchmidt.cpp | 2 +- lib/kokkos/core/perf_test/PerfTestHexGrad.cpp | 2 +- .../PerfTest_ExecSpacePartitioning.cpp | 18 +- .../core/perf_test/PerfTest_ViewAllocate.cpp | 3 +- .../core/perf_test/PerfTest_ViewResize_8.cpp | 8 + lib/kokkos/core/perf_test/test_atomic.cpp | 4 +- .../perf_test/test_atomic_minmax_simple.cpp | 4 +- lib/kokkos/core/perf_test/test_mempool.cpp | 12 +- lib/kokkos/core/perf_test/test_taskdag.cpp | 4 +- lib/kokkos/core/src/CMakeLists.txt | 23 + lib/kokkos/core/src/Cuda/Kokkos_CudaSpace.cpp | 99 +- .../Cuda/Kokkos_Cuda_BlockSize_Deduction.hpp | 7 +- .../core/src/Cuda/Kokkos_Cuda_Error.hpp | 27 +- .../core/src/Cuda/Kokkos_Cuda_Graph_Impl.hpp | 33 +- lib/kokkos/core/src/Cuda/Kokkos_Cuda_Half.hpp | 211 +- .../core/src/Cuda/Kokkos_Cuda_Instance.cpp | 241 ++- .../core/src/Cuda/Kokkos_Cuda_Instance.hpp | 73 +- .../src/Cuda/Kokkos_Cuda_KernelLaunch.hpp | 35 +- .../core/src/Cuda/Kokkos_Cuda_Locks.cpp | 24 +- .../core/src/Cuda/Kokkos_Cuda_Locks.hpp | 22 +- .../core/src/Cuda/Kokkos_Cuda_Parallel.hpp | 207 +- .../core/src/Cuda/Kokkos_Cuda_ReduceScan.hpp | 176 +- lib/kokkos/core/src/Cuda/Kokkos_Cuda_Task.hpp | 107 +- lib/kokkos/core/src/Cuda/Kokkos_Cuda_Team.hpp | 223 +- .../src/Cuda/Kokkos_Cuda_Vectorization.hpp | 17 +- .../Kokkos_Cuda_Version_9_8_Compatibility.hpp | 49 - .../HIP/Kokkos_HIP_BlockSize_Deduction.hpp | 328 ++- lib/kokkos/core/src/HIP/Kokkos_HIP_Error.hpp | 20 +- .../core/src/HIP/Kokkos_HIP_Instance.cpp | 87 +- .../core/src/HIP/Kokkos_HIP_Instance.hpp | 66 +- .../core/src/HIP/Kokkos_HIP_KernelLaunch.hpp | 352 ++- lib/kokkos/core/src/HIP/Kokkos_HIP_Locks.cpp | 18 +- lib/kokkos/core/src/HIP/Kokkos_HIP_Locks.hpp | 21 +- .../core/src/HIP/Kokkos_HIP_MDRangePolicy.hpp | 3 +- .../src/HIP/Kokkos_HIP_Parallel_MDRange.hpp | 125 +- .../src/HIP/Kokkos_HIP_Parallel_Range.hpp | 162 +- .../core/src/HIP/Kokkos_HIP_Parallel_Team.hpp | 230 +- lib/kokkos/core/src/HIP/Kokkos_HIP_Space.cpp | 134 +- lib/kokkos/core/src/HIP/Kokkos_HIP_Team.hpp | 192 -- lib/kokkos/core/src/HPX/Kokkos_HPX.cpp | 3 + lib/kokkos/core/src/HPX/Kokkos_HPX_Task.hpp | 6 +- .../src/HPX/Kokkos_HPX_WorkGraphPolicy.hpp | 4 +- lib/kokkos/core/src/KokkosExp_InterOp.hpp | 147 ++ .../core/src/KokkosExp_MDRangePolicy.hpp | 28 +- lib/kokkos/core/src/Kokkos_Atomic.hpp | 92 + .../Kokkos_Atomics_Desul_Volatile_Wrapper.hpp | 189 ++ .../core/src/Kokkos_Atomics_Desul_Wrapper.hpp | 271 +++ lib/kokkos/core/src/Kokkos_Complex.hpp | 80 +- lib/kokkos/core/src/Kokkos_Concepts.hpp | 91 +- lib/kokkos/core/src/Kokkos_CopyViews.hpp | 464 ++-- lib/kokkos/core/src/Kokkos_Core.hpp | 42 + lib/kokkos/core/src/Kokkos_Core_fwd.hpp | 11 +- lib/kokkos/core/src/Kokkos_Crs.hpp | 8 +- lib/kokkos/core/src/Kokkos_Cuda.hpp | 27 +- lib/kokkos/core/src/Kokkos_CudaSpace.hpp | 373 +--- lib/kokkos/core/src/Kokkos_DetectionIdiom.hpp | 116 + lib/kokkos/core/src/Kokkos_ExecPolicy.hpp | 1 - lib/kokkos/core/src/Kokkos_HBWSpace.hpp | 13 +- lib/kokkos/core/src/Kokkos_HIP.hpp | 1 - lib/kokkos/core/src/Kokkos_HIP_Space.hpp | 255 ++- lib/kokkos/core/src/Kokkos_HPX.hpp | 49 +- lib/kokkos/core/src/Kokkos_HostSpace.hpp | 22 +- lib/kokkos/core/src/Kokkos_Layout.hpp | 55 +- lib/kokkos/core/src/Kokkos_Macros.hpp | 63 +- lib/kokkos/core/src/Kokkos_MasterLock.hpp | 4 + .../core/src/Kokkos_MathematicalFunctions.hpp | 308 ++- .../Kokkos_MathematicalSpecialFunctions.hpp | 1280 +++++++++++ lib/kokkos/core/src/Kokkos_MemoryPool.hpp | 37 +- lib/kokkos/core/src/Kokkos_MemoryTraits.hpp | 10 +- lib/kokkos/core/src/Kokkos_NumericTraits.hpp | 62 +- lib/kokkos/core/src/Kokkos_OpenMP.hpp | 8 +- lib/kokkos/core/src/Kokkos_OpenMPTarget.hpp | 9 +- .../core/src/Kokkos_OpenMPTargetSpace.hpp | 48 +- lib/kokkos/core/src/Kokkos_Parallel.hpp | 116 +- .../core/src/Kokkos_Parallel_Reduce.hpp | 71 +- .../Kokkos_Rank.hpp} | 29 +- lib/kokkos/core/src/Kokkos_SYCL.hpp | 42 +- lib/kokkos/core/src/Kokkos_SYCL_Space.hpp | 151 +- lib/kokkos/core/src/Kokkos_ScratchSpace.hpp | 8 +- lib/kokkos/core/src/Kokkos_Serial.hpp | 188 +- lib/kokkos/core/src/Kokkos_TaskPolicy.hpp | 4 + lib/kokkos/core/src/Kokkos_TaskScheduler.hpp | 11 +- lib/kokkos/core/src/Kokkos_Threads.hpp | 7 +- lib/kokkos/core/src/Kokkos_Tuners.hpp | 114 +- lib/kokkos/core/src/Kokkos_View.hpp | 21 +- .../core/src/Kokkos_WorkGraphPolicy.hpp | 12 +- .../core/src/OpenMP/Kokkos_OpenMP_Exec.cpp | 11 +- .../core/src/OpenMP/Kokkos_OpenMP_Exec.hpp | 13 +- .../core/src/OpenMP/Kokkos_OpenMP_Task.hpp | 5 - .../OpenMPTarget/Kokkos_OpenMPTarget_Exec.cpp | 5 +- .../OpenMPTarget/Kokkos_OpenMPTarget_Exec.hpp | 228 +- .../Kokkos_OpenMPTarget_Instance.cpp | 66 +- .../Kokkos_OpenMPTarget_Instance.hpp | 12 +- .../Kokkos_OpenMPTarget_Parallel.hpp | 953 ++++++--- .../Kokkos_OpenMPTarget_Parallel_MDRange.hpp | 784 ++++--- .../OpenMPTarget/Kokkos_OpenMPTarget_Task.cpp | 35 - lib/kokkos/core/src/SYCL/Kokkos_SYCL.cpp | 39 +- .../core/src/SYCL/Kokkos_SYCL_DeepCopy.hpp | 263 +-- .../core/src/SYCL/Kokkos_SYCL_Instance.cpp | 96 +- .../core/src/SYCL/Kokkos_SYCL_Instance.hpp | 209 +- .../src/SYCL/Kokkos_SYCL_Parallel_Range.hpp | 80 +- .../src/SYCL/Kokkos_SYCL_Parallel_Reduce.hpp | 304 ++- .../src/SYCL/Kokkos_SYCL_Parallel_Scan.hpp | 182 +- .../src/SYCL/Kokkos_SYCL_Parallel_Team.hpp | 238 ++- .../core/src/SYCL/Kokkos_SYCL_Space.cpp | 136 +- lib/kokkos/core/src/SYCL/Kokkos_SYCL_Team.hpp | 215 +- .../core/src/SYCL/Kokkos_SYCL_UniqueToken.hpp | 2 +- .../core/src/Threads/Kokkos_ThreadsExec.cpp | 59 +- .../core/src/Threads/Kokkos_ThreadsExec.hpp | 14 +- .../src/Threads/Kokkos_ThreadsExec_base.cpp | 4 +- lib/kokkos/core/src/desul/.clang-format | 2 + lib/kokkos/core/src/desul/atomics.hpp | 19 + .../core/src/desul/atomics/Atomic_Ref.hpp | 541 +++++ lib/kokkos/core/src/desul/atomics/CUDA.hpp | 453 ++++ lib/kokkos/core/src/desul/atomics/Common.hpp | 199 ++ .../src/desul/atomics/Compare_Exchange.hpp | 35 + .../desul/atomics/Compare_Exchange_CUDA.hpp | 267 +++ .../desul/atomics/Compare_Exchange_GCC.hpp | 91 + .../desul/atomics/Compare_Exchange_HIP.hpp | 253 +++ .../desul/atomics/Compare_Exchange_MSVC.hpp | 201 ++ .../desul/atomics/Compare_Exchange_OpenMP.hpp | 145 ++ .../desul/atomics/Compare_Exchange_SYCL.hpp | 102 + .../desul/atomics/Compare_Exchange_Serial.hpp | 45 + lib/kokkos/core/src/desul/atomics/GCC.hpp | 131 ++ lib/kokkos/core/src/desul/atomics/Generic.hpp | 690 ++++++ lib/kokkos/core/src/desul/atomics/HIP.hpp | 338 +++ .../core/src/desul/atomics/Lock_Array.hpp | 75 + .../src/desul/atomics/Lock_Array_Cuda.hpp | 172 ++ .../core/src/desul/atomics/Lock_Array_HIP.hpp | 170 ++ lib/kokkos/core/src/desul/atomics/Macros.hpp | 62 + lib/kokkos/core/src/desul/atomics/OpenMP.hpp | 15 + lib/kokkos/core/src/desul/atomics/SYCL.hpp | 143 ++ .../src/desul/atomics/SYCLConversions.hpp | 58 + .../core/src/desul/atomics/cuda/CUDA_asm.hpp | 18 + .../desul/atomics/cuda/CUDA_asm_exchange.hpp | 8 + .../src/desul/atomics/cuda/cuda_cc7_asm.inc | 20 + .../cuda/cuda_cc7_asm_atomic_fetch_op.inc | 18 + ...da_cc7_asm_atomic_fetch_op.inc_forceglobal | 143 ++ .../cuda_cc7_asm_atomic_fetch_op.inc_generic | 142 ++ .../cuda_cc7_asm_atomic_fetch_op.inc_isglobal | 190 ++ ...cuda_cc7_asm_atomic_fetch_op.inc_predicate | 226 ++ .../atomics/cuda/cuda_cc7_asm_atomic_op.inc | 18 + .../cuda_cc7_asm_atomic_op.inc_forceglobal | 64 + .../cuda/cuda_cc7_asm_atomic_op.inc_generic | 64 + .../cuda/cuda_cc7_asm_atomic_op.inc_isglobal | 88 + .../cuda/cuda_cc7_asm_atomic_op.inc_predicate | 106 + .../atomics/cuda/cuda_cc7_asm_exchange.inc | 20 + .../cuda/cuda_cc7_asm_exchange_memorder.inc | 27 + .../atomics/cuda/cuda_cc7_asm_exchange_op.inc | 40 + .../atomics/cuda/cuda_cc7_asm_memorder.inc | 29 + .../src/desul/atomics/openmp/OpenMP_40.hpp | 97 + .../src/desul/atomics/openmp/OpenMP_40_op.inc | 101 + .../core/src/desul/src/Lock_Array_CUDA.cpp | 98 + .../core/src/desul/src/Lock_Array_HIP.cpp | 101 + lib/kokkos/core/src/fwd/Kokkos_Fwd_SYCL.hpp | 2 + .../src/impl/KokkosExp_Host_IterateTile.hpp | 38 +- .../core/src/impl/Kokkos_AnalyzePolicy.hpp | 108 +- .../Kokkos_Atomic_Compare_Exchange_Strong.hpp | 20 +- .../Kokkos_Atomic_Compare_Exchange_Weak.hpp | 4 - .../core/src/impl/Kokkos_Atomic_Exchange.hpp | 20 +- .../core/src/impl/Kokkos_Atomic_Fetch_Add.hpp | 20 +- .../core/src/impl/Kokkos_Atomic_Fetch_Sub.hpp | 20 +- .../core/src/impl/Kokkos_Atomic_Generic.hpp | 32 +- .../core/src/impl/Kokkos_Atomic_View.hpp | 5 +- lib/kokkos/core/src/impl/Kokkos_ClockTic.hpp | 4 +- .../core/src/impl/Kokkos_Combined_Reducer.hpp | 58 +- .../core/src/impl/Kokkos_ConcurrentBitset.hpp | 18 +- lib/kokkos/core/src/impl/Kokkos_Core.cpp | 17 +- lib/kokkos/core/src/impl/Kokkos_EBO.hpp | 51 +- lib/kokkos/core/src/impl/Kokkos_Error.cpp | 3 + lib/kokkos/core/src/impl/Kokkos_Error.hpp | 57 +- .../src/impl/Kokkos_ExecSpaceInitializer.hpp | 1 + .../core/src/impl/Kokkos_FunctorAdapter.hpp | 135 +- .../core/src/impl/Kokkos_FunctorAnalysis.hpp | 7 +- .../core/src/impl/Kokkos_HostSharedPtr.hpp | 8 + .../core/src/impl/Kokkos_HostThreadTeam.cpp | 20 +- .../core/src/impl/Kokkos_HostThreadTeam.hpp | 53 +- .../core/src/impl/Kokkos_LinkedListNode.hpp | 4 +- .../core/src/impl/Kokkos_Memory_Fence.hpp | 3 +- .../src/impl/Kokkos_MultipleTaskQueue.hpp | 5 +- lib/kokkos/core/src/impl/Kokkos_Profiling.cpp | 65 +- lib/kokkos/core/src/impl/Kokkos_Profiling.hpp | 68 + .../src/impl/Kokkos_Profiling_C_Interface.h | 2 +- .../src/impl/Kokkos_Profiling_Interface.hpp | 46 +- .../src/impl/Kokkos_QuadPrecisionMath.hpp | 187 ++ lib/kokkos/core/src/impl/Kokkos_Serial.cpp | 129 +- .../core/src/impl/Kokkos_Serial_Task.hpp | 52 +- .../core/src/impl/Kokkos_SharedAlloc.cpp | 3 + .../src/impl/Kokkos_SimpleTaskScheduler.hpp | 1 - .../core/src/impl/Kokkos_SingleTaskQueue.hpp | 3 +- lib/kokkos/core/src/impl/Kokkos_Tags.hpp | 95 - lib/kokkos/core/src/impl/Kokkos_TaskBase.hpp | 9 +- lib/kokkos/core/src/impl/Kokkos_TaskNode.hpp | 7 +- lib/kokkos/core/src/impl/Kokkos_TaskQueue.hpp | 31 +- .../core/src/impl/Kokkos_TaskQueueCommon.hpp | 15 +- .../impl/Kokkos_TaskQueueMemoryManager.hpp | 12 +- .../src/impl/Kokkos_TaskQueueMultiple.hpp | 14 +- .../core/src/impl/Kokkos_TaskQueue_impl.hpp | 39 +- .../core/src/impl/Kokkos_TaskTeamMember.hpp | 1 - lib/kokkos/core/src/impl/Kokkos_Timer.hpp | 10 +- lib/kokkos/core/src/impl/Kokkos_Utilities.hpp | 113 +- .../core/src/impl/Kokkos_VLAEmulation.hpp | 10 +- lib/kokkos/core/src/impl/Kokkos_ViewCtor.hpp | 14 +- .../core/src/impl/Kokkos_ViewMapping.hpp | 191 +- .../core/src/setup/Kokkos_Setup_SYCL.hpp | 8 +- .../src/traits/Kokkos_ExecutionSpaceTrait.hpp | 45 +- .../src/traits/Kokkos_GraphKernelTrait.hpp | 19 +- .../core/src/traits/Kokkos_IndexTypeTrait.hpp | 69 +- .../traits/Kokkos_IterationPatternTrait.hpp | 45 +- .../src/traits/Kokkos_LaunchBoundsTrait.hpp | 32 +- .../traits/Kokkos_OccupancyControlTrait.hpp | 40 +- .../src/traits/Kokkos_PolicyTraitAdaptor.hpp | 2 +- .../src/traits/Kokkos_PolicyTraitMatcher.hpp | 77 + .../core/src/traits/Kokkos_ScheduleTrait.hpp | 37 +- .../core/src/traits/Kokkos_Traits_fwd.hpp | 40 + .../traits/Kokkos_WorkItemPropertyTrait.hpp | 26 +- .../core/src/traits/Kokkos_WorkTagTrait.hpp | 104 +- lib/kokkos/core/unit_test/CMakeLists.txt | 160 +- lib/kokkos/core/unit_test/Makefile | 22 + .../core/unit_test/TestAtomicOperations.hpp | 62 +- .../unit_test/TestAtomicOperations_double.hpp | 2 + .../unit_test/TestAtomicOperations_float.hpp | 2 + .../unit_test/TestAtomicOperations_int.hpp | 2 + .../TestAtomicOperations_longint.hpp | 2 + .../TestAtomicOperations_longlongint.hpp | 2 + .../TestAtomicOperations_unsignedint.hpp | 2 + .../TestAtomicOperations_unsignedlongint.hpp | 2 + lib/kokkos/core/unit_test/TestAtomicViews.hpp | 16 +- lib/kokkos/core/unit_test/TestAtomics.hpp | 5 +- lib/kokkos/core/unit_test/TestComplex.hpp | 40 + .../core/unit_test/TestDeepCopyAlignment.hpp | 6 +- .../unit_test/TestDefaultDeviceTypeInit.hpp | 2 +- .../core/unit_test/TestDetectionIdiom.cpp | 96 + .../unit_test/TestExecSpacePartitioning.hpp | 129 ++ ...d_ViewAPI_c.cpp => TestExecutionSpace.hpp} | 38 +- .../core/unit_test/TestHalfConversion.hpp | 4 +- .../core/unit_test/TestHalfOperators.hpp | 115 +- .../TestHostSharedPtrAccessOnDevice.hpp | 145 +- lib/kokkos/core/unit_test/TestInterOp.cpp | 162 ++ lib/kokkos/core/unit_test/TestMDRange.hpp | 159 ++ .../unit_test/TestMathematicalFunctions.hpp | 75 +- .../TestMathematicalSpecialFunctions.hpp | 1895 +++++++++++++++++ lib/kokkos/core/unit_test/TestMemoryPool.hpp | 2 +- .../unit_test/TestNonTrivialScalarTypes.hpp | 58 +- .../core/unit_test/TestNumericTraits.hpp | 182 ++ .../core/unit_test/TestPolicyConstruction.hpp | 36 +- .../core/unit_test/TestQuadPrecisionMath.hpp | 109 + lib/kokkos/core/unit_test/TestRange.hpp | 8 +- .../core/unit_test/TestRangePolicyRequire.hpp | 8 +- lib/kokkos/core/unit_test/TestReduce.hpp | 8 + .../unit_test/TestReduceCombinatorical.hpp | 8 +- lib/kokkos/core/unit_test/TestReducers.hpp | 3 +- lib/kokkos/core/unit_test/TestReducers_d.hpp | 45 + lib/kokkos/core/unit_test/TestReductions.hpp | 2 - .../unit_test/TestReductions_DeviceView.hpp | 17 +- lib/kokkos/core/unit_test/TestStackTrace.hpp | 10 +- lib/kokkos/core/unit_test/TestTeam.hpp | 18 +- lib/kokkos/core/unit_test/TestTeamBasic.hpp | 69 + .../core/unit_test/TestTeamReductionScan.hpp | 10 +- lib/kokkos/core/unit_test/TestTeamScratch.hpp | 26 +- .../core/unit_test/TestTeamTeamSize.hpp | 13 +- lib/kokkos/core/unit_test/TestTeamVector.hpp | 54 +- .../core/unit_test/TestTeamVectorRange.hpp | 9 +- .../unit_test/TestTemplateMetaFunctions.hpp | 90 +- lib/kokkos/core/unit_test/TestTypeList.cpp | 73 + lib/kokkos/core/unit_test/TestViewAPI.hpp | 86 +- lib/kokkos/core/unit_test/TestViewAPI_e.hpp | 15 +- lib/kokkos/core/unit_test/TestViewCopy_a.hpp | 6 +- .../core/unit_test/TestViewMapping_a.hpp | 8 +- .../unit_test/TestViewMapping_subview.hpp | 4 +- lib/kokkos/core/unit_test/TestViewSubview.hpp | 244 ++- lib/kokkos/core/unit_test/TestView_64bit.hpp | 13 +- .../TestSYCLHostUSM_Category.hpp} | 11 +- ...ory.hpp => TestSYCLSharedUSM_Category.hpp} | 0 .../cuda/TestCudaHostPinned_ViewAPI_d.cpp | 46 - .../cuda/TestCudaHostPinned_ViewAPI_e.cpp | 46 - .../cuda/TestCudaHostPinned_ViewCopy_a.cpp | 46 - .../cuda/TestCudaHostPinned_ViewCopy_b.cpp | 46 - .../cuda/TestCudaHostPinned_ViewMapping_a.cpp | 46 - .../cuda/TestCudaHostPinned_ViewMapping_b.cpp | 46 - ...TestCudaHostPinned_ViewMapping_subview.cpp | 46 - .../unit_test/cuda/TestCudaUVM_ViewAPI_a.cpp | 46 - .../unit_test/cuda/TestCudaUVM_ViewAPI_b.cpp | 46 - .../unit_test/cuda/TestCudaUVM_ViewAPI_c.cpp | 46 - .../unit_test/cuda/TestCudaUVM_ViewAPI_d.cpp | 46 - .../unit_test/cuda/TestCudaUVM_ViewAPI_e.cpp | 46 - .../unit_test/cuda/TestCudaUVM_ViewCopy_a.cpp | 46 - .../unit_test/cuda/TestCudaUVM_ViewCopy_b.cpp | 46 - .../cuda/TestCudaUVM_ViewMapping_a.cpp | 46 - .../cuda/TestCudaUVM_ViewMapping_b.cpp | 46 - .../cuda/TestCudaUVM_ViewMapping_subview.cpp | 46 - .../unit_test/cuda/TestCuda_InterOp_Init.cpp | 8 +- .../cuda/TestCuda_InterOp_Streams.cpp | 4 +- .../core/unit_test/cuda/TestCuda_Spaces.cpp | 58 +- .../default/TestDefaultDeviceType.cpp | 16 +- .../default/TestDefaultDeviceType_d.cpp | 9 +- .../hip/TestHIPHostPinned_ViewAPI_a.cpp | 46 - .../hip/TestHIPHostPinned_ViewAPI_b.cpp | 46 - .../hip/TestHIPHostPinned_ViewAPI_c.cpp | 46 - .../hip/TestHIPHostPinned_ViewAPI_d.cpp | 46 - .../hip/TestHIPHostPinned_ViewAPI_e.cpp | 46 - .../hip/TestHIPHostPinned_ViewCopy_a.cpp | 46 - .../hip/TestHIPHostPinned_ViewCopy_b.cpp | 46 - .../hip/TestHIPHostPinned_ViewMapping_a.cpp | 46 - .../hip/TestHIPHostPinned_ViewMapping_b.cpp | 46 - .../TestHIPHostPinned_ViewMapping_subview.cpp | 46 - .../unit_test/hip/TestHIP_AsyncLauncher.cpp | 8 +- .../hip/TestHIP_BlocksizeDeduction.cpp | 99 + .../unit_test/hip/TestHIP_InterOp_Init.cpp | 11 +- .../unit_test/hip/TestHIP_InterOp_Streams.cpp | 13 +- .../core/unit_test/hip/TestHIP_Spaces.cpp | 29 +- .../hip/TestHIP_TeamScratchStreams.cpp | 4 +- .../incremental/Test01_execspace.hpp | 4 +- .../incremental/Test02_atomic_host.hpp | 2 +- .../Test06_ParallelFor_MDRangePolicy.hpp | 12 +- .../incremental/Test08_deep_copy.hpp | 18 +- .../incremental/Test12a_ThreadScratch.hpp | 8 +- .../incremental/Test12b_TeamScratch.hpp | 11 +- .../incremental/Test14_MDRangeReduce.hpp | 14 +- .../unit_test/sycl/TestSYCL_InterOp_Init.cpp | 13 +- .../core/unit_test/sycl/TestSYCL_Spaces.cpp | 356 ++++ .../TestSYCL_Task.cpp} | 5 +- .../sycl/TestSYCL_TeamScratchStreams.cpp | 154 ++ .../unit_test/tools/TestBuiltinTuners.cpp | 123 ++ .../unit_test/tools/TestCategoricalTuner.cpp | 86 + .../TestEventCorrectness.cpp} | 7 +- .../unit_test/tools/TestEventCorrectness.hpp | 284 +++ .../example/query_device/query_device.cpp | 15 +- .../simple_mdrangepolicy.cpp | 12 +- .../01_data_layouts/data_layouts.cpp | 2 +- .../02_memory_traits/memory_traits.cpp | 2 +- .../Advanced_Views/03_subviews/subviews.cpp | 2 +- .../Advanced_Views/04_dualviews/dual_view.cpp | 2 +- .../05_NVIDIA_UVM/uvm_example.cpp | 2 +- .../overlapping_deepcopy.cpp | 2 +- .../01_random_numbers/random_numbers.cpp | 16 +- .../04_team_scan/team_scan.cpp | 2 +- lib/kokkos/generate_makefile.bash | 5 +- lib/kokkos/master_history.txt | 1 + 396 files changed, 21892 insertions(+), 8508 deletions(-) delete mode 100644 lib/kokkos/cmake/CTestConfig.cmake.in delete mode 100644 lib/kokkos/cmake/KokkosCI.cmake delete mode 100644 lib/kokkos/cmake/KokkosCTest.cmake.in create mode 100644 lib/kokkos/cmake/Modules/FindTPLLIBQUADMATH.cmake create mode 100644 lib/kokkos/cmake/deps/quadmath.cmake create mode 100644 lib/kokkos/cmake/tpls/FindTPLquadmath.cmake delete mode 100644 lib/kokkos/core/cmake/KokkosCore_config.h.in delete mode 100644 lib/kokkos/core/src/Cuda/Kokkos_Cuda_Version_9_8_Compatibility.hpp create mode 100644 lib/kokkos/core/src/KokkosExp_InterOp.hpp create mode 100644 lib/kokkos/core/src/Kokkos_Atomics_Desul_Volatile_Wrapper.hpp create mode 100644 lib/kokkos/core/src/Kokkos_Atomics_Desul_Wrapper.hpp create mode 100644 lib/kokkos/core/src/Kokkos_DetectionIdiom.hpp create mode 100644 lib/kokkos/core/src/Kokkos_MathematicalSpecialFunctions.hpp rename lib/kokkos/core/{unit_test/cuda/TestCudaHostPinned_ViewAPI_b.cpp => src/Kokkos_Rank.hpp} (71%) create mode 100644 lib/kokkos/core/src/desul/.clang-format create mode 100644 lib/kokkos/core/src/desul/atomics.hpp create mode 100644 lib/kokkos/core/src/desul/atomics/Atomic_Ref.hpp create mode 100644 lib/kokkos/core/src/desul/atomics/CUDA.hpp create mode 100644 lib/kokkos/core/src/desul/atomics/Common.hpp create mode 100644 lib/kokkos/core/src/desul/atomics/Compare_Exchange.hpp create mode 100644 lib/kokkos/core/src/desul/atomics/Compare_Exchange_CUDA.hpp create mode 100644 lib/kokkos/core/src/desul/atomics/Compare_Exchange_GCC.hpp create mode 100644 lib/kokkos/core/src/desul/atomics/Compare_Exchange_HIP.hpp create mode 100644 lib/kokkos/core/src/desul/atomics/Compare_Exchange_MSVC.hpp create mode 100644 lib/kokkos/core/src/desul/atomics/Compare_Exchange_OpenMP.hpp create mode 100644 lib/kokkos/core/src/desul/atomics/Compare_Exchange_SYCL.hpp create mode 100644 lib/kokkos/core/src/desul/atomics/Compare_Exchange_Serial.hpp create mode 100644 lib/kokkos/core/src/desul/atomics/GCC.hpp create mode 100644 lib/kokkos/core/src/desul/atomics/Generic.hpp create mode 100644 lib/kokkos/core/src/desul/atomics/HIP.hpp create mode 100644 lib/kokkos/core/src/desul/atomics/Lock_Array.hpp create mode 100644 lib/kokkos/core/src/desul/atomics/Lock_Array_Cuda.hpp create mode 100644 lib/kokkos/core/src/desul/atomics/Lock_Array_HIP.hpp create mode 100644 lib/kokkos/core/src/desul/atomics/Macros.hpp create mode 100644 lib/kokkos/core/src/desul/atomics/OpenMP.hpp create mode 100644 lib/kokkos/core/src/desul/atomics/SYCL.hpp create mode 100644 lib/kokkos/core/src/desul/atomics/SYCLConversions.hpp create mode 100644 lib/kokkos/core/src/desul/atomics/cuda/CUDA_asm.hpp create mode 100644 lib/kokkos/core/src/desul/atomics/cuda/CUDA_asm_exchange.hpp create mode 100644 lib/kokkos/core/src/desul/atomics/cuda/cuda_cc7_asm.inc create mode 100644 lib/kokkos/core/src/desul/atomics/cuda/cuda_cc7_asm_atomic_fetch_op.inc create mode 100644 lib/kokkos/core/src/desul/atomics/cuda/cuda_cc7_asm_atomic_fetch_op.inc_forceglobal create mode 100644 lib/kokkos/core/src/desul/atomics/cuda/cuda_cc7_asm_atomic_fetch_op.inc_generic create mode 100644 lib/kokkos/core/src/desul/atomics/cuda/cuda_cc7_asm_atomic_fetch_op.inc_isglobal create mode 100644 lib/kokkos/core/src/desul/atomics/cuda/cuda_cc7_asm_atomic_fetch_op.inc_predicate create mode 100644 lib/kokkos/core/src/desul/atomics/cuda/cuda_cc7_asm_atomic_op.inc create mode 100644 lib/kokkos/core/src/desul/atomics/cuda/cuda_cc7_asm_atomic_op.inc_forceglobal create mode 100644 lib/kokkos/core/src/desul/atomics/cuda/cuda_cc7_asm_atomic_op.inc_generic create mode 100644 lib/kokkos/core/src/desul/atomics/cuda/cuda_cc7_asm_atomic_op.inc_isglobal create mode 100644 lib/kokkos/core/src/desul/atomics/cuda/cuda_cc7_asm_atomic_op.inc_predicate create mode 100644 lib/kokkos/core/src/desul/atomics/cuda/cuda_cc7_asm_exchange.inc create mode 100644 lib/kokkos/core/src/desul/atomics/cuda/cuda_cc7_asm_exchange_memorder.inc create mode 100644 lib/kokkos/core/src/desul/atomics/cuda/cuda_cc7_asm_exchange_op.inc create mode 100644 lib/kokkos/core/src/desul/atomics/cuda/cuda_cc7_asm_memorder.inc create mode 100644 lib/kokkos/core/src/desul/atomics/openmp/OpenMP_40.hpp create mode 100644 lib/kokkos/core/src/desul/atomics/openmp/OpenMP_40_op.inc create mode 100644 lib/kokkos/core/src/desul/src/Lock_Array_CUDA.cpp create mode 100644 lib/kokkos/core/src/desul/src/Lock_Array_HIP.cpp create mode 100644 lib/kokkos/core/src/impl/Kokkos_QuadPrecisionMath.hpp delete mode 100644 lib/kokkos/core/src/impl/Kokkos_Tags.hpp create mode 100644 lib/kokkos/core/src/traits/Kokkos_PolicyTraitMatcher.hpp create mode 100644 lib/kokkos/core/unit_test/TestDetectionIdiom.cpp create mode 100644 lib/kokkos/core/unit_test/TestExecSpacePartitioning.hpp rename lib/kokkos/core/unit_test/{cuda/TestCudaHostPinned_ViewAPI_c.cpp => TestExecutionSpace.hpp} (68%) create mode 100644 lib/kokkos/core/unit_test/TestInterOp.cpp create mode 100644 lib/kokkos/core/unit_test/TestMathematicalSpecialFunctions.hpp create mode 100644 lib/kokkos/core/unit_test/TestQuadPrecisionMath.hpp create mode 100644 lib/kokkos/core/unit_test/TestTypeList.cpp rename lib/kokkos/core/unit_test/{cuda/TestCudaHostPinned_ViewAPI_a.cpp => category_files/TestSYCLHostUSM_Category.hpp} (89%) rename lib/kokkos/core/unit_test/category_files/{TestSYCLSharedUSMSpace_Category.hpp => TestSYCLSharedUSM_Category.hpp} (100%) delete mode 100644 lib/kokkos/core/unit_test/cuda/TestCudaHostPinned_ViewAPI_d.cpp delete mode 100644 lib/kokkos/core/unit_test/cuda/TestCudaHostPinned_ViewAPI_e.cpp delete mode 100644 lib/kokkos/core/unit_test/cuda/TestCudaHostPinned_ViewCopy_a.cpp delete mode 100644 lib/kokkos/core/unit_test/cuda/TestCudaHostPinned_ViewCopy_b.cpp delete mode 100644 lib/kokkos/core/unit_test/cuda/TestCudaHostPinned_ViewMapping_a.cpp delete mode 100644 lib/kokkos/core/unit_test/cuda/TestCudaHostPinned_ViewMapping_b.cpp delete mode 100644 lib/kokkos/core/unit_test/cuda/TestCudaHostPinned_ViewMapping_subview.cpp delete mode 100644 lib/kokkos/core/unit_test/cuda/TestCudaUVM_ViewAPI_a.cpp delete mode 100644 lib/kokkos/core/unit_test/cuda/TestCudaUVM_ViewAPI_b.cpp delete mode 100644 lib/kokkos/core/unit_test/cuda/TestCudaUVM_ViewAPI_c.cpp delete mode 100644 lib/kokkos/core/unit_test/cuda/TestCudaUVM_ViewAPI_d.cpp delete mode 100644 lib/kokkos/core/unit_test/cuda/TestCudaUVM_ViewAPI_e.cpp delete mode 100644 lib/kokkos/core/unit_test/cuda/TestCudaUVM_ViewCopy_a.cpp delete mode 100644 lib/kokkos/core/unit_test/cuda/TestCudaUVM_ViewCopy_b.cpp delete mode 100644 lib/kokkos/core/unit_test/cuda/TestCudaUVM_ViewMapping_a.cpp delete mode 100644 lib/kokkos/core/unit_test/cuda/TestCudaUVM_ViewMapping_b.cpp delete mode 100644 lib/kokkos/core/unit_test/cuda/TestCudaUVM_ViewMapping_subview.cpp delete mode 100644 lib/kokkos/core/unit_test/hip/TestHIPHostPinned_ViewAPI_a.cpp delete mode 100644 lib/kokkos/core/unit_test/hip/TestHIPHostPinned_ViewAPI_b.cpp delete mode 100644 lib/kokkos/core/unit_test/hip/TestHIPHostPinned_ViewAPI_c.cpp delete mode 100644 lib/kokkos/core/unit_test/hip/TestHIPHostPinned_ViewAPI_d.cpp delete mode 100644 lib/kokkos/core/unit_test/hip/TestHIPHostPinned_ViewAPI_e.cpp delete mode 100644 lib/kokkos/core/unit_test/hip/TestHIPHostPinned_ViewCopy_a.cpp delete mode 100644 lib/kokkos/core/unit_test/hip/TestHIPHostPinned_ViewCopy_b.cpp delete mode 100644 lib/kokkos/core/unit_test/hip/TestHIPHostPinned_ViewMapping_a.cpp delete mode 100644 lib/kokkos/core/unit_test/hip/TestHIPHostPinned_ViewMapping_b.cpp delete mode 100644 lib/kokkos/core/unit_test/hip/TestHIPHostPinned_ViewMapping_subview.cpp create mode 100644 lib/kokkos/core/unit_test/hip/TestHIP_BlocksizeDeduction.cpp create mode 100644 lib/kokkos/core/unit_test/sycl/TestSYCL_Spaces.cpp rename lib/kokkos/core/unit_test/{cuda/TestCudaUVM_SharedAlloc.cpp => sycl/TestSYCL_Task.cpp} (96%) create mode 100644 lib/kokkos/core/unit_test/sycl/TestSYCL_TeamScratchStreams.cpp create mode 100644 lib/kokkos/core/unit_test/tools/TestBuiltinTuners.cpp create mode 100644 lib/kokkos/core/unit_test/tools/TestCategoricalTuner.cpp rename lib/kokkos/core/unit_test/{cuda/TestCudaHostPinned_SharedAlloc.cpp => tools/TestEventCorrectness.cpp} (94%) create mode 100644 lib/kokkos/core/unit_test/tools/TestEventCorrectness.hpp diff --git a/lib/kokkos/CHANGELOG.md b/lib/kokkos/CHANGELOG.md index 7bb6de4cd9..2e779791dd 100644 --- a/lib/kokkos/CHANGELOG.md +++ b/lib/kokkos/CHANGELOG.md @@ -1,5 +1,165 @@ # Change Log +## [3.5.00](https://github.com/kokkos/kokkos/tree/3.5.00) (2021-10-19) +[Full Changelog](https://github.com/kokkos/kokkos/compare/3.4.01...3.5.00) + +### Features: + +- Add support for quad-precision math functions/traits [\#4098](https://github.com/kokkos/kokkos/pull/4098) +- Adding ExecutionSpace partitioning function [\#4096](https://github.com/kokkos/kokkos/pull/4096) +- Improve Python Interop Capabilities [\#4065](https://github.com/kokkos/kokkos/pull/4065) +- Add half_t Kokkos::rand specialization [\#3922](https://github.com/kokkos/kokkos/pull/3922) +- Add math special functions: erf, erfcx, expint1, Bessel functions, Hankel functions [\#3920](https://github.com/kokkos/kokkos/pull/3920) +- Add missing common mathematical functions [\#4043](https://github.com/kokkos/kokkos/pull/4043) [\#4036](https://github.com/kokkos/kokkos/pull/4036) [\#4034](https://github.com/kokkos/kokkos/pull/4034) +- Let the numeric traits be SFINAE-friendly [\#4038](https://github.com/kokkos/kokkos/pull/4038) +- Add Desul atomics - enabling memory-order and memory-scope parameters [\#3247](https://github.com/kokkos/kokkos/pull/3247) +- Add detection idiom from the C++ standard library extension version 2 [\#3980](https://github.com/kokkos/kokkos/pull/3980) +- Fence Profiling Support in all backends [\#3966](https://github.com/kokkos/kokkos/pull/3966) [\#4304](https://github.com/kokkos/kokkos/pull/4304) [\#4258](https://github.com/kokkos/kokkos/pull/4258) [\#4232](https://github.com/kokkos/kokkos/pull/4232) +- Significant SYCL enhancements (see below) + +### Deprecations: + +- Deprecate CUDA_SAFE_CALL and HIP_SAFE_CALL [\#4249](https://github.com/kokkos/kokkos/pull/4249) +- Deprecate Kokkos::Impl::Timer (Kokkos::Timer has been available for a long time) [\#4201](https://github.com/kokkos/kokkos/pull/4201) +- Deprecate Experimental::MasterLock [\#4094](https://github.com/kokkos/kokkos/pull/4094) +- Deprecate Kokkos_TaskPolicy.hpp (headers got reorganized, doesn't remove functionality) [\#4011](https://github.com/kokkos/kokkos/pull/4011) +- Deprecate backward compatibility features [\#3978](https://github.com/kokkos/kokkos/pull/3978) +- Update and deprecate is_space::host_memory/execution/mirror_space [\#3973](https://github.com/kokkos/kokkos/pull/3973) + + +### Backends and Archs Enhancements: + +- Enabling constbitset constructors in kernels [\#4296](https://github.com/kokkos/kokkos/pull/4296) +- Use ZeroMemset in View constructor to improve performance [\#4226](https://github.com/kokkos/kokkos/pull/4226) +- Use memset in deep_copy [\#3944](https://github.com/kokkos/kokkos/pull/3944) +- Add missing fence() calls in resize(View) that effectively do deep_copy(resized, orig) [\#4212](https://github.com/kokkos/kokkos/pull/4212) +- Avoid allocations in resize and realloc [\#4207](https://github.com/kokkos/kokkos/pull/4207) +- StaticCsrGraph: use device type instead of execution space to construct views [\#3991](https://github.com/kokkos/kokkos/pull/3991) +- Consider std::sort when view is accessible from host [\#3929](https://github.com/kokkos/kokkos/pull/3929) +- Fix CPP20 warnings except for volatile [\#4312](https://github.com/kokkos/kokkos/pull/4312) + +#### SYCL: +- Introduce SYCLHostUSMSpace [\#4268](https://github.com/kokkos/kokkos/pull/4268) +- Implement SYCL TeamPolicy for vector_size > 1 [\#4183](https://github.com/kokkos/kokkos/pull/4183) +- Enable 64bit ranges for SYCL [\#4211](https://github.com/kokkos/kokkos/pull/4211) +- Don't print SYCL device info in execution space intialization [\#4168](https://github.com/kokkos/kokkos/pull/4168) +- Improve SYCL MDRangePolicy performance [\#4161](https://github.com/kokkos/kokkos/pull/4161) +- Use sub_groups in SYCL parallel_scan [\#4147](https://github.com/kokkos/kokkos/pull/4147) +- Implement subgroup reduction for SYCL RangePolicy parallel_reduce [\#3940](https://github.com/kokkos/kokkos/pull/3940) +- Use DPC++ broadcast extension in SYCL team_broadcast [\#4103](https://github.com/kokkos/kokkos/pull/4103) +- Only fence in SYCL parallel_reduce for non-device-accessible result_ptr [\#4089](https://github.com/kokkos/kokkos/pull/4089) +- Improve fencing behavior in SYCL backend [\#4088](https://github.com/kokkos/kokkos/pull/4088) +- Fence all registered SYCL queues before deallocating memory [\#4086](https://github.com/kokkos/kokkos/pull/4086) +- Implement SYCL::print_configuration [\#3992](https://github.com/kokkos/kokkos/pull/3992) +- Reuse scratch memory in parallel_scan and TeamPolicy (decreases memory footprint) [\#3899](https://github.com/kokkos/kokkos/pull/3899) [\#3889](https://github.com/kokkos/kokkos/pull/3889) + +#### CUDA: +- Cuda improve heuristic for blocksize [\#4271](https://github.com/kokkos/kokkos/pull/4271) +- Don't use [[deprecated]] for nvcc [\#4229](https://github.com/kokkos/kokkos/pull/4229) +- Improve error message for NVHPC as host compiler [\#4227](https://github.com/kokkos/kokkos/pull/4227) +- Update support for cuda reductions to work with types < 4bytes [\#4156](https://github.com/kokkos/kokkos/pull/4156) +- Fix incompatible team size deduction in rare cases parallel_reduce [\#4142](https://github.com/kokkos/kokkos/pull/4142) +- Remove UVM usage in DynamicView [\#4129](https://github.com/kokkos/kokkos/pull/4129) +- Remove dependency between core and containers [\#4114](https://github.com/kokkos/kokkos/pull/4114) +- Adding opt-in CudaMallocSync support when using CUDA version >= 11.2 [\#4026](https://github.com/kokkos/kokkos/pull/4026) [\#4233](https://github.com/kokkos/kokkos/pull/4233) +- Fix a potential race condition in the CUDA backend [\#3999](https://github.com/kokkos/kokkos/pull/3999) + +#### HIP: +- Implement new blocksize deduction method for HIP Backend [\#3953](https://github.com/kokkos/kokkos/pull/3953) +- Add multiple LaunchMechanism [\#3820](https://github.com/kokkos/kokkos/pull/3820) +- Make HIP backend thread-safe [\#4170](https://github.com/kokkos/kokkos/pull/4170) + +#### Serial: +- Refactor Serial backend and fix thread-safety issue [\#4053](https://github.com/kokkos/kokkos/pull/4053) + +#### OpenMPTarget: +- OpenMPTarget: support array reductions in RangePolicy [\#4040](https://github.com/kokkos/kokkos/pull/4040) +- OpenMPTarget: add MDRange parallel_reduce [\#4032](https://github.com/kokkos/kokkos/pull/4032) +- OpenMPTarget: Fix bug in for the case of a reducer. [\#4044](https://github.com/kokkos/kokkos/pull/4044) +- OpenMPTarget: verify process fix [\#4041](https://github.com/kokkos/kokkos/pull/4041) + +### Implemented enhancements BuildSystem + +#### Important BuildSystem Updates: +- Use hipcc architecture autodetection when Kokkos_ARCH is not set [\#3941](https://github.com/kokkos/kokkos/pull/3941) +- Introduce Kokkos_ENABLE_DEPRECATION_WARNINGS and remove deprecated code with Kokkos_ENABLE_DEPRECATED_CODE_3 [\#4106](https://github.com/kokkos/kokkos/pull/4106) [\#3855](https://github.com/kokkos/kokkos/pull/3855) + +#### Other Improvements: +- Add allow-unsupported-compiler flag to nvcc-wrapper [\#4298](https://github.com/kokkos/kokkos/pull/4298) +- nvcc_wrapper: fix errors in argument handling [\#3993](https://github.com/kokkos/kokkos/pull/3993) +- Adds support for -time= and -time in nvcc_wrapper [\#4015](https://github.com/kokkos/kokkos/pull/4015) +- nvcc_wrapper: suppress duplicates of GPU architecture and RDC flags [\#3968](https://github.com/kokkos/kokkos/pull/3968) +- Fix TMPDIR support in nvcc_wrapper [\#3792](https://github.com/kokkos/kokkos/pull/3792) +- NVHPC: update PGI compiler arch flags [\#4133](https://github.com/kokkos/kokkos/pull/4133) +- Replace PGI with NVHPC (works for both) [\#4196](https://github.com/kokkos/kokkos/pull/4196) +- Make sure that KOKKOS_CXX_HOST_COMPILER_ID is defined [\#4235](https://github.com/kokkos/kokkos/pull/4235) +- Add options to Makefile builds for deprecated code and warnings [\#4215](https://github.com/kokkos/kokkos/pull/4215) +- Use KOKKOS_CXX_HOST_COMPILER_ID for identifying CPU arch flags [\#4199](https://github.com/kokkos/kokkos/pull/4199) +- Added support for Cray Clang to Makefile.kokkos [\#4176](https://github.com/kokkos/kokkos/pull/4176) +- Add XLClang as compiler [\#4120](https://github.com/kokkos/kokkos/pull/4120) +- Keep quoted compiler flags when passing to Trilinos [\#3987](https://github.com/kokkos/kokkos/pull/3987) +- Add support for AMD Zen3 CPU architecture [\#3972](https://github.com/kokkos/kokkos/pull/3972) +- Rename IntelClang to IntelLLVM [\#3945](https://github.com/kokkos/kokkos/pull/3945) +- Add cppcoreguidelines-pro-type-cstyle-cast to clang-tidy [\#3522](https://github.com/kokkos/kokkos/pull/3522) +- Add sve bit size definition for A64FX [\#3947](https://github.com/kokkos/kokkos/pull/3947) [\#3946](https://github.com/kokkos/kokkos/pull/3946) +- Remove KOKKOS_ENABLE_DEBUG_PRINT_KERNEL_NAMES [\#4150](https://github.com/kokkos/kokkos/pull/4150) + +### Other Changes: + +#### Tool Enhancements: + +- Retrieve original value from a point in a MultidimensionalSparseTuningProblem [\#3977](https://github.com/kokkos/kokkos/pull/3977) +- Allow extension of built-in tuners with additional tuning axes [\#3961](https://github.com/kokkos/kokkos/pull/3961) +- Added a categorical tuner [\#3955](https://github.com/kokkos/kokkos/pull/3955) + + +#### Miscellaneous: + +- hpcbind: Use double quotes around $@ when invoking user command [\#4284](https://github.com/kokkos/kokkos/pull/4284) +- Add file and line to error message [\#3985](https://github.com/kokkos/kokkos/pull/3985) +- Fix compiler warnings when compiling with nvc++ [\#4198](https://github.com/kokkos/kokkos/pull/4198) +- Add OpenMPTarget CI build on AMD GPUs [\#4055](https://github.com/kokkos/kokkos/pull/4055) +- CI: icpx is now part of intel container [\#4002](https://github.com/kokkos/kokkos/pull/4002) + +### Incompatibilities: + +- Remove pre CUDA 9 KOKKOS_IMPL_CUDA_* macros [\#4138](https://github.com/kokkos/kokkos/pull/4138) + +### Bug Fixes: +- UnorderedMap::clear() should zero the size() [\#4130](https://github.com/kokkos/kokkos/pull/4130) +- Add memory fence for HostSharedPtr::cleanup() [\#4144](https://github.com/kokkos/kokkos/pull/4144) +- SYCL: Fix race conditions in TeamPolicy::parallel_reduce [\#4418](https://github.com/kokkos/kokkos/pull/4418) +- Adding missing memory fence to serial exec space fence. [\#4292](https://github.com/kokkos/kokkos/pull/4292) +- Fix using external SYCL queues in tests [\#4291](https://github.com/kokkos/kokkos/pull/4291) +- Fix digits10 bug [\#4281](https://github.com/kokkos/kokkos/pull/4281) +- Fixes constexpr errors with frounding-math on gcc < 10. [\#4278](https://github.com/kokkos/kokkos/pull/4278) +- Fix compiler flags for PGI/NVHPC [\#4264](https://github.com/kokkos/kokkos/pull/4264) +- Fix Zen2/3 also implying Zen Arch with Makefiles [\#4260](https://github.com/kokkos/kokkos/pull/4260) +- Kokkos_Cuda.hpp: Fix shadow warning with cuda/11.0 [\#4252](https://github.com/kokkos/kokkos/pull/4252) +- Fix issue w/ static initialization of function attributes [\#4242](https://github.com/kokkos/kokkos/pull/4242) +- Disable long double hypot test on Power systems [\#4221](https://github.com/kokkos/kokkos/pull/4221) +- Fix false sharing in random pool [\#4218](https://github.com/kokkos/kokkos/pull/4218) +- Fix a missing memory_fence for debug shared alloc code [\#4216](https://github.com/kokkos/kokkos/pull/4216) +- Fix two xl issues [\#4179](https://github.com/kokkos/kokkos/pull/4179) +- Makefile.kokkos: fix (standard_in) 1: syntax error [\#4173](https://github.com/kokkos/kokkos/pull/4173) +- Fixes for query_device example [\#4172](https://github.com/kokkos/kokkos/pull/4172) +- Fix a bug when using HIP atomic with Kokkos::Complex [\#4159](https://github.com/kokkos/kokkos/pull/4159) +- Fix mistaken logic in pthread creation [\#4157](https://github.com/kokkos/kokkos/pull/4157) +- Define KOKKOS_ENABLE_AGGRESSIVE_VECTORIZATION when requesting Kokkos_ENABLE_AGGRESSIVE_VECTORIZATION=ON [\#4107](https://github.com/kokkos/kokkos/pull/4107) +- Fix compilation with latest MSVC version [\#4102](https://github.com/kokkos/kokkos/pull/4102) +- Fix incorrect macro definitions when compiling with Intel compiler on Windows [\#4087](https://github.com/kokkos/kokkos/pull/4087) +- Fixup global buffer overflow in hand rolled string manipulation [\#4070](https://github.com/kokkos/kokkos/pull/4070) +- Fixup heap buffer overflow in cmd line args parsing unit tests [\#4069](https://github.com/kokkos/kokkos/pull/4069) +- Only add quotes in compiler flags for Trilinos if necessary [\#4067](https://github.com/kokkos/kokkos/pull/4067) +- Fixed invocation of tools init callbacks [\#4061](https://github.com/kokkos/kokkos/pull/4061) +- Work around SYCL JIT compiler issues with static variables [\#4013](https://github.com/kokkos/kokkos/pull/4013) +- Fix TestDetectionIdiom.cpp test inclusion for Trilinos/TriBITS [\#4010](https://github.com/kokkos/kokkos/pull/4010) +- Fixup allocation headers with OpenMPTarget backend [\#4003](https://github.com/kokkos/kokkos/pull/4003) +- Add missing specialization for OMPT to Kokkos Random [\#3967](https://github.com/kokkos/kokkos/pull/3967) +- Disable hypot long double test on power arches [\#3962](https://github.com/kokkos/kokkos/pull/3962) +- Use different EBO workaround for MSVC (rebased) [\#3924](https://github.com/kokkos/kokkos/pull/3924) +- Fix SYCL Kokkos::Profiling::(de)allocateData calls [\#3928](https://github.com/kokkos/kokkos/pull/3928) + ## [3.4.01](https://github.com/kokkos/kokkos/tree/3.4.01) (2021-05-19) [Full Changelog](https://github.com/kokkos/kokkos/compare/3.4.00...3.4.01) diff --git a/lib/kokkos/CMakeLists.txt b/lib/kokkos/CMakeLists.txt index 9452027d8e..1b6753f983 100644 --- a/lib/kokkos/CMakeLists.txt +++ b/lib/kokkos/CMakeLists.txt @@ -111,8 +111,8 @@ ENDIF() set(Kokkos_VERSION_MAJOR 3) -set(Kokkos_VERSION_MINOR 4) -set(Kokkos_VERSION_PATCH 01) +set(Kokkos_VERSION_MINOR 5) +set(Kokkos_VERSION_PATCH 00) set(Kokkos_VERSION "${Kokkos_VERSION_MAJOR}.${Kokkos_VERSION_MINOR}.${Kokkos_VERSION_PATCH}") math(EXPR KOKKOS_VERSION "${Kokkos_VERSION_MAJOR} * 10000 + ${Kokkos_VERSION_MINOR} * 100 + ${Kokkos_VERSION_PATCH}") @@ -210,7 +210,12 @@ IF (KOKKOS_HAS_TRILINOS) # which needs another workaround. SET(KOKKOS_COMPILE_OPTIONS_TMP) FOREACH(OPTION ${KOKKOS_COMPILE_OPTIONS}) - LIST(APPEND KOKKOS_COMPILE_OPTIONS_TMP \"${OPTION}\") + STRING(FIND "${OPTION}" " " OPTION_HAS_WHITESPACE) + IF(OPTION_HAS_WHITESPACE EQUAL -1) + LIST(APPEND KOKKOS_COMPILE_OPTIONS_TMP "${OPTION}") + ELSE() + LIST(APPEND KOKKOS_COMPILE_OPTIONS_TMP "\"${OPTION}\"") + ENDIF() ENDFOREACH() STRING(REPLACE ";" " " KOKKOSCORE_COMPILE_OPTIONS "${KOKKOS_COMPILE_OPTIONS_TMP}") LIST(APPEND KOKKOS_ALL_COMPILE_OPTIONS ${KOKKOS_COMPILE_OPTIONS}) diff --git a/lib/kokkos/Makefile.kokkos b/lib/kokkos/Makefile.kokkos index 2a984eefb6..edfb78d26a 100644 --- a/lib/kokkos/Makefile.kokkos +++ b/lib/kokkos/Makefile.kokkos @@ -11,19 +11,19 @@ CXXFLAGS += $(SHFLAGS) endif KOKKOS_VERSION_MAJOR = 3 -KOKKOS_VERSION_MINOR = 4 -KOKKOS_VERSION_PATCH = 01 +KOKKOS_VERSION_MINOR = 5 +KOKKOS_VERSION_PATCH = 00 KOKKOS_VERSION = $(shell echo $(KOKKOS_VERSION_MAJOR)*10000+$(KOKKOS_VERSION_MINOR)*100+$(KOKKOS_VERSION_PATCH) | bc) -# Options: Cuda,HIP,OpenMP,Pthread,Serial +# Options: Cuda,HIP,SYCL,OpenMPTarget,OpenMP,Pthread,Serial KOKKOS_DEVICES ?= "OpenMP" #KOKKOS_DEVICES ?= "Pthread" -# Options: +# Options: # Intel: KNC,KNL,SNB,HSW,BDW,SKX # NVIDIA: Kepler,Kepler30,Kepler32,Kepler35,Kepler37,Maxwell,Maxwell50,Maxwell52,Maxwell53,Pascal60,Pascal61,Volta70,Volta72,Turing75,Ampere80,Ampere86 # ARM: ARMv80,ARMv81,ARMv8-ThunderX,ARMv8-TX2,A64FX # IBM: BGQ,Power7,Power8,Power9 -# AMD-GPUS: Vega900,Vega906,Vega908 +# AMD-GPUS: Vega900,Vega906,Vega908,Vega90A # AMD-CPUS: AMDAVX,Zen,Zen2,Zen3 KOKKOS_ARCH ?= "" # Options: yes,no @@ -32,7 +32,7 @@ KOKKOS_DEBUG ?= "no" KOKKOS_USE_TPLS ?= "" # Options: c++14,c++1y,c++17,c++1z,c++2a KOKKOS_CXX_STANDARD ?= "c++14" -# Options: aggressive_vectorization,disable_profiling,enable_large_mem_tests,disable_complex_align +# Options: aggressive_vectorization,disable_profiling,enable_large_mem_tests,disable_complex_align,disable_deprecated_code,enable_deprecation_warnings KOKKOS_OPTIONS ?= "" KOKKOS_CMAKE ?= "no" KOKKOS_TRIBITS ?= "no" @@ -80,7 +80,7 @@ KOKKOS_INTERNAL_USE_MEMKIND := $(call kokkos_has_string,$(KOKKOS_USE_TPLS),exper # Check for advanced settings. KOKKOS_INTERNAL_ENABLE_COMPILER_WARNINGS := $(call kokkos_has_string,$(KOKKOS_OPTIONS),compiler_warnings) -KOKKOS_INTERNAL_OPT_RANGE_AGGRESSIVE_VECTORIZATION := $(call kokkos_has_string,$(KOKKOS_OPTIONS),aggressive_vectorization) +KOKKOS_INTERNAL_AGGRESSIVE_VECTORIZATION := $(call kokkos_has_string,$(KOKKOS_OPTIONS),aggressive_vectorization) KOKKOS_INTERNAL_ENABLE_TUNING := $(call kokkos_has_string,$(KOKKOS_OPTIONS),enable_tuning) KOKKOS_INTERNAL_DISABLE_COMPLEX_ALIGN := $(call kokkos_has_string,$(KOKKOS_OPTIONS),disable_complex_align) KOKKOS_INTERNAL_DISABLE_DUALVIEW_MODIFY_CHECK := $(call kokkos_has_string,$(KOKKOS_OPTIONS),disable_dualview_modify_check) @@ -92,6 +92,9 @@ KOKKOS_INTERNAL_CUDA_USE_RELOC := $(call kokkos_has_string,$(KOKKOS_CUDA_OPTIONS KOKKOS_INTERNAL_CUDA_USE_LAMBDA := $(call kokkos_has_string,$(KOKKOS_CUDA_OPTIONS),enable_lambda) KOKKOS_INTERNAL_CUDA_USE_CONSTEXPR := $(call kokkos_has_string,$(KOKKOS_CUDA_OPTIONS),enable_constexpr) KOKKOS_INTERNAL_HPX_ENABLE_ASYNC_DISPATCH := $(call kokkos_has_string,$(KOKKOS_HPX_OPTIONS),enable_async_dispatch) +KOKKOS_INTERNAL_ENABLE_DESUL_ATOMICS := $(call kokkos_has_string,$(KOKKOS_OPTIONS),enable_desul_atomics) +KOKKOS_INTERNAL_DISABLE_DEPRECATED_CODE := $(call kokkos_has_string,$(KOKKOS_OPTIONS),disable_deprecated_code) +KOKKOS_INTERNAL_ENABLE_DEPRECATION_WARNINGS := $(call kokkos_has_string,$(KOKKOS_OPTIONS),enable_deprecation_warnings) KOKKOS_INTERNAL_HIP_USE_RELOC := $(call kokkos_has_string,$(KOKKOS_HIP_OPTIONS),rdc) @@ -112,6 +115,7 @@ endif # Check for other Execution Spaces. KOKKOS_INTERNAL_USE_CUDA := $(call kokkos_has_string,$(KOKKOS_DEVICES),Cuda) KOKKOS_INTERNAL_USE_HIP := $(call kokkos_has_string,$(KOKKOS_DEVICES),HIP) +KOKKOS_INTERNAL_USE_SYCL := $(call kokkos_has_string,$(KOKKOS_DEVICES),SYCL) KOKKOS_INTERNAL_USE_OPENMPTARGET := $(call kokkos_has_string,$(KOKKOS_DEVICES),OpenMPTarget) KOKKOS_DEVICELIST = @@ -133,11 +137,18 @@ endif ifeq ($(KOKKOS_INTERNAL_USE_HIP), 1) KOKKOS_DEVICELIST += HIP endif +KOKKOS_INTERNAL_HAVE_CXX17_OR_NEWER := $(shell expr $(KOKKOS_INTERNAL_ENABLE_CXX17) \ + + $(KOKKOS_INTERNAL_ENABLE_CXX20) \ + + $(KOKKOS_INTERNAL_ENABLE_CXX2A)) +ifeq ($(KOKKOS_INTERNAL_USE_SYCL), 1) + KOKKOS_DEVICELIST += SYCL + ifneq ($(KOKKOS_INTERNAL_HAVE_CXX17_OR_NEWER), 1) + $(error SYCL backend requires C++17 or newer) + endif + +endif ifeq ($(KOKKOS_INTERNAL_USE_OPENMPTARGET), 1) KOKKOS_DEVICELIST += OPENMPTARGET - KOKKOS_INTERNAL_HAVE_CXX17_OR_NEWER := $(shell expr $(KOKKOS_INTERNAL_ENABLE_CXX17) \ - + $(KOKKOS_INTERNAL_ENABLE_CXX20) \ - + $(KOKKOS_INTERNAL_ENABLE_CXX2A)) ifneq ($(KOKKOS_INTERNAL_HAVE_CXX17_OR_NEWER), 1) $(error OpenMPTarget backend requires C++17 or newer) endif @@ -168,6 +179,8 @@ KOKKOS_INTERNAL_COMPILER_XL := $(strip $(shell $(CXX) -qversion 2 KOKKOS_INTERNAL_COMPILER_CRAY := $(strip $(shell $(CXX) -craype-verbose 2>&1 | grep -c "CC-")) KOKKOS_INTERNAL_COMPILER_NVCC := $(strip $(shell echo "$(shell export OMPI_CXX=$(OMPI_CXX); export MPICH_CXX=$(MPICH_CXX); $(CXX) --version 2>&1 | grep -c nvcc)>0" | bc)) KOKKOS_INTERNAL_COMPILER_CLANG := $(call kokkos_has_string,$(KOKKOS_CXX_VERSION),clang) +KOKKOS_INTERNAL_COMPILER_CRAY_CLANG := $(strip $(shell $(CXX) -craype-verbose 2>&1 | grep -c "clang++")) +KOKKOS_INTERNAL_COMPILER_INTEL_CLANG := $(call kokkos_has_string,$(KOKKOS_CXX_VERSION),oneAPI) KOKKOS_INTERNAL_COMPILER_APPLE_CLANG := $(call kokkos_has_string,$(KOKKOS_CXX_VERSION),Apple clang) KOKKOS_INTERNAL_COMPILER_HCC := $(call kokkos_has_string,$(KOKKOS_CXX_VERSION),HCC) KOKKOS_INTERNAL_COMPILER_GCC := $(call kokkos_has_string,$(KOKKOS_CXX_VERSION),GCC) @@ -247,7 +260,11 @@ ifeq ($(KOKKOS_INTERNAL_COMPILER_PGI), 1) KOKKOS_INTERNAL_OPENMP_FLAG := -mp else ifeq ($(KOKKOS_INTERNAL_COMPILER_CLANG), 1) + ifeq ($(KOKKOS_INTERNAL_COMPILER_CRAY_CLANG), 1) + KOKKOS_INTERNAL_OPENMP_FLAG := -fopenmp + else KOKKOS_INTERNAL_OPENMP_FLAG := -fopenmp=libomp + endif else ifeq ($(KOKKOS_INTERNAL_COMPILER_APPLE_CLANG), 1) KOKKOS_INTERNAL_OPENMP_FLAG := -fopenmp=libomp @@ -259,7 +276,11 @@ else # OpenMP is turned on by default in Cray compiler environment. KOKKOS_INTERNAL_OPENMP_FLAG := else - KOKKOS_INTERNAL_OPENMP_FLAG := -fopenmp + ifeq ($(KOKKOS_INTERNAL_COMPILER_INTEL_CLANG), 1) + KOKKOS_INTERNAL_OPENMP_FLAG := -fiopenmp + else + KOKKOS_INTERNAL_OPENMP_FLAG := -fopenmp + endif endif endif endif @@ -317,6 +338,13 @@ KOKKOS_INTERNAL_USE_ARCH_BDW := $(call kokkos_has_string,$(KOKKOS_ARCH),BDW) KOKKOS_INTERNAL_USE_ARCH_SKX := $(call kokkos_has_string,$(KOKKOS_ARCH),SKX) KOKKOS_INTERNAL_USE_ARCH_KNL := $(call kokkos_has_string,$(KOKKOS_ARCH),KNL) +KOKKOS_INTERNAL_USE_ARCH_INTEL_GEN := $(call kokkos_has_string,$(KOKKOS_ARCH),IntelGen) +KOKKOS_INTERNAL_USE_ARCH_INTEL_GEN9 := $(call kokkos_has_string,$(KOKKOS_ARCH),IntelGen9) +KOKKOS_INTERNAL_USE_ARCH_INTEL_GEN11 := $(call kokkos_has_string,$(KOKKOS_ARCH),IntelGen11) +KOKKOS_INTERNAL_USE_ARCH_INTEL_GEN12LP := $(call kokkos_has_string,$(KOKKOS_ARCH),IntelGen12LP) +KOKKOS_INTERNAL_USE_ARCH_INTEL_DG1 := $(call kokkos_has_string,$(KOKKOS_ARCH),IntelDG1) +KOKKOS_INTERNAL_USE_ARCH_INTEL_XEHP := $(call kokkos_has_string,$(KOKKOS_ARCH),IntelXeHP) + # NVIDIA based. NVCC_WRAPPER := $(KOKKOS_PATH)/bin/nvcc_wrapper KOKKOS_INTERNAL_USE_ARCH_KEPLER30 := $(call kokkos_has_string,$(KOKKOS_ARCH),Kepler30) @@ -384,20 +412,25 @@ KOKKOS_INTERNAL_USE_ARCH_IBM := $(strip $(shell echo $(KOKKOS_INTERNAL_USE_ARCH_ KOKKOS_INTERNAL_USE_ARCH_AMDAVX := $(call kokkos_has_string,$(KOKKOS_ARCH),AMDAVX) KOKKOS_INTERNAL_USE_ARCH_ZEN3 := $(call kokkos_has_string,$(KOKKOS_ARCH),Zen3) KOKKOS_INTERNAL_USE_ARCH_ZEN2 := $(call kokkos_has_string,$(KOKKOS_ARCH),Zen2) -KOKKOS_INTERNAL_USE_ARCH_ZEN := $(call kokkos_has_string,$(KOKKOS_ARCH),Zen) +ifeq ($(KOKKOS_INTERNAL_USE_ARCH_ZEN3), 0) + ifeq ($(KOKKOS_INTERNAL_USE_ARCH_ZEN2), 0) + KOKKOS_INTERNAL_USE_ARCH_ZEN := $(call kokkos_has_string,$(KOKKOS_ARCH),Zen) + endif +endif KOKKOS_INTERNAL_USE_ARCH_VEGA900 := $(call kokkos_has_string,$(KOKKOS_ARCH),Vega900) KOKKOS_INTERNAL_USE_ARCH_VEGA906 := $(call kokkos_has_string,$(KOKKOS_ARCH),Vega906) KOKKOS_INTERNAL_USE_ARCH_VEGA908 := $(call kokkos_has_string,$(KOKKOS_ARCH),Vega908) +KOKKOS_INTERNAL_USE_ARCH_VEGA90A := $(call kokkos_has_string,$(KOKKOS_ARCH),Vega90A) # Any AVX? KOKKOS_INTERNAL_USE_ARCH_SSE42 := $(shell expr $(KOKKOS_INTERNAL_USE_ARCH_WSM)) KOKKOS_INTERNAL_USE_ARCH_AVX := $(shell expr $(KOKKOS_INTERNAL_USE_ARCH_SNB) + $(KOKKOS_INTERNAL_USE_ARCH_AMDAVX)) -KOKKOS_INTERNAL_USE_ARCH_AVX2 := $(shell expr $(KOKKOS_INTERNAL_USE_ARCH_HSW) + $(KOKKOS_INTERNAL_USE_ARCH_BDW) + $(KOKKOS_INTERNAL_USE_ARCH_ZEN) + $(KOKKOS_INTERNAL_USE_ARCH_ZEN2)) + $(KOKKOS_INTERNAL_USE_ARCH_ZEN3)) +KOKKOS_INTERNAL_USE_ARCH_AVX2 := $(shell expr $(KOKKOS_INTERNAL_USE_ARCH_HSW) + $(KOKKOS_INTERNAL_USE_ARCH_BDW) + $(KOKKOS_INTERNAL_USE_ARCH_ZEN) + $(KOKKOS_INTERNAL_USE_ARCH_ZEN2) + $(KOKKOS_INTERNAL_USE_ARCH_ZEN3)) KOKKOS_INTERNAL_USE_ARCH_AVX512MIC := $(shell expr $(KOKKOS_INTERNAL_USE_ARCH_KNL)) KOKKOS_INTERNAL_USE_ARCH_AVX512XEON := $(shell expr $(KOKKOS_INTERNAL_USE_ARCH_SKX)) # Decide what ISA level we are able to support. -KOKKOS_INTERNAL_USE_ISA_X86_64 := $(shell expr $(KOKKOS_INTERNAL_USE_ARCH_WSM) + $(KOKKOS_INTERNAL_USE_ARCH_SNB) + $(KOKKOS_INTERNAL_USE_ARCH_HSW) + $(KOKKOS_INTERNAL_USE_ARCH_BDW) + $(KOKKOS_INTERNAL_USE_ARCH_KNL) + $(KOKKOS_INTERNAL_USE_ARCH_SKX) + $(KOKKOS_INTERNAL_USE_ARCH_ZEN) + $(KOKKOS_INTERNAL_USE_ARCH_ZEN2)) + $(KOKKOS_INTERNAL_USE_ARCH_ZEN3)) +KOKKOS_INTERNAL_USE_ISA_X86_64 := $(shell expr $(KOKKOS_INTERNAL_USE_ARCH_WSM) + $(KOKKOS_INTERNAL_USE_ARCH_SNB) + $(KOKKOS_INTERNAL_USE_ARCH_HSW) + $(KOKKOS_INTERNAL_USE_ARCH_BDW) + $(KOKKOS_INTERNAL_USE_ARCH_KNL) + $(KOKKOS_INTERNAL_USE_ARCH_SKX) + $(KOKKOS_INTERNAL_USE_ARCH_ZEN) + $(KOKKOS_INTERNAL_USE_ARCH_ZEN2) + $(KOKKOS_INTERNAL_USE_ARCH_ZEN3)) KOKKOS_INTERNAL_USE_ISA_KNC := $(shell expr $(KOKKOS_INTERNAL_USE_ARCH_KNC)) KOKKOS_INTERNAL_USE_ISA_POWERPCLE := $(shell expr $(KOKKOS_INTERNAL_USE_ARCH_POWER8) + $(KOKKOS_INTERNAL_USE_ARCH_POWER9)) KOKKOS_INTERNAL_USE_ISA_POWERPCBE := $(shell expr $(KOKKOS_INTERNAL_USE_ARCH_POWER7)) @@ -406,7 +439,7 @@ KOKKOS_INTERNAL_USE_ISA_POWERPCBE := $(shell expr $(KOKKOS_INTERNAL_USE_ARCH_POW KOKKOS_INTERNAL_USE_TM := $(shell expr $(KOKKOS_INTERNAL_USE_ARCH_BDW) + $(KOKKOS_INTERNAL_USE_ARCH_SKX)) # Incompatible flags? -KOKKOS_INTERNAL_USE_ARCH_MULTIHOST := $(strip $(shell echo "$(KOKKOS_INTERNAL_USE_ARCH_SSE42)+$(KOKKOS_INTERNAL_USE_ARCH_AVX)+$(KOKKOS_INTERNAL_USE_ARCH_AVX2)+$(KOKKOS_INTERNAL_USE_ARCH_AVX512MIC)+$(KOKKOS_INTERNAL_USE_ARCH_AVX512XEON)+$(KOKKOS_INTERNAL_USE_ARCH_KNC)+$(KOKKOS_INTERNAL_USE_ARCH_IBM)+$(KOKKOS_INTERNAL_USE_ARCH_ARM)>1") | bc ) +KOKKOS_INTERNAL_USE_ARCH_MULTIHOST := $(strip $(shell echo "$(KOKKOS_INTERNAL_USE_ARCH_SSE42)+$(KOKKOS_INTERNAL_USE_ARCH_AVX)+$(KOKKOS_INTERNAL_USE_ARCH_AVX2)+$(KOKKOS_INTERNAL_USE_ARCH_AVX512MIC)+$(KOKKOS_INTERNAL_USE_ARCH_AVX512XEON)+$(KOKKOS_INTERNAL_USE_ARCH_KNC)+$(KOKKOS_INTERNAL_USE_ARCH_IBM)+$(KOKKOS_INTERNAL_USE_ARCH_ARM)>1") | bc) KOKKOS_INTERNAL_USE_ARCH_MULTIGPU := $(strip $(shell echo "$(KOKKOS_INTERNAL_USE_ARCH_NVIDIA)>1") | bc) ifeq ($(KOKKOS_INTERNAL_USE_ARCH_MULTIHOST), 1) @@ -442,6 +475,10 @@ KOKKOS_LINK_FLAGS = KOKKOS_SRC = KOKKOS_HEADERS = +#ifeq ($(KOKKOS_INTERNAL_COMPILER_GCC), 1) + KOKKOS_LIBS += -latomic +#endif + # Generating the KokkosCore_config.h file. KOKKOS_INTERNAL_CONFIG_TMP=KokkosCore_config.tmp @@ -478,6 +515,10 @@ ifeq ($(KOKKOS_INTERNAL_USE_HIP), 1) tmp := $(call kokkos_append_header,'$H''define KOKKOS_ENABLE_HIP') endif +ifeq ($(KOKKOS_INTERNAL_USE_SYCL), 1) + tmp := $(call kokkos_append_header,'$H''define KOKKOS_ENABLE_SYCL') +endif + ifeq ($(KOKKOS_INTERNAL_USE_OPENMPTARGET), 1) tmp := $(call kokkos_append_header,'$H''define KOKKOS_ENABLE_OPENMPTARGET') ifeq ($(KOKKOS_INTERNAL_COMPILER_GCC), 1) @@ -533,6 +574,12 @@ endif #only add the c++ standard flags if this is not CMake tmp := $(call kokkos_append_header,"/* General Settings */") +ifneq ($(KOKKOS_INTERNAL_DISABLE_DEPRECATED_CODE), 1) + tmp := $(call kokkos_append_header,"$H""define KOKKOS_ENABLE_DEPRECATED_CODE_3") +endif +ifeq ($(KOKKOS_INTERNAL_ENABLE_DEPRECATION_WARNINGS), 1) + tmp := $(call kokkos_append_header,"$H""define KOKKOS_ENABLE_DEPRECATION_WARNINGS") +endif ifeq ($(KOKKOS_INTERNAL_ENABLE_CXX14), 1) ifneq ($(KOKKOS_STANDALONE_CMAKE), yes) KOKKOS_CXXFLAGS += $(KOKKOS_INTERNAL_CXX14_FLAG) @@ -635,8 +682,10 @@ endif tmp := $(call kokkos_append_header,"/* Optimization Settings */") -ifeq ($(KOKKOS_INTERNAL_OPT_RANGE_AGGRESSIVE_VECTORIZATION), 1) +ifeq ($(KOKKOS_INTERNAL_AGGRESSIVE_VECTORIZATION), 1) + # deprecated tmp := $(call kokkos_append_header,"$H""define KOKKOS_OPT_RANGE_AGGRESSIVE_VECTORIZATION") + tmp := $(call kokkos_append_header,"$H""define KOKKOS_ENABLE_AGGRESSIVE_VECTORIZATION") endif tmp := $(call kokkos_append_header,"/* Cuda Settings */") @@ -1166,6 +1215,11 @@ ifeq ($(KOKKOS_INTERNAL_USE_HIP), 1) tmp := $(call kokkos_append_header,"$H""define KOKKOS_ARCH_VEGA908") KOKKOS_INTERNAL_HIP_ARCH_FLAG := --amdgpu-target=gfx908 endif + ifeq ($(KOKKOS_INTERNAL_USE_ARCH_VEGA90A), 1) + tmp := $(call kokkos_append_header,"$H""define KOKKOS_ARCH_HIP 90A") + tmp := $(call kokkos_append_header,"$H""define KOKKOS_ARCH_VEGA90A") + KOKKOS_INTERNAL_HIP_ARCH_FLAG := --amdgpu-target=gfx90a + endif KOKKOS_SRC += $(wildcard $(KOKKOS_PATH)/core/src/HIP/*.cpp) @@ -1184,6 +1238,52 @@ ifeq ($(KOKKOS_INTERNAL_USE_HIP), 1) endif endif +# Figure out the architecture flag for SYCL. +ifeq ($(KOKKOS_INTERNAL_USE_SYCL), 1) + # Lets start with adding architecture defines + ifeq ($(KOKKOS_INTERNAL_USE_ARCH_INTEL_GEN), 1) + tmp := $(call kokkos_append_header,"$H""define KOKKOS_ARCH_INTEL_GPU") + tmp := $(call kokkos_append_header,"$H""define KOKKOS_ARCH_INTEL_GEN") + KOKKOS_INTERNAL_SYCL_ARCH_FLAG := -fsycl-targets=spir64_gen-unknown-unknown-sycldevice -Xsycl-target-backend "-device gen9-" + endif + ifeq ($(KOKKOS_INTERNAL_USE_ARCH_INTEL_GEN9), 1) + tmp := $(call kokkos_append_header,"$H""define KOKKOS_ARCH_INTEL_GPU") + tmp := $(call kokkos_append_header,"$H""define KOKKOS_ARCH_INTEL_GEN9") + KOKKOS_INTERNAL_SYCL_ARCH_FLAG := -fsycl-targets=spir64_gen-unknown-unknown-sycldevice -Xsycl-target-backend "-device gen9" + endif + ifeq ($(KOKKOS_INTERNAL_USE_ARCH_INTEL_GEN11), 1) + tmp := $(call kokkos_append_header,"$H""define KOKKOS_ARCH_INTEL_GPU") + tmp := $(call kokkos_append_header,"$H""define KOKKOS_ARCH_INTEL_GEN11") + KOKKOS_INTERNAL_SYCL_ARCH_FLAG := -fsycl-targets=spir64_gen-unknown-unknown-sycldevice -Xsycl-target-backend "-device gen11" + endif + ifeq ($(KOKKOS_INTERNAL_USE_ARCH_INTEL_GEN12LP), 1) + tmp := $(call kokkos_append_header,"$H""define KOKKOS_ARCH_INTEL_GPU") + tmp := $(call kokkos_append_header,"$H""define KOKKOS_ARCH_INTEL_GEN12LP") + KOKKOS_INTERNAL_SYCL_ARCH_FLAG := -fsycl-targets=spir64_gen-unknown-unknown-sycldevice -Xsycl-target-backend "-device gen12lp" + endif + ifeq ($(KOKKOS_INTERNAL_USE_ARCH_INTEL_DG1), 1) + tmp := $(call kokkos_append_header,"$H""define KOKKOS_ARCH_INTEL_GPU") + tmp := $(call kokkos_append_header,"$H""define KOKKOS_ARCH_INTEL_DG1") + KOKKOS_INTERNAL_SYCL_ARCH_FLAG := -fsycl-targets=spir64_gen-unknown-unknown-sycldevice -Xsycl-target-backend "-device dg1" + endif + ifeq ($(KOKKOS_INTERNAL_USE_ARCH_INTEL_XEHP), 1) + tmp := $(call kokkos_append_header,"$H""define KOKKOS_ARCH_INTEL_GPU") + tmp := $(call kokkos_append_header,"$H""define KOKKOS_ARCH_INTEL_XEHP") + KOKKOS_INTERNAL_SYCL_ARCH_FLAG := -fsycl-targets=spir64_gen-unknown-unknown-sycldevice -Xsycl-target-backend "-device xehp" + endif + + KOKKOS_SRC += $(wildcard $(KOKKOS_PATH)/core/src/SYCL/*.cpp) + KOKKOS_HEADERS += $(wildcard $(KOKKOS_PATH)/core/src/SYCL/*.hpp) + + KOKKOS_CXXFLAGS+=-fsycl -fno-sycl-id-queries-fit-in-int -fsycl-unnamed-lambda + KOKKOS_CXXFLAGS+=$(KOKKOS_INTERNAL_SYCL_ARCH_FLAG) + KOKKOS_LDFLAGS+=-fsycl + KOKKOS_LDFLAGS+=$(KOKKOS_INTERNAL_SYCL_ARCH_FLAG) +endif + +ifeq ($(KOKKOS_INTERNAL_ENABLE_DESUL_ATOMICS), 1) + tmp := $(call kokkos_append_header,"$H""define KOKKOS_ENABLE_IMPL_DESUL_ATOMICS") +endif KOKKOS_INTERNAL_LS_CONFIG := $(shell ls KokkosCore_config.h 2>&1) @@ -1196,56 +1296,62 @@ endif ifneq ($(KOKKOS_INTERNAL_NEW_CONFIG), 0) tmp := $(shell cp KokkosCore_config.tmp KokkosCore_config.h) -# Functions for generating config header file -kokkos_start_config_header = $(shell sed 's~@INCLUDE_NEXT_FILE@~~g' $(KOKKOS_PATH)/cmake/KokkosCore_Config_HeaderSet.in > $1) -kokkos_update_config_header = $(shell sed 's~@HEADER_GUARD_TAG@~$1~g' $2 > $3) -kokkos_append_config_header = $(shell echo $1 >> $2)) -tmp := $(call kokkos_start_config_header, "KokkosCore_Config_FwdBackend.tmp") -tmp := $(call kokkos_start_config_header, "KokkosCore_Config_SetupBackend.tmp") -tmp := $(call kokkos_start_config_header, "KokkosCore_Config_DeclareBackend.tmp") -tmp := $(call kokkos_start_config_header, "KokkosCore_Config_PostInclude.tmp") -tmp := $(call kokkos_update_config_header, KOKKOS_FWD_HPP_, "KokkosCore_Config_FwdBackend.tmp", "KokkosCore_Config_FwdBackend.hpp") -tmp := $(call kokkos_update_config_header, KOKKOS_SETUP_HPP_, "KokkosCore_Config_SetupBackend.tmp", "KokkosCore_Config_SetupBackend.hpp") -tmp := $(call kokkos_update_config_header, KOKKOS_DECLARE_HPP_, "KokkosCore_Config_DeclareBackend.tmp", "KokkosCore_Config_DeclareBackend.hpp") -tmp := $(call kokkos_update_config_header, KOKKOS_POST_INCLUDE_HPP_, "KokkosCore_Config_PostInclude.tmp", "KokkosCore_Config_PostInclude.hpp") -ifeq ($(KOKKOS_INTERNAL_USE_CUDA), 1) - tmp := $(call kokkos_append_config_header,"$H""include ","KokkosCore_Config_FwdBackend.hpp") - tmp := $(call kokkos_append_config_header,"$H""include ","KokkosCore_Config_DeclareBackend.hpp") - tmp := $(call kokkos_append_config_header,"$H""include ","KokkosCore_Config_SetupBackend.hpp") - ifeq ($(KOKKOS_INTERNAL_CUDA_USE_UVM), 1) - else - endif -endif -ifeq ($(KOKKOS_INTERNAL_USE_OPENMPTARGET), 1) - tmp := $(call kokkos_append_config_header,"$H""include ","KokkosCore_Config_FwdBackend.hpp") - tmp := $(call kokkos_append_config_header,"$H""include ","KokkosCore_Config_DeclareBackend.hpp") -endif -ifeq ($(KOKKOS_INTERNAL_USE_HIP), 1) - tmp := $(call kokkos_append_config_header,"$H""include ","KokkosCore_Config_FwdBackend.hpp") - tmp := $(call kokkos_append_config_header,"$H""include ","KokkosCore_Config_DeclareBackend.hpp") - tmp := $(call kokkos_append_config_header,"$H""include ","KokkosCore_Config_SetupBackend.hpp") -endif -ifeq ($(KOKKOS_INTERNAL_USE_OPENMP), 1) - tmp := $(call kokkos_append_config_header,"$H""include ","KokkosCore_Config_FwdBackend.hpp") - tmp := $(call kokkos_append_config_header,"$H""include ","KokkosCore_Config_DeclareBackend.hpp") -endif -ifeq ($(KOKKOS_INTERNAL_USE_PTHREADS), 1) - tmp := $(call kokkos_append_config_header,"$H""include ","KokkosCore_Config_FwdBackend.hpp") - tmp := $(call kokkos_append_config_header,"$H""include ","KokkosCore_Config_DeclareBackend.hpp") -endif -ifeq ($(KOKKOS_INTERNAL_USE_HPX), 1) - tmp := $(call kokkos_append_config_header,"$H""include ","KokkosCore_Config_FwdBackend.hpp") - tmp := $(call kokkos_append_config_header,"$H""include ","KokkosCore_Config_DeclareBackend.hpp") -endif -ifeq ($(KOKKOS_INTERNAL_USE_SERIAL), 1) - tmp := $(call kokkos_append_config_header,"$H""include ","KokkosCore_Config_FwdBackend.hpp") - tmp := $(call kokkos_append_config_header,"$H""include ","KokkosCore_Config_DeclareBackend.hpp") -endif -ifeq ($(KOKKOS_INTERNAL_USE_MEMKIND), 1) - tmp := $(call kokkos_append_config_header,"$H""include ","KokkosCore_Config_FwdBackend.hpp") - tmp := $(call kokkos_append_config_header,"$H""include ","KokkosCore_Config_DeclareBackend.hpp") -endif + # Functions for generating config header file + kokkos_start_config_header = $(shell sed 's~@INCLUDE_NEXT_FILE@~~g' $(KOKKOS_PATH)/cmake/KokkosCore_Config_HeaderSet.in > $1) + kokkos_update_config_header = $(shell sed 's~@HEADER_GUARD_TAG@~$1~g' $2 > $3) + kokkos_append_config_header = $(shell echo $1 >> $2)) + tmp := $(call kokkos_start_config_header, "KokkosCore_Config_FwdBackend.tmp") + tmp := $(call kokkos_start_config_header, "KokkosCore_Config_SetupBackend.tmp") + tmp := $(call kokkos_start_config_header, "KokkosCore_Config_DeclareBackend.tmp") + tmp := $(call kokkos_start_config_header, "KokkosCore_Config_PostInclude.tmp") + tmp := $(call kokkos_update_config_header, KOKKOS_FWD_HPP_, "KokkosCore_Config_FwdBackend.tmp", "KokkosCore_Config_FwdBackend.hpp") + tmp := $(call kokkos_update_config_header, KOKKOS_SETUP_HPP_, "KokkosCore_Config_SetupBackend.tmp", "KokkosCore_Config_SetupBackend.hpp") + tmp := $(call kokkos_update_config_header, KOKKOS_DECLARE_HPP_, "KokkosCore_Config_DeclareBackend.tmp", "KokkosCore_Config_DeclareBackend.hpp") + tmp := $(call kokkos_update_config_header, KOKKOS_POST_INCLUDE_HPP_, "KokkosCore_Config_PostInclude.tmp", "KokkosCore_Config_PostInclude.hpp") + ifeq ($(KOKKOS_INTERNAL_USE_CUDA), 1) + tmp := $(call kokkos_append_config_header,"$H""include ","KokkosCore_Config_FwdBackend.hpp") + tmp := $(call kokkos_append_config_header,"$H""include ","KokkosCore_Config_DeclareBackend.hpp") + tmp := $(call kokkos_append_config_header,"$H""include ","KokkosCore_Config_SetupBackend.hpp") + ifeq ($(KOKKOS_INTERNAL_CUDA_USE_UVM), 1) + else + endif + endif + ifeq ($(KOKKOS_INTERNAL_USE_OPENMPTARGET), 1) + tmp := $(call kokkos_append_config_header,"$H""include ","KokkosCore_Config_FwdBackend.hpp") + tmp := $(call kokkos_append_config_header,"$H""include ","KokkosCore_Config_DeclareBackend.hpp") + endif + ifeq ($(KOKKOS_INTERNAL_USE_SYCL), 1) + tmp := $(call kokkos_append_config_header,"$H""include ","KokkosCore_Config_FwdBackend.hpp") + tmp := $(call kokkos_append_config_header,"$H""include ","KokkosCore_Config_DeclareBackend.hpp") + tmp := $(call kokkos_append_config_header,"$H""include ","KokkosCore_Config_SetupBackend.hpp") + endif + ifeq ($(KOKKOS_INTERNAL_USE_HIP), 1) + tmp := $(call kokkos_append_config_header,"$H""include ","KokkosCore_Config_FwdBackend.hpp") + tmp := $(call kokkos_append_config_header,"$H""include ","KokkosCore_Config_DeclareBackend.hpp") + tmp := $(call kokkos_append_config_header,"$H""include ","KokkosCore_Config_SetupBackend.hpp") + endif + ifeq ($(KOKKOS_INTERNAL_USE_OPENMP), 1) + tmp := $(call kokkos_append_config_header,"$H""include ","KokkosCore_Config_FwdBackend.hpp") + tmp := $(call kokkos_append_config_header,"$H""include ","KokkosCore_Config_DeclareBackend.hpp") + endif + ifeq ($(KOKKOS_INTERNAL_USE_PTHREADS), 1) + tmp := $(call kokkos_append_config_header,"$H""include ","KokkosCore_Config_FwdBackend.hpp") + tmp := $(call kokkos_append_config_header,"$H""include ","KokkosCore_Config_DeclareBackend.hpp") + endif + ifeq ($(KOKKOS_INTERNAL_USE_HPX), 1) + tmp := $(call kokkos_append_config_header,"$H""include ","KokkosCore_Config_FwdBackend.hpp") + tmp := $(call kokkos_append_config_header,"$H""include ","KokkosCore_Config_DeclareBackend.hpp") + endif + ifeq ($(KOKKOS_INTERNAL_USE_SERIAL), 1) + tmp := $(call kokkos_append_config_header,"$H""include ","KokkosCore_Config_FwdBackend.hpp") + tmp := $(call kokkos_append_config_header,"$H""include ","KokkosCore_Config_DeclareBackend.hpp") + endif + ifeq ($(KOKKOS_INTERNAL_USE_MEMKIND), 1) + tmp := $(call kokkos_append_config_header,"$H""include ","KokkosCore_Config_FwdBackend.hpp") + tmp := $(call kokkos_append_config_header,"$H""include ","KokkosCore_Config_DeclareBackend.hpp") + endif endif + KOKKOS_HEADERS += $(wildcard $(KOKKOS_PATH)/core/src/*.hpp) KOKKOS_HEADERS += $(wildcard $(KOKKOS_PATH)/core/src/impl/*.hpp) KOKKOS_HEADERS += $(wildcard $(KOKKOS_PATH)/containers/src/*.hpp) @@ -1257,6 +1363,9 @@ KOKKOS_SRC += $(wildcard $(KOKKOS_PATH)/containers/src/impl/*.cpp) ifeq ($(KOKKOS_INTERNAL_USE_CUDA), 1) KOKKOS_SRC += $(wildcard $(KOKKOS_PATH)/core/src/Cuda/*.cpp) + ifeq ($(KOKKOS_INTERNAL_ENABLE_DESUL_ATOMICS), 1) + KOKKOS_SRC += $(KOKKOS_PATH)/core/src/desul/src/Lock_Array_CUDA.cpp + endif KOKKOS_HEADERS += $(wildcard $(KOKKOS_PATH)/core/src/Cuda/*.hpp) ifneq ($(CUDA_PATH),) KOKKOS_CPPLAGS += -I$(CUDA_PATH)/include diff --git a/lib/kokkos/Makefile.targets b/lib/kokkos/Makefile.targets index cf9fc24242..93854d0cf1 100644 --- a/lib/kokkos/Makefile.targets +++ b/lib/kokkos/Makefile.targets @@ -48,6 +48,17 @@ Kokkos_Cuda_Task.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_PATH)/core/src/Cuda/Kokkos_Cu $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_PATH)/core/src/Cuda/Kokkos_Cuda_Task.cpp Kokkos_Cuda_Locks.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_PATH)/core/src/Cuda/Kokkos_Cuda_Locks.cpp $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_PATH)/core/src/Cuda/Kokkos_Cuda_Locks.cpp +Lock_Array_CUDA.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_PATH)/core/src/desul/src/Lock_Array_CUDA.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_PATH)/core/src/desul/src/Lock_Array_CUDA.cpp +endif + +ifeq ($(KOKKOS_INTERNAL_USE_SYCL), 1) +Kokkos_SYCL.o : $(KOKKOS_CPP_DEPENDS) $(KOKKOS_PATH)/core/src/SYCL/Kokkos_SYCL.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_PATH)/core/src/SYCL/Kokkos_SYCL.cpp +Kokkos_SYCL_Space.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_PATH)/core/src/SYCL/Kokkos_SYCL_Space.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_PATH)/core/src/SYCL/Kokkos_SYCL_Space.cpp +Kokkos_SYCL_Instance.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_PATH)/core/src/SYCL/Kokkos_SYCL_Instance.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_PATH)/core/src/SYCL/Kokkos_SYCL_Instance.cpp endif ifeq ($(KOKKOS_INTERNAL_USE_HIP), 1) diff --git a/lib/kokkos/README.md b/lib/kokkos/README.md index d55ef2caac..673f462712 100644 --- a/lib/kokkos/README.md +++ b/lib/kokkos/README.md @@ -7,7 +7,7 @@ applications targeting all major HPC platforms. For that purpose it provides abstractions for both parallel execution of code and data management. Kokkos is designed to target complex node architectures with N-level memory hierarchies and multiple types of execution resources. It currently can use -CUDA, HPX, OpenMP and Pthreads as backend programming models with several other +CUDA, HIP, SYCL, HPX, OpenMP and C++ threads as backend programming models with several other backends in development. Kokkos Core is part of the Kokkos C++ Performance Portability Programming EcoSystem, @@ -16,29 +16,19 @@ profiling and debugging tools (https://github.com/kokkos/kokkos-tools). # Learning about Kokkos -A programming guide can be found on the Wiki, the API reference is under development. +The best way to start learning about Kokkos is going through the Kokkos Lectures. +They are online available at https://kokkos.link/the-lectures and contain a mix +of lecture videos and hands-on exercises covering all the important Kokkos Ecosystem +capabilities. + +A programming guide and API reference can be found on the Wiki +(https://github.com/kokkos/kokkos/wiki). For questions find us on Slack: https://kokkosteam.slack.com or open a github issue. For non-public questions send an email to crtrott(at)sandia.gov -A separate repository with extensive tutorial material can be found under -https://github.com/kokkos/kokkos-tutorials. - -Furthermore, the 'example/tutorial' directory provides step by step tutorial -examples which explain many of the features of Kokkos. They work with -simple Makefiles. To build with g++ and OpenMP simply type 'make' -in the 'example/tutorial' directory. This will build all examples in the -subfolders. To change the build options refer to the Programming Guide -in the compilation section. - -To learn more about Kokkos consider watching one of our presentations: -* GTC 2015: - - http://on-demand.gputechconf.com/gtc/2015/video/S5166.html - - http://on-demand.gputechconf.com/gtc/2015/presentation/S5166-H-Carter-Edwards.pdf - - # Contributing to Kokkos We are open and try to encourage contributions from external developers. @@ -53,57 +43,40 @@ For specifics see the LICENSE file contained in the repository or distribution. # Requirements -### Primary tested compilers on X86 are: -* GCC 5.3.0 -* GCC 5.4.0 -* GCC 5.5.0 -* GCC 6.1.0 -* GCC 7.2.0 -* GCC 7.3.0 -* GCC 8.1.0 -* Intel 17.0.1 -* Intel 17.4.196 -* Intel 18.2.128 -* Clang 4.0.0 -* Clang 6.0.0 for CUDA (CUDA Toolkit 9.0) -* Clang 7.0.0 for CUDA (CUDA Toolkit 9.1) -* Clang 8.0.0 for CUDA (CUDA Toolkit 9.2) -* PGI 18.7 -* NVCC 9.1 for CUDA (with gcc 6.1.0) -* NVCC 9.2 for CUDA (with gcc 7.2.0) -* NVCC 10.0 for CUDA (with gcc 7.4.0) -* NVCC 10.1 for CUDA (with gcc 7.4.0) -* NVCC 11.0 for CUDA (with gcc 8.4.0) +### Minimum Compiler Versions -### Primary tested compilers on Power 8 are: -* GCC 6.4.0 (OpenMP,Serial) -* GCC 7.2.0 (OpenMP,Serial) -* IBM XL 16.1.0 (OpenMP, Serial) -* NVCC 9.2.88 for CUDA (with gcc 7.2.0 and XL 16.1.0) +Generally Kokkos should work with all compiler versions newer than the minimum. +However as in all sufficiently complex enough code, we have to work around compiler +bugs with almost all compilers. So compiler versions we don't test may have issues +we are unaware off. -### Primary tested compilers on Intel KNL are: -* Intel 17.2.174 (with gcc 6.2.0 and 6.4.0) -* Intel 18.2.199 (with gcc 6.2.0 and 6.4.0) +* GCC: 5.3.0 +* Clang: 4.0.0 +* Intel: 17.0.1 +* NVCC: 9.2.88 +* NVC++: 21.5 +* ROCM: 4.3 +* MSVC: 19.29 +* IBM XL: 16.1.1 +* Fujitsu: 4.5.0 +* ARM/Clang 20.1 -### Primary tested compilers on ARM (Cavium ThunderX2) -* GCC 7.2.0 -* ARM/Clang 18.4.0 +### Primary Tested Compilers -### Other compilers working: -* X86: - * Cygwin 2.1.0 64bit with gcc 4.9.3 - * GCC 8.1.0 (not warning free) - -### Known non-working combinations: -* Power8: - * Pthreads backend -* ARM - * Pthreads backend +* GCC: 5.3.0, 6.1.0, 7.3.0, 8.3, 9.2, 10.0 +* NVCC: 9.2.88, 10.1, 11.0 +* Clang: 8.0.0, 9.0.0, 10.0.0, 12.0.0 +* Intel 17.4, 18.1, 19.5 +* MSVC: 19.29 +* ARM/Clang: 20.1 +* IBM XL: 16.1.1 +* ROCM: 4.3.0 ### Build system: -* CMake >= 3.10: required -* CMake >= 3.13: recommended + +* CMake >= 3.16: required * CMake >= 3.18: Fortran linkage. This does not affect most mixed Fortran/Kokkos builds. See [build issues](BUILD.md#KnownIssues). +* CMake >= 3.21.1 for NVC++ Primary tested compiler are passing in release mode with warnings as errors. They also are tested with a comprehensive set of @@ -153,7 +126,6 @@ cmake $srcdir \ -DCMAKE_INSTALL_PREFIX=$path_to_install \ -DKokkos_ENABLE_OPENMP=On \ -DKokkos_ARCH_HSW=On \ - -DKokkos_ENABLE_HWLOC=On \ -DKokkos_HWLOC_DIR=$path_to_hwloc ```` then simply type `make install`. The Kokkos CMake package will then be installed in `$path_to_install` to be used by downstream packages. @@ -212,23 +184,8 @@ where `...` is the unique spec identifying the particular Kokkos configuration a Some more details can found in the Kokkos spack [documentation](Spack.md) or the Spack [website](https://spack.readthedocs.io/en/latest). ## Raw Makefile -A bash script is provided to generate raw makefiles. -To install Kokkos as a library create a build directory and run the following -````bash -> $KOKKOS_PATH/generate_makefile.bash --prefix=$path_to_install -```` -Once the Makefile is generated, run: -````bash -> make kokkoslib -> make install -```` -To additionally run the unit tests: -````bash -> make build-test -> make test -```` -Run `generate_makefile.bash --help` for more detailed options such as -changing the device type for which to build. + +Raw Makefiles are only supported via inline builds. See below. ## Inline Builds vs. Installed Package For individual projects, it may be preferable to build Kokkos inline rather than link to an installed package. @@ -268,6 +225,35 @@ more than a single GPU is used by a single process. If you publish work which mentions Kokkos, please cite the following paper: +````BibTex +@ARTICLE{9485033, + author={Trott, Christian R. and Lebrun-Grandié, Damien and Arndt, Daniel and Ciesko, Jan and Dang, Vinh and Ellingwood, Nathan and Gayatri, Rahulkumar and Harvey, Evan and Hollman, Daisy S. and Ibanez, Dan and Liber, Nevin and Madsen, Jonathan and Miles, Jeff and Poliakoff, David and Powell, Amy and Rajamanickam, Sivasankaran and Simberg, Mikael and Sunderland, Dan and Turcksin, Bruno and Wilke, Jeremiah}, + journal={IEEE Transactions on Parallel and Distributed Systems}, + title={Kokkos 3: Programming Model Extensions for the Exascale Era}, + year={2022}, + volume={33}, + number={4}, + pages={805-817}, + doi={10.1109/TPDS.2021.3097283}} +```` + +If you use more than one Kokkos EcoSystem package, please also cite: + +````BibTex +@ARTICLE{9502936, + author={Trott, Christian and Berger-Vergiat, Luc and Poliakoff, David and Rajamanickam, Sivasankaran and Lebrun-Grandie, Damien and Madsen, Jonathan and Al Awar, Nader and Gligoric, Milos and Shipman, Galen and Womeldorff, Geoff}, + journal={Computing in Science Engineering}, + title={The Kokkos EcoSystem: Comprehensive Performance Portability for High Performance Computing}, + year={2021}, + volume={23}, + number={5}, + pages={10-18}, + doi={10.1109/MCSE.2021.3098509}} +```` + + +And if you feel generous: feel free to cite the original Kokkos paper which describes most of the basic Kokkos concepts: + ````BibTeX @article{CarterEdwards20143202, title = "Kokkos: Enabling manycore performance portability through polymorphic memory access patterns ", diff --git a/lib/kokkos/algorithms/CMakeLists.txt b/lib/kokkos/algorithms/CMakeLists.txt index 4df76a1dbb..eb54db8a55 100644 --- a/lib/kokkos/algorithms/CMakeLists.txt +++ b/lib/kokkos/algorithms/CMakeLists.txt @@ -5,9 +5,7 @@ KOKKOS_SUBPACKAGE(Algorithms) IF (NOT Kokkos_INSTALL_TESTING) ADD_SUBDIRECTORY(src) ENDIF() -IF(NOT (KOKKOS_ENABLE_OPENMPTARGET - AND (KOKKOS_CXX_COMPILER_ID STREQUAL PGI OR - KOKKOS_CXX_COMPILER_ID STREQUAL NVHPC))) +IF(NOT (KOKKOS_ENABLE_OPENMPTARGET AND KOKKOS_CXX_COMPILER_ID STREQUAL NVHPC)) KOKKOS_ADD_TEST_DIRECTORIES(unit_tests) ENDIF() diff --git a/lib/kokkos/algorithms/src/Kokkos_Random.hpp b/lib/kokkos/algorithms/src/Kokkos_Random.hpp index 55ce19971f..46b8ab87fa 100644 --- a/lib/kokkos/algorithms/src/Kokkos_Random.hpp +++ b/lib/kokkos/algorithms/src/Kokkos_Random.hpp @@ -447,6 +447,25 @@ struct rand { } }; +#if defined(KOKKOS_HALF_T_IS_FLOAT) && !KOKKOS_HALF_T_IS_FLOAT +template +struct rand { + using half = Kokkos::Experimental::half_t; + KOKKOS_INLINE_FUNCTION + static half max() { return half(1.0); } + KOKKOS_INLINE_FUNCTION + static half draw(Generator& gen) { return half(gen.frand()); } + KOKKOS_INLINE_FUNCTION + static half draw(Generator& gen, const half& range) { + return half(gen.frand(float(range))); + } + KOKKOS_INLINE_FUNCTION + static half draw(Generator& gen, const half& start, const half& end) { + return half(gen.frand(float(start), float(end))); + } +}; +#endif // defined(KOKKOS_HALF_T_IS_FLOAT) && !KOKKOS_HALF_T_IS_FLOAT + template struct rand { KOKKOS_INLINE_FUNCTION @@ -600,7 +619,7 @@ struct Random_XorShift1024_UseCArrayState template struct Random_UniqueIndex { - using locks_view_type = View; + using locks_view_type = View; KOKKOS_FUNCTION static int get_state_idx(const locks_view_type) { #ifdef KOKKOS_ACTIVE_EXECUTION_MEMORY_SPACE_HOST @@ -615,7 +634,7 @@ struct Random_UniqueIndex { #ifdef KOKKOS_ENABLE_CUDA template <> struct Random_UniqueIndex { - using locks_view_type = View; + using locks_view_type = View; KOKKOS_FUNCTION static int get_state_idx(const locks_view_type& locks_) { #ifdef __CUDA_ARCH__ @@ -625,7 +644,7 @@ struct Random_UniqueIndex { blockDim.x * blockDim.y * blockDim.z + i_offset) % locks_.extent(0); - while (Kokkos::atomic_compare_exchange(&locks_(i), 0, 1)) { + while (Kokkos::atomic_compare_exchange(&locks_(i, 0), 0, 1)) { i += blockDim.x * blockDim.y * blockDim.z; if (i >= static_cast(locks_.extent(0))) { i = i_offset; @@ -643,7 +662,7 @@ struct Random_UniqueIndex { #ifdef KOKKOS_ENABLE_HIP template <> struct Random_UniqueIndex { - using locks_view_type = View; + using locks_view_type = View; KOKKOS_FUNCTION static int get_state_idx(const locks_view_type& locks_) { #ifdef __HIP_DEVICE_COMPILE__ @@ -653,7 +672,7 @@ struct Random_UniqueIndex { blockDim.x * blockDim.y * blockDim.z + i_offset) % locks_.extent(0); - while (Kokkos::atomic_compare_exchange(&locks_(i), 0, 1)) { + while (Kokkos::atomic_compare_exchange(&locks_(i, 0), 0, 1)) { i += blockDim.x * blockDim.y * blockDim.z; if (i >= static_cast(locks_.extent(0))) { i = i_offset; @@ -671,15 +690,15 @@ struct Random_UniqueIndex { #ifdef KOKKOS_ENABLE_SYCL template <> struct Random_UniqueIndex { - using locks_view_type = View; + using locks_view_type = View; KOKKOS_FUNCTION static int get_state_idx(const locks_view_type& locks_) { -#ifdef KOKKOS_ARCH_INTEL_GEN +#ifdef KOKKOS_ARCH_INTEL_GPU int i = Kokkos::Impl::clock_tic() % locks_.extent(0); #else int i = 0; #endif - while (Kokkos::atomic_compare_exchange(&locks_(i), 0, 1)) { + while (Kokkos::atomic_compare_exchange(&locks_(i, 0), 0, 1)) { i = (i + 1) % static_cast(locks_.extent(0)); } return i; @@ -690,14 +709,14 @@ struct Random_UniqueIndex { #ifdef KOKKOS_ENABLE_OPENMPTARGET template <> struct Random_UniqueIndex { - using locks_view_type = View; + using locks_view_type = View; KOKKOS_FUNCTION static int get_state_idx(const locks_view_type& locks) { const int team_size = omp_get_num_threads(); int i = omp_get_team_num() * team_size + omp_get_thread_num(); const int lock_size = locks.extent_int(0); - while (Kokkos::atomic_compare_exchange(&locks(i), 0, 1)) { + while (Kokkos::atomic_compare_exchange(&locks(i, 0), 0, 1)) { i = (i + 1) % lock_size; } return i; @@ -856,18 +875,22 @@ template class Random_XorShift64_Pool { private: using execution_space = typename DeviceType::execution_space; - using locks_type = View; - using state_data_type = View; + using locks_type = View; + using state_data_type = View; locks_type locks_; state_data_type state_; int num_states_; + int padding_; public: using generator_type = Random_XorShift64; using device_type = DeviceType; KOKKOS_INLINE_FUNCTION - Random_XorShift64_Pool() { num_states_ = 0; } + Random_XorShift64_Pool() { + num_states_ = 0; + padding_ = 0; + } Random_XorShift64_Pool(uint64_t seed) { num_states_ = 0; @@ -883,16 +906,22 @@ class Random_XorShift64_Pool { locks_ = src.locks_; state_ = src.state_; num_states_ = src.num_states_; + padding_ = src.padding_; return *this; } void init(uint64_t seed, int num_states) { if (seed == 0) seed = uint64_t(1318319); - + // I only want to pad on CPU like archs (less than 1000 threads). 64 is a + // magic number, or random number I just wanted something not too large and + // not too small. 64 sounded fine. + padding_ = num_states < 1000 ? 64 : 1; num_states_ = num_states; - locks_ = locks_type("Kokkos::Random_XorShift64::locks", num_states_); - state_ = state_data_type("Kokkos::Random_XorShift64::state", num_states_); + locks_ = + locks_type("Kokkos::Random_XorShift64::locks", num_states, padding_); + state_ = state_data_type("Kokkos::Random_XorShift64::state", num_states_, + padding_); typename state_data_type::HostMirror h_state = create_mirror_view(state_); typename locks_type::HostMirror h_lock = create_mirror_view(locks_); @@ -902,15 +931,15 @@ class Random_XorShift64_Pool { gen(seed, 0); for (int i = 0; i < 17; i++) gen.rand(); for (int i = 0; i < num_states_; i++) { - int n1 = gen.rand(); - int n2 = gen.rand(); - int n3 = gen.rand(); - int n4 = gen.rand(); - h_state(i) = (((static_cast(n1)) & 0xffff) << 00) | - (((static_cast(n2)) & 0xffff) << 16) | - (((static_cast(n3)) & 0xffff) << 32) | - (((static_cast(n4)) & 0xffff) << 48); - h_lock(i) = 0; + int n1 = gen.rand(); + int n2 = gen.rand(); + int n3 = gen.rand(); + int n4 = gen.rand(); + h_state(i, 0) = (((static_cast(n1)) & 0xffff) << 00) | + (((static_cast(n2)) & 0xffff) << 16) | + (((static_cast(n3)) & 0xffff) << 32) | + (((static_cast(n4)) & 0xffff) << 48); + h_lock(i, 0) = 0; } deep_copy(state_, h_state); deep_copy(locks_, h_lock); @@ -920,19 +949,19 @@ class Random_XorShift64_Pool { Random_XorShift64 get_state() const { const int i = Impl::Random_UniqueIndex::get_state_idx(locks_); - return Random_XorShift64(state_(i), i); + return Random_XorShift64(state_(i, 0), i); } // NOTE: state_idx MUST be unique and less than num_states KOKKOS_INLINE_FUNCTION Random_XorShift64 get_state(const int state_idx) const { - return Random_XorShift64(state_(state_idx), state_idx); + return Random_XorShift64(state_(state_idx, 0), state_idx); } KOKKOS_INLINE_FUNCTION void free_state(const Random_XorShift64& state) const { - state_(state.state_idx_) = state.state_; - locks_(state.state_idx_) = 0; + state_(state.state_idx_, 0) = state.state_; + locks_(state.state_idx_, 0) = 0; } }; @@ -1092,14 +1121,15 @@ template class Random_XorShift1024_Pool { private: using execution_space = typename DeviceType::execution_space; - using locks_type = View; - using int_view_type = View; + using locks_type = View; + using int_view_type = View; using state_data_type = View; locks_type locks_; state_data_type state_; int_view_type p_; int num_states_; + int padding_; friend class Random_XorShift1024; public: @@ -1129,15 +1159,21 @@ class Random_XorShift1024_Pool { state_ = src.state_; p_ = src.p_; num_states_ = src.num_states_; + padding_ = src.padding_; return *this; } inline void init(uint64_t seed, int num_states) { if (seed == 0) seed = uint64_t(1318319); + // I only want to pad on CPU like archs (less than 1000 threads). 64 is a + // magic number, or random number I just wanted something not too large and + // not too small. 64 sounded fine. + padding_ = num_states < 1000 ? 64 : 1; num_states_ = num_states; - locks_ = locks_type("Kokkos::Random_XorShift1024::locks", num_states_); + locks_ = + locks_type("Kokkos::Random_XorShift1024::locks", num_states_, padding_); state_ = state_data_type("Kokkos::Random_XorShift1024::state", num_states_); - p_ = int_view_type("Kokkos::Random_XorShift1024::p", num_states_); + p_ = int_view_type("Kokkos::Random_XorShift1024::p", num_states_, padding_); typename state_data_type::HostMirror h_state = create_mirror_view(state_); typename locks_type::HostMirror h_lock = create_mirror_view(locks_); @@ -1158,8 +1194,8 @@ class Random_XorShift1024_Pool { (((static_cast(n3)) & 0xffff) << 32) | (((static_cast(n4)) & 0xffff) << 48); } - h_p(i) = 0; - h_lock(i) = 0; + h_p(i, 0) = 0; + h_lock(i, 0) = 0; } deep_copy(state_, h_state); deep_copy(locks_, h_lock); @@ -1169,20 +1205,20 @@ class Random_XorShift1024_Pool { Random_XorShift1024 get_state() const { const int i = Impl::Random_UniqueIndex::get_state_idx(locks_); - return Random_XorShift1024(state_, p_(i), i); + return Random_XorShift1024(state_, p_(i, 0), i); }; // NOTE: state_idx MUST be unique and less than num_states KOKKOS_INLINE_FUNCTION Random_XorShift1024 get_state(const int state_idx) const { - return Random_XorShift1024(state_, p_(state_idx), state_idx); + return Random_XorShift1024(state_, p_(state_idx, 0), state_idx); } KOKKOS_INLINE_FUNCTION void free_state(const Random_XorShift1024& state) const { for (int i = 0; i < 16; i++) state_(state.state_idx_, i) = state.state_[i]; - p_(state.state_idx_) = state.p_; - locks_(state.state_idx_) = 0; + p_(state.state_idx_, 0) = state.p_; + locks_(state.state_idx_, 0) = 0; } }; diff --git a/lib/kokkos/algorithms/src/Kokkos_Sort.hpp b/lib/kokkos/algorithms/src/Kokkos_Sort.hpp index d17c02776f..7c1ce4c4cd 100644 --- a/lib/kokkos/algorithms/src/Kokkos_Sort.hpp +++ b/lib/kokkos/algorithms/src/Kokkos_Sort.hpp @@ -319,7 +319,7 @@ class BinSort { Kokkos::RangePolicy(0, len), functor); } - execution_space().fence(); + execution_space().fence("Kokkos::Sort: fence after sorting"); } template @@ -492,7 +492,8 @@ bool try_std_sort(ViewType view) { view.stride_3(), view.stride_4(), view.stride_5(), view.stride_6(), view.stride_7()}; possible = possible && - std::is_same::value; + SpaceAccessibility::accessible; possible = possible && (ViewType::Rank == 1); possible = possible && (stride[0] == 1); if (possible) { diff --git a/lib/kokkos/algorithms/unit_tests/TestRandom.hpp b/lib/kokkos/algorithms/unit_tests/TestRandom.hpp index c37e779c99..3dffce7df4 100644 --- a/lib/kokkos/algorithms/unit_tests/TestRandom.hpp +++ b/lib/kokkos/algorithms/unit_tests/TestRandom.hpp @@ -47,7 +47,7 @@ #include #include #include -#include +#include #include #include #include @@ -198,11 +198,50 @@ struct test_random_functor { static_cast(1.0 * HIST_DIM3D * tmp2 / theMax); const uint64_t ind3_3d = static_cast(1.0 * HIST_DIM3D * tmp3 / theMax); - +// Workaround Intel 17 compiler bug which sometimes add random +// instruction alignment which makes the lock instruction +// illegal. Seems to be mostly just for unsigned int atomics. +// Looking at the assembly the compiler +// appears to insert cache line alignment for the instruction. +// Isn't restricted to specific archs. Seen it on SNB and SKX, but for +// different code. Another occurrence was with Desul atomics in +// a different unit test. This one here happens without desul atomics. +// Inserting an assembly nop instruction changes the alignment and +// works round this. +// +// 17.0.4 for 64bit Random works with 1/1/1/2/1 +// 17.0.4 for 1024bit Random works with 1/1/1/1/1 +#ifdef KOKKOS_COMPILER_INTEL +#if (KOKKOS_COMPILER_INTEL < 1800) + asm volatile("nop\n"); +#endif +#endif atomic_fetch_add(&density_1d(ind1_1d), 1); +#ifdef KOKKOS_COMPILER_INTEL +#if (KOKKOS_COMPILER_INTEL < 1800) + asm volatile("nop\n"); +#endif +#endif atomic_fetch_add(&density_1d(ind2_1d), 1); +#ifdef KOKKOS_COMPILER_INTEL +#if (KOKKOS_COMPILER_INTEL < 1800) + asm volatile("nop\n"); +#endif +#endif atomic_fetch_add(&density_1d(ind3_1d), 1); +#ifdef KOKKOS_COMPILER_INTEL +#if (KOKKOS_COMPILER_INTEL < 1800) + if (std::is_same>::value) + asm volatile("nop\n"); + asm volatile("nop\n"); +#endif +#endif atomic_fetch_add(&density_3d(ind1_3d, ind2_3d, ind3_3d), 1); +#ifdef KOKKOS_COMPILER_INTEL +#if (KOKKOS_COMPILER_INTEL < 1800) + asm volatile("nop\n"); +#endif +#endif } rand_pool.free_state(rand_gen); } @@ -338,9 +377,11 @@ struct test_random_scalar { using functor_type = test_histogram1d_functor; parallel_reduce(HIST_DIM1D, functor_type(density_1d, num_draws), result); - - double tolerance = 6 * std::sqrt(1.0 / HIST_DIM1D); - double mean_expect = 1.0 * num_draws * 3 / HIST_DIM1D; + double mean_eps_expect = 0.0001; + double variance_eps_expect = 0.07; + double covariance_eps_expect = 0.06; + double tolerance = 6 * std::sqrt(1.0 / HIST_DIM1D); + double mean_expect = 1.0 * num_draws * 3 / HIST_DIM1D; double variance_expect = 1.0 * num_draws * 3 / HIST_DIM1D * (1.0 - 1.0 / HIST_DIM1D); double covariance_expect = -1.0 * num_draws * 3 / HIST_DIM1D / HIST_DIM1D; @@ -349,11 +390,26 @@ struct test_random_scalar { variance_expect / (result.variance / HIST_DIM1D) - 1.0; double covariance_eps = (result.covariance / HIST_DIM1D - covariance_expect) / mean_expect; - pass_hist1d_mean = ((-0.0001 < mean_eps) && (0.0001 > mean_eps)) ? 1 : 0; - pass_hist1d_var = - ((-0.07 < variance_eps) && (0.07 > variance_eps)) ? 1 : 0; - pass_hist1d_covar = - ((-0.06 < covariance_eps) && (0.06 > covariance_eps)) ? 1 : 0; + +#if defined(KOKKOS_HALF_T_IS_FLOAT) && !KOKKOS_HALF_T_IS_FLOAT + if (std::is_same::value) { + mean_eps_expect = 0.0003; + variance_eps_expect = 1.0; + covariance_eps_expect = 5.0e4; + } +#endif + + pass_hist1d_mean = + ((-mean_eps_expect < mean_eps) && (mean_eps_expect > mean_eps)) ? 1 + : 0; + pass_hist1d_var = ((-variance_eps_expect < variance_eps) && + (variance_eps_expect > variance_eps)) + ? 1 + : 0; + pass_hist1d_covar = ((-covariance_eps_expect < covariance_eps) && + (covariance_eps_expect > covariance_eps)) + ? 1 + : 0; cout << "Density 1D: " << mean_eps << " " << variance_eps << " " << (result.covariance / HIST_DIM1D / HIST_DIM1D) << " || " @@ -371,8 +427,9 @@ struct test_random_scalar { test_histogram3d_functor; parallel_reduce(HIST_DIM1D, functor_type(density_3d, num_draws), result); - double tolerance = 6 * std::sqrt(1.0 / HIST_DIM1D); - double mean_expect = 1.0 * num_draws / HIST_DIM1D; + double variance_factor = 1.2; + double tolerance = 6 * std::sqrt(1.0 / HIST_DIM1D); + double mean_expect = 1.0 * num_draws / HIST_DIM1D; double variance_expect = 1.0 * num_draws / HIST_DIM1D * (1.0 - 1.0 / HIST_DIM1D); double covariance_expect = -1.0 * num_draws / HIST_DIM1D / HIST_DIM1D; @@ -381,15 +438,23 @@ struct test_random_scalar { variance_expect / (result.variance / HIST_DIM1D) - 1.0; double covariance_eps = (result.covariance / HIST_DIM1D - covariance_expect) / mean_expect; + +#if defined(KOKKOS_HALF_T_IS_FLOAT) && !KOKKOS_HALF_T_IS_FLOAT + if (std::is_same::value) { + variance_factor = 7; + } +#endif + pass_hist3d_mean = ((-tolerance < mean_eps) && (tolerance > mean_eps)) ? 1 : 0; - pass_hist3d_var = ((-1.2 * tolerance < variance_eps) && - (1.2 * tolerance > variance_eps)) + pass_hist3d_var = ((-variance_factor * tolerance < variance_eps) && + (variance_factor * tolerance > variance_eps)) ? 1 : 0; - pass_hist3d_covar = - ((-tolerance < covariance_eps) && (tolerance > covariance_eps)) ? 1 - : 0; + pass_hist3d_covar = ((-variance_factor * tolerance < covariance_eps) && + (variance_factor * tolerance > covariance_eps)) + ? 1 + : 0; cout << "Density 3D: " << mean_eps << " " << variance_eps << " " << result.covariance / HIST_DIM1D / HIST_DIM1D << " || " << tolerance @@ -471,6 +536,21 @@ void test_random(unsigned int num_draws) { deep_copy(density_1d, 0); deep_copy(density_3d, 0); + cout << "Test Scalar=half" << endl; + test_random_scalar test_half( + density_1d, density_3d, pool, num_draws); + ASSERT_EQ(test_half.pass_mean, 1); + ASSERT_EQ(test_half.pass_var, 1); + ASSERT_EQ(test_half.pass_covar, 1); + ASSERT_EQ(test_half.pass_hist1d_mean, 1); + ASSERT_EQ(test_half.pass_hist1d_var, 1); + ASSERT_EQ(test_half.pass_hist1d_covar, 1); + ASSERT_EQ(test_half.pass_hist3d_mean, 1); + ASSERT_EQ(test_half.pass_hist3d_var, 1); + ASSERT_EQ(test_half.pass_hist3d_covar, 1); + deep_copy(density_1d, 0); + deep_copy(density_3d, 0); + cout << "Test Scalar=float" << endl; test_random_scalar test_float(density_1d, density_3d, pool, num_draws); diff --git a/lib/kokkos/appveyor.yml b/lib/kokkos/appveyor.yml index e8763c0b66..73a0d31875 100644 --- a/lib/kokkos/appveyor.yml +++ b/lib/kokkos/appveyor.yml @@ -3,4 +3,8 @@ image: clone_folder: c:\projects\source build_script: - cmd: >- - cmake c:\projects\source -DKokkos_ENABLE_TESTS=ON -DCMAKE_CXX_FLAGS="/W0 /EHsc /d1reportClassLayoutChanges" -DCTEST_ARGS="-C Debug -V --output-on-failure" -DBUILD_NAME=MSVC-2019 -DBUILD_TYPE=Debug -DSITE=AppVeyor -DTARGET=install -P cmake/KokkosCI.cmake + mkdir build && + cd build && + cmake c:\projects\source -DKokkos_ENABLE_TESTS=ON -DCMAKE_CXX_FLAGS="/W0 /EHsc" -DKokkos_ENABLE_DEPRECATED_CODE_3=ON -DKokkos_ENABLE_DEPRECATION_WARNINGS=OFF && + cmake --build . --target install && + ctest -C Debug --output-on-failure diff --git a/lib/kokkos/benchmarks/atomic/main.cpp b/lib/kokkos/benchmarks/atomic/main.cpp index 7b5caa1aee..cc0d3e41e8 100644 --- a/lib/kokkos/benchmarks/atomic/main.cpp +++ b/lib/kokkos/benchmarks/atomic/main.cpp @@ -1,12 +1,12 @@ #include -#include +#include #include template double test_atomic(int L, int N, int M, int K, int R, Kokkos::View offsets) { Kokkos::View output("Output", N); - Kokkos::Impl::Timer timer; + Kokkos::Timer timer; for (int r = 0; r < R; r++) Kokkos::parallel_for( @@ -28,7 +28,7 @@ template double test_no_atomic(int L, int N, int M, int K, int R, Kokkos::View offsets) { Kokkos::View output("Output", N); - Kokkos::Impl::Timer timer; + Kokkos::Timer timer; for (int r = 0; r < R; r++) Kokkos::parallel_for( L, KOKKOS_LAMBDA(const int& i) { diff --git a/lib/kokkos/benchmarks/bytes_and_flops/bench.hpp b/lib/kokkos/benchmarks/bytes_and_flops/bench.hpp index 62d7ef4a4c..4fc6ca2c68 100644 --- a/lib/kokkos/benchmarks/bytes_and_flops/bench.hpp +++ b/lib/kokkos/benchmarks/bytes_and_flops/bench.hpp @@ -43,7 +43,7 @@ */ #include -#include +#include template struct Run { diff --git a/lib/kokkos/benchmarks/bytes_and_flops/main.cpp b/lib/kokkos/benchmarks/bytes_and_flops/main.cpp index 6da2407a08..75f30a3409 100644 --- a/lib/kokkos/benchmarks/bytes_and_flops/main.cpp +++ b/lib/kokkos/benchmarks/bytes_and_flops/main.cpp @@ -43,7 +43,7 @@ */ #include -#include +#include #include #include diff --git a/lib/kokkos/benchmarks/gather/main.cpp b/lib/kokkos/benchmarks/gather/main.cpp index 5f10e4dcc1..dd502faaa4 100644 --- a/lib/kokkos/benchmarks/gather/main.cpp +++ b/lib/kokkos/benchmarks/gather/main.cpp @@ -43,7 +43,7 @@ */ #include -#include +#include #include #include diff --git a/lib/kokkos/benchmarks/stream/stream-kokkos.cpp b/lib/kokkos/benchmarks/stream/stream-kokkos.cpp index e7ef67e080..311947c197 100644 --- a/lib/kokkos/benchmarks/stream/stream-kokkos.cpp +++ b/lib/kokkos/benchmarks/stream/stream-kokkos.cpp @@ -52,35 +52,33 @@ #define HLINE "-------------------------------------------------------------\n" -#if defined(KOKKOS_ENABLE_CUDA) -using StreamHostArray = Kokkos::View::HostMirror; -using StreamDeviceArray = Kokkos::View; -#else -using StreamHostArray = Kokkos::View::HostMirror; -using StreamDeviceArray = Kokkos::View; -#endif +using StreamDeviceArray = + Kokkos::View>; +using StreamHostArray = typename StreamDeviceArray::HostMirror; using StreamIndex = int; +using Policy = Kokkos::RangePolicy>; -double now() { - struct timeval now; - gettimeofday(&now, nullptr); - - return (double)now.tv_sec + ((double)now.tv_usec * 1.0e-6); -} - -void perform_copy(StreamDeviceArray& a, StreamDeviceArray& b, - StreamDeviceArray& c) { +void perform_set(StreamDeviceArray& a, const double scalar) { Kokkos::parallel_for( - "copy", a.extent(0), KOKKOS_LAMBDA(const StreamIndex i) { c[i] = a[i]; }); + "set", Policy(0, a.extent(0)), + KOKKOS_LAMBDA(const StreamIndex i) { a[i] = scalar; }); Kokkos::fence(); } -void perform_scale(StreamDeviceArray& a, StreamDeviceArray& b, - StreamDeviceArray& c, const double scalar) { +void perform_copy(StreamDeviceArray& a, StreamDeviceArray& b) { Kokkos::parallel_for( - "copy", a.extent(0), + "copy", Policy(0, a.extent(0)), + KOKKOS_LAMBDA(const StreamIndex i) { b[i] = a[i]; }); + + Kokkos::fence(); +} + +void perform_scale(StreamDeviceArray& b, StreamDeviceArray& c, + const double scalar) { + Kokkos::parallel_for( + "scale", Policy(0, b.extent(0)), KOKKOS_LAMBDA(const StreamIndex i) { b[i] = scalar * c[i]; }); Kokkos::fence(); @@ -89,7 +87,7 @@ void perform_scale(StreamDeviceArray& a, StreamDeviceArray& b, void perform_add(StreamDeviceArray& a, StreamDeviceArray& b, StreamDeviceArray& c) { Kokkos::parallel_for( - "add", a.extent(0), + "add", Policy(0, a.extent(0)), KOKKOS_LAMBDA(const StreamIndex i) { c[i] = a[i] + b[i]; }); Kokkos::fence(); @@ -98,7 +96,7 @@ void perform_add(StreamDeviceArray& a, StreamDeviceArray& b, void perform_triad(StreamDeviceArray& a, StreamDeviceArray& b, StreamDeviceArray& c, const double scalar) { Kokkos::parallel_for( - "triad", a.extent(0), + "triad", Policy(0, a.extent(0)), KOKKOS_LAMBDA(const StreamIndex i) { a[i] = b[i] + scalar * c[i]; }); Kokkos::fence(); @@ -184,6 +182,7 @@ int run_benchmark() { const double scalar = 3.0; + double setTime = std::numeric_limits::max(); double copyTime = std::numeric_limits::max(); double scaleTime = std::numeric_limits::max(); double addTime = std::numeric_limits::max(); @@ -191,13 +190,10 @@ int run_benchmark() { printf("Initializing Views...\n"); -#if defined(KOKKOS_HAVE_OPENMP) Kokkos::parallel_for( - "init", Kokkos::RangePolicy(0, STREAM_ARRAY_SIZE), -#else - Kokkos::parallel_for( - "init", Kokkos::RangePolicy(0, STREAM_ARRAY_SIZE), -#endif + "init", + Kokkos::RangePolicy(0, + STREAM_ARRAY_SIZE), KOKKOS_LAMBDA(const int i) { a[i] = 1.0; b[i] = 2.0; @@ -209,26 +205,30 @@ int run_benchmark() { Kokkos::deep_copy(dev_b, b); Kokkos::deep_copy(dev_c, c); - double start; - printf("Starting benchmarking...\n"); + Kokkos::Timer timer; + for (StreamIndex k = 0; k < STREAM_NTIMES; ++k) { - start = now(); - perform_copy(dev_a, dev_b, dev_c); - copyTime = std::min(copyTime, (now() - start)); + timer.reset(); + perform_set(dev_c, 1.5); + setTime = std::min(setTime, timer.seconds()); - start = now(); - perform_scale(dev_a, dev_b, dev_c, scalar); - scaleTime = std::min(scaleTime, (now() - start)); + timer.reset(); + perform_copy(dev_a, dev_c); + copyTime = std::min(copyTime, timer.seconds()); - start = now(); + timer.reset(); + perform_scale(dev_b, dev_c, scalar); + scaleTime = std::min(scaleTime, timer.seconds()); + + timer.reset(); perform_add(dev_a, dev_b, dev_c); - addTime = std::min(addTime, (now() - start)); + addTime = std::min(addTime, timer.seconds()); - start = now(); + timer.reset(); perform_triad(dev_a, dev_b, dev_c, scalar); - triadTime = std::min(triadTime, (now() - start)); + triadTime = std::min(triadTime, timer.seconds()); } Kokkos::deep_copy(a, dev_a); @@ -240,6 +240,9 @@ int run_benchmark() { printf(HLINE); + printf("Set %11.2f MB/s\n", + (1.0e-06 * 1.0 * (double)sizeof(double) * (double)STREAM_ARRAY_SIZE) / + setTime); printf("Copy %11.2f MB/s\n", (1.0e-06 * 2.0 * (double)sizeof(double) * (double)STREAM_ARRAY_SIZE) / copyTime); diff --git a/lib/kokkos/bin/hpcbind b/lib/kokkos/bin/hpcbind index 6af091a7d8..43f8a745da 100755 --- a/lib/kokkos/bin/hpcbind +++ b/lib/kokkos/bin/hpcbind @@ -634,15 +634,15 @@ elif [[ ${HPCBIND_HAS_COMMAND} -eq 1 ]]; then > ${HPCBIND_OUT} if [[ ${HPCBIND_TEE} -eq 0 ]]; then if [[ ${HPCBIND_ENABLE_HWLOC_BIND} -eq 1 ]]; then - hwloc-bind "${HPCBIND_HWLOC_CPUSET}" -- $@ > ${HPCBIND_OUT} 2> ${HPCBIND_ERR} + hwloc-bind "${HPCBIND_HWLOC_CPUSET}" -- "$@" > ${HPCBIND_OUT} 2> ${HPCBIND_ERR} else - eval $@ > ${HPCBIND_OUT} 2> ${HPCBIND_ERR} + eval "$@" > ${HPCBIND_OUT} 2> ${HPCBIND_ERR} fi else if [[ ${HPCBIND_ENABLE_HWLOC_BIND} -eq 1 ]]; then - hwloc-bind "${HPCBIND_HWLOC_CPUSET}" -- $@ > >(tee ${HPCBIND_OUT}) 2> >(tee ${HPCBIND_ERR} >&2) + hwloc-bind "${HPCBIND_HWLOC_CPUSET}" -- "$@" > >(tee ${HPCBIND_OUT}) 2> >(tee ${HPCBIND_ERR} >&2) else - eval $@ > >(tee ${HPCBIND_OUT}) 2> >(tee ${HPCBIND_ERR} >&2) + eval "$@" > >(tee ${HPCBIND_OUT}) 2> >(tee ${HPCBIND_ERR} >&2) fi fi fi diff --git a/lib/kokkos/bin/nvcc_wrapper b/lib/kokkos/bin/nvcc_wrapper index 4e52e4d09f..ba2c55508a 100755 --- a/lib/kokkos/bin/nvcc_wrapper +++ b/lib/kokkos/bin/nvcc_wrapper @@ -96,7 +96,7 @@ replace_pragma_ident=0 first_xcompiler_arg=1 # Allow for setting temp dir without setting TMPDIR in parent (see https://docs.olcf.ornl.gov/systems/summit_user_guide.html#setting-tmpdir-causes-jsm-jsrun-errors-job-state-flip-flop) -if [[ ! -z ${NVCC_WRAPPER_TMPDIR+x} ]]; then +if [[ -z ${NVCC_WRAPPER_TMPDIR+x} ]]; then temp_dir=${TMPDIR:-/tmp} else temp_dir=${NVCC_WRAPPER_TMPDIR+x} @@ -226,14 +226,14 @@ do cuda_args="$cuda_args $1" ;; #Handle more known nvcc args - --expt-extended-lambda|--expt-relaxed-constexpr|--Wno-deprecated-gpu-targets|-Wno-deprecated-gpu-targets) + --expt-extended-lambda|--expt-relaxed-constexpr|--Wno-deprecated-gpu-targets|-Wno-deprecated-gpu-targets|-allow-unsupported-compiler|--allow-unsupported-compiler) cuda_args="$cuda_args $1" ;; #Handle known nvcc args that have an argument - -maxrregcount=*|--maxrregcount=*) + -maxrregcount=*|--maxrregcount=*|-time=*) cuda_args="$cuda_args $1" ;; - -maxrregcount|--default-stream|-Xnvlink|--fmad|-cudart|--cudart|-include) + -maxrregcount|--default-stream|-Xnvlink|--fmad|-cudart|--cudart|-include|-time) cuda_args="$cuda_args $1 $2" shift ;; @@ -552,14 +552,14 @@ if [ $host_only -eq 1 ]; then $host_command elif [ -n "$nvcc_depfile_command" ]; then if [ "$NVCC_WRAPPER_SHOW_COMMANDS_BEING_RUN" == "1" ] ; then - echo "$nvcc_command && $nvcc_depfile_command" + echo "TMPDIR=${temp_dir} $nvcc_command && TMPDIR=${temp_dir} $nvcc_depfile_command" fi - $nvcc_command && $nvcc_depfile_command + TMPDIR=${temp_dir} $nvcc_command && TMPDIR=${temp_dir} $nvcc_depfile_command else if [ "$NVCC_WRAPPER_SHOW_COMMANDS_BEING_RUN" == "1" ] ; then - echo "$nvcc_command" + echo "TMPDIR=${temp_dir} $nvcc_command" fi - $nvcc_command + TMPDIR=${temp_dir} $nvcc_command fi error_code=$? diff --git a/lib/kokkos/cmake/CTestConfig.cmake.in b/lib/kokkos/cmake/CTestConfig.cmake.in deleted file mode 100644 index 1f82c0d64d..0000000000 --- a/lib/kokkos/cmake/CTestConfig.cmake.in +++ /dev/null @@ -1,91 +0,0 @@ -#----------------------------------------------------------------------------------------# -# -# CTestConfig.cmake template for Kokkos -# -#----------------------------------------------------------------------------------------# - -# -# dash-board related -# -set(CTEST_PROJECT_NAME "Kokkos") -set(CTEST_NIGHTLY_START_TIME "01:00:00 UTC") -set(CTEST_DROP_METHOD "https") -set(CTEST_DROP_SITE "cdash.nersc.gov") -set(CTEST_DROP_LOCATION "/submit.php?project=${CTEST_PROJECT_NAME}") -set(CTEST_CDASH_VERSION "1.6") -set(CTEST_CDASH_QUERY_VERSION TRUE) -set(CTEST_SUBMIT_RETRY_COUNT "1") -set(CTEST_SUBMIT_RETRY_DELAY "30") - -# -# configure/build related -# -set(CTEST_BUILD_NAME "@BUILD_NAME@") -set(CTEST_MODEL "@MODEL@") -set(CTEST_SITE "@SITE@") -set(CTEST_CONFIGURATION_TYPE "@BUILD_TYPE@") -set(CTEST_SOURCE_DIRECTORY "@SOURCE_REALDIR@") -set(CTEST_BINARY_DIRECTORY "@BINARY_REALDIR@") - -# -# configure/build related -# -set(CTEST_UPDATE_TYPE "git") -set(CTEST_UPDATE_VERSION_ONLY ON) -# set(CTEST_GENERATOR "") -# set(CTEST_GENERATOR_PLATFORM "") - -# -# testing related -# -set(CTEST_TIMEOUT "7200") -set(CTEST_TEST_TIMEOUT "7200") -set(CTEST_CUSTOM_MAXIMUM_NUMBER_OF_ERRORS "100") -set(CTEST_CUSTOM_MAXIMUM_NUMBER_OF_WARNINGS "100") -set(CTEST_CUSTOM_MAXIMUM_PASSED_TEST_OUTPUT_SIZE "1048576") - -# -# coverage related -# -set(CTEST_CUSTOM_COVERAGE_EXCLUDE ".*tpls/.*;/usr/.*;.*unit_test/.*;.*unit_tests/.*;.*perf_test/.*") - -# -# commands -# -if(NOT "@CHECKOUT_COMMAND@" STREQUAL "") - set(CTEST_CHECKOUT_COMMAND "@CHECKOUT_COMMAND@") -endif() -set(CTEST_UPDATE_COMMAND "@GIT_EXECUTABLE@") -set(CTEST_CONFIGURE_COMMAND "@CMAKE_COMMAND@ -DCMAKE_BUILD_TYPE=@BUILD_TYPE@ -DKokkos_ENABLE_TESTS=ON @CONFIG_ARGS@ @SOURCE_REALDIR@") -set(CTEST_BUILD_COMMAND "@CMAKE_COMMAND@ --build @BINARY_REALDIR@ --target @TARGET@") -if(NOT WIN32) - set(CTEST_BUILD_COMMAND "${CTEST_BUILD_COMMAND} -- -j@BUILD_JOBS@") -endif() -set(CTEST_COVERAGE_COMMAND "gcov") -set(CTEST_MEMORYCHECK_COMMAND "valgrind") -set(CTEST_GIT_COMMAND "@GIT_EXECUTABLE@") - -# -# various configs -# -set(APPEND_VALUE @APPEND@) -if(APPEND_VALUE) - set(APPEND_CTEST APPEND) -endif() - -macro(SET_TEST_PROP VAR) - if(NOT "${ARGS}" STREQUAL "") - set(${VAR}_CTEST ${VAR} ${ARGN}) - endif() -endmacro() - -set_test_prop(START @START@) -set_test_prop(END @END@) -set_test_prop(STRIDE @STRIDE@) -set_test_prop(INCLUDE @INCLUDE@) -set_test_prop(EXCLUDE @EXCLUDE@) -set_test_prop(INCLUDE_LABEL @INCLUDE_LABEL@) -set_test_prop(EXCLUDE_LABEL @EXCLUDE_LABEL@) -set_test_prop(PARALLEL_LEVEL @PARALLEL_LEVEL@) -set_test_prop(STOP_TIME @STOP_TIME@) -set_test_prop(COVERAGE_LABELS @LABELS@) diff --git a/lib/kokkos/cmake/KokkosCI.cmake b/lib/kokkos/cmake/KokkosCI.cmake deleted file mode 100644 index e8c9af37ad..0000000000 --- a/lib/kokkos/cmake/KokkosCI.cmake +++ /dev/null @@ -1,350 +0,0 @@ -cmake_minimum_required(VERSION 3.16 FATAL_ERROR) - -message(STATUS "") - -get_cmake_property(_cached_vars CACHE_VARIABLES) -set(KOKKOS_CMAKE_ARGS) -set(EXCLUDED_VARIABLES "CMAKE_COMMAND" "CMAKE_CPACK_COMMAND" "CMAKE_CTEST_COMMAND" "CMAKE_ROOT" - "CTEST_ARGS" "BUILD_NAME" "CMAKE_CXX_FLAGS" "CMAKE_BUILD_TYPE") -list(SORT _cached_vars) -foreach(_var ${_cached_vars}) - if(NOT "${_var}" IN_LIST EXCLUDED_VARIABLES) - list(APPEND KOKKOS_CMAKE_ARGS ${_var}) - if("${_var}" STREQUAL "CMAKE_BUILD_TYPE") - set(BUILD_TYPE "${CMAKE_BUILD_TYPE}") - endif() - endif() -endforeach() - - -#----------------------------------------------------------------------------------------# -# -# Macros and variables -# -#----------------------------------------------------------------------------------------# - -macro(CHECK_REQUIRED VAR) - if(NOT DEFINED ${VAR}) - message(FATAL_ERROR "Error! Variable '${VAR}' must be defined") - endif() -endmacro() - -# require the build name variable -CHECK_REQUIRED(BUILD_NAME) - -# uses all args -macro(SET_DEFAULT VAR) - if(NOT DEFINED ${VAR}) - set(${VAR} ${ARGN}) - endif() - # remove these ctest configuration variables from the defines - # passed to the Kokkos configuration - if("${VAR}" IN_LIST KOKKOS_CMAKE_ARGS) - list(REMOVE_ITEM KOKKOS_CMAKE_ARGS "${VAR}") - endif() -endmacro() - -# uses first arg -- useful for selecting via priority from multiple -# potentially defined variables, e.g.: -# -# set_default_arg1(BUILD_NAME ${TRAVIS_BUILD_NAME} ${BUILD_NAME}) -# -macro(SET_DEFAULT_ARG1 VAR) - if(NOT DEFINED ${VAR}) - foreach(_ARG ${ARGN}) - if(NOT "${_ARG}" STREQUAL "") - set(${VAR} ${_ARG}) - break() - endif() - endforeach() - endif() - # remove these ctest configuration variables from the defines - # passed to the Kokkos configuration - if("${VAR}" IN_LIST KOKKOS_CMAKE_ARGS) - list(REMOVE_ITEM KOKKOS_CMAKE_ARGS "${VAR}") - endif() -endmacro() - -# determine the default working directory -if(NOT "$ENV{WORKSPACE}" STREQUAL "") - set(WORKING_DIR "$ENV{WORKSPACE}") -else() - get_filename_component(WORKING_DIR ${CMAKE_CURRENT_LIST_DIR} DIRECTORY) -endif() - -# determine the hostname -execute_process(COMMAND hostname - OUTPUT_VARIABLE HOSTNAME - OUTPUT_STRIP_TRAILING_WHITESPACE) - -SET_DEFAULT(HOSTNAME "$ENV{HOSTNAME}") - -# get the number of processors -include(ProcessorCount) -ProcessorCount(NUM_PROCESSORS) - -# find git -find_package(Git QUIET) -if(NOT GIT_EXECUTABLE) - unset(GIT_EXECUTABLE CACHE) - unset(GIT_EXECUTABLE) -endif() - -function(EXECUTE_GIT_COMMAND VAR) - set(${VAR} "" PARENT_SCOPE) - execute_process(COMMAND ${GIT_EXECUTABLE} ${ARGN} - OUTPUT_VARIABLE VAL - RESULT_VARIABLE RET - OUTPUT_STRIP_TRAILING_WHITESPACE - WORKING_DIRECTORY ${CMAKE_CURRENT_LIST_DIR} - ERROR_QUIET) - string(REPLACE ";" " " _CMD "${GIT_EXECUTABLE} ${ARGN}") - set(LAST_GIT_COMMAND "${_CMD}" PARENT_SCOPE) - if(RET EQUAL 0) - set(${VAR} "${VAL}" PARENT_SCOPE) - endif() -endfunction() - -# just gets the git branch name if available -function(GET_GIT_BRANCH_NAME VAR) - execute_git_command(GIT_BRANCH branch --show-current) - set(_INVALID "%D" "HEAD") - if(NOT GIT_BRANCH OR "${GIT_BRANCH}" IN_LIST _INVALID) - execute_git_command(GIT_BRANCH show -s --format=%D) - if(NOT GIT_BRANCH OR "${GIT_BRANCH}" IN_LIST _INVALID) - execute_git_command(GIT_BRANCH --describe all) - endif() - endif() - # - if(GIT_BRANCH) - string(REPLACE " " ";" _DESC "${GIT_BRANCH}") - # just set it to last one via loop instead of wonky cmake index manip - foreach(_ITR ${_DESC}) - set(GIT_BRANCH "${_ITR}") - endforeach() - set(${VAR} "${GIT_BRANCH}" PARENT_SCOPE) - message(STATUS "GIT BRANCH via '${LAST_GIT_COMMAND}': ${GIT_BRANCH}") - endif() -endfunction() - -# just gets the git branch name if available -function(GET_GIT_AUTHOR_NAME VAR) - execute_git_command(GIT_AUTHOR show -s --format=%an) - if(GIT_AUTHOR) - string(LENGTH "${GIT_AUTHOR}" STRLEN) - # if the build name gets too long, this can cause submission errors - if(STRLEN GREATER 24) - # remove middle initial - string(REGEX REPLACE " [A-Z]\. " " " GIT_AUTHOR "${GIT_AUTHOR}") - # get first and sur name - string(REGEX REPLACE "([A-Za-z]+) ([A-Za-z]+)" "\\1" F_NAME "${GIT_AUTHOR}") - string(REGEX REPLACE "([A-Za-z]+) ([A-Za-z]+)" "\\2" S_NAME "${GIT_AUTHOR}") - if(S_NAME) - set(GIT_AUTHOR "${S_NAME}") - elseif(F_NAME) - set(GIT_AUTHOR "${F_NAME}") - endif() - endif() - # remove any spaces, quotes, periods, etc. - string(REGEX REPLACE "[ ',;_\.\"]+" "" GIT_AUTHOR "${GIT_AUTHOR}") - set(${VAR} "${GIT_AUTHOR}" PARENT_SCOPE) - message(STATUS "GIT AUTHOR via '${LAST_GIT_COMMAND}': ${GIT_AUTHOR}") - endif() -endfunction() - -# get the name of the branch -GET_GIT_BRANCH_NAME(GIT_BRANCH) -# get the name of the author -GET_GIT_AUTHOR_NAME(GIT_AUTHOR) -# author, prefer git method for consistency -SET_DEFAULT_ARG1(AUTHOR ${GIT_AUTHOR} $ENV{GIT_AUTHOR} $ENV{AUTHOR}) -# SLUG == owner_name/repo_name -SET_DEFAULT_ARG1(SLUG $ENV{TRAVIS_PULL_REQUEST_SLUG} $ENV{TRAVIS_REPO_SLUG} $ENV{APPVEYOR_REPO_NAME} $ENV{PULL_REQUEST_SLUG} $ENV{REPO_SLUG}) -# branch name -SET_DEFAULT_ARG1(BRANCH $ENV{TRAVIS_PULL_REQUEST_BRANCH} $ENV{TRAVIS_BRANCH} $ENV{APPVEYOR_PULL_REQUEST_HEAD_REPO_BRANCH} $ENV{APPVEYOR_REPO_BRANCH} $ENV{GIT_BRANCH} $ENV{BRANCH_NAME} $ENV{BRANCH} ${GIT_BRANCH}) -# pull request number -SET_DEFAULT_ARG1(PULL_REQUEST_NUM $ENV{TRAVIS_PULL_REQUEST} $ENV{CHANGE_ID} $ENV{APPVEYOR_PULL_REQUEST_NUMBER} $ENV{PULL_REQUEST_NUM}) -# get the event type, e.g. push, pull_request, api, cron, etc. -SET_DEFAULT_ARG1(EVENT_TYPE $ENV{TRAVIS_EVENT_TYPE} ${EVENT_TYPE}) - -if("${BRANCH}" STREQUAL "") - message(STATUS "Checked: environment variables for Travis, Appveyor, Jenkins (git plugin), BRANCH_NAME, BRANCH and 'git branch --show-current'") - message(FATAL_ERROR "Error! Git branch could not be determined. Please provide -DBRANCH=") -endif() - -#----------------------------------------------------------------------------------------# -# -# Set default values if not provided on command-line -# -#----------------------------------------------------------------------------------------# - -SET_DEFAULT(SOURCE_DIR "${WORKING_DIR}") # source directory -SET_DEFAULT(BINARY_DIR "${WORKING_DIR}/build") # build directory -SET_DEFAULT(BUILD_TYPE "${CMAKE_BUILD_TYPE}") # Release, Debug, etc. -SET_DEFAULT(MODEL "Continuous") # Continuous, Nightly, or Experimental -SET_DEFAULT(JOBS 1) # number of parallel ctests -SET_DEFAULT(CTEST_COMMAND "${CMAKE_CTEST_COMMAND}") # just in case -SET_DEFAULT(CTEST_ARGS "-V --output-on-failure") # extra arguments when ctest is called -SET_DEFAULT(GIT_EXECUTABLE "git") # ctest_update -SET_DEFAULT(TARGET "all") # build target -SET_DEFAULT_ARG1(SITE "$ENV{SITE}" - "${HOSTNAME}") # update site -SET_DEFAULT_ARG1(BUILD_JOBS "$ENV{BUILD_JOBS}" - "${NUM_PROCESSORS}") # number of parallel compile jobs -# -# The variable below correspond to ctest arguments, i.e. START,END,STRIDE are -# '-I START,END,STRIDE' -# -SET_DEFAULT(START "") -SET_DEFAULT(END "") -SET_DEFAULT(STRIDE "") -SET_DEFAULT(INCLUDE "") -SET_DEFAULT(EXCLUDE "") -SET_DEFAULT(INCLUDE_LABEL "") -SET_DEFAULT(EXCLUDE_LABEL "") -SET_DEFAULT(PARALLEL_LEVEL "") -SET_DEFAULT(STOP_TIME "") -SET_DEFAULT(LABELS "") -SET_DEFAULT(NOTES "") - -# default static build tag for Nightly -set(BUILD_TAG "${BRANCH}") - -if(NOT BUILD_TYPE) - # default for kokkos if not specified - set(BUILD_TYPE "RelWithDebInfo") -endif() - -# generate dynamic name if continuous or experimental model -if(NOT "${MODEL}" STREQUAL "Nightly") - if(EVENT_TYPE AND PULL_REQUEST_NUM) - # e.g. pull_request/123 - if(AUTHOR) - set(BUILD_TAG "${AUTHOR}/${EVENT_TYPE}/${PULL_REQUEST_NUM}") - else() - set(BUILD_TAG "${EVENT_TYPE}/${PULL_REQUEST_NUM}") - endif() - elseif(SLUG) - # e.g. owner_name/repo_name - set(BUILD_TAG "${SLUG}") - elseif(AUTHOR) - set(BUILD_TAG "${AUTHOR}/${BRANCH}") - endif() - if(EVENT_TYPE AND NOT PULL_REQUEST_NUM) - set(BUILD_TAG "${BUILD_TAG}-${EVENT_TYPE}") - endif() -endif() - -# unnecessary -string(REPLACE "/remotes/" "/" BUILD_TAG "${BUILD_TAG}") -string(REPLACE "/origin/" "/" BUILD_TAG "${BUILD_TAG}") - -message(STATUS "BUILD_TAG: ${BUILD_TAG}") - -set(BUILD_NAME "[${BUILD_TAG}] [${BUILD_NAME}-${BUILD_TYPE}]") - -# colons in build name create extra (empty) entries in CDash -string(REPLACE ":" "-" BUILD_NAME "${BUILD_NAME}") -# unnecessary info -string(REPLACE "/merge]" "]" BUILD_NAME "${BUILD_NAME}") -# consistency -string(REPLACE "/pr/" "/pull/" BUILD_NAME "${BUILD_NAME}") -string(REPLACE "pull_request/" "pull/" BUILD_NAME "${BUILD_NAME}") -# miscellaneous from missing fields -string(REPLACE "--" "-" BUILD_NAME "${BUILD_NAME}") -string(REPLACE "-]" "]" BUILD_NAME "${BUILD_NAME}") - -# check binary directory -if(EXISTS ${BINARY_DIR}) - if(NOT IS_DIRECTORY "${BINARY_DIR}") - message(FATAL_ERROR "Error! '${BINARY_DIR}' already exists and is not a directory!") - endif() - file(GLOB BINARY_DIR_FILES "${BINARY_DIR}/*") - if(NOT "${BINARY_DIR_FILES}" STREQUAL "") - message(FATAL_ERROR "Error! '${BINARY_DIR}' already exists and is not empty!") - endif() -endif() - -get_filename_component(SOURCE_REALDIR ${SOURCE_DIR} REALPATH) -get_filename_component(BINARY_REALDIR ${BINARY_DIR} REALPATH) - -#----------------------------------------------------------------------------------------# -# -# Generate the CTestConfig.cmake -# -#----------------------------------------------------------------------------------------# - -set(CONFIG_ARGS) -foreach(_ARG ${KOKKOS_CMAKE_ARGS}) - if(NOT "${${_ARG}}" STREQUAL "") - get_property(_ARG_TYPE CACHE ${_ARG} PROPERTY TYPE) - if("${_ARG_TYPE}" STREQUAL "UNINITIALIZED") - if("${${_ARG}}" STREQUAL "ON" OR "${${_ARG}}" STREQUAL "OFF") - set(_ARG_TYPE "BOOL") - elseif(EXISTS "${${_ARG}}" AND NOT IS_DIRECTORY "${${_ARG}}") - set(_ARG_TYPE "FILEPATH") - elseif(EXISTS "${${_ARG}}" AND IS_DIRECTORY "${${_ARG}}") - set(_ARG_TYPE "PATH") - elseif(NOT "${${_ARG}}" STREQUAL "") - set(_ARG_TYPE "STRING") - endif() - endif() - set(CONFIG_ARGS "${CONFIG_ARGS}set(${_ARG} \"${${_ARG}}\" CACHE ${_ARG_TYPE} \"\")\n") - endif() -endforeach() - -file(WRITE ${BINARY_REALDIR}/initial-cache.cmake -" -set(CMAKE_CXX_FLAGS \"${CMAKE_CXX_FLAGS}\" CACHE STRING \"\") -${CONFIG_ARGS} -") - -file(READ ${BINARY_REALDIR}/initial-cache.cmake _CACHE_INFO) -message(STATUS "Initial cache:\n${_CACHE_INFO}") - -# initialize the cache -set(CONFIG_ARGS "-C ${BINARY_REALDIR}/initial-cache.cmake") - - -# generate the CTestConfig.cmake -configure_file( - ${CMAKE_CURRENT_LIST_DIR}/CTestConfig.cmake.in - ${BINARY_REALDIR}/CTestConfig.cmake - @ONLY) - -# copy/generate the dashboard script -configure_file( - ${CMAKE_CURRENT_LIST_DIR}/KokkosCTest.cmake.in - ${BINARY_REALDIR}/KokkosCTest.cmake - @ONLY) - -# custom CTest settings go in ${BINARY_DIR}/CTestCustom.cmake -execute_process( - COMMAND ${CMAKE_COMMAND} -E touch CTestCustom.cmake - WORKING_DIRECTORY ${BINARY_REALDIR} - ) - -#----------------------------------------------------------------------------------------# -# -# Execute CTest -# -#----------------------------------------------------------------------------------------# - -message(STATUS "") -message(STATUS "BUILD_NAME: ${BUILD_NAME}") -message(STATUS "Executing '${CTEST_COMMAND} -S KokkosCTest.cmake ${CTEST_ARGS}'...") -message(STATUS "") - -# e.g. -DCTEST_ARGS="--output-on-failure -VV" should really be -DCTEST_ARGS="--output-on-failure;-VV" -string(REPLACE " " ";" CTEST_ARGS "${CTEST_ARGS}") - -execute_process( - COMMAND ${CTEST_COMMAND} -S KokkosCTest.cmake ${CTEST_ARGS} - RESULT_VARIABLE RET - WORKING_DIRECTORY ${BINARY_REALDIR} - ) - -# ensure that any non-zero result variable gets propagated -if(NOT RET EQUAL 0) - message(FATAL_ERROR "CTest return non-zero exit code: ${RET}") -endif() diff --git a/lib/kokkos/cmake/KokkosCTest.cmake.in b/lib/kokkos/cmake/KokkosCTest.cmake.in deleted file mode 100644 index b6917f3cc1..0000000000 --- a/lib/kokkos/cmake/KokkosCTest.cmake.in +++ /dev/null @@ -1,261 +0,0 @@ -cmake_minimum_required(VERSION 3.16 FATAL_ERROR) - -if(EXISTS "${CMAKE_CURRENT_LIST_DIR}/CTestConfig.cmake") - include("${CMAKE_CURRENT_LIST_DIR}/CTestConfig.cmake") -endif() - -include(ProcessorCount) -ProcessorCount(CTEST_PROCESSOR_COUNT) - -cmake_policy(SET CMP0009 NEW) -cmake_policy(SET CMP0011 NEW) - -# ---------------------------------------------------------------------------- # -# -- Commands -# ---------------------------------------------------------------------------- # -find_program(CTEST_CMAKE_COMMAND NAMES cmake) -find_program(CTEST_UNAME_COMMAND NAMES uname) - -find_program(CTEST_BZR_COMMAND NAMES bzr) -find_program(CTEST_CVS_COMMAND NAMES cvs) -find_program(CTEST_GIT_COMMAND NAMES git) -find_program(CTEST_HG_COMMAND NAMES hg) -find_program(CTEST_P4_COMMAND NAMES p4) -find_program(CTEST_SVN_COMMAND NAMES svn) - -find_program(VALGRIND_COMMAND NAMES valgrind) -find_program(GCOV_COMMAND NAMES gcov) -find_program(LCOV_COMMAND NAMES llvm-cov) -find_program(MEMORYCHECK_COMMAND NAMES valgrind ) - -set(MEMORYCHECK_TYPE Valgrind) -# set(MEMORYCHECK_TYPE Purify) -# set(MEMORYCHECK_TYPE BoundsChecker) -# set(MEMORYCHECK_TYPE ThreadSanitizer) -# set(MEMORYCHECK_TYPE AddressSanitizer) -# set(MEMORYCHECK_TYPE LeakSanitizer) -# set(MEMORYCHECK_TYPE MemorySanitizer) -# set(MEMORYCHECK_TYPE UndefinedBehaviorSanitizer) -set(MEMORYCHECK_COMMAND_OPTIONS "--trace-children=yes --leak-check=full") - -# ---------------------------------------------------------------------------- # -# -- Settings -# ---------------------------------------------------------------------------- # -## -- Process timeout in seconds -set(CTEST_TIMEOUT "7200") -## -- Set output to English -set(ENV{LC_MESSAGES} "en_EN" ) - - -# ---------------------------------------------------------------------------- # -# -- Copy ctest configuration file -# ---------------------------------------------------------------------------- # -macro(COPY_CTEST_CONFIG_FILES) - - foreach(_FILE CTestConfig.cmake CTestCustom.cmake) - - # if current directory is not binary or source directory - if(NOT "${CMAKE_CURRENT_LIST_DIR}" STREQUAL "${CTEST_BINARY_DIRECTORY}" AND - NOT "${CTEST_SOURCE_DIRECTORY}" STREQUAL "${CTEST_BINARY_DIRECTORY}") - - # if file exists in current directory - if(EXISTS ${CMAKE_CURRENT_LIST_DIR}/${_FILE}) - configure_file(${CMAKE_CURRENT_LIST_DIR}/${_FILE} - ${CTEST_BINARY_DIRECTORY}/${_FILE} COPYONLY) - endif() - - # if source and binary differ - elseif(NOT "${CTEST_SOURCE_DIRECTORY}" STREQUAL "${CTEST_BINARY_DIRECTORY}") - - # if file exists in source directory but not in binary directory - if(EXISTS ${CTEST_SOURCE_DIRECTORY}/${_FILE} AND - NOT EXISTS ${CTEST_BINARY_DIRECTORY}/${_FILE}) - configure_file(${CTEST_SOURCE_DIRECTORY}/${_FILE} - ${CTEST_BINARY_DIRECTORY}/${_FILE} COPYONLY) - endif() - - endif() - endforeach() - -endmacro() - -ctest_read_custom_files("${CMAKE_CURRENT_LIST_DIR}") - -message(STATUS "CTEST_MODEL: ${CTEST_MODEL}") - -#-------------------------------------------------------------------------# -# Start -# -message(STATUS "") -message(STATUS "[${CTEST_BUILD_NAME}] Running START_CTEST stage...") -message(STATUS "") - -ctest_start(${CTEST_MODEL} TRACK ${CTEST_MODEL} ${APPEND_CTEST} - ${CTEST_SOURCE_DIRECTORY} ${CTEST_BINARY_DIRECTORY}) - - -#-------------------------------------------------------------------------# -# Config -# -copy_ctest_config_files() -ctest_read_custom_files("${CTEST_BINARY_DIRECTORY}") - - -#-------------------------------------------------------------------------# -# Update -# -message(STATUS "") -message(STATUS "[${CTEST_BUILD_NAME}] Running CTEST_UPDATE stage...") -message(STATUS "") - -ctest_update(SOURCE "${CTEST_SOURCE_DIRECTORY}" - RETURN_VALUE up_ret) - - -#-------------------------------------------------------------------------# -# Configure -# -message(STATUS "") -message(STATUS "[${CTEST_BUILD_NAME}] Running CTEST_CONFIGURE stage...") -message(STATUS "") - -ctest_configure(BUILD "${CTEST_BINARY_DIRECTORY}" - SOURCE ${CTEST_SOURCE_DIRECTORY} - ${APPEND_CTEST} - OPTIONS "${CTEST_CONFIGURE_OPTIONS}" - RETURN_VALUE config_ret) - - -#-------------------------------------------------------------------------# -# Echo configure log bc Damien wants to delay merging this PR for eternity -# -file(GLOB _configure_log "${CTEST_BINARY_DIRECTORY}/Testing/Temporary/LastConfigure*.log") -# should only have one but loop just for safety -foreach(_LOG ${_configure_log}) - file(READ ${_LOG} _LOG_MESSAGE) - message(STATUS "Configure Log: ${_LOG}") - message(STATUS "\n${_LOG_MESSAGE}\n") -endforeach() - - -#-------------------------------------------------------------------------# -# Build -# -message(STATUS "") -message(STATUS "[${CTEST_BUILD_NAME}] Running CTEST_BUILD stage...") -message(STATUS "") - -ctest_build(BUILD "${CTEST_BINARY_DIRECTORY}" - ${APPEND_CTEST} - RETURN_VALUE build_ret) - - -#-------------------------------------------------------------------------# -# Echo build log bc Damien wants to delay merging this PR for eternity -# -file(GLOB _build_log "${CTEST_BINARY_DIRECTORY}/Testing/Temporary/LastBuild*.log") -# should only have one but loop just for safety -foreach(_LOG ${_build_log}) - file(READ ${_LOG} _LOG_MESSAGE) - message(STATUS "Build Log: ${_LOG}") - message(STATUS "\n${_LOG_MESSAGE}\n") -endforeach() - - -#-------------------------------------------------------------------------# -# Test -# -message(STATUS "") -message(STATUS "[${CTEST_BUILD_NAME}] Running CTEST_TEST stage...") -message(STATUS "") - -ctest_test(RETURN_VALUE test_ret - ${APPEND_CTEST} - ${START_CTEST} - ${END_CTEST} - ${STRIDE_CTEST} - ${INCLUDE_CTEST} - ${EXCLUDE_CTEST} - ${INCLUDE_LABEL_CTEST} - ${EXCLUDE_LABEL_CTEST} - ${PARALLEL_LEVEL_CTEST} - ${STOP_TIME_CTEST} - SCHEDULE_RANDOM OFF) - - -#-------------------------------------------------------------------------# -# Coverage -# -message(STATUS "") -message(STATUS "[${CTEST_BUILD_NAME}] Running CTEST_COVERAGE stage...") -message(STATUS "") - -execute_process(COMMAND ${CTEST_COVERAGE_COMMAND} ${CTEST_COVERAGE_EXTRA_FLAGS} - WORKING_DIRECTORY ${CTEST_BINARY_DIRECTORY} - ERROR_QUIET) - -ctest_coverage(${APPEND_CTEST} - ${CTEST_COVERAGE_LABELS} - RETURN_VALUE cov_ret) - - -#-------------------------------------------------------------------------# -# MemCheck -# -message(STATUS "") -message(STATUS "[${CTEST_BUILD_NAME}] Running CTEST_MEMCHECK stage...") -message(STATUS "") - -ctest_memcheck(RETURN_VALUE mem_ret - ${APPEND_CTEST} - ${START_CTEST} - ${END_CTEST} - ${STRIDE_CTEST} - ${INCLUDE_CTEST} - ${EXCLUDE_CTEST} - ${INCLUDE_LABEL_CTEST} - ${EXCLUDE_LABEL_CTEST} - ${PARALLEL_LEVEL_CTEST}) - - -#-------------------------------------------------------------------------# -# Submit -# -message(STATUS "") -message(STATUS "[${CTEST_BUILD_NAME}] Running CTEST_SUBMIT stage...") -message(STATUS "") - -file(GLOB_RECURSE NOTE_FILES "${CTEST_BINARY_DIRECTORY}/*CTestNotes.cmake") -foreach(_FILE ${NOTE_FILES}) - message(STATUS "Including CTest notes files: \"${_FILE}\"...") - include("${_FILE}") -endforeach() - -# capture submit error so it doesn't fail because of a submission error -ctest_submit(RETURN_VALUE submit_ret - RETRY_COUNT 2 - RETRY_DELAY 10 - CAPTURE_CMAKE_ERROR submit_err) - -#-------------------------------------------------------------------------# -# Submit -# -message(STATUS "") -message(STATUS "[${CTEST_BUILD_NAME}] Finished ${CTEST_MODEL} Stages (${STAGES})") -message(STATUS "") - - -#-------------------------------------------------------------------------# -# Non-zero exit codes for important errors -# -if(NOT config_ret EQUAL 0) - message(FATAL_ERROR "Error during configuration! Exit code: ${config_ret}") -endif() - -if(NOT build_ret EQUAL 0) - message(FATAL_ERROR "Error during build! Exit code: ${build_ret}") -endif() - -if(NOT test_ret EQUAL 0) - message(FATAL_ERROR "Error during testing! Exit code: ${test_ret}") -endif() diff --git a/lib/kokkos/cmake/KokkosCore_config.h.in b/lib/kokkos/cmake/KokkosCore_config.h.in index 3455b0cb42..07baa0a5f0 100644 --- a/lib/kokkos/cmake/KokkosCore_config.h.in +++ b/lib/kokkos/cmake/KokkosCore_config.h.in @@ -41,6 +41,7 @@ #cmakedefine KOKKOS_ENABLE_CUDA_LAMBDA #cmakedefine KOKKOS_ENABLE_CUDA_CONSTEXPR #cmakedefine KOKKOS_ENABLE_CUDA_LDG_INTRINSIC +#cmakedefine KOKKOS_ENABLE_IMPL_CUDA_MALLOC_ASYNC #cmakedefine KOKKOS_ENABLE_HIP_RELOCATABLE_DEVICE_CODE #cmakedefine KOKKOS_ENABLE_HPX_ASYNC_DISPATCH #cmakedefine KOKKOS_ENABLE_DEBUG @@ -49,17 +50,21 @@ #cmakedefine KOKKOS_ENABLE_COMPILER_WARNINGS #cmakedefine KOKKOS_ENABLE_PROFILING_LOAD_PRINT #cmakedefine KOKKOS_ENABLE_TUNING -#cmakedefine KOKKOS_ENABLE_DEPRECATED_CODE +#cmakedefine KOKKOS_ENABLE_DEPRECATED_CODE_3 +#cmakedefine KOKKOS_ENABLE_DEPRECATION_WARNINGS #cmakedefine KOKKOS_ENABLE_LARGE_MEM_TESTS #cmakedefine KOKKOS_ENABLE_DUALVIEW_MODIFY_CHECK #cmakedefine KOKKOS_ENABLE_COMPLEX_ALIGN -#cmakedefine KOKKOS_OPT_RANGE_AGGRESSIVE_VECTORIZATION +#cmakedefine KOKKOS_ENABLE_IMPL_DESUL_ATOMICS +#cmakedefine KOKKOS_OPT_RANGE_AGGRESSIVE_VECTORIZATION // deprecated +#cmakedefine KOKKOS_ENABLE_AGGRESSIVE_VECTORIZATION /* TPL Settings */ #cmakedefine KOKKOS_ENABLE_HWLOC #cmakedefine KOKKOS_USE_LIBRT #cmakedefine KOKKOS_ENABLE_HBWSPACE #cmakedefine KOKKOS_ENABLE_LIBDL +#cmakedefine KOKKOS_ENABLE_LIBQUADMATH #cmakedefine KOKKOS_IMPL_CUDA_CLANG_WORKAROUND #cmakedefine KOKKOS_COMPILER_CUDA_VERSION @KOKKOS_COMPILER_CUDA_VERSION@ @@ -79,6 +84,12 @@ #cmakedefine KOKKOS_ARCH_POWER8 #cmakedefine KOKKOS_ARCH_POWER9 #cmakedefine KOKKOS_ARCH_INTEL_GEN +#cmakedefine KOKKOS_ARCH_INTEL_DG1 +#cmakedefine KOKKOS_ARCH_INTEL_GEN9 +#cmakedefine KOKKOS_ARCH_INTEL_GEN11 +#cmakedefine KOKKOS_ARCH_INTEL_GEN12LP +#cmakedefine KOKKOS_ARCH_INTEL_XEHP +#cmakedefine KOKKOS_ARCH_INTEL_GPU #cmakedefine KOKKOS_ARCH_KEPLER #cmakedefine KOKKOS_ARCH_KEPLER30 #cmakedefine KOKKOS_ARCH_KEPLER32 @@ -95,6 +106,7 @@ #cmakedefine KOKKOS_ARCH_VOLTA70 #cmakedefine KOKKOS_ARCH_VOLTA72 #cmakedefine KOKKOS_ARCH_TURING75 +#cmakedefine KOKKOS_ARCH_AMPERE #cmakedefine KOKKOS_ARCH_AMPERE80 #cmakedefine KOKKOS_ARCH_AMPERE86 #cmakedefine KOKKOS_ARCH_AMD_ZEN diff --git a/lib/kokkos/cmake/Modules/FindTPLCUDA.cmake b/lib/kokkos/cmake/Modules/FindTPLCUDA.cmake index 8d58d96415..0c825c59e0 100644 --- a/lib/kokkos/cmake/Modules/FindTPLCUDA.cmake +++ b/lib/kokkos/cmake/Modules/FindTPLCUDA.cmake @@ -29,7 +29,12 @@ ELSE() ENDIF() include(FindPackageHandleStandardArgs) -FIND_PACKAGE_HANDLE_STANDARD_ARGS(TPLCUDA DEFAULT_MSG FOUND_CUDART FOUND_CUDA_DRIVER) +IF(KOKKOS_CXX_HOST_COMPILER_ID STREQUAL PGI) + SET(KOKKOS_CUDA_ERROR "Using NVHPC as host compiler requires at least CMake 3.20.1") +ELSE() + SET(KOKKOS_CUDA_ERROR DEFAULT_MSG) +ENDIF() +FIND_PACKAGE_HANDLE_STANDARD_ARGS(TPLCUDA ${KOKKOS_CUDA_ERROR} FOUND_CUDART FOUND_CUDA_DRIVER) IF (FOUND_CUDA_DRIVER AND FOUND_CUDART) KOKKOS_CREATE_IMPORTED_TPL(CUDA INTERFACE LINK_LIBRARIES CUDA::cuda_driver CUDA::cudart diff --git a/lib/kokkos/cmake/Modules/FindTPLLIBQUADMATH.cmake b/lib/kokkos/cmake/Modules/FindTPLLIBQUADMATH.cmake new file mode 100644 index 0000000000..be70b711e0 --- /dev/null +++ b/lib/kokkos/cmake/Modules/FindTPLLIBQUADMATH.cmake @@ -0,0 +1 @@ +KOKKOS_FIND_IMPORTED(LIBQUADMATH HEADER quadmath.h LIBRARY quadmath) diff --git a/lib/kokkos/cmake/deps/quadmath.cmake b/lib/kokkos/cmake/deps/quadmath.cmake new file mode 100644 index 0000000000..826f5021d3 --- /dev/null +++ b/lib/kokkos/cmake/deps/quadmath.cmake @@ -0,0 +1,46 @@ +# @HEADER +# ************************************************************************ +# +# Kokkos v. 3.0 +# Copyright (2020) National Technology & Engineering +# Solutions of Sandia, LLC (NTESS). +# +# Under the terms of Contract DE-NA0003525 with NTESS, +# the U.S. Government retains certain rights in this software. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are +# met: +# +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# +# 3. Neither the name of the Corporation nor the names of the +# contributors may be used to endorse or promote products derived from +# this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY +# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE +# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +# LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# +# Questions? Contact Christian R. Trott (crtrott@sandia.gov) +# +# ************************************************************************ +# @HEADER + +KOKKOS_TPL_FIND_INCLUDE_DIRS_AND_LIBRARIES( quadmath + REQUIRED_HEADERS quadmath.h + REQUIRED_LIBS_NAMES quadmath +) diff --git a/lib/kokkos/cmake/kokkos_arch.cmake b/lib/kokkos/cmake/kokkos_arch.cmake index e8b85542c6..c4637339f3 100644 --- a/lib/kokkos/cmake/kokkos_arch.cmake +++ b/lib/kokkos/cmake/kokkos_arch.cmake @@ -67,8 +67,13 @@ KOKKOS_ARCH_OPTION(ZEN3 HOST "AMD Zen3 architecture") KOKKOS_ARCH_OPTION(VEGA900 GPU "AMD GPU MI25 GFX900") KOKKOS_ARCH_OPTION(VEGA906 GPU "AMD GPU MI50/MI60 GFX906") KOKKOS_ARCH_OPTION(VEGA908 GPU "AMD GPU MI100 GFX908") +KOKKOS_ARCH_OPTION(VEGA90A GPU "" ) KOKKOS_ARCH_OPTION(INTEL_GEN GPU "Intel GPUs Gen9+") - +KOKKOS_ARCH_OPTION(INTEL_DG1 GPU "Intel Iris XeMAX GPU") +KOKKOS_ARCH_OPTION(INTEL_GEN9 GPU "Intel GPU Gen9") +KOKKOS_ARCH_OPTION(INTEL_GEN11 GPU "Intel GPU Gen11") +KOKKOS_ARCH_OPTION(INTEL_GEN12LP GPU "Intel GPU Gen12LP") +KOKKOS_ARCH_OPTION(INTEL_XEHP GPU "Intel GPU Xe-HP") IF(KOKKOS_ENABLE_COMPILER_WARNINGS) @@ -76,6 +81,12 @@ IF(KOKKOS_ENABLE_COMPILER_WARNINGS) "-Wall" "-Wunused-parameter" "-Wshadow" "-pedantic" "-Wsign-compare" "-Wtype-limits" "-Wuninitialized") + # NOTE KOKKOS_ prefixed variable (all uppercase) is not set yet because TPLs are processed after ARCH + IF(Kokkos_ENABLE_LIBQUADMATH) + # warning: non-standard suffix on floating constant [-Wpedantic] + LIST(REMOVE_ITEM COMMON_WARNINGS "-pedantic") + ENDIF() + # OpenMPTarget compilers give erroneous warnings about sign comparison in loops IF(KOKKOS_ENABLE_OPENMPTARGET) LIST(REMOVE_ITEM COMMON_WARNINGS "-Wsign-compare") @@ -86,7 +97,7 @@ IF(KOKKOS_ENABLE_COMPILER_WARNINGS) COMPILER_SPECIFIC_FLAGS( COMPILER_ID CMAKE_CXX_COMPILER_ID - PGI NO-VALUE-SPECIFIED + NVHPC NO-VALUE-SPECIFIED GNU ${GNU_WARNINGS} DEFAULT ${COMMON_WARNINGS} ) @@ -158,16 +169,18 @@ ENDIF() IF (KOKKOS_ARCH_ARMV80) COMPILER_SPECIFIC_FLAGS( - Cray NO-VALUE-SPECIFIED - PGI NO-VALUE-SPECIFIED + COMPILER_ID KOKKOS_CXX_HOST_COMPILER_ID + Cray NO-VALUE-SPECIFIED + NVHPC NO-VALUE-SPECIFIED DEFAULT -march=armv8-a ) ENDIF() IF (KOKKOS_ARCH_ARMV81) COMPILER_SPECIFIC_FLAGS( - Cray NO-VALUE-SPECIFIED - PGI NO-VALUE-SPECIFIED + COMPILER_ID KOKKOS_CXX_HOST_COMPILER_ID + Cray NO-VALUE-SPECIFIED + NVHPC NO-VALUE-SPECIFIED DEFAULT -march=armv8.1-a ) ENDIF() @@ -175,8 +188,9 @@ ENDIF() IF (KOKKOS_ARCH_ARMV8_THUNDERX) SET(KOKKOS_ARCH_ARMV80 ON) #Not a cache variable COMPILER_SPECIFIC_FLAGS( - Cray NO-VALUE-SPECIFIED - PGI NO-VALUE-SPECIFIED + COMPILER_ID KOKKOS_CXX_HOST_COMPILER_ID + Cray NO-VALUE-SPECIFIED + NVHPC NO-VALUE-SPECIFIED DEFAULT -march=armv8-a -mtune=thunderx ) ENDIF() @@ -184,23 +198,28 @@ ENDIF() IF (KOKKOS_ARCH_ARMV8_THUNDERX2) SET(KOKKOS_ARCH_ARMV81 ON) #Not a cache variable COMPILER_SPECIFIC_FLAGS( - Cray NO-VALUE-SPECIFIED - PGI NO-VALUE-SPECIFIED + COMPILER_ID KOKKOS_CXX_HOST_COMPILER_ID + Cray NO-VALUE-SPECIFIED + NVHPC NO-VALUE-SPECIFIED DEFAULT -mcpu=thunderx2t99 -mtune=thunderx2t99 ) ENDIF() IF (KOKKOS_ARCH_A64FX) COMPILER_SPECIFIC_FLAGS( + COMPILER_ID KOKKOS_CXX_HOST_COMPILER_ID + NVHPC NO-VALUE-SPECIFIED DEFAULT -march=armv8.2-a+sve - Clang -march=armv8.2-a+sve -msve-vector-bits=512 - GCC -march=armv8.2-a+sve -msve-vector-bits=512 + Clang -march=armv8.2-a+sve -msve-vector-bits=512 + GCC -march=armv8.2-a+sve -msve-vector-bits=512 ) ENDIF() IF (KOKKOS_ARCH_ZEN) COMPILER_SPECIFIC_FLAGS( + COMPILER_ID KOKKOS_CXX_HOST_COMPILER_ID Intel -mavx2 + NVHPC -tp=zen DEFAULT -march=znver1 -mtune=znver1 ) SET(KOKKOS_ARCH_AMD_ZEN ON) @@ -209,7 +228,9 @@ ENDIF() IF (KOKKOS_ARCH_ZEN2) COMPILER_SPECIFIC_FLAGS( + COMPILER_ID KOKKOS_CXX_HOST_COMPILER_ID Intel -mavx2 + NVHPC -tp=zen2 DEFAULT -march=znver2 -mtune=znver2 ) SET(KOKKOS_ARCH_AMD_ZEN2 ON) @@ -218,7 +239,9 @@ ENDIF() IF (KOKKOS_ARCH_ZEN3) COMPILER_SPECIFIC_FLAGS( + COMPILER_ID KOKKOS_CXX_HOST_COMPILER_ID Intel -mavx2 + NVHPC -tp=zen2 DEFAULT -march=znver3 -mtune=znver3 ) SET(KOKKOS_ARCH_AMD_ZEN3 ON) @@ -227,8 +250,9 @@ ENDIF() IF (KOKKOS_ARCH_WSM) COMPILER_SPECIFIC_FLAGS( + COMPILER_ID KOKKOS_CXX_HOST_COMPILER_ID Intel -xSSE4.2 - PGI -tp=nehalem + NVHPC -tp=px Cray NO-VALUE-SPECIFIED DEFAULT -msse4.2 ) @@ -238,8 +262,9 @@ ENDIF() IF (KOKKOS_ARCH_SNB OR KOKKOS_ARCH_AMDAVX) SET(KOKKOS_ARCH_AVX ON) COMPILER_SPECIFIC_FLAGS( + COMPILER_ID KOKKOS_CXX_HOST_COMPILER_ID Intel -mavx - PGI -tp=sandybridge + NVHPC -tp=sandybridge Cray NO-VALUE-SPECIFIED DEFAULT -mavx ) @@ -248,8 +273,9 @@ ENDIF() IF (KOKKOS_ARCH_HSW) SET(KOKKOS_ARCH_AVX2 ON) COMPILER_SPECIFIC_FLAGS( + COMPILER_ID KOKKOS_CXX_HOST_COMPILER_ID Intel -xCORE-AVX2 - PGI -tp=haswell + NVHPC -tp=haswell Cray NO-VALUE-SPECIFIED DEFAULT -march=core-avx2 -mtune=core-avx2 ) @@ -258,8 +284,9 @@ ENDIF() IF (KOKKOS_ARCH_BDW) SET(KOKKOS_ARCH_AVX2 ON) COMPILER_SPECIFIC_FLAGS( + COMPILER_ID KOKKOS_CXX_HOST_COMPILER_ID Intel -xCORE-AVX2 - PGI -tp=haswell + NVHPC -tp=haswell Cray NO-VALUE-SPECIFIED DEFAULT -march=core-avx2 -mtune=core-avx2 -mrtm ) @@ -269,8 +296,9 @@ IF (KOKKOS_ARCH_KNL) #avx512-mic SET(KOKKOS_ARCH_AVX512MIC ON) #not a cache variable COMPILER_SPECIFIC_FLAGS( + COMPILER_ID KOKKOS_CXX_HOST_COMPILER_ID Intel -xMIC-AVX512 - PGI NO-VALUE-SPECIFIED + NVHPC -tp=knl Cray NO-VALUE-SPECIFIED DEFAULT -march=knl -mtune=knl ) @@ -279,6 +307,7 @@ ENDIF() IF (KOKKOS_ARCH_KNC) SET(KOKKOS_USE_ISA_KNC ON) COMPILER_SPECIFIC_FLAGS( + COMPILER_ID KOKKOS_CXX_HOST_COMPILER_ID DEFAULT -mmic ) ENDIF() @@ -287,8 +316,9 @@ IF (KOKKOS_ARCH_SKX) #avx512-xeon SET(KOKKOS_ARCH_AVX512XEON ON) COMPILER_SPECIFIC_FLAGS( + COMPILER_ID KOKKOS_CXX_HOST_COMPILER_ID Intel -xCORE-AVX512 - PGI NO-VALUE-SPECIFIED + NVHPC -tp=skylake Cray NO-VALUE-SPECIFIED DEFAULT -march=skylake-avx512 -mtune=skylake-avx512 -mrtm ) @@ -304,7 +334,8 @@ ENDIF() IF (KOKKOS_ARCH_POWER7) COMPILER_SPECIFIC_FLAGS( - PGI NO-VALUE-SPECIFIED + COMPILER_ID KOKKOS_CXX_HOST_COMPILER_ID + NVHPC NO-VALUE-SPECIFIED DEFAULT -mcpu=power7 -mtune=power7 ) SET(KOKKOS_USE_ISA_POWERPCBE ON) @@ -312,16 +343,16 @@ ENDIF() IF (KOKKOS_ARCH_POWER8) COMPILER_SPECIFIC_FLAGS( - PGI NO-VALUE-SPECIFIED - NVIDIA NO-VALUE-SPECIFIED + COMPILER_ID KOKKOS_CXX_HOST_COMPILER_ID + NVHPC -tp=pwr8 DEFAULT -mcpu=power8 -mtune=power8 ) ENDIF() IF (KOKKOS_ARCH_POWER9) COMPILER_SPECIFIC_FLAGS( - PGI NO-VALUE-SPECIFIED - NVIDIA NO-VALUE-SPECIFIED + COMPILER_ID KOKKOS_CXX_HOST_COMPILER_ID + NVHPC -tp=pwr9 DEFAULT -mcpu=power9 -mtune=power9 ) ENDIF() @@ -368,7 +399,7 @@ ENDIF() IF (KOKKOS_ENABLE_SYCL) COMPILER_SPECIFIC_FLAGS( - DEFAULT -fsycl + DEFAULT -fsycl -fno-sycl-id-queries-fit-in-int ) COMPILER_SPECIFIC_OPTIONS( DEFAULT -fsycl-unnamed-lambda @@ -443,20 +474,58 @@ ENDFUNCTION() CHECK_AMDGPU_ARCH(VEGA900 gfx900) # Radeon Instinct MI25 CHECK_AMDGPU_ARCH(VEGA906 gfx906) # Radeon Instinct MI50 and MI60 CHECK_AMDGPU_ARCH(VEGA908 gfx908) +CHECK_AMDGPU_ARCH(VEGA90A gfx90a) IF(KOKKOS_ENABLE_HIP AND NOT AMDGPU_ARCH_ALREADY_SPECIFIED) - MESSAGE(SEND_ERROR "HIP enabled but no AMD GPU architecture currently enabled. " - "Please enable one AMD GPU architecture via -DKokkos_ARCH_{..}=ON'.") + IF(KOKKOS_CXX_COMPILER_ID STREQUAL HIPCC) + FIND_PROGRAM(ROCM_ENUMERATOR rocm_agent_enumerator) + EXECUTE_PROCESS(COMMAND ${ROCM_ENUMERATOR} OUTPUT_VARIABLE GPU_ARCHS) + STRING(LENGTH "${GPU_ARCHS}" len_str) + # enumerator always output gfx000 as the first line + IF(${len_str} LESS 8) + MESSAGE(SEND_ERROR "HIP enabled but no AMD GPU architecture currently enabled. " + "Please enable one AMD GPU architecture via -DKokkos_ARCH_{..}=ON'.") + ENDIF() + ELSE() + MESSAGE(SEND_ERROR "HIP enabled but no AMD GPU architecture currently enabled. " + "Please enable one AMD GPU architecture via -DKokkos_ARCH_{..}=ON'.") + ENDIF() +ENDIF() + +MACRO(CHECK_MULTIPLE_INTEL_ARCH) + IF(KOKKOS_ARCH_INTEL_GPU) + MESSAGE(FATAL_ERROR "Specifying multiple Intel GPU architectures is not allowed!") + ENDIF() + SET(KOKKOS_ARCH_INTEL_GPU ON) +ENDMACRO() + +IF(KOKKOS_ARCH_INTEL_GEN) + CHECK_MULTIPLE_INTEL_ARCH() +ENDIF() +IF(KOKKOS_ARCH_INTEL_DG1) + CHECK_MULTIPLE_INTEL_ARCH() +ENDIF() +IF(KOKKOS_ARCH_INTEL_GEN9) + CHECK_MULTIPLE_INTEL_ARCH() +ENDIF() +IF(KOKKOS_ARCH_INTEL_GEN11) + CHECK_MULTIPLE_INTEL_ARCH() +ENDIF() +IF(KOKKOS_ARCH_INTEL_GEN12LP) + CHECK_MULTIPLE_INTEL_ARCH() +ENDIF() +IF(KOKKOS_ARCH_INTEL_XEHP) + CHECK_MULTIPLE_INTEL_ARCH() ENDIF() IF (KOKKOS_ENABLE_OPENMPTARGET) SET(CLANG_CUDA_ARCH ${KOKKOS_CUDA_ARCH_FLAG}) IF (CLANG_CUDA_ARCH) - STRING(REPLACE "sm_" "cc" PGI_CUDA_ARCH ${CLANG_CUDA_ARCH}) + STRING(REPLACE "sm_" "cc" NVHPC_CUDA_ARCH ${CLANG_CUDA_ARCH}) COMPILER_SPECIFIC_FLAGS( Clang -Xopenmp-target -march=${CLANG_CUDA_ARCH} -fopenmp-targets=nvptx64-nvidia-cuda - XL -qtgtarch=${KOKKOS_CUDA_ARCH_FLAG} - PGI -gpu=${PGI_CUDA_ARCH} + XL -qtgtarch=${KOKKOS_CUDA_ARCH_FLAG} + NVHPC -gpu=${NVHPC_CUDA_ARCH} ) ENDIF() SET(CLANG_AMDGPU_ARCH ${KOKKOS_AMDGPU_ARCH_FLAG}) @@ -465,7 +534,7 @@ IF (KOKKOS_ENABLE_OPENMPTARGET) Clang -Xopenmp-target=amdgcn-amd-amdhsa -march=${CLANG_AMDGPU_ARCH} -fopenmp-targets=amdgcn-amd-amdhsa ) ENDIF() - IF (KOKKOS_ARCH_INTEL_GEN) + IF (KOKKOS_ARCH_INTEL_GPU) COMPILER_SPECIFIC_FLAGS( IntelLLVM -fopenmp-targets=spir64 -D__STRICT_ANSI__ ) @@ -485,7 +554,27 @@ IF (KOKKOS_ENABLE_SYCL) ENDIF() ELSEIF(KOKKOS_ARCH_INTEL_GEN) COMPILER_SPECIFIC_FLAGS( - DEFAULT -fsycl-targets=spir64_gen-unknown-unknown-sycldevice -Xsycl-target-backend "-device skl" + DEFAULT -fsycl-targets=spir64_gen-unknown-unknown-sycldevice -Xsycl-target-backend "-device gen9-" + ) + ELSEIF(KOKKOS_ARCH_INTEL_GEN9) + COMPILER_SPECIFIC_FLAGS( + DEFAULT -fsycl-targets=spir64_gen-unknown-unknown-sycldevice -Xsycl-target-backend "-device gen9" + ) + ELSEIF(KOKKOS_ARCH_INTEL_GEN11) + COMPILER_SPECIFIC_FLAGS( + DEFAULT -fsycl-targets=spir64_gen-unknown-unknown-sycldevice -Xsycl-target-backend "-device gen11" + ) + ELSEIF(KOKKOS_ARCH_INTEL_GEN12LP) + COMPILER_SPECIFIC_FLAGS( + DEFAULT -fsycl-targets=spir64_gen-unknown-unknown-sycldevice -Xsycl-target-backend "-device gen12lp" + ) + ELSEIF(KOKKOS_ARCH_INTEL_DG1) + COMPILER_SPECIFIC_FLAGS( + DEFAULT -fsycl-targets=spir64_gen-unknown-unknown-sycldevice -Xsycl-target-backend "-device dg1" + ) + ELSEIF(KOKKOS_ARCH_INTEL_XEHP) + COMPILER_SPECIFIC_FLAGS( + DEFAULT -fsycl-targets=spir64_gen-unknown-unknown-sycldevice -Xsycl-target-backend "-device xehp" ) ENDIF() ENDIF() diff --git a/lib/kokkos/cmake/kokkos_compiler_id.cmake b/lib/kokkos/cmake/kokkos_compiler_id.cmake index 23847263a9..5afed4fb0e 100644 --- a/lib/kokkos/cmake/kokkos_compiler_id.cmake +++ b/lib/kokkos/cmake/kokkos_compiler_id.cmake @@ -137,7 +137,7 @@ SET(KOKKOS_MESSAGE_TEXT "${KOKKOS_MESSAGE_TEXT}\n Clang 4.0.0 or higher" SET(KOKKOS_MESSAGE_TEXT "${KOKKOS_MESSAGE_TEXT}\n GCC 5.3.0 or higher") SET(KOKKOS_MESSAGE_TEXT "${KOKKOS_MESSAGE_TEXT}\n Intel 17.0.0 or higher") SET(KOKKOS_MESSAGE_TEXT "${KOKKOS_MESSAGE_TEXT}\n NVCC 9.2.88 or higher") -SET(KOKKOS_MESSAGE_TEXT "${KOKKOS_MESSAGE_TEXT}\n HIPCC 3.8.0 or higher") +SET(KOKKOS_MESSAGE_TEXT "${KOKKOS_MESSAGE_TEXT}\n HIPCC 4.2.0 or higher") SET(KOKKOS_MESSAGE_TEXT "${KOKKOS_MESSAGE_TEXT}\n PGI 17.4 or higher\n") IF(KOKKOS_CXX_COMPILER_ID STREQUAL Clang) @@ -158,13 +158,23 @@ ELSEIF(KOKKOS_CXX_COMPILER_ID STREQUAL NVIDIA) ENDIF() SET(CMAKE_CXX_EXTENSIONS OFF CACHE BOOL "Kokkos turns off CXX extensions" FORCE) ELSEIF(KOKKOS_CXX_COMPILER_ID STREQUAL HIPCC) - IF(KOKKOS_CXX_COMPILER_VERSION VERSION_LESS 3.8.0) + IF(KOKKOS_CXX_COMPILER_VERSION VERSION_LESS 4.2.0) MESSAGE(FATAL_ERROR "${KOKKOS_MESSAGE_TEXT}") ENDIF() ELSEIF(KOKKOS_CXX_COMPILER_ID STREQUAL PGI) IF(KOKKOS_CXX_COMPILER_VERSION VERSION_LESS 17.4) MESSAGE(FATAL_ERROR "${KOKKOS_MESSAGE_TEXT}") ENDIF() + # Treat PGI internally as NVHPC to simplify handling both compilers. + # Before CMake 3.20 NVHPC was identified as PGI, nvc++ is + # backward-compatible to pgc++. + SET(KOKKOS_CXX_COMPILER_ID NVHPC CACHE STRING INTERNAL FORCE) +ENDIF() + +IF(NOT DEFINED KOKKOS_CXX_HOST_COMPILER_ID) + SET(KOKKOS_CXX_HOST_COMPILER_ID ${KOKKOS_CXX_COMPILER_ID}) +ELSEIF(KOKKOS_CXX_HOST_COMPILER_ID STREQUAL PGI) + SET(KOKKOS_CXX_HOST_COMPILER_ID NVHPC CACHE STRING INTERNAL FORCE) ENDIF() STRING(REPLACE "." ";" VERSION_LIST ${KOKKOS_CXX_COMPILER_VERSION}) diff --git a/lib/kokkos/cmake/kokkos_enable_devices.cmake b/lib/kokkos/cmake/kokkos_enable_devices.cmake index d7f83ddbdf..7fd0794036 100644 --- a/lib/kokkos/cmake/kokkos_enable_devices.cmake +++ b/lib/kokkos/cmake/kokkos_enable_devices.cmake @@ -62,7 +62,7 @@ IF(KOKKOS_ENABLE_OPENMP) COMPILER_ID KOKKOS_CXX_HOST_COMPILER_ID Clang -Xcompiler ${ClangOpenMPFlag} IntelLLVM -Xcompiler -fiopenmp - PGI -Xcompiler -mp + NVHPC -Xcompiler -mp Cray NO-VALUE-SPECIFIED XL -Xcompiler -qsmp=omp DEFAULT -Xcompiler -fopenmp @@ -72,7 +72,7 @@ IF(KOKKOS_ENABLE_OPENMP) Clang ${ClangOpenMPFlag} IntelLLVM -fiopenmp AppleClang -Xpreprocessor -fopenmp - PGI -mp + NVHPC -mp Cray NO-VALUE-SPECIFIED XL -qsmp=omp DEFAULT -fopenmp @@ -94,7 +94,7 @@ IF (KOKKOS_ENABLE_OPENMPTARGET) Clang ${ClangOpenMPFlag} -Wno-openmp-mapping IntelLLVM -fiopenmp -Wno-openmp-mapping XL -qsmp=omp -qoffload -qnoeh - PGI -mp=gpu + NVHPC -mp=gpu DEFAULT -fopenmp ) COMPILER_SPECIFIC_DEFS( diff --git a/lib/kokkos/cmake/kokkos_enable_options.cmake b/lib/kokkos/cmake/kokkos_enable_options.cmake index 95bce66c7b..4cb8bd20f5 100644 --- a/lib/kokkos/cmake/kokkos_enable_options.cmake +++ b/lib/kokkos/cmake/kokkos_enable_options.cmake @@ -26,9 +26,16 @@ KOKKOS_CFG_DEPENDS(OPTIONS COMPILER_ID) # Put a check in just in case people are using this option KOKKOS_DEPRECATED_LIST(OPTIONS ENABLE) +# Set the Default for Desul Atomics usage. +set(_DESUL_ATOMICS_DEFAULT ON) + KOKKOS_ENABLE_OPTION(CUDA_RELOCATABLE_DEVICE_CODE OFF "Whether to enable relocatable device code (RDC) for CUDA") KOKKOS_ENABLE_OPTION(CUDA_UVM OFF "Whether to use unified memory (UM) for CUDA by default") KOKKOS_ENABLE_OPTION(CUDA_LDG_INTRINSIC OFF "Whether to use CUDA LDG intrinsics") +# As of 08/12/2021 CudaMallocAsync causes issues if UCX is used as MPI communication layer. +KOKKOS_ENABLE_OPTION(IMPL_CUDA_MALLOC_ASYNC OFF "Whether to enable CudaMallocAsync (requires CUDA Toolkit 11.2)") +KOKKOS_ENABLE_OPTION(DEPRECATED_CODE_3 ON "Whether code deprecated in major release 3 is available" ) +KOKKOS_ENABLE_OPTION(DEPRECATION_WARNINGS ON "Whether to emit deprecation warnings" ) KOKKOS_ENABLE_OPTION(HIP_RELOCATABLE_DEVICE_CODE OFF "Whether to enable relocatable device code (RDC) for HIP") KOKKOS_ENABLE_OPTION(HPX_ASYNC_DISPATCH OFF "Whether HPX supports asynchronous dispatch") KOKKOS_ENABLE_OPTION(TESTS OFF "Whether to build the unit tests") @@ -50,6 +57,9 @@ KOKKOS_ENABLE_OPTION(TUNING OFF "Whether to create bindings for tu KOKKOS_ENABLE_OPTION(AGGRESSIVE_VECTORIZATION OFF "Whether to aggressively vectorize loops") KOKKOS_ENABLE_OPTION(LAUNCH_COMPILER ON "Whether to potentially use the launch compiler") +# This option will go away eventually, but allows fallback to old implementation when needed. +KOKKOS_ENABLE_OPTION(IMPL_DESUL_ATOMICS ON "Whether to use desul based atomics - option only during beta") + IF (KOKKOS_ENABLE_CUDA) SET(KOKKOS_COMPILER_CUDA_VERSION "${KOKKOS_COMPILER_VERSION_MAJOR}${KOKKOS_COMPILER_VERSION_MINOR}") ENDIF() diff --git a/lib/kokkos/cmake/kokkos_functions.cmake b/lib/kokkos/cmake/kokkos_functions.cmake index e1a3e5f8bd..02c9a911b1 100644 --- a/lib/kokkos/cmake/kokkos_functions.cmake +++ b/lib/kokkos/cmake/kokkos_functions.cmake @@ -773,7 +773,7 @@ FUNCTION(kokkos_link_tpl TARGET) ENDFUNCTION() FUNCTION(COMPILER_SPECIFIC_OPTIONS_HELPER) - SET(COMPILERS NVIDIA PGI XL DEFAULT Cray Intel Clang AppleClang IntelLLVM GNU HIPCC Fujitsu) + SET(COMPILERS NVIDIA NVHPC XL XLClang DEFAULT Cray Intel Clang AppleClang IntelLLVM GNU HIPCC Fujitsu) CMAKE_PARSE_ARGUMENTS( PARSE "LINK_OPTIONS;COMPILE_OPTIONS;COMPILE_DEFINITIONS;LINK_LIBRARIES" diff --git a/lib/kokkos/cmake/kokkos_test_cxx_std.cmake b/lib/kokkos/cmake/kokkos_test_cxx_std.cmake index 707fb000af..1eb0592c7f 100644 --- a/lib/kokkos/cmake/kokkos_test_cxx_std.cmake +++ b/lib/kokkos/cmake/kokkos_test_cxx_std.cmake @@ -140,7 +140,7 @@ IF (NOT KOKKOS_CXX_STANDARD_FEATURE) IF(KOKKOS_CXX_COMPILER_ID STREQUAL Cray) INCLUDE(${KOKKOS_SRC_PATH}/cmake/cray.cmake) kokkos_set_cray_flags(${KOKKOS_CXX_STANDARD} ${KOKKOS_CXX_INTERMEDIATE_STANDARD}) - ELSEIF(KOKKOS_CXX_COMPILER_ID STREQUAL PGI) + ELSEIF(KOKKOS_CXX_COMPILER_ID STREQUAL NVHPC) INCLUDE(${KOKKOS_SRC_PATH}/cmake/pgi.cmake) kokkos_set_pgi_flags(${KOKKOS_CXX_STANDARD} ${KOKKOS_CXX_INTERMEDIATE_STANDARD}) ELSEIF(KOKKOS_CXX_COMPILER_ID STREQUAL Intel) diff --git a/lib/kokkos/cmake/kokkos_tpls.cmake b/lib/kokkos/cmake/kokkos_tpls.cmake index d8d044c9d7..51bad521c4 100644 --- a/lib/kokkos/cmake/kokkos_tpls.cmake +++ b/lib/kokkos/cmake/kokkos_tpls.cmake @@ -67,6 +67,12 @@ SET(PTHREAD_DEFAULT OFF) ENDIF() KOKKOS_TPL_OPTION(PTHREAD ${PTHREAD_DEFAULT} TRIBITS Pthread) +IF(Trilinos_ENABLE_Kokkos AND TPL_ENABLE_quadmath) + SET(LIBQUADMATH_DEFAULT ON) +ELSE() + SET(LIBQUADMATH_DEFAULT OFF) +ENDIF() +KOKKOS_TPL_OPTION(LIBQUADMATH ${LIBQUADMATH_DEFAULT} TRIBITS quadmath) #Make sure we use our local FindKokkosCuda.cmake KOKKOS_IMPORT_TPL(HPX INTERFACE) @@ -78,6 +84,7 @@ KOKKOS_IMPORT_TPL(LIBDL) KOKKOS_IMPORT_TPL(MEMKIND) KOKKOS_IMPORT_TPL(PTHREAD INTERFACE) KOKKOS_IMPORT_TPL(ROCM INTERFACE) +KOKKOS_IMPORT_TPL(LIBQUADMATH) #Convert list to newlines (which CMake doesn't always like in cache variables) STRING(REPLACE ";" "\n" KOKKOS_TPL_EXPORT_TEMP "${KOKKOS_TPL_EXPORTS}") diff --git a/lib/kokkos/cmake/tpls/FindTPLquadmath.cmake b/lib/kokkos/cmake/tpls/FindTPLquadmath.cmake new file mode 100644 index 0000000000..1f7587da80 --- /dev/null +++ b/lib/kokkos/cmake/tpls/FindTPLquadmath.cmake @@ -0,0 +1,46 @@ +# @HEADER +# ************************************************************************ +# +# Kokkos v. 3.0 +# Copyright (2020) National Technology & Engineering +# Solutions of Sandia, LLC (NTESS). +# +# Under the terms of Contract DE-NA0003525 with NTESS, +# the U.S. Government retains certain rights in this software. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are +# met: +# +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# +# 3. Neither the name of the Corporation nor the names of the +# contributors may be used to endorse or promote products derived from +# this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY +# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE +# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +# LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# +# Questions? Contact Christian R. Trott (crtrott@sandia.gov) +# +# ************************************************************************ +# @HEADER + +TRIBITS_TPL_FIND_INCLUDE_DIRS_AND_LIBRARIES( quadmath + REQUIRED_HEADERS quadmath.h + REQUIRED_LIBS_NAMES quadmath +) diff --git a/lib/kokkos/containers/performance_tests/TestDynRankView.hpp b/lib/kokkos/containers/performance_tests/TestDynRankView.hpp index 8c507c7662..7ed9a0271a 100644 --- a/lib/kokkos/containers/performance_tests/TestDynRankView.hpp +++ b/lib/kokkos/containers/performance_tests/TestDynRankView.hpp @@ -48,7 +48,7 @@ #include #include -#include +#include // Compare performance of DynRankView to View, specific focus on the parenthesis // operators diff --git a/lib/kokkos/containers/performance_tests/TestGlobal2LocalIds.hpp b/lib/kokkos/containers/performance_tests/TestGlobal2LocalIds.hpp index 65de551b27..16b74a4997 100644 --- a/lib/kokkos/containers/performance_tests/TestGlobal2LocalIds.hpp +++ b/lib/kokkos/containers/performance_tests/TestGlobal2LocalIds.hpp @@ -48,7 +48,7 @@ #include #include -#include +#include // This test will simulate global ids diff --git a/lib/kokkos/containers/performance_tests/TestScatterView.hpp b/lib/kokkos/containers/performance_tests/TestScatterView.hpp index 0f3ba103ef..8a23f59d32 100644 --- a/lib/kokkos/containers/performance_tests/TestScatterView.hpp +++ b/lib/kokkos/containers/performance_tests/TestScatterView.hpp @@ -46,7 +46,7 @@ #define KOKKOS_TEST_SCATTER_VIEW_HPP #include -#include +#include namespace Perf { diff --git a/lib/kokkos/containers/performance_tests/TestUnorderedMapPerformance.hpp b/lib/kokkos/containers/performance_tests/TestUnorderedMapPerformance.hpp index c31412552a..4547d5c357 100644 --- a/lib/kokkos/containers/performance_tests/TestUnorderedMapPerformance.hpp +++ b/lib/kokkos/containers/performance_tests/TestUnorderedMapPerformance.hpp @@ -43,7 +43,7 @@ #ifndef KOKKOS_TEST_UNORDERED_MAP_PERFORMANCE_HPP #define KOKKOS_TEST_UNORDERED_MAP_PERFORMANCE_HPP -#include +#include #include #include diff --git a/lib/kokkos/containers/src/Kokkos_Bitset.hpp b/lib/kokkos/containers/src/Kokkos_Bitset.hpp index ea1d6dde5d..c5b66f05a3 100644 --- a/lib/kokkos/containers/src/Kokkos_Bitset.hpp +++ b/lib/kokkos/containers/src/Kokkos_Bitset.hpp @@ -76,20 +76,25 @@ class Bitset { using execution_space = Device; using size_type = unsigned int; - enum { BIT_SCAN_REVERSE = 1u }; - enum { MOVE_HINT_BACKWARD = 2u }; + static constexpr unsigned BIT_SCAN_REVERSE = 1u; + static constexpr unsigned MOVE_HINT_BACKWARD = 2u; - enum { - BIT_SCAN_FORWARD_MOVE_HINT_FORWARD = 0u, - BIT_SCAN_REVERSE_MOVE_HINT_FORWARD = BIT_SCAN_REVERSE, - BIT_SCAN_FORWARD_MOVE_HINT_BACKWARD = MOVE_HINT_BACKWARD, - BIT_SCAN_REVERSE_MOVE_HINT_BACKWARD = BIT_SCAN_REVERSE | MOVE_HINT_BACKWARD - }; + static constexpr unsigned BIT_SCAN_FORWARD_MOVE_HINT_FORWARD = 0u; + static constexpr unsigned BIT_SCAN_REVERSE_MOVE_HINT_FORWARD = + BIT_SCAN_REVERSE; + static constexpr unsigned BIT_SCAN_FORWARD_MOVE_HINT_BACKWARD = + MOVE_HINT_BACKWARD; + static constexpr unsigned BIT_SCAN_REVERSE_MOVE_HINT_BACKWARD = + BIT_SCAN_REVERSE | MOVE_HINT_BACKWARD; private: - enum { block_size = static_cast(sizeof(unsigned) * CHAR_BIT) }; - enum { block_mask = block_size - 1u }; - enum { block_shift = Kokkos::Impl::integral_power_of_two(block_size) }; + enum : unsigned { + block_size = static_cast(sizeof(unsigned) * CHAR_BIT) + }; + enum : unsigned { block_mask = block_size - 1u }; + enum : unsigned { + block_shift = Kokkos::Impl::integral_power_of_two(block_size) + }; public: /// constructor @@ -317,14 +322,18 @@ class ConstBitset { enum { block_shift = Kokkos::Impl::integral_power_of_two(block_size) }; public: + KOKKOS_FUNCTION ConstBitset() : m_size(0) {} + KOKKOS_FUNCTION ConstBitset(Bitset const& rhs) : m_size(rhs.m_size), m_blocks(rhs.m_blocks) {} + KOKKOS_FUNCTION ConstBitset(ConstBitset const& rhs) : m_size(rhs.m_size), m_blocks(rhs.m_blocks) {} + KOKKOS_FUNCTION ConstBitset& operator=(Bitset const& rhs) { this->m_size = rhs.m_size; this->m_blocks = rhs.m_blocks; @@ -332,6 +341,7 @@ class ConstBitset { return *this; } + KOKKOS_FUNCTION ConstBitset& operator=(ConstBitset const& rhs) { this->m_size = rhs.m_size; this->m_blocks = rhs.m_blocks; diff --git a/lib/kokkos/containers/src/Kokkos_DualView.hpp b/lib/kokkos/containers/src/Kokkos_DualView.hpp index 45710d1f73..f55d0f2b7f 100644 --- a/lib/kokkos/containers/src/Kokkos_DualView.hpp +++ b/lib/kokkos/containers/src/Kokkos_DualView.hpp @@ -597,8 +597,10 @@ class DualView : public ViewTraits { } if (std::is_same::value) { - typename t_dev::execution_space().fence(); - typename t_host::execution_space().fence(); + typename t_dev::execution_space().fence( + "Kokkos::DualView<>::sync: fence after syncing DualView"); + typename t_host::execution_space().fence( + "Kokkos::DualView<>::sync: fence after syncing DualView"); } } @@ -776,10 +778,11 @@ class DualView : public ViewTraits { /// If \c Device is the same as this DualView's device type, then /// mark the device's data as modified. Otherwise, mark the host's /// data as modified. - template + template * = + nullptr> void modify() { if (modified_flags.data() == nullptr) return; - if (impl_dualview_is_single_device::value) return; int dev = get_device_side(); if (dev == 1) { // if Device is the same as DualView's device type @@ -811,8 +814,17 @@ class DualView : public ViewTraits { #endif } + template < + class Device, class Dummy = DualView, + std::enable_if_t* = nullptr> + void modify() { + return; + } + + template * = + nullptr> inline void modify_host() { - if (impl_dualview_is_single_device::value) return; if (modified_flags.data() != nullptr) { modified_flags(0) = (modified_flags(1) > modified_flags(0) ? modified_flags(1) @@ -832,8 +844,17 @@ class DualView : public ViewTraits { } } + template < + class Dummy = DualView, + std::enable_if_t* = nullptr> + inline void modify_host() { + return; + } + + template * = + nullptr> inline void modify_device() { - if (impl_dualview_is_single_device::value) return; if (modified_flags.data() != nullptr) { modified_flags(1) = (modified_flags(1) > modified_flags(0) ? modified_flags(1) @@ -853,6 +874,13 @@ class DualView : public ViewTraits { } } + template < + class Dummy = DualView, + std::enable_if_t* = nullptr> + inline void modify_device() { + return; + } + inline void clear_sync_state() { if (modified_flags.data() != nullptr) modified_flags(1) = modified_flags(0) = 0; @@ -875,8 +903,15 @@ class DualView : public ViewTraits { const size_t n5 = KOKKOS_IMPL_CTOR_DEFAULT_ARG, const size_t n6 = KOKKOS_IMPL_CTOR_DEFAULT_ARG, const size_t n7 = KOKKOS_IMPL_CTOR_DEFAULT_ARG) { - ::Kokkos::realloc(d_view, n0, n1, n2, n3, n4, n5, n6, n7); - h_view = create_mirror_view(d_view); + const size_t new_extents[8] = {n0, n1, n2, n3, n4, n5, n6, n7}; + const bool sizeMismatch = + Impl::size_mismatch(h_view, h_view.rank_dynamic, new_extents); + + if (sizeMismatch) { + ::Kokkos::realloc(d_view, n0, n1, n2, n3, n4, n5, n6, n7); + h_view = create_mirror_view(d_view); + } else + ::Kokkos::deep_copy(d_view, typename t_dev::value_type{}); /* Reset dirty flags */ if (modified_flags.data() == nullptr) { @@ -897,41 +932,31 @@ class DualView : public ViewTraits { const size_t n5 = KOKKOS_IMPL_CTOR_DEFAULT_ARG, const size_t n6 = KOKKOS_IMPL_CTOR_DEFAULT_ARG, const size_t n7 = KOKKOS_IMPL_CTOR_DEFAULT_ARG) { + const size_t new_extents[8] = {n0, n1, n2, n3, n4, n5, n6, n7}; + const bool sizeMismatch = + Impl::size_mismatch(h_view, h_view.rank_dynamic, new_extents); + if (modified_flags.data() == nullptr) { modified_flags = t_modified_flags("DualView::modified_flags"); } if (modified_flags(1) >= modified_flags(0)) { /* Resize on Device */ - ::Kokkos::resize(d_view, n0, n1, n2, n3, n4, n5, n6, n7); - h_view = create_mirror_view(d_view); - - /* Mark Device copy as modified */ - modified_flags(1) = modified_flags(1) + 1; + if (sizeMismatch) { + ::Kokkos::resize(d_view, n0, n1, n2, n3, n4, n5, n6, n7); + h_view = create_mirror_view(d_view); + /* Mark Device copy as modified */ + modified_flags(1) = modified_flags(1) + 1; + } } else { /* Realloc on Device */ - - ::Kokkos::realloc(d_view, n0, n1, n2, n3, n4, n5, n6, n7); - - const bool sizeMismatch = - (h_view.extent(0) != n0) || (h_view.extent(1) != n1) || - (h_view.extent(2) != n2) || (h_view.extent(3) != n3) || - (h_view.extent(4) != n4) || (h_view.extent(5) != n5) || - (h_view.extent(6) != n6) || (h_view.extent(7) != n7); - if (sizeMismatch) + if (sizeMismatch) { ::Kokkos::resize(h_view, n0, n1, n2, n3, n4, n5, n6, n7); + d_view = create_mirror_view(typename t_dev::execution_space(), h_view); - t_host temp_view = create_mirror_view(d_view); - - /* Remap on Host */ - Kokkos::deep_copy(temp_view, h_view); - - h_view = temp_view; - - d_view = create_mirror_view(typename t_dev::execution_space(), h_view); - - /* Mark Host copy as modified */ - modified_flags(0) = modified_flags(0) + 1; + /* Mark Host copy as modified */ + modified_flags(0) = modified_flags(0) + 1; + } } } diff --git a/lib/kokkos/containers/src/Kokkos_DynRankView.hpp b/lib/kokkos/containers/src/Kokkos_DynRankView.hpp index c6323fef93..b673c53a4e 100644 --- a/lib/kokkos/containers/src/Kokkos_DynRankView.hpp +++ b/lib/kokkos/containers/src/Kokkos_DynRankView.hpp @@ -1140,7 +1140,8 @@ class DynRankView : public ViewTraits { // to avoid incomplete type errors from usng Kokkos::Cuda directly. if (std::is_same::value) { - typename traits::device_type::memory_space::execution_space().fence(); + typename traits::device_type::memory_space::execution_space().fence( + "Kokkos::DynRankView<>::DynRankView: fence before UVM allocation"); } #endif //------------------------------------------------------------ @@ -1154,7 +1155,8 @@ class DynRankView : public ViewTraits { #if defined(KOKKOS_ENABLE_CUDA) if (std::is_same::value) { - typename traits::device_type::memory_space::execution_space().fence(); + typename traits::device_type::memory_space::execution_space().fence( + "Kokkos::DynRankView<>::DynRankView: fence after UVM allocation"); } #endif //------------------------------------------------------------ @@ -1404,7 +1406,7 @@ class ViewMapping< template struct apply { - static_assert(Kokkos::Impl::is_memory_traits::value, ""); + static_assert(Kokkos::is_memory_traits::value, ""); using traits_type = Kokkos::ViewTraits& lhs, namespace Kokkos { namespace Impl { -template +template struct DynRankViewFill { using const_value_type = typename OutputView::traits::const_value_type; @@ -1693,9 +1695,11 @@ inline void deep_copy( typename ViewTraits::value_type>::value, "deep_copy requires non-const type"); - Kokkos::fence(); + Kokkos::fence( + "Kokkos::deep_copy(DynRankView, value_type): fence before filling view"); Kokkos::Impl::DynRankViewFill >(dst, value); - Kokkos::fence(); + Kokkos::fence( + "Kokkos::deep_copy(DynRankView, value_type): fence after filling view"); } /** \brief Deep copy into a value in Host memory from a view. */ @@ -1711,10 +1715,13 @@ inline void deep_copy( using src_traits = ViewTraits; using src_memory_space = typename src_traits::memory_space; - Kokkos::fence(); + Kokkos::fence( + "Kokkos::deep_copy(value_type, DynRankView): fence before copying " + "value"); Kokkos::Impl::DeepCopy(&dst, src.data(), sizeof(ST)); - Kokkos::fence(); + Kokkos::fence( + "Kokkos::deep_copy(value_type, DynRankView): fence after copying value"); } //---------------------------------------------------------------------------- @@ -1744,14 +1751,14 @@ inline void deep_copy( enum { DstExecCanAccessSrc = - Kokkos::Impl::SpaceAccessibility::accessible + Kokkos::SpaceAccessibility::accessible }; enum { SrcExecCanAccessDst = - Kokkos::Impl::SpaceAccessibility::accessible + Kokkos::SpaceAccessibility::accessible }; if ((void*)dst.data() != (void*)src.data()) { @@ -1762,10 +1769,14 @@ inline void deep_copy( // memory then can byte-wise copy if (rank(src) == 0 && rank(dst) == 0) { using value_type = typename dst_type::value_type; - Kokkos::fence(); + Kokkos::fence( + "Kokkos::Impl::DeepCopy(DynRankView, DynRankView): fence before " + "copying rank-0 views"); Kokkos::Impl::DeepCopy( dst.data(), src.data(), sizeof(value_type)); - Kokkos::fence(); + Kokkos::fence( + "Kokkos::Impl::DeepCopy(DynRankView, DynRankView): fence after " + "copying rank-0 views"); } else if (std::is_same< typename DstType::traits::value_type, typename SrcType::traits::non_const_value_type>::value && @@ -1787,10 +1798,14 @@ inline void deep_copy( dst.extent(6) == src.extent(6) && dst.extent(7) == src.extent(7)) { const size_t nbytes = sizeof(typename dst_type::value_type) * dst.span(); - Kokkos::fence(); + Kokkos::fence( + "Kokkos::Impl::DeepCopy(DynRankView, DynRankView): fence before " + "copying rank-1 views"); Kokkos::Impl::DeepCopy( dst.data(), src.data(), nbytes); - Kokkos::fence(); + Kokkos::fence( + "Kokkos::Impl::DeepCopy(DynRankView, DynRankView): fence after " + "copying rank-1 views"); } else if (std::is_same< typename DstType::traits::value_type, typename SrcType::traits::non_const_value_type>::value && @@ -1817,29 +1832,43 @@ inline void deep_copy( dst.stride_6() == src.stride_6() && dst.stride_7() == src.stride_7()) { const size_t nbytes = sizeof(typename dst_type::value_type) * dst.span(); - Kokkos::fence(); + Kokkos::fence( + "Kokkos::Impl::DeepCopy(DynRankView, DynRankView): fence before " + "copying rank-1 views"); Kokkos::Impl::DeepCopy( dst.data(), src.data(), nbytes); - Kokkos::fence(); + Kokkos::fence( + "Kokkos::Impl::DeepCopy(DynRankView, DynRankView): fence after " + "copying rank-1 views"); } else if (DstExecCanAccessSrc) { // Copying data between views in accessible memory spaces and either // non-contiguous or incompatible shape. - Kokkos::fence(); + Kokkos::fence( + "Kokkos::Impl::DeepCopy(DynRankView, DynRankView): fence before " + "remapping views of incompatible shape"); Kokkos::Impl::DynRankViewRemap(dst, src); - Kokkos::fence(); + Kokkos::fence( + "Kokkos::Impl::DeepCopy(DynRankView, DynRankView): fence after " + "remapping views of incompatible shape"); } else if (SrcExecCanAccessDst) { // Copying data between views in accessible memory spaces and either // non-contiguous or incompatible shape. - Kokkos::fence(); + Kokkos::fence( + "Kokkos::Impl::DeepCopy(DynRankView, DynRankView): fence before " + "remapping views of incompatible shape"); Kokkos::Impl::DynRankViewRemap( dst, src); - Kokkos::fence(); + Kokkos::fence( + "Kokkos::Impl::DeepCopy(DynRankView, DynRankView): fence after " + "remapping views of incompatible shape"); } else { Kokkos::Impl::throw_runtime_exception( "deep_copy given views that would require a temporary allocation"); } } else { - Kokkos::fence(); + Kokkos::fence( + "Kokkos::Impl::DeepCopy(DynRankView, DynRankView): fence due to same " + "src and dst"); } } diff --git a/lib/kokkos/containers/src/Kokkos_DynamicView.hpp b/lib/kokkos/containers/src/Kokkos_DynamicView.hpp index cc949d4c55..2c764f535c 100644 --- a/lib/kokkos/containers/src/Kokkos_DynamicView.hpp +++ b/lib/kokkos/containers/src/Kokkos_DynamicView.hpp @@ -53,36 +53,201 @@ namespace Kokkos { namespace Experimental { -// Simple metafunction for choosing memory space -// In the current implementation, if memory_space == CudaSpace, -// use CudaUVMSpace for the chunk 'array' allocation, which -// contains will contain pointers to chunks of memory allocated -// in CudaSpace namespace Impl { -template -struct ChunkArraySpace { - using memory_space = MemSpace; + +/// Utility class to manage memory for chunked arrays on the host and +/// device. Allocates/deallocates memory on both the host and device along with +/// providing utilities for creating mirrors and deep copying between them. +template +struct ChunkedArrayManager { + using value_type = ValueType; + using pointer_type = ValueType*; + using track_type = Kokkos::Impl::SharedAllocationTracker; + + ChunkedArrayManager() = default; + ChunkedArrayManager(ChunkedArrayManager const&) = default; + ChunkedArrayManager(ChunkedArrayManager&&) = default; + ChunkedArrayManager& operator=(ChunkedArrayManager&&) = default; + ChunkedArrayManager& operator=(const ChunkedArrayManager&) = default; + + template + friend struct ChunkedArrayManager; + + template + inline ChunkedArrayManager(const ChunkedArrayManager& rhs) + : m_valid(rhs.m_valid), + m_chunk_max(rhs.m_chunk_max), + m_chunks((ValueType**)(rhs.m_chunks)), + m_track(rhs.m_track), + m_chunk_size(rhs.m_chunk_size) { + static_assert( + Kokkos::Impl::MemorySpaceAccess::assignable, + "Incompatible ChunkedArrayManager copy construction"); + } + + ChunkedArrayManager(const unsigned arg_chunk_max, + const unsigned arg_chunk_size) + : m_chunk_max(arg_chunk_max), m_chunk_size(arg_chunk_size) {} + + private: + struct ACCESSIBLE_TAG {}; + struct INACCESSIBLE_TAG {}; + + ChunkedArrayManager(ACCESSIBLE_TAG, pointer_type* arg_chunks, + const unsigned arg_chunk_max) + : m_valid(true), m_chunk_max(arg_chunk_max), m_chunks(arg_chunks) {} + + ChunkedArrayManager(INACCESSIBLE_TAG, const unsigned arg_chunk_max, + const unsigned arg_chunk_size) + : m_chunk_max(arg_chunk_max), m_chunk_size(arg_chunk_size) {} + + public: + template + struct IsAccessibleFrom; + + template + struct IsAccessibleFrom< + Space, typename std::enable_if_t::accessible>> : std::true_type {}; + + template + struct IsAccessibleFrom< + Space, typename std::enable_if_t::accessible>> : std::false_type {}; + + template + static ChunkedArrayManager create_mirror( + ChunkedArrayManager const& other, + typename std::enable_if::value>::type* = + nullptr) { + return ChunkedArrayManager{ + ACCESSIBLE_TAG{}, other.m_chunks, other.m_chunk_max}; + } + + template + static ChunkedArrayManager create_mirror( + ChunkedArrayManager const& other, + typename std::enable_if::value>::type* = + nullptr) { + using tag_type = + typename ChunkedArrayManager::INACCESSIBLE_TAG; + return ChunkedArrayManager{tag_type{}, other.m_chunk_max, + other.m_chunk_size}; + } + + public: + void allocate_device(const std::string& label) { + if (m_chunks == nullptr) { + m_chunks = reinterpret_cast(MemorySpace().allocate( + label.c_str(), (sizeof(pointer_type) * (m_chunk_max + 2)))); + } + } + + void initialize() { + for (unsigned i = 0; i < m_chunk_max + 2; i++) { + m_chunks[i] = nullptr; + } + m_valid = true; + } + + private: + /// Custom destroy functor for deallocating array chunks along with a linked + /// allocation + template + struct Destroy { + Destroy() = default; + Destroy(Destroy&&) = default; + Destroy(const Destroy&) = default; + Destroy& operator=(Destroy&&) = default; + Destroy& operator=(const Destroy&) = default; + + Destroy(std::string label, value_type** arg_chunk, + const unsigned arg_chunk_max, const unsigned arg_chunk_size, + value_type** arg_linked) + : m_label(label), + m_chunks(arg_chunk), + m_linked(arg_linked), + m_chunk_max(arg_chunk_max), + m_chunk_size(arg_chunk_size) {} + + void execute() { + // Destroy the array of chunk pointers. + // Two entries beyond the max chunks are allocation counters. + for (unsigned i = 0; i < m_chunk_max; i++) { + Space().deallocate(m_label.c_str(), m_chunks[i], + sizeof(value_type) * m_chunk_size); + } + // Destroy the linked allocation if we have one. + if (m_linked != nullptr) { + Space().deallocate(m_label.c_str(), m_linked, + (sizeof(value_type*) * (m_chunk_max + 2))); + } + } + + void destroy_shared_allocation() { execute(); } + + std::string m_label; + value_type** m_chunks = nullptr; + value_type** m_linked = nullptr; + unsigned m_chunk_max; + unsigned m_chunk_size; + }; + + public: + template + void allocate_with_destroy(const std::string& label, + pointer_type* linked_allocation = nullptr) { + using destroy_type = Destroy; + using record_type = + Kokkos::Impl::SharedAllocationRecord; + + // Allocate + 2 extra slots so that *m_chunk[m_chunk_max] == + // num_chunks_alloc and *m_chunk[m_chunk_max+1] == extent This must match in + // Destroy's execute(...) method + record_type* const record = record_type::allocate( + MemorySpace(), label, (sizeof(pointer_type) * (m_chunk_max + 2))); + m_chunks = static_cast(record->data()); + m_track.assign_allocated_record_to_uninitialized(record); + + record->m_destroy = destroy_type(label, m_chunks, m_chunk_max, m_chunk_size, + linked_allocation); + } + + pointer_type* get_ptr() const { return m_chunks; } + + template + typename std::enable_if::value>::type deep_copy_to( + ChunkedArrayManager const& other) { + Kokkos::Impl::DeepCopy( + other.m_chunks, m_chunks, sizeof(pointer_type) * (m_chunk_max + 2)); + } + + template + typename std::enable_if::value>::type deep_copy_to( + ChunkedArrayManager const&) { + // no-op + } + + KOKKOS_INLINE_FUNCTION + pointer_type* operator+(int i) const { return m_chunks + i; } + + KOKKOS_INLINE_FUNCTION + pointer_type& operator[](int i) const { return m_chunks[i]; } + + track_type const& track() const { return m_track; } + + KOKKOS_INLINE_FUNCTION + bool valid() const { return m_valid; } + + private: + bool m_valid = false; + unsigned m_chunk_max = 0; + pointer_type* m_chunks = nullptr; + track_type m_track; + unsigned m_chunk_size = 0; }; -#ifdef KOKKOS_ENABLE_CUDA -template <> -struct ChunkArraySpace { - using memory_space = typename Kokkos::CudaUVMSpace; -}; -#endif -#ifdef KOKKOS_ENABLE_HIP -template <> -struct ChunkArraySpace { - using memory_space = typename Kokkos::Experimental::HIPHostPinnedSpace; -}; -#endif -#ifdef KOKKOS_ENABLE_SYCL -template <> -struct ChunkArraySpace { - using memory_space = typename Kokkos::Experimental::SYCLSharedUSMSpace; -}; -#endif -} // end namespace Impl +} /* end namespace Impl */ /** \brief Dynamic views are restricted to rank-one and no layout. * Resize only occurs on host outside of parallel_regions. @@ -93,6 +258,13 @@ class DynamicView : public Kokkos::ViewTraits { public: using traits = Kokkos::ViewTraits; + using value_type = typename traits::value_type; + using device_space = typename traits::memory_space; + using host_space = + typename Kokkos::Impl::HostMirror::Space::memory_space; + using device_accessor = Impl::ChunkedArrayManager; + using host_accessor = Impl::ChunkedArrayManager; + private: template friend class DynamicView; @@ -108,7 +280,7 @@ class DynamicView : public Kokkos::ViewTraits { "DynamicView only implemented for non-specialized View type"); template ::accessible> + Space, device_space>::accessible> struct verify_space { KOKKOS_FORCEINLINE_FUNCTION static void check() {} }; @@ -123,9 +295,8 @@ class DynamicView : public Kokkos::ViewTraits { }; private: - track_type m_track; - typename traits::value_type** m_chunks = - nullptr; // array of pointers to 'chunks' of memory + device_accessor m_chunks; + host_accessor m_chunks_host; unsigned m_chunk_shift; // ceil(log2(m_chunk_size)) unsigned m_chunk_mask; // m_chunk_size - 1 unsigned m_chunk_max; // number of entries in the chunk array - each pointing @@ -173,7 +344,8 @@ class DynamicView : public Kokkos::ViewTraits { KOKKOS_INLINE_FUNCTION size_t allocation_extent() const noexcept { - uintptr_t n = *reinterpret_cast(m_chunks + m_chunk_max); + uintptr_t n = + *reinterpret_cast(m_chunks_host + m_chunk_max); return (n << m_chunk_shift); } @@ -183,7 +355,7 @@ class DynamicView : public Kokkos::ViewTraits { KOKKOS_INLINE_FUNCTION size_t size() const noexcept { size_t extent_0 = - *reinterpret_cast(m_chunks + m_chunk_max + 1); + *reinterpret_cast(m_chunks_host + m_chunk_max + 1); return extent_0; } @@ -215,10 +387,10 @@ class DynamicView : public Kokkos::ViewTraits { // Allocation tracking properties KOKKOS_INLINE_FUNCTION - int use_count() const { return m_track.use_count(); } + int use_count() const { return m_chunks_host.track().use_count(); } inline const std::string label() const { - return m_track.template get_label(); + return m_chunks_host.track().template get_label(); } //---------------------------------------------------------------------- @@ -285,13 +457,7 @@ class DynamicView : public Kokkos::ViewTraits { * up to the maximum number of chunks * */ template - inline typename std::enable_if< - std::is_integral::value && - Kokkos::Impl::MemorySpaceAccess< - Kokkos::HostSpace, - typename Impl::ChunkArraySpace< - typename traits::memory_space>::memory_space>::accessible>::type - resize_serial(IntType const& n) { + inline void resize_serial(IntType const& n) { using local_value_type = typename traits::value_type; using value_pointer_type = local_value_type*; @@ -304,37 +470,40 @@ class DynamicView : public Kokkos::ViewTraits { } // *m_chunks[m_chunk_max] stores the current number of chunks being used - uintptr_t* const pc = reinterpret_cast(m_chunks + m_chunk_max); - std::string _label = - m_track.template get_label(); + uintptr_t* const pc = + reinterpret_cast(m_chunks_host + m_chunk_max); + std::string _label = m_chunks_host.track().template get_label(); + if (*pc < NC) { while (*pc < NC) { - m_chunks[*pc] = reinterpret_cast( - typename traits::memory_space().allocate( + m_chunks_host[*pc] = + reinterpret_cast(device_space().allocate( _label.c_str(), sizeof(local_value_type) << m_chunk_shift)); ++*pc; } } else { while (NC + 1 <= *pc) { --*pc; - typename traits::memory_space().deallocate( - _label.c_str(), m_chunks[*pc], - sizeof(local_value_type) << m_chunk_shift); - m_chunks[*pc] = nullptr; + device_space().deallocate(_label.c_str(), m_chunks_host[*pc], + sizeof(local_value_type) << m_chunk_shift); + m_chunks_host[*pc] = nullptr; } } - // *m_chunks[m_chunk_max+1] stores the 'extent' requested by resize + // *m_chunks_host[m_chunk_max+1] stores the 'extent' requested by resize *(pc + 1) = n; + + m_chunks_host.deep_copy_to(m_chunks); } KOKKOS_INLINE_FUNCTION bool is_allocated() const { - if (m_chunks == nullptr) { - return false; - } else { - // *m_chunks[m_chunk_max] stores the current number of chunks being used + if (m_chunks_host.valid()) { + // *m_chunks_host[m_chunk_max] stores the current number of chunks being + // used uintptr_t* const pc = - reinterpret_cast(m_chunks + m_chunk_max); + reinterpret_cast(m_chunks_host + m_chunk_max); return (*(pc + 1) > 0); + } else { + return false; } } @@ -349,8 +518,8 @@ class DynamicView : public Kokkos::ViewTraits { template DynamicView(const DynamicView& rhs) - : m_track(rhs.m_track), - m_chunks((typename traits::value_type**)rhs.m_chunks), + : m_chunks(rhs.m_chunks), + m_chunks_host(rhs.m_chunks_host), m_chunk_shift(rhs.m_chunk_shift), m_chunk_mask(rhs.m_chunk_mask), m_chunk_max(rhs.m_chunk_max), @@ -361,63 +530,6 @@ class DynamicView : public Kokkos::ViewTraits { "Incompatible DynamicView copy construction"); } - //---------------------------------------------------------------------- - - struct Destroy { - using local_value_type = typename traits::value_type; - std::string m_label; - local_value_type** m_chunks; - unsigned m_chunk_max; - bool m_destroy; - unsigned m_chunk_size; - - // Initialize or destroy array of chunk pointers. - // Two entries beyond the max chunks are allocation counters. - inline void operator()(unsigned i) const { - if (m_destroy && i < m_chunk_max && nullptr != m_chunks[i]) { - typename traits::memory_space().deallocate( - m_label.c_str(), m_chunks[i], - sizeof(local_value_type) * m_chunk_size); - } - m_chunks[i] = nullptr; - } - - void execute(bool arg_destroy) { - using Range = Kokkos::RangePolicy; - - m_destroy = arg_destroy; - - Kokkos::Impl::ParallelFor closure( - *this, - Range(0, m_chunk_max + 2)); // Add 2 to 'destroy' extra slots storing - // num_chunks and extent; previously + 1 - - closure.execute(); - - typename traits::execution_space().fence(); - // Impl::ChunkArraySpace< typename traits::memory_space - // >::memory_space::execution_space().fence(); - } - - void construct_shared_allocation() { execute(false); } - - void destroy_shared_allocation() { execute(true); } - - Destroy() = default; - Destroy(Destroy&&) = default; - Destroy(const Destroy&) = default; - Destroy& operator=(Destroy&&) = default; - Destroy& operator=(const Destroy&) = default; - - Destroy(std::string label, typename traits::value_type** arg_chunk, - const unsigned arg_chunk_max, const unsigned arg_chunk_size) - : m_label(label), - m_chunks(arg_chunk), - m_chunk_max(arg_chunk_max), - m_destroy(false), - m_chunk_size(arg_chunk_size) {} - }; - /**\brief Allocation constructor * * Memory is allocated in chunks @@ -427,10 +539,7 @@ class DynamicView : public Kokkos::ViewTraits { explicit inline DynamicView(const std::string& arg_label, const unsigned min_chunk_size, const unsigned max_extent) - : m_track(), - m_chunks(nullptr) - // The chunk size is guaranteed to be a power of two - , + : // The chunk size is guaranteed to be a power of two m_chunk_shift(Kokkos::Impl::integral_power_of_two_that_contains( min_chunk_size)) // div ceil(log2(min_chunk_size)) , @@ -440,28 +549,22 @@ class DynamicView : public Kokkos::ViewTraits { m_chunk_shift) // max num pointers-to-chunks in array , m_chunk_size(2 << (m_chunk_shift - 1)) { - using chunk_array_memory_space = typename Impl::ChunkArraySpace< - typename traits::memory_space>::memory_space; - // A functor to deallocate all of the chunks upon final destruction - using record_type = - Kokkos::Impl::SharedAllocationRecord; + m_chunks = device_accessor(m_chunk_max, m_chunk_size); - // Allocate chunk pointers and allocation counter - record_type* const record = - record_type::allocate(chunk_array_memory_space(), arg_label, - (sizeof(pointer_type) * (m_chunk_max + 2))); - // Allocate + 2 extra slots so that *m_chunk[m_chunk_max] == - // num_chunks_alloc and *m_chunk[m_chunk_max+1] == extent This must match in - // Destroy's execute(...) method - - m_chunks = reinterpret_cast(record->data()); - - record->m_destroy = Destroy(arg_label, m_chunks, m_chunk_max, m_chunk_size); - - // Initialize to zero - record->m_destroy.construct_shared_allocation(); - - m_track.assign_allocated_record_to_uninitialized(record); + if (device_accessor::template IsAccessibleFrom::value) { + m_chunks.template allocate_with_destroy(arg_label); + m_chunks.initialize(); + m_chunks_host = + device_accessor::template create_mirror(m_chunks); + } else { + m_chunks.allocate_device(arg_label); + m_chunks_host = + device_accessor::template create_mirror(m_chunks); + m_chunks_host.template allocate_with_destroy( + arg_label, m_chunks.get_ptr()); + m_chunks_host.initialize(); + m_chunks_host.deep_copy_to(m_chunks); + } } }; @@ -487,8 +590,8 @@ inline void deep_copy(const View& dst, enum { DstExecCanAccessSrc = - Kokkos::Impl::SpaceAccessibility::accessible + Kokkos::SpaceAccessibility::accessible }; if (DstExecCanAccessSrc) { @@ -512,8 +615,8 @@ inline void deep_copy(const Kokkos::Experimental::DynamicView& dst, enum { DstExecCanAccessSrc = - Kokkos::Impl::SpaceAccessibility::accessible + Kokkos::SpaceAccessibility::accessible }; if (DstExecCanAccessSrc) { diff --git a/lib/kokkos/containers/src/Kokkos_ErrorReporter.hpp b/lib/kokkos/containers/src/Kokkos_ErrorReporter.hpp index fbfaed9b1b..18f026dc6f 100644 --- a/lib/kokkos/containers/src/Kokkos_ErrorReporter.hpp +++ b/lib/kokkos/containers/src/Kokkos_ErrorReporter.hpp @@ -187,7 +187,8 @@ template void ErrorReporter::resize(const size_t new_size) { m_reports.resize(new_size); m_reporters.resize(new_size); - typename DeviceType::execution_space().fence(); + typename DeviceType::execution_space().fence( + "Kokkos::Experimental::ErrorReporter::resize: fence after resizing"); } } // namespace Experimental diff --git a/lib/kokkos/containers/src/Kokkos_OffsetView.hpp b/lib/kokkos/containers/src/Kokkos_OffsetView.hpp index 0f21a08ba3..57bf745d40 100644 --- a/lib/kokkos/containers/src/Kokkos_OffsetView.hpp +++ b/lib/kokkos/containers/src/Kokkos_OffsetView.hpp @@ -116,8 +116,7 @@ KOKKOS_INLINE_FUNCTION void offsetview_verify_operator_bounds( This check should cover the case of Views that don't have the Unmanaged trait but were initialized by pointer. */ if (tracker.has_record()) { - Kokkos::Impl::operator_bounds_error_on_device( - map, Kokkos::Impl::has_printable_label_typedef()); + Kokkos::Impl::operator_bounds_error_on_device(map); } else { Kokkos::abort("OffsetView bounds error"); } @@ -1244,7 +1243,8 @@ class OffsetView : public ViewTraits { // to avoid incomplete type errors from usng Kokkos::Cuda directly. if (std::is_same::value) { - typename traits::device_type::memory_space::execution_space().fence(); + typename traits::device_type::memory_space::execution_space().fence( + "Kokkos::OffsetView::OffsetView(): fence before UVM allocation"); } #endif //------------------------------------------------------------ @@ -1256,7 +1256,8 @@ class OffsetView : public ViewTraits { #if defined(KOKKOS_ENABLE_CUDA) if (std::is_same::value) { - typename traits::device_type::memory_space::execution_space().fence(); + typename traits::device_type::memory_space::execution_space().fence( + "Kokkos::OffsetView::OffsetView(): fence after UVM allocation"); } #endif //------------------------------------------------------------ diff --git a/lib/kokkos/containers/src/Kokkos_ScatterView.hpp b/lib/kokkos/containers/src/Kokkos_ScatterView.hpp index dcd4cf73e5..79bc43b739 100644 --- a/lib/kokkos/containers/src/Kokkos_ScatterView.hpp +++ b/lib/kokkos/containers/src/Kokkos_ScatterView.hpp @@ -834,7 +834,7 @@ class ScatterView::value, "ScatterView contribute destination has different layout"); static_assert( - Kokkos::Impl::SpaceAccessibility< + Kokkos::SpaceAccessibility< execution_space, typename dest_type::memory_space>::accessible, "ScatterView contribute destination memory space not accessible"); if (dest.data() == internal_view.data()) return; @@ -1061,7 +1061,7 @@ class ScatterView::value, "ScatterView deep_copy destination has different layout"); static_assert( - Kokkos::Impl::SpaceAccessibility< + Kokkos::SpaceAccessibility< execution_space, typename dest_type::memory_space>::accessible, "ScatterView deep_copy destination memory space not accessible"); bool is_equal = (dest.data() == internal_view.data()); @@ -1290,7 +1290,7 @@ class ScatterView::value, "ScatterView deep_copy destination has different layout"); static_assert( - Kokkos::Impl::SpaceAccessibility< + Kokkos::SpaceAccessibility< execution_space, typename dest_type::memory_space>::accessible, "ScatterView deep_copy destination memory space not accessible"); auto extent = internal_view.extent(internal_view_type::rank - 1); diff --git a/lib/kokkos/containers/src/Kokkos_StaticCrsGraph.hpp b/lib/kokkos/containers/src/Kokkos_StaticCrsGraph.hpp index 81be3ee2d3..cd633e4031 100644 --- a/lib/kokkos/containers/src/Kokkos_StaticCrsGraph.hpp +++ b/lib/kokkos/containers/src/Kokkos_StaticCrsGraph.hpp @@ -405,7 +405,9 @@ class StaticCrsGraph { Kokkos::parallel_for("Kokkos::StaticCrsGraph::create_block_partitioning", Kokkos::RangePolicy(0, numRows()), partitioner); - typename device_type::execution_space().fence(); + typename device_type::execution_space().fence( + "Kokkos::StaticCrsGraph::create_block_partitioning:: fence after " + "partition"); row_block_offsets = block_offsets; } diff --git a/lib/kokkos/containers/src/Kokkos_UnorderedMap.hpp b/lib/kokkos/containers/src/Kokkos_UnorderedMap.hpp index edb0e7261d..a1601eee35 100644 --- a/lib/kokkos/containers/src/Kokkos_UnorderedMap.hpp +++ b/lib/kokkos/containers/src/Kokkos_UnorderedMap.hpp @@ -345,7 +345,8 @@ class UnorderedMap { const impl_value_type tmp = impl_value_type(); Kokkos::deep_copy(m_values, tmp); } - { Kokkos::deep_copy(m_scalars, 0); } + Kokkos::deep_copy(m_scalars, 0); + m_size = 0; } KOKKOS_INLINE_FUNCTION constexpr bool is_allocated() const { @@ -393,9 +394,9 @@ class UnorderedMap { /// /// This method has undefined behavior when erasable() is true. /// - /// Note that this is not a device function; it cannot be called in + /// Note that this is not a device function; it cannot be called in /// a parallel kernel. The value is not stored as a variable; it - /// must be computed. + /// must be computed. m_size is a mutable cache of that value. size_type size() const { if (capacity() == 0u) return 0u; if (modified()) { @@ -419,9 +420,13 @@ class UnorderedMap { bool begin_erase() { bool result = !erasable(); if (is_insertable_map && result) { - execution_space().fence(); + execution_space().fence( + "Kokkos::UnorderedMap::begin_erase: fence before setting erasable " + "flag"); set_flag(erasable_idx); - execution_space().fence(); + execution_space().fence( + "Kokkos::UnorderedMap::begin_erase: fence after setting erasable " + "flag"); } return result; } @@ -429,10 +434,12 @@ class UnorderedMap { bool end_erase() { bool result = erasable(); if (is_insertable_map && result) { - execution_space().fence(); + execution_space().fence( + "Kokkos::UnorderedMap::end_erase: fence before erasing"); Impl::UnorderedMapErase f(*this); f.apply(); - execution_space().fence(); + execution_space().fence( + "Kokkos::UnorderedMap::end_erase: fence after erasing"); reset_flag(erasable_idx); } return result; diff --git a/lib/kokkos/containers/src/Kokkos_Vector.hpp b/lib/kokkos/containers/src/Kokkos_Vector.hpp index a1fbba6b21..88721bd89e 100644 --- a/lib/kokkos/containers/src/Kokkos_Vector.hpp +++ b/lib/kokkos/containers/src/Kokkos_Vector.hpp @@ -119,12 +119,14 @@ class vector : public DualView { if (DV::template need_sync()) { set_functor_host f(DV::h_view, val); parallel_for("Kokkos::vector::assign", n, f); - typename DV::t_host::execution_space().fence(); + typename DV::t_host::execution_space().fence( + "Kokkos::vector::assign: fence after assigning values"); DV::template modify(); } else { set_functor f(DV::d_view, val); parallel_for("Kokkos::vector::assign", n, f); - typename DV::t_dev::execution_space().fence(); + typename DV::t_dev::execution_space().fence( + "Kokkos::vector::assign: fence after assigning values"); DV::template modify(); } } diff --git a/lib/kokkos/containers/src/impl/Kokkos_Bitset_impl.hpp b/lib/kokkos/containers/src/impl/Kokkos_Bitset_impl.hpp index 6047e60f3d..9512f2d4a2 100644 --- a/lib/kokkos/containers/src/impl/Kokkos_Bitset_impl.hpp +++ b/lib/kokkos/containers/src/impl/Kokkos_Bitset_impl.hpp @@ -57,22 +57,10 @@ namespace Kokkos { namespace Impl { -KOKKOS_FORCEINLINE_FUNCTION -unsigned rotate_left(unsigned i, int r) { - constexpr int size = static_cast(sizeof(unsigned) * CHAR_BIT); - return r ? ((i << r) | (i >> (size - r))) : i; -} - KOKKOS_FORCEINLINE_FUNCTION unsigned rotate_right(unsigned i, int r) { constexpr int size = static_cast(sizeof(unsigned) * CHAR_BIT); - // FIXME_SYCL llvm.fshr.i32 missing - // (https://github.com/intel/llvm/issues/3308) -#ifdef __SYCL_DEVICE_ONLY__ - return rotate_left(i, size - r); -#else return r ? ((i >> r) | (i << (size - r))) : i; -#endif } template diff --git a/lib/kokkos/containers/src/impl/Kokkos_Functional_impl.hpp b/lib/kokkos/containers/src/impl/Kokkos_Functional_impl.hpp index 367ab33857..fdd78e4e5f 100644 --- a/lib/kokkos/containers/src/impl/Kokkos_Functional_impl.hpp +++ b/lib/kokkos/containers/src/impl/Kokkos_Functional_impl.hpp @@ -75,7 +75,7 @@ uint32_t fmix32(uint32_t h) { KOKKOS_INLINE_FUNCTION uint32_t MurmurHash3_x86_32(const void* key, int len, uint32_t seed) { - const uint8_t* data = (const uint8_t*)key; + const uint8_t* data = static_cast(key); const int nblocks = len / 4; uint32_t h1 = seed; diff --git a/lib/kokkos/containers/unit_tests/TestDualView.hpp b/lib/kokkos/containers/unit_tests/TestDualView.hpp index 3eee85ed10..e22564aa5c 100644 --- a/lib/kokkos/containers/unit_tests/TestDualView.hpp +++ b/lib/kokkos/containers/unit_tests/TestDualView.hpp @@ -49,7 +49,7 @@ #include #include #include -#include +#include #include namespace Test { diff --git a/lib/kokkos/containers/unit_tests/TestDynViewAPI.hpp b/lib/kokkos/containers/unit_tests/TestDynViewAPI.hpp index dd0199ed81..a8d62bd24c 100644 --- a/lib/kokkos/containers/unit_tests/TestDynViewAPI.hpp +++ b/lib/kokkos/containers/unit_tests/TestDynViewAPI.hpp @@ -702,6 +702,11 @@ class TestDynViewAPI { using View0 = Kokkos::View; using View1 = Kokkos::View; + using View2 = Kokkos::View; + using View3 = Kokkos::View; + using View4 = Kokkos::View; + using View5 = Kokkos::View; + using View6 = Kokkos::View; using View7 = Kokkos::View; using host_view_space = typename View0::host_mirror_space; @@ -1065,7 +1070,7 @@ class TestDynViewAPI { dView0 d_uninitialized( Kokkos::view_alloc(Kokkos::WithoutInitializing, "uninit"), 10, 20); - ASSERT_TRUE(d_uninitialized.data() != nullptr); + ASSERT_NE(d_uninitialized.data(), nullptr); ASSERT_EQ(d_uninitialized.rank(), 2); ASSERT_EQ(d_uninitialized.extent(0), 10); ASSERT_EQ(d_uninitialized.extent(1), 20); @@ -1075,14 +1080,14 @@ class TestDynViewAPI { hView0 hx, hy, hz; ASSERT_TRUE(Kokkos::is_dyn_rank_view::value); - ASSERT_FALSE(Kokkos::is_dyn_rank_view >::value); + ASSERT_FALSE(Kokkos::is_dyn_rank_view>::value); - ASSERT_TRUE(dx.data() == nullptr); // Okay with UVM - ASSERT_TRUE(dy.data() == nullptr); // Okay with UVM - ASSERT_TRUE(dz.data() == nullptr); // Okay with UVM - ASSERT_TRUE(hx.data() == nullptr); - ASSERT_TRUE(hy.data() == nullptr); - ASSERT_TRUE(hz.data() == nullptr); + ASSERT_EQ(dx.data(), nullptr); // Okay with UVM + ASSERT_EQ(dy.data(), nullptr); // Okay with UVM + ASSERT_EQ(dz.data(), nullptr); // Okay with UVM + ASSERT_EQ(hx.data(), nullptr); + ASSERT_EQ(hy.data(), nullptr); + ASSERT_EQ(hz.data(), nullptr); ASSERT_EQ(dx.extent(0), 0u); // Okay with UVM ASSERT_EQ(dy.extent(0), 0u); // Okay with UVM ASSERT_EQ(dz.extent(0), 0u); // Okay with UVM @@ -1153,11 +1158,11 @@ class TestDynViewAPI { ASSERT_EQ(dx.use_count(), size_t(2)); - ASSERT_FALSE(dx.data() == nullptr); - ASSERT_FALSE(const_dx.data() == nullptr); - ASSERT_FALSE(unmanaged_dx.data() == nullptr); - ASSERT_FALSE(unmanaged_from_ptr_dx.data() == nullptr); - ASSERT_FALSE(dy.data() == nullptr); + ASSERT_NE(dx.data(), nullptr); + ASSERT_NE(const_dx.data(), nullptr); + ASSERT_NE(unmanaged_dx.data(), nullptr); + ASSERT_NE(unmanaged_from_ptr_dx.data(), nullptr); + ASSERT_NE(dy.data(), nullptr); ASSERT_NE(dx, dy); ASSERT_EQ(dx.extent(0), unsigned(N0)); @@ -1317,17 +1322,17 @@ class TestDynViewAPI { ASSERT_NE(dx, dz); dx = dView0(); - ASSERT_TRUE(dx.data() == nullptr); - ASSERT_FALSE(dy.data() == nullptr); - ASSERT_FALSE(dz.data() == nullptr); + ASSERT_EQ(dx.data(), nullptr); + ASSERT_NE(dy.data(), nullptr); + ASSERT_NE(dz.data(), nullptr); dy = dView0(); - ASSERT_TRUE(dx.data() == nullptr); - ASSERT_TRUE(dy.data() == nullptr); - ASSERT_FALSE(dz.data() == nullptr); + ASSERT_EQ(dx.data(), nullptr); + ASSERT_EQ(dy.data(), nullptr); + ASSERT_NE(dz.data(), nullptr); dz = dView0(); - ASSERT_TRUE(dx.data() == nullptr); - ASSERT_TRUE(dy.data() == nullptr); - ASSERT_TRUE(dz.data() == nullptr); + ASSERT_EQ(dx.data(), nullptr); + ASSERT_EQ(dy.data(), nullptr); + ASSERT_EQ(dz.data(), nullptr); // View - DynRankView Interoperability tests // deep_copy from view to dynrankview @@ -1367,7 +1372,7 @@ class TestDynViewAPI { static void check_auto_conversion_to_const( const Kokkos::DynRankView& arg_const, const Kokkos::DynRankView& arg) { - ASSERT_TRUE(arg_const == arg); + ASSERT_EQ(arg_const, arg); } static void run_test_allocated() { @@ -1396,8 +1401,8 @@ class TestDynViewAPI { const_typeX xc = x; const_typeR xr = x; - ASSERT_TRUE(xc == x); - ASSERT_TRUE(x == xc); + ASSERT_EQ(xc, x); + ASSERT_EQ(x, xc); // For CUDA the constant random access View does not return // an lvalue reference due to retrieving through texture cache @@ -1406,7 +1411,7 @@ class TestDynViewAPI { if (!std::is_same::value) #endif { - ASSERT_TRUE(x.data() == xr.data()); + ASSERT_EQ(x.data(), xr.data()); } // typeX xf = xc ; // setting non-const from const must not compile @@ -1659,29 +1664,29 @@ class TestDynViewAPI { const_svector_right_type cvr3 = Kokkos::subdynrankview(mv, Kokkos::ALL(), 2); - ASSERT_TRUE(&v1[0] == &v1(0)); - ASSERT_TRUE(&v1[0] == &mv(0, 0)); - ASSERT_TRUE(&v2[0] == &mv(0, 1)); - ASSERT_TRUE(&v3[0] == &mv(0, 2)); + ASSERT_EQ(&v1[0], &v1(0)); + ASSERT_EQ(&v1[0], &mv(0, 0)); + ASSERT_EQ(&v2[0], &mv(0, 1)); + ASSERT_EQ(&v3[0], &mv(0, 2)); - ASSERT_TRUE(&cv1[0] == &mv(0, 0)); - ASSERT_TRUE(&cv2[0] == &mv(0, 1)); - ASSERT_TRUE(&cv3[0] == &mv(0, 2)); + ASSERT_EQ(&cv1[0], &mv(0, 0)); + ASSERT_EQ(&cv2[0], &mv(0, 1)); + ASSERT_EQ(&cv3[0], &mv(0, 2)); - ASSERT_TRUE(&vr1[0] == &mv(0, 0)); - ASSERT_TRUE(&vr2[0] == &mv(0, 1)); - ASSERT_TRUE(&vr3[0] == &mv(0, 2)); + ASSERT_EQ(&vr1[0], &mv(0, 0)); + ASSERT_EQ(&vr2[0], &mv(0, 1)); + ASSERT_EQ(&vr3[0], &mv(0, 2)); - ASSERT_TRUE(&cvr1[0] == &mv(0, 0)); - ASSERT_TRUE(&cvr2[0] == &mv(0, 1)); - ASSERT_TRUE(&cvr3[0] == &mv(0, 2)); + ASSERT_EQ(&cvr1[0], &mv(0, 0)); + ASSERT_EQ(&cvr2[0], &mv(0, 1)); + ASSERT_EQ(&cvr3[0], &mv(0, 2)); - ASSERT_TRUE(&mv1(0, 0) == &mv(1, 2)); - ASSERT_TRUE(&mv1(1, 1) == &mv(2, 3)); - ASSERT_TRUE(&mv1(3, 2) == &mv(4, 4)); - ASSERT_TRUE(&mvr1(0, 0) == &mv_right(1, 2)); - ASSERT_TRUE(&mvr1(1, 1) == &mv_right(2, 3)); - ASSERT_TRUE(&mvr1(3, 2) == &mv_right(4, 4)); + ASSERT_EQ(&mv1(0, 0), &mv(1, 2)); + ASSERT_EQ(&mv1(1, 1), &mv(2, 3)); + ASSERT_EQ(&mv1(3, 2), &mv(4, 4)); + ASSERT_EQ(&mvr1(0, 0), &mv_right(1, 2)); + ASSERT_EQ(&mvr1(1, 1), &mv_right(2, 3)); + ASSERT_EQ(&mvr1(3, 2), &mv_right(4, 4)); const_svector_type c_cv1(v1); typename svector_type::const_type c_cv2(v2); diff --git a/lib/kokkos/containers/unit_tests/TestDynamicView.hpp b/lib/kokkos/containers/unit_tests/TestDynamicView.hpp index f018793dd6..023bf92f62 100644 --- a/lib/kokkos/containers/unit_tests/TestDynamicView.hpp +++ b/lib/kokkos/containers/unit_tests/TestDynamicView.hpp @@ -52,7 +52,7 @@ #include #include -#include +#include namespace Test { diff --git a/lib/kokkos/containers/unit_tests/TestOffsetView.hpp b/lib/kokkos/containers/unit_tests/TestOffsetView.hpp index 9ddc226e29..24a43e1ebc 100644 --- a/lib/kokkos/containers/unit_tests/TestOffsetView.hpp +++ b/lib/kokkos/containers/unit_tests/TestOffsetView.hpp @@ -50,7 +50,7 @@ #include #include #include -#include +#include #include #include diff --git a/lib/kokkos/containers/unit_tests/TestScatterView.hpp b/lib/kokkos/containers/unit_tests/TestScatterView.hpp index fdbce2d492..342ce2af48 100644 --- a/lib/kokkos/containers/unit_tests/TestScatterView.hpp +++ b/lib/kokkos/containers/unit_tests/TestScatterView.hpp @@ -118,11 +118,51 @@ struct test_scatter_view_impl_cls sizes(LENGTH); - size_t total_length = 0; - for (size_t i = 0; i < LENGTH; ++i) { sizes[i] = rand() % 1000; } @@ -189,10 +187,6 @@ void run_test_graph3(size_t B, size_t N) { sizes[1] = N; sizes[1998] = N; - for (size_t i = 0; i < LENGTH; ++i) { - total_length += sizes[i]; - } - int C = 0; dView dx = Kokkos::create_staticcrsgraph("test", sizes); dx.create_block_partitioning(B, C); diff --git a/lib/kokkos/containers/unit_tests/TestUnorderedMap.hpp b/lib/kokkos/containers/unit_tests/TestUnorderedMap.hpp index 4413cfbc80..8009b99656 100644 --- a/lib/kokkos/containers/unit_tests/TestUnorderedMap.hpp +++ b/lib/kokkos/containers/unit_tests/TestUnorderedMap.hpp @@ -295,10 +295,8 @@ void test_deep_copy(uint32_t num_nodes) { } // FIXME_SYCL wrong results on Nvidia GPUs but correct on Host and Intel GPUs -// FIXME_HIP // WORKAROUND MSVC -#if !(defined(KOKKOS_ENABLE_HIP) && (HIP_VERSION < 401)) && \ - !defined(_WIN32) && !defined(KOKKOS_ENABLE_SYCL) +#if !defined(_WIN32) && !defined(KOKKOS_ENABLE_SYCL) TEST(TEST_CATEGORY, UnorderedMap_insert) { for (int i = 0; i < 500; ++i) { test_insert(100000, 90000, 100, true); @@ -329,6 +327,23 @@ TEST(TEST_CATEGORY, UnorderedMap_valid_empty) { ASSERT_TRUE(n.is_allocated()); } +TEST(TEST_CATEGORY, UnorderedMap_clear_zero_size) { + using Map = + Kokkos::UnorderedMap; + + Map m(11); + ASSERT_EQ(0u, m.size()); + + m.insert(2); + m.insert(3); + m.insert(5); + m.insert(7); + ASSERT_EQ(4u, m.size()); + + m.clear(); + ASSERT_EQ(0u, m.size()); +} + } // namespace Test #endif // KOKKOS_TEST_UNORDERED_MAP_HPP diff --git a/lib/kokkos/core/cmake/KokkosCore_config.h.in b/lib/kokkos/core/cmake/KokkosCore_config.h.in deleted file mode 100644 index f0835772b8..0000000000 --- a/lib/kokkos/core/cmake/KokkosCore_config.h.in +++ /dev/null @@ -1,104 +0,0 @@ -/* The trivial 'src/build_common.sh' creates a config - * that must stay in sync with this file. - */ -#cmakedefine KOKKOS_FOR_SIERRA - -#if !defined(KOKKOS_FOR_SIERRA) - -#if !defined(KOKKOS_MACROS_HPP) || defined(KOKKOS_CORE_CONFIG_H) -#error \ - "Don't include KokkosCore_config.h directly; include Kokkos_Macros.hpp instead." -#else -#define KOKKOS_CORE_CONFIG_H -#endif - -#cmakedefine KOKKOS_ENABLE_CUDA -#cmakedefine KOKKOS_ENABLE_HIP -#cmakedefine KOKKOS_ENABLE_OPENMP -#cmakedefine KOKKOS_ENABLE_THREADS -#cmakedefine KOKKOS_ENABLE_SERIAL -#cmakedefine KOKKOS_ENABLE_Winthread - -#cmakedefine KOKKOS_ENABLE_HWLOC -#cmakedefine KOKKOS_ENABLE_HBWSPACE -#cmakedefine KOKKOS_ENABLE_LIBRT - -#cmakedefine KOKKOS_ENABLE_DEBUG -#cmakedefine KOKKOS_ENABLE_DEBUG_BOUNDS_CHECK -#cmakedefine KOKKOS_ENABLE_DEBUG_DUALVIEW_MODIFY_CHECK -#cmakedefine KOKKOS_ENABLE_PROFILING_LOAD_PRINT -#cmakedefine KOKKOS_ENABLE_TUNING - -#cmakedefine KOKKOS_ENABLE_AGGRESSIVE_VECTORIZATION - -#ifdef KOKKOS_ENABLE_CUDA - -#cmakedefine KOKKOS_ENABLE_CUDA_LDG_INTRINSIC - -// mfh 16 Sep 2014: If passed in on the command line, that overrides -// any value of KOKKOS_USE_CUDA_UVM here. Doing this should prevent build -// warnings like this one: -// -// packages/kokkos/core/src/KokkosCore_config.h:13:1: warning: -// "KOKKOS_USE_CUDA_UVM" redefined -// -// At some point, we should edit the test-build scripts in -// Trilinos/cmake/ctest/drivers/perseus/, and take -// -DKOKKOS_USE_CUDA_UVM from the command-line arguments there. I -// hesitate to do that now, because I'm not sure if all the files are -// including KokkosCore_config.h (or a header file that includes it) like -// they should. -#ifndef KOKKOS_USE_CUDA_UVM -#cmakedefine KOKKOS_USE_CUDA_UVM -#endif - -#cmakedefine KOKKOS_ENABLE_CUDA_RELOCATABLE_DEVICE_CODE - -#cmakedefine KOKKOS_ENABLE_CUDA_LAMBDA - -#endif - -#cmakedefine KOKKOS_IMPL_CUDA_CLANG_WORKAROUND - -#ifndef __CUDA_ARCH__ -#cmakedefine KOKKOS_ENABLE_ISA_X86_64 -#cmakedefine KOKKOS_ENABLE_ISA_KNC -#cmakedefine KOKKOS_ENABLE_ISA_POWERPCLE -#endif - -#ifdef KOKKOS_ENABLE_HIP -#cmakedefine KOKKOS_ENABLE_HIP_RELOCATABLE_DEVICE_CODE -#endif - -#cmakedefine KOKKOS_ARCH_ARMV80 1 -#cmakedefine KOKKOS_ARCH_ARMV81 1 -#cmakedefine KOKKOS_ARCH_ARMV8_THUNDERX 1 -#cmakedefine KOKKOS_ARCH_AVX 1 -#cmakedefine KOKKOS_ARCH_AVX2 1 -#cmakedefine KOKKOS_ARCH_AVX512MIC 1 -#cmakedefine KOKKOS_ARCH_AVX512XEON 1 -#cmakedefine KOKKOS_ARCH_KNC 1 -#cmakedefine KOKKOS_ARCH_POWER8 1 -#cmakedefine KOKKOS_ARCH_POWER9 1 -#cmakedefine KOKKOS_ARCH_KEPLER 1 -#cmakedefine KOKKOS_ARCH_KEPLER30 1 -#cmakedefine KOKKOS_ARCH_KEPLER32 1 -#cmakedefine KOKKOS_ARCH_KEPLER35 1 -#cmakedefine KOKKOS_ARCH_KEPLER37 1 -#cmakedefine KOKKOS_ARCH_MAXWELL 1 -#cmakedefine KOKKOS_ARCH_MAXWELL50 1 -#cmakedefine KOKKOS_ARCH_MAXWELL52 1 -#cmakedefine KOKKOS_ARCH_MAXWELL53 1 -#cmakedefine KOKKOS_ARCH_PASCAL 1 -#cmakedefine KOKKOS_ARCH_PASCAL60 1 -#cmakedefine KOKKOS_ARCH_PASCAL61 1 -#cmakedefine KOKKOS_ARCH_VOLTA70 1 - -// TODO: These are currently not used in Kokkos. Should they be removed? -#cmakedefine KOKKOS_ENABLE_MPI -#cmakedefine KOKKOS_ENABLE_CUSPARSE - -// TODO: No longer options in Kokkos. Need to be removed. -#cmakedefine KOKKOS_USING_DEPRECATED_VIEW - -#endif // !defined(KOKKOS_FOR_SIERRA) diff --git a/lib/kokkos/core/perf_test/CMakeLists.txt b/lib/kokkos/core/perf_test/CMakeLists.txt index 9ff4b6006d..a7c57a9434 100644 --- a/lib/kokkos/core/perf_test/CMakeLists.txt +++ b/lib/kokkos/core/perf_test/CMakeLists.txt @@ -10,9 +10,7 @@ #INCLUDE_DIRECTORIES("${CMAKE_CURRENT_SOURCE_DIR}/../../algorithms/src") # FIXME_OPENMPTARGET - the NVIDIA HPC compiler nvc++ in the OpenMPTarget backend does not pass the perf_tests. -IF (KOKKOS_ENABLE_OPENMPTARGET - AND (KOKKOS_CXX_COMPILER_ID STREQUAL PGI - OR KOKKOS_CXX_COMPILER_ID STREQUAL NVHPC)) +IF (KOKKOS_ENABLE_OPENMPTARGET AND KOKKOS_CXX_COMPILER_ID STREQUAL NVHPC) RETURN() ENDIF() diff --git a/lib/kokkos/core/perf_test/PerfTestGramSchmidt.cpp b/lib/kokkos/core/perf_test/PerfTestGramSchmidt.cpp index dee21fd7a5..b534c32c52 100644 --- a/lib/kokkos/core/perf_test/PerfTestGramSchmidt.cpp +++ b/lib/kokkos/core/perf_test/PerfTestGramSchmidt.cpp @@ -231,7 +231,7 @@ void run_test_gramschmidt(int exp_beg, int exp_end, int num_trials, std::cout << label_gramschmidt << " , " << parallel_work_length << " , " << min_seconds << " , " << (min_seconds / parallel_work_length) - << std::endl; + << ", " << avg_seconds << std::endl; } } diff --git a/lib/kokkos/core/perf_test/PerfTestHexGrad.cpp b/lib/kokkos/core/perf_test/PerfTestHexGrad.cpp index c431c2b0c8..24c1898e0a 100644 --- a/lib/kokkos/core/perf_test/PerfTestHexGrad.cpp +++ b/lib/kokkos/core/perf_test/PerfTestHexGrad.cpp @@ -280,7 +280,7 @@ void run_test_hexgrad(int exp_beg, int exp_end, int num_trials, std::cout << label_hexgrad << " , " << parallel_work_length << " , " << min_seconds << " , " << (min_seconds / parallel_work_length) - << std::endl; + << avg_seconds << std::endl; } } diff --git a/lib/kokkos/core/perf_test/PerfTest_ExecSpacePartitioning.cpp b/lib/kokkos/core/perf_test/PerfTest_ExecSpacePartitioning.cpp index 50bbc78a6b..5b7c2a7a03 100644 --- a/lib/kokkos/core/perf_test/PerfTest_ExecSpacePartitioning.cpp +++ b/lib/kokkos/core/perf_test/PerfTest_ExecSpacePartitioning.cpp @@ -205,7 +205,7 @@ TEST(default_exec, overlap_range_policy) { double time_end = timer.seconds(); if (SpaceInstance::overlap()) { - ASSERT_TRUE((time_end > 1.5 * time_overlap)); + ASSERT_GT(time_end, 1.5 * time_overlap); } printf("Time RangePolicy: NonOverlap: %lf Time Overlap: %lf\n", time_end, time_overlap); @@ -238,7 +238,7 @@ TEST(default_exec, overlap_range_policy) { double time_not_fenced = timer.seconds(); Kokkos::fence(); if (SpaceInstance::overlap()) { - ASSERT_TRUE(time_fenced > 2.0 * time_not_fenced); + ASSERT_GT(time_fenced, 2.0 * time_not_fenced); } timer.reset(); @@ -280,7 +280,7 @@ TEST(default_exec, overlap_range_policy) { ASSERT_EQ(h_result2(), h_result()); if (SpaceInstance::overlap()) { - ASSERT_TRUE(time_overlapped_reduce < 1.5 * time_no_overlapped_reduce); + ASSERT_LT(time_overlapped_reduce, 1.5 * time_no_overlapped_reduce); } printf("Time RangePolicy Reduce: NonOverlap: %lf Time Overlap: %lf\n", time_no_overlapped_reduce, time_overlapped_reduce); @@ -378,7 +378,7 @@ TEST(default_exec, overlap_mdrange_policy) { double time_end = timer.seconds(); if (SpaceInstance::overlap()) { - ASSERT_TRUE((time_end > 1.5 * time_overlap)); + ASSERT_GT(time_end, 1.5 * time_overlap); } printf("Time MDRangePolicy: NonOverlap: %lf Time Overlap: %lf\n", time_end, time_overlap); @@ -413,7 +413,7 @@ TEST(default_exec, overlap_mdrange_policy) { double time_not_fenced = timer.seconds(); Kokkos::fence(); if (SpaceInstance::overlap()) { - ASSERT_TRUE(time_fenced > 2.0 * time_not_fenced); + ASSERT_GT(time_fenced, 2.0 * time_not_fenced); } timer.reset(); @@ -459,7 +459,7 @@ TEST(default_exec, overlap_mdrange_policy) { ASSERT_EQ(h_result2(), h_result()); if (SpaceInstance::overlap()) { - ASSERT_TRUE(time_overlapped_reduce < 1.5 * time_no_overlapped_reduce); + ASSERT_LT(time_overlapped_reduce, 1.5 * time_no_overlapped_reduce); } printf("Time MDRangePolicy Reduce: NonOverlap: %lf Time Overlap: %lf\n", time_no_overlapped_reduce, time_overlapped_reduce); @@ -548,7 +548,7 @@ TEST(default_exec, overlap_team_policy) { double time_end = timer.seconds(); if (SpaceInstance::overlap()) { - ASSERT_TRUE((time_end > 1.5 * time_overlap)); + ASSERT_GT(time_end, 1.5 * time_overlap); } printf("Time TeamPolicy: NonOverlap: %lf Time Overlap: %lf\n", time_end, time_overlap); @@ -581,7 +581,7 @@ TEST(default_exec, overlap_team_policy) { double time_not_fenced = timer.seconds(); Kokkos::fence(); if (SpaceInstance::overlap()) { - ASSERT_TRUE(time_fenced > 2.0 * time_not_fenced); + ASSERT_GT(time_fenced, 2.0 * time_not_fenced); } timer.reset(); Kokkos::parallel_reduce( @@ -622,7 +622,7 @@ TEST(default_exec, overlap_team_policy) { ASSERT_EQ(h_result2(), h_result()); if (SpaceInstance::overlap()) { - ASSERT_TRUE(time_overlapped_reduce < 1.5 * time_no_overlapped_reduce); + ASSERT_LT(time_overlapped_reduce, 1.5 * time_no_overlapped_reduce); } printf("Time TeamPolicy Reduce: NonOverlap: %lf Time Overlap: %lf\n", time_no_overlapped_reduce, time_overlapped_reduce); diff --git a/lib/kokkos/core/perf_test/PerfTest_ViewAllocate.cpp b/lib/kokkos/core/perf_test/PerfTest_ViewAllocate.cpp index 550316bec9..555a05ea27 100644 --- a/lib/kokkos/core/perf_test/PerfTest_ViewAllocate.cpp +++ b/lib/kokkos/core/perf_test/PerfTest_ViewAllocate.cpp @@ -120,7 +120,8 @@ void run_allocateview_tests(int N, int R) { { Kokkos::Timer timer; for (int r = 0; r < R; r++) { - double* a_ptr = (double*)Kokkos::kokkos_malloc("A", sizeof(double) * N8); + double* a_ptr = + static_cast(Kokkos::kokkos_malloc("A", sizeof(double) * N8)); Kokkos::parallel_for( N8, KOKKOS_LAMBDA(const int& i) { a_ptr[i] = 0.0; }); Kokkos::fence(); diff --git a/lib/kokkos/core/perf_test/PerfTest_ViewResize_8.cpp b/lib/kokkos/core/perf_test/PerfTest_ViewResize_8.cpp index afeeb64356..b0562f2fd1 100644 --- a/lib/kokkos/core/perf_test/PerfTest_ViewResize_8.cpp +++ b/lib/kokkos/core/perf_test/PerfTest_ViewResize_8.cpp @@ -47,10 +47,18 @@ namespace Test { TEST(default_exec, ViewResize_Rank8) { +// FIXME_SYCL Avoid running out of resources on the CUDA GPU used in the CI +#ifdef KOKKOS_ENABLE_SYCL + printf("Resize View Performance for LayoutLeft:\n"); + run_resizeview_tests8(9, 1); + printf("Resize View Performance for LayoutRight:\n"); + run_resizeview_tests8(9, 1); +#else printf("Resize View Performance for LayoutLeft:\n"); run_resizeview_tests8(10, 1); printf("Resize View Performance for LayoutRight:\n"); run_resizeview_tests8(10, 1); +#endif } } // namespace Test diff --git a/lib/kokkos/core/perf_test/test_atomic.cpp b/lib/kokkos/core/perf_test/test_atomic.cpp index 59820f3bdd..54824e5b39 100644 --- a/lib/kokkos/core/perf_test/test_atomic.cpp +++ b/lib/kokkos/core/perf_test/test_atomic.cpp @@ -47,7 +47,7 @@ #include #include -#include +#include using exec_space = Kokkos::DefaultExecutionSpace; @@ -401,7 +401,7 @@ template void Loop(int loop, int test, const char* type_name) { LoopVariant(loop, test); - Kokkos::Impl::Timer timer; + Kokkos::Timer timer; T res = LoopVariant(loop, test); double time = timer.seconds(); diff --git a/lib/kokkos/core/perf_test/test_atomic_minmax_simple.cpp b/lib/kokkos/core/perf_test/test_atomic_minmax_simple.cpp index eec1c8eacc..4086ef5816 100644 --- a/lib/kokkos/core/perf_test/test_atomic_minmax_simple.cpp +++ b/lib/kokkos/core/perf_test/test_atomic_minmax_simple.cpp @@ -12,13 +12,13 @@ #include #include -#include +#include using exec_space = Kokkos::DefaultExecutionSpace; template void test(const int length) { - Kokkos::Impl::Timer timer; + Kokkos::Timer timer; using vector = Kokkos::View; diff --git a/lib/kokkos/core/perf_test/test_mempool.cpp b/lib/kokkos/core/perf_test/test_mempool.cpp index 9aab119774..7887d4ba55 100644 --- a/lib/kokkos/core/perf_test/test_mempool.cpp +++ b/lib/kokkos/core/perf_test/test_mempool.cpp @@ -48,7 +48,7 @@ #include #include -#include +#include using ExecSpace = Kokkos::DefaultExecutionSpace; using MemorySpace = Kokkos::DefaultExecutionSpace::memory_space; @@ -100,7 +100,7 @@ struct TestFunctor { const unsigned size_alloc = chunk * (1 + (j % chunk_span)); - ptrs(j) = (uintptr_t)pool.allocate(size_alloc); + ptrs(j) = reinterpret_cast(pool.allocate(size_alloc)); if (ptrs(j)) ++update; } @@ -129,7 +129,7 @@ struct TestFunctor { const unsigned size_alloc = chunk * (1 + (j % chunk_span)); - pool.deallocate((void*)ptrs(j), size_alloc); + pool.deallocate(reinterpret_cast(ptrs(j)), size_alloc); } } @@ -153,9 +153,9 @@ struct TestFunctor { for (unsigned k = 0; k < repeat_inner; ++k) { const unsigned size_alloc = chunk * (1 + (j % chunk_span)); - pool.deallocate((void*)ptrs(j), size_alloc); + pool.deallocate(reinterpret_cast(ptrs(j)), size_alloc); - ptrs(j) = (uintptr_t)pool.allocate(size_alloc); + ptrs(j) = reinterpret_cast(pool.allocate(size_alloc)); if (0 == ptrs(j)) update++; } @@ -266,7 +266,7 @@ int main(int argc, char* argv[]) { TestFunctor functor(total_alloc_size, min_superblock_size, number_alloc, fill_stride, chunk_span, repeat_inner); - Kokkos::Impl::Timer timer; + Kokkos::Timer timer; if (!functor.test_fill()) { Kokkos::abort("fill "); diff --git a/lib/kokkos/core/perf_test/test_taskdag.cpp b/lib/kokkos/core/perf_test/test_taskdag.cpp index b2f936a955..49957ae932 100644 --- a/lib/kokkos/core/perf_test/test_taskdag.cpp +++ b/lib/kokkos/core/perf_test/test_taskdag.cpp @@ -56,7 +56,7 @@ int main() { return 0; } #include #include -#include +#include using ExecSpace = Kokkos::DefaultExecutionSpace; @@ -220,7 +220,7 @@ int main(int argc, char* argv[]) { double time_sum = 0; for (int i = 0; i < test_repeat_outer; ++i) { - Kokkos::Impl::Timer timer; + Kokkos::Timer timer; Functor::FutureType ftmp = Kokkos::host_spawn(Kokkos::TaskSingle(sched), Functor(fib_input)); diff --git a/lib/kokkos/core/src/CMakeLists.txt b/lib/kokkos/core/src/CMakeLists.txt index 2ab0989805..499736c60d 100644 --- a/lib/kokkos/core/src/CMakeLists.txt +++ b/lib/kokkos/core/src/CMakeLists.txt @@ -9,6 +9,8 @@ INSTALL (DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/" DESTINATION ${KOKKOS_HEADER_DIR} FILES_MATCHING + PATTERN "*.inc" + PATTERN "*.inc_*" PATTERN "*.hpp" PATTERN "*.h" ) @@ -65,6 +67,15 @@ IF (KOKKOS_ENABLE_SYCL) APPEND_GLOB(KOKKOS_CORE_HEADERS ${CMAKE_CURRENT_SOURCE_DIR}/SYCL/*.hpp) ENDIF() +IF (KOKKOS_ENABLE_IMPL_DESUL_ATOMICS) + APPEND_GLOB(KOKKOS_CORE_SRCS ${CMAKE_CURRENT_SOURCE_DIR}/desul/src/*.cpp) + APPEND_GLOB(KOKKOS_CORE_HEADERS ${CMAKE_CURRENT_SOURCE_DIR}/desul/*.hpp) + APPEND_GLOB(KOKKOS_CORE_HEADERS ${CMAKE_CURRENT_SOURCE_DIR}/desul/*/*.hpp) + APPEND_GLOB(KOKKOS_CORE_HEADERS ${CMAKE_CURRENT_SOURCE_DIR}/desul/*/*/*.hpp) + APPEND_GLOB(KOKKOS_CORE_HEADERS ${CMAKE_CURRENT_SOURCE_DIR}/desul/*/*/*.inc) +ENDIF() + + KOKKOS_ADD_LIBRARY( kokkoscore SOURCES ${KOKKOS_CORE_SRCS} @@ -86,3 +97,15 @@ KOKKOS_LINK_TPL(kokkoscore PUBLIC LIBDL) KOKKOS_LINK_TPL(kokkoscore PUBLIC LIBRT) KOKKOS_LINK_TPL(kokkoscore PUBLIC PTHREAD) KOKKOS_LINK_TPL(kokkoscore PUBLIC ROCM) + +# FIXME: We need a proper solution to figure out whether to enable +# libatomic +# XL requires libatomic even for 64 bit CAS, most others only for 128 +# I (CT) had removed 128bit CAS from desul to not need libatomic. +IF (KOKKOS_ENABLE_IMPL_DESUL_ATOMICS AND + (KOKKOS_ENABLE_OPENMPTARGET OR (CMAKE_CXX_COMPILER_ID STREQUAL XLClang))) + target_link_libraries(kokkoscore PUBLIC atomic) +ENDIF() + + +KOKKOS_LINK_TPL(kokkoscore PUBLIC LIBQUADMATH) diff --git a/lib/kokkos/core/src/Cuda/Kokkos_CudaSpace.cpp b/lib/kokkos/core/src/Cuda/Kokkos_CudaSpace.cpp index 916f109758..f6b2762403 100644 --- a/lib/kokkos/core/src/Cuda/Kokkos_CudaSpace.cpp +++ b/lib/kokkos/core/src/Cuda/Kokkos_CudaSpace.cpp @@ -90,43 +90,25 @@ static std::atomic num_uvm_allocations(0); } // namespace -DeepCopy::DeepCopy(void *dst, const void *src, - size_t n) { - CUDA_SAFE_CALL(cudaMemcpy(dst, src, n, cudaMemcpyDefault)); +void DeepCopyCuda(void *dst, const void *src, size_t n) { + KOKKOS_IMPL_CUDA_SAFE_CALL(cudaMemcpy(dst, src, n, cudaMemcpyDefault)); } -DeepCopy::DeepCopy(void *dst, const void *src, - size_t n) { - CUDA_SAFE_CALL(cudaMemcpy(dst, src, n, cudaMemcpyDefault)); -} - -DeepCopy::DeepCopy(void *dst, const void *src, - size_t n) { - CUDA_SAFE_CALL(cudaMemcpy(dst, src, n, cudaMemcpyDefault)); -} - -DeepCopy::DeepCopy(const Cuda &instance, void *dst, - const void *src, size_t n) { - CUDA_SAFE_CALL( - cudaMemcpyAsync(dst, src, n, cudaMemcpyDefault, instance.cuda_stream())); -} - -DeepCopy::DeepCopy(const Cuda &instance, void *dst, - const void *src, size_t n) { - CUDA_SAFE_CALL( - cudaMemcpyAsync(dst, src, n, cudaMemcpyDefault, instance.cuda_stream())); -} - -DeepCopy::DeepCopy(const Cuda &instance, void *dst, - const void *src, size_t n) { - CUDA_SAFE_CALL( +void DeepCopyAsyncCuda(const Cuda &instance, void *dst, const void *src, + size_t n) { + KOKKOS_IMPL_CUDA_SAFE_CALL( cudaMemcpyAsync(dst, src, n, cudaMemcpyDefault, instance.cuda_stream())); } void DeepCopyAsyncCuda(void *dst, const void *src, size_t n) { cudaStream_t s = cuda_get_deep_copy_stream(); - CUDA_SAFE_CALL(cudaMemcpyAsync(dst, src, n, cudaMemcpyDefault, s)); - cudaStreamSynchronize(s); + KOKKOS_IMPL_CUDA_SAFE_CALL( + cudaMemcpyAsync(dst, src, n, cudaMemcpyDefault, s)); + Impl::cuda_stream_synchronize( + s, + Kokkos::Tools::Experimental::SpecialSynchronizationCases:: + DeepCopyResourceSynchronization, + "Kokkos::Impl::DeepCopyAsyncCuda: Deep Copy Stream Sync"); } } // namespace Impl @@ -137,6 +119,7 @@ void DeepCopyAsyncCuda(void *dst, const void *src, size_t n) { namespace Kokkos { +#ifdef KOKKOS_ENABLE_DEPRECATED_CODE_3 KOKKOS_DEPRECATED void CudaSpace::access_error() { const std::string msg( "Kokkos::CudaSpace::access_error attempt to execute Cuda function from " @@ -150,6 +133,7 @@ KOKKOS_DEPRECATED void CudaSpace::access_error(const void *const) { "non-Cuda space"); Kokkos::Impl::throw_runtime_exception(msg); } +#endif /*--------------------------------------------------------------------------*/ @@ -164,9 +148,11 @@ bool CudaUVMSpace::available() { /*--------------------------------------------------------------------------*/ +#ifdef KOKKOS_ENABLE_DEPRECATED_CODE_3 int CudaUVMSpace::number_of_allocations() { return Kokkos::Impl::num_uvm_allocations.load(); } +#endif #ifdef KOKKOS_IMPL_DEBUG_CUDA_PIN_UVM_TO_HOST // The purpose of the following variable is to allow a state-based choice // for pinning UVM allocations to the CPU. For now this is considered @@ -204,6 +190,8 @@ CudaUVMSpace::CudaUVMSpace() : m_device(Kokkos::Cuda().cuda_device()) {} CudaHostPinnedSpace::CudaHostPinnedSpace() {} +int memory_threshold_g = 40000; // 40 kB + //============================================================================== // {{{1 @@ -221,7 +209,19 @@ void *CudaSpace::impl_allocate( const Kokkos::Tools::SpaceHandle arg_handle) const { void *ptr = nullptr; +#ifndef CUDART_VERSION +#error CUDART_VERSION undefined! +#elif (defined(KOKKOS_ENABLE_IMPL_CUDA_MALLOC_ASYNC) && CUDART_VERSION >= 11020) + cudaError_t error_code; + if (arg_alloc_size >= memory_threshold_g) { + error_code = cudaMallocAsync(&ptr, arg_alloc_size, 0); + KOKKOS_IMPL_CUDA_SAFE_CALL(cudaDeviceSynchronize()); + } else { + error_code = cudaMalloc(&ptr, arg_alloc_size); + } +#else auto error_code = cudaMalloc(&ptr, arg_alloc_size); +#endif if (error_code != cudaSuccess) { // TODO tag as unlikely branch cudaGetLastError(); // This is the only way to clear the last error, which // we should do here since we're turning it into an @@ -253,7 +253,8 @@ void *CudaUVMSpace::impl_allocate( const Kokkos::Tools::SpaceHandle arg_handle) const { void *ptr = nullptr; - Cuda::impl_static_fence(); + Cuda::impl_static_fence( + "Kokkos::CudaUVMSpace::impl_allocate: Pre UVM Allocation"); if (arg_alloc_size > 0) { Kokkos::Impl::num_uvm_allocations++; @@ -276,7 +277,8 @@ void *CudaUVMSpace::impl_allocate( CudaMallocManaged); } } - Cuda::impl_static_fence(); + Cuda::impl_static_fence( + "Kokkos::CudaUVMSpace::impl_allocate: Post UVM Allocation"); if (Kokkos::Profiling::profileLibraryLoaded()) { const size_t reported_size = (arg_logical_size > 0) ? arg_logical_size : arg_alloc_size; @@ -337,9 +339,20 @@ void CudaSpace::impl_deallocate( Kokkos::Profiling::deallocateData(arg_handle, arg_label, arg_alloc_ptr, reported_size); } - try { - CUDA_SAFE_CALL(cudaFree(arg_alloc_ptr)); +#ifndef CUDART_VERSION +#error CUDART_VERSION undefined! +#elif (defined(KOKKOS_ENABLE_IMPL_CUDA_MALLOC_ASYNC) && CUDART_VERSION >= 11020) + if (arg_alloc_size >= memory_threshold_g) { + KOKKOS_IMPL_CUDA_SAFE_CALL(cudaDeviceSynchronize()); + KOKKOS_IMPL_CUDA_SAFE_CALL(cudaFreeAsync(arg_alloc_ptr, 0)); + KOKKOS_IMPL_CUDA_SAFE_CALL(cudaDeviceSynchronize()); + } else { + KOKKOS_IMPL_CUDA_SAFE_CALL(cudaFree(arg_alloc_ptr)); + } +#else + KOKKOS_IMPL_CUDA_SAFE_CALL(cudaFree(arg_alloc_ptr)); +#endif } catch (...) { } } @@ -362,7 +375,8 @@ void CudaUVMSpace::impl_deallocate( , const size_t arg_logical_size, const Kokkos::Tools::SpaceHandle arg_handle) const { - Cuda::impl_static_fence(); + Cuda::impl_static_fence( + "Kokkos::CudaUVMSpace::impl_deallocate: Pre UVM Deallocation"); if (Kokkos::Profiling::profileLibraryLoaded()) { const size_t reported_size = (arg_logical_size > 0) ? arg_logical_size : arg_alloc_size; @@ -372,11 +386,12 @@ void CudaUVMSpace::impl_deallocate( try { if (arg_alloc_ptr != nullptr) { Kokkos::Impl::num_uvm_allocations--; - CUDA_SAFE_CALL(cudaFree(arg_alloc_ptr)); + KOKKOS_IMPL_CUDA_SAFE_CALL(cudaFree(arg_alloc_ptr)); } } catch (...) { } - Cuda::impl_static_fence(); + Cuda::impl_static_fence( + "Kokkos::CudaUVMSpace::impl_deallocate: Post UVM Deallocation"); } void CudaHostPinnedSpace::deallocate(void *const arg_alloc_ptr, @@ -401,7 +416,7 @@ void CudaHostPinnedSpace::impl_deallocate( reported_size); } try { - CUDA_SAFE_CALL(cudaFreeHost(arg_alloc_ptr)); + KOKKOS_IMPL_CUDA_SAFE_CALL(cudaFreeHost(arg_alloc_ptr)); } catch (...) { } } @@ -462,7 +477,7 @@ SharedAllocationRecord::attach_texture_object( resDesc.res.linear.sizeInBytes = alloc_size; resDesc.res.linear.devPtr = alloc_ptr; - CUDA_SAFE_CALL( + KOKKOS_IMPL_CUDA_SAFE_CALL( cudaCreateTextureObject(&tex_obj, &resDesc, &texDesc, nullptr)); return tex_obj; @@ -581,7 +596,7 @@ void cuda_prefetch_pointer(const Cuda &space, const void *ptr, size_t bytes, bool to_device) { if ((ptr == nullptr) || (bytes == 0)) return; cudaPointerAttributes attr; - CUDA_SAFE_CALL(cudaPointerGetAttributes(&attr, ptr)); + KOKKOS_IMPL_CUDA_SAFE_CALL(cudaPointerGetAttributes(&attr, ptr)); // I measured this and it turns out prefetching towards the host slows // DualView syncs down. Probably because the latency is not too bad in the // first place for the pull down. If we want to change that provde @@ -593,8 +608,8 @@ void cuda_prefetch_pointer(const Cuda &space, const void *ptr, size_t bytes, #endif if (to_device && is_managed && space.cuda_device_prop().concurrentManagedAccess) { - CUDA_SAFE_CALL(cudaMemPrefetchAsync(ptr, bytes, space.cuda_device(), - space.cuda_stream())); + KOKKOS_IMPL_CUDA_SAFE_CALL(cudaMemPrefetchAsync( + ptr, bytes, space.cuda_device(), space.cuda_stream())); } } diff --git a/lib/kokkos/core/src/Cuda/Kokkos_Cuda_BlockSize_Deduction.hpp b/lib/kokkos/core/src/Cuda/Kokkos_Cuda_BlockSize_Deduction.hpp index 0f4259072d..993c8d1bba 100644 --- a/lib/kokkos/core/src/Cuda/Kokkos_Cuda_BlockSize_Deduction.hpp +++ b/lib/kokkos/core/src/Cuda/Kokkos_Cuda_BlockSize_Deduction.hpp @@ -134,7 +134,12 @@ inline int cuda_deduce_block_size(bool early_termination, } if (blocks_per_sm >= min_blocks_per_sm) { - if (threads_per_sm >= opt_threads_per_sm) { + // The logic prefers smaller block sizes over larger ones to + // give more flexibility to the scheduler. + // But don't go below 128 where performance suffers significantly + // for simple copy/set kernels. + if ((threads_per_sm > opt_threads_per_sm) || + ((block_size >= 128) && (threads_per_sm == opt_threads_per_sm))) { opt_block_size = block_size; opt_threads_per_sm = threads_per_sm; } diff --git a/lib/kokkos/core/src/Cuda/Kokkos_Cuda_Error.hpp b/lib/kokkos/core/src/Cuda/Kokkos_Cuda_Error.hpp index 4759001d81..36df0d2564 100644 --- a/lib/kokkos/core/src/Cuda/Kokkos_Cuda_Error.hpp +++ b/lib/kokkos/core/src/Cuda/Kokkos_Cuda_Error.hpp @@ -49,13 +49,19 @@ #ifdef KOKKOS_ENABLE_CUDA #include - +#include #include namespace Kokkos { namespace Impl { -void cuda_device_synchronize(); +void cuda_stream_synchronize( + const cudaStream_t stream, + Kokkos::Tools::Experimental::SpecialSynchronizationCases reason, + const std::string& name); +void cuda_device_synchronize(const std::string& name); +void cuda_stream_synchronize(const cudaStream_t stream, + const std::string& name); void cuda_internal_error_throw(cudaError e, const char* name, const char* file = nullptr, const int line = 0); @@ -68,9 +74,24 @@ inline void cuda_internal_safe_call(cudaError e, const char* name, } } -#define CUDA_SAFE_CALL(call) \ +#define KOKKOS_IMPL_CUDA_SAFE_CALL(call) \ Kokkos::Impl::cuda_internal_safe_call(call, #call, __FILE__, __LINE__) +#ifdef KOKKOS_ENABLE_DEPRECATED_CODE_3 + +KOKKOS_DEPRECATED +inline void cuda_internal_safe_call_deprecated(cudaError e, const char* name, + const char* file = nullptr, + const int line = 0) { + cuda_internal_safe_call(e, name, file, line); +} + +#define CUDA_SAFE_CALL(call) \ + Kokkos::Impl::cuda_internal_safe_call_deprecated(call, #call, __FILE__, \ + __LINE__) + +#endif + } // namespace Impl namespace Experimental { diff --git a/lib/kokkos/core/src/Cuda/Kokkos_Cuda_Graph_Impl.hpp b/lib/kokkos/core/src/Cuda/Kokkos_Cuda_Graph_Impl.hpp index 3de7a69916..bd514f5e88 100644 --- a/lib/kokkos/core/src/Cuda/Kokkos_Cuda_Graph_Impl.hpp +++ b/lib/kokkos/core/src/Cuda/Kokkos_Cuda_Graph_Impl.hpp @@ -60,6 +60,7 @@ #include #include +#include namespace Kokkos { namespace Impl { @@ -82,8 +83,8 @@ struct GraphImpl { constexpr size_t error_log_size = 256; cudaGraphNode_t error_node = nullptr; char error_log[error_log_size]; - CUDA_SAFE_CALL(cudaGraphInstantiate(&m_graph_exec, m_graph, &error_node, - error_log, error_log_size)); + KOKKOS_IMPL_CUDA_SAFE_CALL(cudaGraphInstantiate( + &m_graph_exec, m_graph, &error_node, error_log, error_log_size)); // TODO @graphs print out errors } @@ -107,26 +108,27 @@ struct GraphImpl { // TODO @graphs we need to somehow indicate the need for a fence in the // destructor of the GraphImpl object (so that we don't have to // just always do it) - m_execution_space.fence(); + m_execution_space.fence("Kokkos::GraphImpl::~GraphImpl: Graph Destruction"); KOKKOS_EXPECTS(bool(m_graph)) if (bool(m_graph_exec)) { - CUDA_SAFE_CALL(cudaGraphExecDestroy(m_graph_exec)); + KOKKOS_IMPL_CUDA_SAFE_CALL(cudaGraphExecDestroy(m_graph_exec)); } - CUDA_SAFE_CALL(cudaGraphDestroy(m_graph)); + KOKKOS_IMPL_CUDA_SAFE_CALL(cudaGraphDestroy(m_graph)); }; explicit GraphImpl(Kokkos::Cuda arg_instance) : m_execution_space(std::move(arg_instance)) { - CUDA_SAFE_CALL(cudaGraphCreate(&m_graph, cuda_graph_flags_t{0})); + KOKKOS_IMPL_CUDA_SAFE_CALL( + cudaGraphCreate(&m_graph, cuda_graph_flags_t{0})); } void add_node(std::shared_ptr const& arg_node_ptr) { // All of the predecessors are just added as normal, so all we need to // do here is add an empty node - CUDA_SAFE_CALL(cudaGraphAddEmptyNode(&(arg_node_ptr->node_details_t::node), - m_graph, - /* dependencies = */ nullptr, - /* numDependencies = */ 0)); + KOKKOS_IMPL_CUDA_SAFE_CALL( + cudaGraphAddEmptyNode(&(arg_node_ptr->node_details_t::node), m_graph, + /* dependencies = */ nullptr, + /* numDependencies = */ 0)); } template @@ -171,7 +173,7 @@ struct GraphImpl { auto /*const*/& cuda_node = arg_node_ptr->node_details_t::node; KOKKOS_EXPECTS(bool(cuda_node)) - CUDA_SAFE_CALL( + KOKKOS_IMPL_CUDA_SAFE_CALL( cudaGraphAddDependencies(m_graph, &pred_cuda_node, &cuda_node, 1)); } @@ -179,7 +181,7 @@ struct GraphImpl { if (!bool(m_graph_exec)) { _instantiate_graph(); } - CUDA_SAFE_CALL( + KOKKOS_IMPL_CUDA_SAFE_CALL( cudaGraphLaunch(m_graph_exec, m_execution_space.cuda_stream())); } @@ -192,9 +194,10 @@ struct GraphImpl { KOKKOS_EXPECTS(!bool(m_graph_exec)) auto rv = std::make_shared( get_execution_space(), _graph_node_is_root_ctor_tag{}); - CUDA_SAFE_CALL(cudaGraphAddEmptyNode(&(rv->node_details_t::node), m_graph, - /* dependencies = */ nullptr, - /* numDependencies = */ 0)); + KOKKOS_IMPL_CUDA_SAFE_CALL( + cudaGraphAddEmptyNode(&(rv->node_details_t::node), m_graph, + /* dependencies = */ nullptr, + /* numDependencies = */ 0)); KOKKOS_ENSURES(bool(rv->node_details_t::node)) return rv; } diff --git a/lib/kokkos/core/src/Cuda/Kokkos_Cuda_Half.hpp b/lib/kokkos/core/src/Cuda/Kokkos_Cuda_Half.hpp index ec9c434fe6..c81286eb10 100644 --- a/lib/kokkos/core/src/Cuda/Kokkos_Cuda_Half.hpp +++ b/lib/kokkos/core/src/Cuda/Kokkos_Cuda_Half.hpp @@ -51,6 +51,9 @@ !(defined(KOKKOS_ARCH_KEPLER) || defined(KOKKOS_ARCH_MAXWELL50) || \ defined(KOKKOS_ARCH_MAXWELL52)) #include +#include // istream & ostream for extraction and insertion ops +#include +#include // reduction_identity #ifndef KOKKOS_IMPL_HALF_TYPE_DEFINED // Make sure no one else tries to define half_t @@ -127,7 +130,7 @@ KOKKOS_INLINE_FUNCTION std::enable_if_t::value, T> cast_from_half(half_t); -class half_t { +class alignas(2) half_t { public: using impl_type = Kokkos::Impl::half_impl_t::type; @@ -138,6 +141,22 @@ class half_t { KOKKOS_FUNCTION half_t() : val(0.0F) {} + // Copy constructors + KOKKOS_DEFAULTED_FUNCTION + half_t(const half_t&) noexcept = default; + + KOKKOS_INLINE_FUNCTION + half_t(const volatile half_t& rhs) { +#ifdef __CUDA_ARCH__ + val = rhs.val; +#else + const volatile uint16_t* rv_ptr = + reinterpret_cast(&rhs.val); + const uint16_t rv_val = *rv_ptr; + val = reinterpret_cast(rv_val); +#endif // __CUDA_ARCH__ + } + // Don't support implicit conversion back to impl_type. // impl_type is a storage only type on host. KOKKOS_FUNCTION @@ -219,7 +238,7 @@ class half_t { #ifdef __CUDA_ARCH__ tmp.val = +tmp.val; #else - tmp.val = __float2half(+__half2float(tmp.val)); + tmp.val = __float2half(+__half2float(tmp.val)); #endif return tmp; } @@ -230,7 +249,7 @@ class half_t { #ifdef __CUDA_ARCH__ tmp.val = -tmp.val; #else - tmp.val = __float2half(-__half2float(tmp.val)); + tmp.val = __float2half(-__half2float(tmp.val)); #endif return tmp; } @@ -241,7 +260,7 @@ class half_t { #ifdef __CUDA_ARCH__ ++val; #else - float tmp = __half2float(val); + float tmp = __half2float(val); ++tmp; val = __float2half(tmp); #endif @@ -255,7 +274,7 @@ class half_t { #else float tmp = __half2float(val); --tmp; - val = __float2half(tmp); + val = __float2half(tmp); #endif return *this; } @@ -290,7 +309,10 @@ class half_t { template KOKKOS_FUNCTION void operator=(T rhs) volatile { - val = cast_to_half(rhs).val; + impl_type new_val = cast_to_half(rhs).val; + volatile uint16_t* val_ptr = + reinterpret_cast(const_cast(&val)); + *val_ptr = reinterpret_cast(new_val); } // Compound operators @@ -299,30 +321,21 @@ class half_t { #ifdef __CUDA_ARCH__ val += rhs.val; #else - val = __float2half(__half2float(val) + __half2float(rhs.val)); + val = __float2half(__half2float(val) + __half2float(rhs.val)); #endif return *this; } KOKKOS_FUNCTION - volatile half_t& operator+=(half_t rhs) volatile { -#ifdef __CUDA_ARCH__ - // Cuda 10 supports __half volatile stores but not volatile arithmetic - // operands. Cast away volatile-ness of val for arithmetic but not for store - // location. - val = const_cast(val) + rhs.val; -#else - // Use non-volatile val_ref to suppress: - // "warning: implicit dereference will not access object of type ‘volatile - // __half’ in statement" - auto val_ref = const_cast(val); - val_ref = __float2half(__half2float(const_cast(val)) + - __half2float(rhs.val)); -#endif - return *this; + void operator+=(const volatile half_t& rhs) volatile { + half_t tmp_rhs = rhs; + half_t tmp_lhs = *this; + + tmp_lhs += tmp_rhs; + *this = tmp_lhs; } - // Compund operators: upcast overloads for += + // Compound operators: upcast overloads for += template KOKKOS_FUNCTION std::enable_if_t< std::is_same::value || std::is_same::value, T> friend @@ -350,27 +363,18 @@ class half_t { #ifdef __CUDA_ARCH__ val -= rhs.val; #else - val = __float2half(__half2float(val) - __half2float(rhs.val)); + val = __float2half(__half2float(val) - __half2float(rhs.val)); #endif return *this; } KOKKOS_FUNCTION - volatile half_t& operator-=(half_t rhs) volatile { -#ifdef __CUDA_ARCH__ - // Cuda 10 supports __half volatile stores but not volatile arithmetic - // operands. Cast away volatile-ness of val for arithmetic but not for store - // location. - val = const_cast(val) - rhs.val; -#else - // Use non-volatile val_ref to suppress: - // "warning: implicit dereference will not access object of type ‘volatile - // __half’ in statement" - auto val_ref = const_cast(val); - val_ref = __float2half(__half2float(const_cast(val)) - - __half2float(rhs.val)); -#endif - return *this; + void operator-=(const volatile half_t& rhs) volatile { + half_t tmp_rhs = rhs; + half_t tmp_lhs = *this; + + tmp_lhs -= tmp_rhs; + *this = tmp_lhs; } // Compund operators: upcast overloads for -= @@ -401,27 +405,18 @@ class half_t { #ifdef __CUDA_ARCH__ val *= rhs.val; #else - val = __float2half(__half2float(val) * __half2float(rhs.val)); + val = __float2half(__half2float(val) * __half2float(rhs.val)); #endif return *this; } KOKKOS_FUNCTION - volatile half_t& operator*=(half_t rhs) volatile { -#ifdef __CUDA_ARCH__ - // Cuda 10 supports __half volatile stores but not volatile arithmetic - // operands. Cast away volatile-ness of val for arithmetic but not for store - // location. - val = const_cast(val) * rhs.val; -#else - // Use non-volatile val_ref to suppress: - // "warning: implicit dereference will not access object of type ‘volatile - // __half’ in statement" - auto val_ref = const_cast(val); - val_ref = __float2half(__half2float(const_cast(val)) * - __half2float(rhs.val)); -#endif - return *this; + void operator*=(const volatile half_t& rhs) volatile { + half_t tmp_rhs = rhs; + half_t tmp_lhs = *this; + + tmp_lhs *= tmp_rhs; + *this = tmp_lhs; } // Compund operators: upcast overloads for *= @@ -452,27 +447,18 @@ class half_t { #ifdef __CUDA_ARCH__ val /= rhs.val; #else - val = __float2half(__half2float(val) / __half2float(rhs.val)); + val = __float2half(__half2float(val) / __half2float(rhs.val)); #endif return *this; } KOKKOS_FUNCTION - volatile half_t& operator/=(half_t rhs) volatile { -#ifdef __CUDA_ARCH__ - // Cuda 10 supports __half volatile stores but not volatile arithmetic - // operands. Cast away volatile-ness of val for arithmetic but not for store - // location. - val = const_cast(val) / rhs.val; -#else - // Use non-volatile val_ref to suppress: - // "warning: implicit dereference will not access object of type ‘volatile - // __half’ in statement" - auto val_ref = const_cast(val); - val_ref = __float2half(__half2float(const_cast(val)) / - __half2float(rhs.val)); -#endif - return *this; + void operator/=(const volatile half_t& rhs) volatile { + half_t tmp_rhs = rhs; + half_t tmp_lhs = *this; + + tmp_lhs /= tmp_rhs; + *this = tmp_lhs; } // Compund operators: upcast overloads for /= @@ -504,7 +490,7 @@ class half_t { #ifdef __CUDA_ARCH__ lhs.val += rhs.val; #else - lhs.val = __float2half(__half2float(lhs.val) + __half2float(rhs.val)); + lhs.val = __float2half(__half2float(lhs.val) + __half2float(rhs.val)); #endif return lhs; } @@ -529,7 +515,7 @@ class half_t { #ifdef __CUDA_ARCH__ lhs.val -= rhs.val; #else - lhs.val = __float2half(__half2float(lhs.val) - __half2float(rhs.val)); + lhs.val = __float2half(__half2float(lhs.val) - __half2float(rhs.val)); #endif return lhs; } @@ -554,7 +540,7 @@ class half_t { #ifdef __CUDA_ARCH__ lhs.val *= rhs.val; #else - lhs.val = __float2half(__half2float(lhs.val) * __half2float(rhs.val)); + lhs.val = __float2half(__half2float(lhs.val) * __half2float(rhs.val)); #endif return lhs; } @@ -579,7 +565,7 @@ class half_t { #ifdef __CUDA_ARCH__ lhs.val /= rhs.val; #else - lhs.val = __float2half(__half2float(lhs.val) / __half2float(rhs.val)); + lhs.val = __float2half(__half2float(lhs.val) / __half2float(rhs.val)); #endif return lhs; } @@ -683,6 +669,62 @@ class half_t { return __half2float(val) >= __half2float(rhs.val); #endif } + + KOKKOS_FUNCTION + friend bool operator==(const volatile half_t& lhs, + const volatile half_t& rhs) { + half_t tmp_lhs = lhs, tmp_rhs = rhs; + return tmp_lhs == tmp_rhs; + } + + KOKKOS_FUNCTION + friend bool operator!=(const volatile half_t& lhs, + const volatile half_t& rhs) { + half_t tmp_lhs = lhs, tmp_rhs = rhs; + return tmp_lhs != tmp_rhs; + } + + KOKKOS_FUNCTION + friend bool operator<(const volatile half_t& lhs, + const volatile half_t& rhs) { + half_t tmp_lhs = lhs, tmp_rhs = rhs; + return tmp_lhs < tmp_rhs; + } + + KOKKOS_FUNCTION + friend bool operator>(const volatile half_t& lhs, + const volatile half_t& rhs) { + half_t tmp_lhs = lhs, tmp_rhs = rhs; + return tmp_lhs > tmp_rhs; + } + + KOKKOS_FUNCTION + friend bool operator<=(const volatile half_t& lhs, + const volatile half_t& rhs) { + half_t tmp_lhs = lhs, tmp_rhs = rhs; + return tmp_lhs <= tmp_rhs; + } + + KOKKOS_FUNCTION + friend bool operator>=(const volatile half_t& lhs, + const volatile half_t& rhs) { + half_t tmp_lhs = lhs, tmp_rhs = rhs; + return tmp_lhs >= tmp_rhs; + } + + // Insertion and extraction operators + friend std::ostream& operator<<(std::ostream& os, const half_t& x) { + const std::string out = std::to_string(static_cast(x)); + os << out; + return os; + } + + friend std::istream& operator>>(std::istream& is, half_t& x) { + std::string in; + is >> in; + x = std::stod(in); + return is; + } }; // CUDA before 11.1 only has the half <-> float conversions marked host device @@ -943,6 +985,25 @@ KOKKOS_INLINE_FUNCTION } #endif } // namespace Experimental + +// use float as the return type for sum and prod since cuda_fp16.h +// has no constexpr functions for casting to __half +template <> +struct reduction_identity { + KOKKOS_FORCEINLINE_FUNCTION constexpr static float sum() noexcept { + return 0.0F; + } + KOKKOS_FORCEINLINE_FUNCTION constexpr static float prod() noexcept { + return 1.0F; + } + KOKKOS_FORCEINLINE_FUNCTION constexpr static float max() noexcept { + return -65504.0F; + } + KOKKOS_FORCEINLINE_FUNCTION constexpr static float min() noexcept { + return 65504.0F; + } +}; + } // namespace Kokkos #endif // KOKKOS_IMPL_HALF_TYPE_DEFINED #endif // KOKKOS_ENABLE_CUDA diff --git a/lib/kokkos/core/src/Cuda/Kokkos_Cuda_Instance.cpp b/lib/kokkos/core/src/Cuda/Kokkos_Cuda_Instance.cpp index 016cb6cdcb..6964d5b41b 100644 --- a/lib/kokkos/core/src/Cuda/Kokkos_Cuda_Instance.cpp +++ b/lib/kokkos/core/src/Cuda/Kokkos_Cuda_Instance.cpp @@ -119,7 +119,7 @@ int cuda_kernel_arch() { int arch = 0; int *d_arch = nullptr; - cudaMalloc((void **)&d_arch, sizeof(int)); + cudaMalloc(reinterpret_cast(&d_arch), sizeof(int)); cudaMemcpy(d_arch, &arch, sizeof(int), cudaMemcpyDefault); query_cuda_kernel_arch<<<1, 1>>>(d_arch); @@ -141,7 +141,36 @@ bool cuda_launch_blocking() { } // namespace -void cuda_device_synchronize() { CUDA_SAFE_CALL(cudaDeviceSynchronize()); } +void cuda_device_synchronize(const std::string &name) { + Kokkos::Tools::Experimental::Impl::profile_fence_event( + name, + Kokkos::Tools::Experimental::SpecialSynchronizationCases:: + GlobalDeviceSynchronization, + []() { // TODO: correct device ID + KOKKOS_IMPL_CUDA_SAFE_CALL(cudaDeviceSynchronize()); + }); +} + +void cuda_stream_synchronize(const cudaStream_t stream, const CudaInternal *ptr, + const std::string &name) { + Kokkos::Tools::Experimental::Impl::profile_fence_event( + name, + Kokkos::Tools::Experimental::Impl::DirectFenceIDHandle{ + ptr->impl_get_instance_id()}, + [&]() { // TODO: correct device ID + KOKKOS_IMPL_CUDA_SAFE_CALL(cudaStreamSynchronize(stream)); + }); +} + +void cuda_stream_synchronize( + const cudaStream_t stream, + Kokkos::Tools::Experimental::SpecialSynchronizationCases reason, + const std::string &name) { + Kokkos::Tools::Experimental::Impl::profile_fence_event( + name, reason, [&]() { // TODO: correct device ID + KOKKOS_IMPL_CUDA_SAFE_CALL(cudaStreamSynchronize(stream)); + }); +} void cuda_internal_error_throw(cudaError e, const char *name, const char *file, const int line) { @@ -221,7 +250,7 @@ CudaInternalDevices::CudaInternalDevices() { // See 'cudaSetDeviceFlags' for host-device thread interaction // Section 4.4.2.6 of the CUDA Toolkit Reference Manual - CUDA_SAFE_CALL(cudaGetDeviceCount(&m_cudaDevCount)); + KOKKOS_IMPL_CUDA_SAFE_CALL(cudaGetDeviceCount(&m_cudaDevCount)); if (m_cudaDevCount > MAXIMUM_DEVICE_COUNT) { Kokkos::abort( @@ -229,7 +258,7 @@ CudaInternalDevices::CudaInternalDevices() { "have. Please report this to github.com/kokkos/kokkos."); } for (int i = 0; i < m_cudaDevCount; ++i) { - CUDA_SAFE_CALL(cudaGetDeviceProperties(m_cudaProp + i, i)); + KOKKOS_IMPL_CUDA_SAFE_CALL(cudaGetDeviceProperties(m_cudaProp + i, i)); } } @@ -277,25 +306,27 @@ CudaInternal::~CudaInternal() { << std::endl; } - m_cudaDev = -1; - m_cudaArch = -1; - m_multiProcCount = 0; - m_maxWarpCount = 0; - m_maxBlock = 0; - m_maxSharedWords = 0; - m_maxConcurrency = 0; - m_scratchSpaceCount = 0; - m_scratchFlagsCount = 0; - m_scratchUnifiedCount = 0; - m_scratchUnifiedSupported = 0; - m_streamCount = 0; - m_scratchSpace = nullptr; - m_scratchFlags = nullptr; - m_scratchUnified = nullptr; - m_scratchConcurrentBitset = nullptr; - m_stream = nullptr; - m_team_scratch_current_size = 0; - m_team_scratch_ptr = nullptr; + m_cudaDev = -1; + m_cudaArch = -1; + m_multiProcCount = 0; + m_maxWarpCount = 0; + m_maxBlock = 0; + m_maxSharedWords = 0; + m_maxConcurrency = 0; + m_scratchSpaceCount = 0; + m_scratchFlagsCount = 0; + m_scratchUnifiedCount = 0; + m_scratchUnifiedSupported = 0; + m_streamCount = 0; + m_scratchSpace = nullptr; + m_scratchFlags = nullptr; + m_scratchUnified = nullptr; + m_scratchConcurrentBitset = nullptr; + m_stream = nullptr; + for (int i = 0; i < m_n_team_scratch; ++i) { + m_team_scratch_current_size[i] = 0; + m_team_scratch_ptr[i] = nullptr; + } } int CudaInternal::verify_is_initialized(const char *const label) const { @@ -305,16 +336,20 @@ int CudaInternal::verify_is_initialized(const char *const label) const { } return 0 <= m_cudaDev; } - +uint32_t CudaInternal::impl_get_instance_id() const { return m_instance_id; } CudaInternal &CudaInternal::singleton() { static CudaInternal self; return self; } +void CudaInternal::fence(const std::string &name) const { + Impl::cuda_stream_synchronize(m_stream, this, name); +} void CudaInternal::fence() const { - CUDA_SAFE_CALL(cudaStreamSynchronize(m_stream)); + fence("Kokkos::CudaInternal::fence(): Unnamed Instance Fence"); } -void CudaInternal::initialize(int cuda_device_id, cudaStream_t stream) { +void CudaInternal::initialize(int cuda_device_id, cudaStream_t stream, + bool manage_stream) { if (was_finalized) Kokkos::abort("Calling Cuda::initialize after Cuda::finalize is illegal\n"); was_initialized = true; @@ -350,8 +385,9 @@ void CudaInternal::initialize(int cuda_device_id, cudaStream_t stream) { m_cudaDev = cuda_device_id; m_deviceProp = cudaProp; - CUDA_SAFE_CALL(cudaSetDevice(m_cudaDev)); - Kokkos::Impl::cuda_device_synchronize(); + KOKKOS_IMPL_CUDA_SAFE_CALL(cudaSetDevice(m_cudaDev)); + Kokkos::Impl::cuda_device_synchronize( + "Kokkos::CudaInternal::initialize: Fence on space initialization"); // Query what compute capability architecture a kernel executes: m_cudaArch = cuda_kernel_arch(); @@ -464,8 +500,8 @@ void CudaInternal::initialize(int cuda_device_id, cudaStream_t stream) { m_scratchConcurrentBitset = reinterpret_cast(r->data()); - CUDA_SAFE_CALL(cudaMemset(m_scratchConcurrentBitset, 0, - sizeof(uint32_t) * buffer_bound)); + KOKKOS_IMPL_CUDA_SAFE_CALL(cudaMemset(m_scratchConcurrentBitset, 0, + sizeof(uint32_t) * buffer_bound)); } //---------------------------------- @@ -535,15 +571,19 @@ Kokkos::Cuda::initialize WARNING: Cuda is allocating into UVMSpace by default // Allocate a staging buffer for constant mem in pinned host memory // and an event to avoid overwriting driver for previous kernel launches if (stream == nullptr) { - CUDA_SAFE_CALL(cudaMallocHost((void **)&constantMemHostStaging, - CudaTraits::ConstantMemoryUsage)); + KOKKOS_IMPL_CUDA_SAFE_CALL( + cudaMallocHost(reinterpret_cast(&constantMemHostStaging), + CudaTraits::ConstantMemoryUsage)); - CUDA_SAFE_CALL(cudaEventCreate(&constantMemReusable)); + KOKKOS_IMPL_CUDA_SAFE_CALL(cudaEventCreate(&constantMemReusable)); } - m_stream = stream; - m_team_scratch_current_size = 0; - m_team_scratch_ptr = nullptr; + m_stream = stream; + m_manage_stream = manage_stream; + for (int i = 0; i < m_n_team_scratch; ++i) { + m_team_scratch_current_size[i] = 0; + m_team_scratch_ptr[i] = nullptr; + } } //---------------------------------------------------------------------------- @@ -569,7 +609,7 @@ Cuda::size_type *CudaInternal::scratch_flags(const Cuda::size_type size) const { m_scratchFlags = reinterpret_cast(r->data()); - CUDA_SAFE_CALL( + KOKKOS_IMPL_CUDA_SAFE_CALL( cudaMemset(m_scratchFlags, 0, m_scratchFlagsCount * sizeScratchGrain)); } @@ -645,20 +685,37 @@ Cuda::size_type *CudaInternal::scratch_functor( return m_scratchFunctor; } -void *CudaInternal::resize_team_scratch_space(std::int64_t bytes, - bool force_shrink) { - if (m_team_scratch_current_size == 0) { - m_team_scratch_current_size = bytes; - m_team_scratch_ptr = Kokkos::kokkos_malloc( - "Kokkos::CudaSpace::TeamScratchMemory", m_team_scratch_current_size); +std::pair CudaInternal::resize_team_scratch_space( + std::int64_t bytes, bool force_shrink) { + // Multiple ParallelFor/Reduce Teams can call this function at the same time + // and invalidate the m_team_scratch_ptr. We use a pool to avoid any race + // condition. + + int current_team_scratch = 0; + int zero = 0; + int one = 1; + while (m_team_scratch_pool[current_team_scratch].compare_exchange_weak( + zero, one, std::memory_order_release, std::memory_order_relaxed)) { + current_team_scratch = (current_team_scratch + 1) % m_n_team_scratch; } - if ((bytes > m_team_scratch_current_size) || - ((bytes < m_team_scratch_current_size) && (force_shrink))) { - m_team_scratch_current_size = bytes; - m_team_scratch_ptr = Kokkos::kokkos_realloc( - m_team_scratch_ptr, m_team_scratch_current_size); + if (m_team_scratch_current_size[current_team_scratch] == 0) { + m_team_scratch_current_size[current_team_scratch] = bytes; + m_team_scratch_ptr[current_team_scratch] = + Kokkos::kokkos_malloc( + "Kokkos::CudaSpace::TeamScratchMemory", + m_team_scratch_current_size[current_team_scratch]); } - return m_team_scratch_ptr; + if ((bytes > m_team_scratch_current_size[current_team_scratch]) || + ((bytes < m_team_scratch_current_size[current_team_scratch]) && + (force_shrink))) { + m_team_scratch_current_size[current_team_scratch] = bytes; + m_team_scratch_ptr[current_team_scratch] = + Kokkos::kokkos_realloc( + m_team_scratch_ptr[current_team_scratch], + m_team_scratch_current_size[current_team_scratch]); + } + return std::make_pair(m_team_scratch_ptr[current_team_scratch], + current_team_scratch); } //---------------------------------------------------------------------------- @@ -685,36 +742,43 @@ void CudaInternal::finalize() { if (m_scratchFunctorSize > 0) RecordCuda::decrement(RecordCuda::get_record(m_scratchFunctor)); - if (m_team_scratch_current_size > 0) - Kokkos::kokkos_free(m_team_scratch_ptr); + for (int i = 0; i < m_n_team_scratch; ++i) { + if (m_team_scratch_current_size[i] > 0) + Kokkos::kokkos_free(m_team_scratch_ptr[i]); + } - m_cudaDev = -1; - m_multiProcCount = 0; - m_maxWarpCount = 0; - m_maxBlock = 0; - m_maxSharedWords = 0; - m_scratchSpaceCount = 0; - m_scratchFlagsCount = 0; - m_scratchUnifiedCount = 0; - m_streamCount = 0; - m_scratchSpace = nullptr; - m_scratchFlags = nullptr; - m_scratchUnified = nullptr; - m_scratchConcurrentBitset = nullptr; - m_stream = nullptr; - m_team_scratch_current_size = 0; - m_team_scratch_ptr = nullptr; + if (m_manage_stream && m_stream != nullptr) + KOKKOS_IMPL_CUDA_SAFE_CALL(cudaStreamDestroy(m_stream)); + + m_cudaDev = -1; + m_multiProcCount = 0; + m_maxWarpCount = 0; + m_maxBlock = 0; + m_maxSharedWords = 0; + m_scratchSpaceCount = 0; + m_scratchFlagsCount = 0; + m_scratchUnifiedCount = 0; + m_streamCount = 0; + m_scratchSpace = nullptr; + m_scratchFlags = nullptr; + m_scratchUnified = nullptr; + m_scratchConcurrentBitset = nullptr; + m_stream = nullptr; + for (int i = 0; i < m_n_team_scratch; ++i) { + m_team_scratch_current_size[i] = 0; + m_team_scratch_ptr[i] = nullptr; + } } // only destroy these if we're finalizing the singleton if (this == &singleton()) { - cudaFreeHost(constantMemHostStaging); - cudaEventDestroy(constantMemReusable); + KOKKOS_IMPL_CUDA_SAFE_CALL(cudaFreeHost(constantMemHostStaging)); + KOKKOS_IMPL_CUDA_SAFE_CALL(cudaEventDestroy(constantMemReusable)); auto &deep_copy_space = Kokkos::Impl::cuda_get_deep_copy_space(/*initialize*/ false); if (deep_copy_space) deep_copy_space->impl_internal_space_instance()->finalize(); - cudaStreamDestroy(cuda_get_deep_copy_stream()); + KOKKOS_IMPL_CUDA_SAFE_CALL(cudaStreamDestroy(cuda_get_deep_copy_stream())); } } @@ -823,7 +887,7 @@ Cuda::Cuda() "Cuda instance constructor"); } -Cuda::Cuda(cudaStream_t stream) +Cuda::Cuda(cudaStream_t stream, bool manage_stream) : m_space_instance(new Impl::CudaInternal, [](Impl::CudaInternal *ptr) { ptr->finalize(); delete ptr; @@ -831,18 +895,31 @@ Cuda::Cuda(cudaStream_t stream) Impl::CudaInternal::singleton().verify_is_initialized( "Cuda instance constructor"); m_space_instance->initialize(Impl::CudaInternal::singleton().m_cudaDev, - stream); + stream, manage_stream); } void Cuda::print_configuration(std::ostream &s, const bool) { Impl::CudaInternal::singleton().print_configuration(s); } -void Cuda::impl_static_fence() { Kokkos::Impl::cuda_device_synchronize(); } +void Cuda::impl_static_fence(const std::string &name) { + Kokkos::Impl::cuda_device_synchronize(name); +} +void Cuda::impl_static_fence() { + impl_static_fence("Kokkos::Cuda::impl_static_fence(): Unnamed Static Fence"); +} -void Cuda::fence() const { m_space_instance->fence(); } +void Cuda::fence() const { + fence("Kokkos::Cuda::fence(): Unnamed Instance Fence"); +} +void Cuda::fence(const std::string &name) const { + m_space_instance->fence(name); +} const char *Cuda::name() { return "Cuda"; } +uint32_t Cuda::impl_instance_id() const noexcept { + return m_space_instance->impl_get_instance_id(); +} cudaStream_t Cuda::cuda_stream() const { return m_space_instance->m_stream; } int Cuda::cuda_device() const { return m_space_instance->m_cudaDev; } @@ -877,7 +954,15 @@ void CudaSpaceInitializer::finalize(bool all_spaces) { } } -void CudaSpaceInitializer::fence() { Kokkos::Cuda::impl_static_fence(); } +void CudaSpaceInitializer::fence() { + Kokkos::Cuda::impl_static_fence( + "Kokkos::CudaSpaceInitializer::fence: Initializer Fence"); +} +void CudaSpaceInitializer::fence(const std::string &name) { + // Kokkos::Cuda::impl_static_fence("Kokkos::CudaSpaceInitializer::fence: + // "+name); //TODO: or this + Kokkos::Cuda::impl_static_fence(name); +} void CudaSpaceInitializer::print_configuration(std::ostream &msg, const bool detail) { @@ -916,12 +1001,6 @@ void CudaSpaceInitializer::print_configuration(std::ostream &msg, msg << "yes\n"; #else msg << "no\n"; -#endif - msg << " KOKKOS_ENABLE_CUSPARSE: "; -#ifdef KOKKOS_ENABLE_CUSPARSE - msg << "yes\n"; -#else - msg << "no\n"; #endif msg << " KOKKOS_ENABLE_CXX11_DISPATCH_LAMBDA: "; #ifdef KOKKOS_ENABLE_CXX11_DISPATCH_LAMBDA diff --git a/lib/kokkos/core/src/Cuda/Kokkos_Cuda_Instance.hpp b/lib/kokkos/core/src/Cuda/Kokkos_Cuda_Instance.hpp index aaec2c2926..7eb169838c 100644 --- a/lib/kokkos/core/src/Cuda/Kokkos_Cuda_Instance.hpp +++ b/lib/kokkos/core/src/Cuda/Kokkos_Cuda_Instance.hpp @@ -3,6 +3,9 @@ #include #include +#include +#include + //---------------------------------------------------------------------------- //---------------------------------------------------------------------------- // These functions fulfill the purpose of allowing to work around @@ -114,10 +117,14 @@ class CudaInternal { mutable size_type* m_scratchFunctor; uint32_t* m_scratchConcurrentBitset; cudaStream_t m_stream; + uint32_t m_instance_id; + bool m_manage_stream; // Team Scratch Level 1 Space - mutable int64_t m_team_scratch_current_size; - mutable void* m_team_scratch_ptr; + int m_n_team_scratch = 10; + mutable int64_t m_team_scratch_current_size[10]; + mutable void* m_team_scratch_ptr[10]; + mutable std::atomic_int m_team_scratch_pool[10]; bool was_initialized = false; bool was_finalized = false; @@ -135,7 +142,8 @@ class CudaInternal { return nullptr != m_scratchSpace && nullptr != m_scratchFlags; } - void initialize(int cuda_device_id, cudaStream_t stream = nullptr); + void initialize(int cuda_device_id, cudaStream_t stream = nullptr, + bool manage_stream = false); void finalize(); void print_configuration(std::ostream&) const; @@ -145,6 +153,7 @@ class CudaInternal { static void cuda_set_serial_execution(bool); #endif + void fence(const std::string&) const; void fence() const; ~CudaInternal(); @@ -175,20 +184,68 @@ class CudaInternal { m_scratchFunctor(nullptr), m_scratchConcurrentBitset(nullptr), m_stream(nullptr), - m_team_scratch_current_size(0), - m_team_scratch_ptr(nullptr) {} + m_instance_id( + Kokkos::Tools::Experimental::Impl::idForInstance( + reinterpret_cast(this))) { + for (int i = 0; i < m_n_team_scratch; ++i) { + m_team_scratch_current_size[i] = 0; + m_team_scratch_ptr[i] = nullptr; + m_team_scratch_pool[i] = 0; + } + } // Resizing of reduction related scratch spaces size_type* scratch_space(const size_type size) const; size_type* scratch_flags(const size_type size) const; size_type* scratch_unified(const size_type size) const; size_type* scratch_functor(const size_type size) const; - + uint32_t impl_get_instance_id() const; // Resizing of team level 1 scratch - void* resize_team_scratch_space(std::int64_t bytes, - bool force_shrink = false); + std::pair resize_team_scratch_space(std::int64_t bytes, + bool force_shrink = false); }; } // Namespace Impl + +namespace Experimental { +// Partitioning an Execution Space: expects space and integer arguments for +// relative weight +// Customization point for backends +// Default behavior is to return the passed in instance + +namespace Impl { +inline void create_Cuda_instances(std::vector& instances) { + for (int s = 0; s < int(instances.size()); s++) { + cudaStream_t stream; + KOKKOS_IMPL_CUDA_SAFE_CALL(cudaStreamCreate(&stream)); + instances[s] = Cuda(stream, true); + } +} +} // namespace Impl + +template +std::vector partition_space(const Cuda&, Args...) { +#ifdef __cpp_fold_expressions + static_assert( + (... && std::is_arithmetic_v), + "Kokkos Error: partitioning arguments must be integers or floats"); +#endif + std::vector instances(sizeof...(Args)); + Impl::create_Cuda_instances(instances); + return instances; +} + +template +std::vector partition_space(const Cuda&, std::vector& weights) { + static_assert( + std::is_arithmetic::value, + "Kokkos Error: partitioning arguments must be integers or floats"); + + std::vector instances(weights.size()); + Impl::create_Cuda_instances(instances); + return instances; +} +} // namespace Experimental + } // Namespace Kokkos #endif diff --git a/lib/kokkos/core/src/Cuda/Kokkos_Cuda_KernelLaunch.hpp b/lib/kokkos/core/src/Cuda/Kokkos_Cuda_KernelLaunch.hpp index d892a893b3..4b01798f5e 100644 --- a/lib/kokkos/core/src/Cuda/Kokkos_Cuda_KernelLaunch.hpp +++ b/lib/kokkos/core/src/Cuda/Kokkos_Cuda_KernelLaunch.hpp @@ -167,7 +167,7 @@ inline void configure_shmem_preference(KernelFuncPtr const& func, #ifndef KOKKOS_ARCH_KEPLER // On Kepler the L1 has no benefit since it doesn't cache reads auto set_cache_config = [&] { - CUDA_SAFE_CALL(cudaFuncSetCacheConfig( + KOKKOS_IMPL_CUDA_SAFE_CALL(cudaFuncSetCacheConfig( func, (prefer_shmem ? cudaFuncCachePreferShared : cudaFuncCachePreferL1))); return prefer_shmem; @@ -372,14 +372,15 @@ struct CudaParallelLaunchKernelInvoker< params.kernelParams = (void**)args; params.extra = nullptr; - CUDA_SAFE_CALL(cudaGraphAddKernelNode( + KOKKOS_IMPL_CUDA_SAFE_CALL(cudaGraphAddKernelNode( &graph_node, graph, /* dependencies = */ nullptr, /* numDependencies = */ 0, ¶ms)); } else { // We still need an empty node for the dependency structure - CUDA_SAFE_CALL(cudaGraphAddEmptyNode(&graph_node, graph, - /* dependencies = */ nullptr, - /* numDependencies = */ 0)); + KOKKOS_IMPL_CUDA_SAFE_CALL( + cudaGraphAddEmptyNode(&graph_node, graph, + /* dependencies = */ nullptr, + /* numDependencies = */ 0)); } KOKKOS_ENSURES(bool(graph_node)) } @@ -475,14 +476,15 @@ struct CudaParallelLaunchKernelInvoker< params.kernelParams = (void**)args; params.extra = nullptr; - CUDA_SAFE_CALL(cudaGraphAddKernelNode( + KOKKOS_IMPL_CUDA_SAFE_CALL(cudaGraphAddKernelNode( &graph_node, graph, /* dependencies = */ nullptr, /* numDependencies = */ 0, ¶ms)); } else { // We still need an empty node for the dependency structure - CUDA_SAFE_CALL(cudaGraphAddEmptyNode(&graph_node, graph, - /* dependencies = */ nullptr, - /* numDependencies = */ 0)); + KOKKOS_IMPL_CUDA_SAFE_CALL( + cudaGraphAddEmptyNode(&graph_node, graph, + /* dependencies = */ nullptr, + /* numDependencies = */ 0)); } KOKKOS_ENSURES(bool(graph_node)) } @@ -538,7 +540,8 @@ struct CudaParallelLaunchKernelInvoker< dim3 const& block, int shmem, CudaInternal const* cuda_instance) { // Wait until the previous kernel that uses the constant buffer is done - CUDA_SAFE_CALL(cudaEventSynchronize(cuda_instance->constantMemReusable)); + KOKKOS_IMPL_CUDA_SAFE_CALL( + cudaEventSynchronize(cuda_instance->constantMemReusable)); // Copy functor (synchronously) to staging buffer in pinned host memory unsigned long* staging = cuda_instance->constantMemHostStaging; @@ -554,8 +557,9 @@ struct CudaParallelLaunchKernelInvoker< get_kernel_func())<<m_stream>>>(); // Record an event that says when the constant buffer can be reused - CUDA_SAFE_CALL(cudaEventRecord(cuda_instance->constantMemReusable, - cudaStream_t(cuda_instance->m_stream))); + KOKKOS_IMPL_CUDA_SAFE_CALL( + cudaEventRecord(cuda_instance->constantMemReusable, + cudaStream_t(cuda_instance->m_stream))); } #ifdef KOKKOS_CUDA_ENABLE_GRAPHS @@ -637,8 +641,9 @@ struct CudaParallelLaunchImpl< base_t::invoke_kernel(driver, grid, block, shmem, cuda_instance); #if defined(KOKKOS_ENABLE_DEBUG_BOUNDS_CHECK) - CUDA_SAFE_CALL(cudaGetLastError()); - cuda_instance->fence(); + KOKKOS_IMPL_CUDA_SAFE_CALL(cudaGetLastError()); + cuda_instance->fence( + "Kokkos::Impl::launch_kernel: Debug Only Check for Execution Error"); #endif } } @@ -650,7 +655,7 @@ struct CudaParallelLaunchImpl< // the code and the result is visible. auto wrap_get_attributes = []() -> cudaFuncAttributes { cudaFuncAttributes attr_tmp; - CUDA_SAFE_CALL( + KOKKOS_IMPL_CUDA_SAFE_CALL( cudaFuncGetAttributes(&attr_tmp, base_t::get_kernel_func())); return attr_tmp; }; diff --git a/lib/kokkos/core/src/Cuda/Kokkos_Cuda_Locks.cpp b/lib/kokkos/core/src/Cuda/Kokkos_Cuda_Locks.cpp index ff31649544..1f3024f318 100644 --- a/lib/kokkos/core/src/Cuda/Kokkos_Cuda_Locks.cpp +++ b/lib/kokkos/core/src/Cuda/Kokkos_Cuda_Locks.cpp @@ -81,22 +81,34 @@ namespace Impl { CudaLockArrays g_host_cuda_lock_arrays = {nullptr, nullptr, 0}; void initialize_host_cuda_lock_arrays() { +#ifdef KOKKOS_ENABLE_IMPL_DESUL_ATOMICS + desul::Impl::init_lock_arrays(); + + DESUL_ENSURE_CUDA_LOCK_ARRAYS_ON_DEVICE(); +#endif if (g_host_cuda_lock_arrays.atomic != nullptr) return; - CUDA_SAFE_CALL(cudaMalloc(&g_host_cuda_lock_arrays.atomic, - sizeof(int) * (CUDA_SPACE_ATOMIC_MASK + 1))); - CUDA_SAFE_CALL(cudaMalloc(&g_host_cuda_lock_arrays.scratch, - sizeof(int) * (Cuda::concurrency()))); - CUDA_SAFE_CALL(cudaDeviceSynchronize()); + KOKKOS_IMPL_CUDA_SAFE_CALL( + cudaMalloc(&g_host_cuda_lock_arrays.atomic, + sizeof(int) * (CUDA_SPACE_ATOMIC_MASK + 1))); + KOKKOS_IMPL_CUDA_SAFE_CALL(cudaMalloc(&g_host_cuda_lock_arrays.scratch, + sizeof(int) * (Cuda::concurrency()))); + Impl::cuda_device_synchronize( + "Kokkos::Impl::initialize_host_cuda_lock_arrays: Pre Init Lock Arrays"); g_host_cuda_lock_arrays.n = Cuda::concurrency(); KOKKOS_COPY_CUDA_LOCK_ARRAYS_TO_DEVICE(); init_lock_array_kernel_atomic<<<(CUDA_SPACE_ATOMIC_MASK + 1 + 255) / 256, 256>>>(); init_lock_array_kernel_threadid<<<(Kokkos::Cuda::concurrency() + 255) / 256, 256>>>(Kokkos::Cuda::concurrency()); - CUDA_SAFE_CALL(cudaDeviceSynchronize()); + Impl::cuda_device_synchronize( + "Kokkos::Impl::initialize_host_cuda_lock_arrays: Post Init Lock Arrays"); } void finalize_host_cuda_lock_arrays() { +#ifdef KOKKOS_ENABLE_IMPL_DESUL_ATOMICS + desul::Impl::finalize_lock_arrays(); +#endif + if (g_host_cuda_lock_arrays.atomic == nullptr) return; cudaFree(g_host_cuda_lock_arrays.atomic); g_host_cuda_lock_arrays.atomic = nullptr; diff --git a/lib/kokkos/core/src/Cuda/Kokkos_Cuda_Locks.hpp b/lib/kokkos/core/src/Cuda/Kokkos_Cuda_Locks.hpp index 7640b8084d..04fb7cb345 100644 --- a/lib/kokkos/core/src/Cuda/Kokkos_Cuda_Locks.hpp +++ b/lib/kokkos/core/src/Cuda/Kokkos_Cuda_Locks.hpp @@ -53,6 +53,10 @@ #include +#ifdef KOKKOS_ENABLE_IMPL_DESUL_ATOMICS +#include +#endif + namespace Kokkos { namespace Impl { @@ -150,13 +154,14 @@ inline int eliminate_warning_for_lock_array() { return lock_array_copied; } } // namespace } // namespace Impl } // namespace Kokkos + /* Dan Ibanez: it is critical that this code be a macro, so that it will capture the right address for Kokkos::Impl::g_device_cuda_lock_arrays! putting this in an inline function will NOT do the right thing! */ #define KOKKOS_COPY_CUDA_LOCK_ARRAYS_TO_DEVICE() \ { \ if (::Kokkos::Impl::lock_array_copied == 0) { \ - CUDA_SAFE_CALL( \ + KOKKOS_IMPL_CUDA_SAFE_CALL( \ cudaMemcpyToSymbol(Kokkos::Impl::g_device_cuda_lock_arrays, \ &Kokkos::Impl::g_host_cuda_lock_arrays, \ sizeof(Kokkos::Impl::CudaLockArrays))); \ @@ -164,6 +169,8 @@ inline int eliminate_warning_for_lock_array() { return lock_array_copied; } lock_array_copied = 1; \ } +#ifndef KOKKOS_ENABLE_IMPL_DESUL_ATOMICS + #ifdef KOKKOS_ENABLE_CUDA_RELOCATABLE_DEVICE_CODE #define KOKKOS_ENSURE_CUDA_LOCK_ARRAYS_ON_DEVICE() #else @@ -171,6 +178,19 @@ inline int eliminate_warning_for_lock_array() { return lock_array_copied; } KOKKOS_COPY_CUDA_LOCK_ARRAYS_TO_DEVICE() #endif +#else + +#ifdef KOKKOS_ENABLE_CUDA_RELOCATABLE_DEVICE_CODE +#define KOKKOS_ENSURE_CUDA_LOCK_ARRAYS_ON_DEVICE() +#else +// Still Need COPY_CUDA_LOCK_ARRAYS for team scratch etc. +#define KOKKOS_ENSURE_CUDA_LOCK_ARRAYS_ON_DEVICE() \ + KOKKOS_COPY_CUDA_LOCK_ARRAYS_TO_DEVICE() \ + DESUL_ENSURE_CUDA_LOCK_ARRAYS_ON_DEVICE() +#endif + +#endif /* defined( KOKKOS_ENABLE_IMPL_DESUL_ATOMICS ) */ + #endif /* defined( KOKKOS_ENABLE_CUDA ) */ #endif /* #ifndef KOKKOS_CUDA_LOCKS_HPP */ diff --git a/lib/kokkos/core/src/Cuda/Kokkos_Cuda_Parallel.hpp b/lib/kokkos/core/src/Cuda/Kokkos_Cuda_Parallel.hpp index 2834e6f3de..f83b43e608 100644 --- a/lib/kokkos/core/src/Cuda/Kokkos_Cuda_Parallel.hpp +++ b/lib/kokkos/core/src/Cuda/Kokkos_Cuda_Parallel.hpp @@ -62,7 +62,6 @@ #include #include #include -#include #include #include @@ -240,9 +239,11 @@ class TeamPolicyInternal //---------------------------------------- +#ifdef KOKKOS_ENABLE_DEPRECATED_CODE_3 KOKKOS_DEPRECATED inline int vector_length() const { return impl_vector_length(); } +#endif inline int impl_vector_length() const { return m_vector_length; } inline int team_size() const { return m_team_size; } inline int league_size() const { return m_league_size; } @@ -687,6 +688,7 @@ class ParallelFor, int m_shmem_size; void* m_scratch_ptr[2]; int m_scratch_size[2]; + int m_scratch_pool_id = -1; template __device__ inline @@ -797,15 +799,19 @@ class ParallelFor, // Functor's reduce memory, team scan memory, and team shared memory depend // upon team size. m_scratch_ptr[0] = nullptr; - m_scratch_ptr[1] = - m_team_size <= 0 - ? nullptr - : m_policy.space() - .impl_internal_space_instance() - ->resize_team_scratch_space( - static_cast(m_scratch_size[1]) * - static_cast(Cuda::concurrency() / - (m_team_size * m_vector_size))); + if (m_team_size <= 0) { + m_scratch_ptr[1] = nullptr; + } else { + auto scratch_ptr_id = + m_policy.space() + .impl_internal_space_instance() + ->resize_team_scratch_space( + static_cast(m_scratch_size[1]) * + (static_cast(Cuda::concurrency() / + (m_team_size * m_vector_size)))); + m_scratch_ptr[1] = scratch_ptr_id.first; + m_scratch_pool_id = scratch_ptr_id.second; + } const int shmem_size_total = m_shmem_begin + m_shmem_size; if (m_policy.space().impl_internal_space_instance()->m_maxShmemPerBlock < @@ -829,6 +835,14 @@ class ParallelFor, "Kokkos::Impl::ParallelFor< Cuda > requested too large team size.")); } } + + ~ParallelFor() { + if (m_scratch_pool_id >= 0) { + m_policy.space() + .impl_internal_space_instance() + ->m_team_scratch_pool[m_scratch_pool_id] = 0; + } + } }; } // namespace Impl @@ -870,9 +884,24 @@ class ParallelReduce, ReducerType, using value_type = typename ValueTraits::value_type; using reference_type = typename ValueTraits::reference_type; using functor_type = FunctorType; - using size_type = Kokkos::Cuda::size_type; - using index_type = typename Policy::index_type; - using reducer_type = ReducerType; + // Conditionally set word_size_type to int16_t or int8_t if value_type is + // smaller than int32_t (Kokkos::Cuda::size_type) + // word_size_type is used to determine the word count, shared memory buffer + // size, and global memory buffer size before the reduction is performed. + // Within the reduction, the word count is recomputed based on word_size_type + // and when calculating indexes into the shared/global memory buffers for + // performing the reduction, word_size_type is used again. + // For scalars > 4 bytes in size, indexing into shared/global memory relies + // on the block and grid dimensions to ensure that we index at the correct + // offset rather than at every 4 byte word; such that, when the join is + // performed, we have the correct data that was copied over in chunks of 4 + // bytes. + using word_size_type = typename std::conditional< + sizeof(value_type) < sizeof(Kokkos::Cuda::size_type), + typename std::conditional::type, + Kokkos::Cuda::size_type>::type; + using index_type = typename Policy::index_type; + using reducer_type = ReducerType; // Algorithmic constraints: blockSize is a power of two AND blockDim.y == // blockDim.z == 1 @@ -883,9 +912,11 @@ class ParallelReduce, ReducerType, const pointer_type m_result_ptr; const bool m_result_ptr_device_accessible; const bool m_result_ptr_host_accessible; - size_type* m_scratch_space; - size_type* m_scratch_flags; - size_type* m_unified_space; + word_size_type* m_scratch_space; + // m_scratch_flags must be of type Cuda::size_type due to use of atomics + // for tracking metadata in Kokkos_Cuda_ReduceScan.hpp + Cuda::size_type* m_scratch_flags; + word_size_type* m_unified_space; // Shall we use the shfl based reduction or not (only use it for static sized // types of more than 128bit) @@ -924,16 +955,16 @@ class ParallelReduce, ReducerType, __device__ inline void run(const DummySHMEMReductionType& ) const {*/ - const integral_nonzero_constant + const integral_nonzero_constant< + word_size_type, ValueTraits::StaticValueSize / sizeof(word_size_type)> word_count(ValueTraits::value_size( ReducerConditional::select(m_functor, m_reducer)) / - sizeof(size_type)); + sizeof(word_size_type)); { reference_type value = ValueInit::init(ReducerConditional::select(m_functor, m_reducer), - kokkos_impl_cuda_shared_memory() + + kokkos_impl_cuda_shared_memory() + threadIdx.y * word_count.value); // Number of blocks is bounded so that the reduction can be limited to two @@ -958,11 +989,12 @@ class ParallelReduce, ReducerType, // This is the final block with the final result at the final threads' // location - size_type* const shared = kokkos_impl_cuda_shared_memory() + - (blockDim.y - 1) * word_count.value; - size_type* const global = + word_size_type* const shared = + kokkos_impl_cuda_shared_memory() + + (blockDim.y - 1) * word_count.value; + word_size_type* const global = m_result_ptr_device_accessible - ? reinterpret_cast(m_result_ptr) + ? reinterpret_cast(m_result_ptr) : (m_unified_space ? m_unified_space : m_scratch_space); if (threadIdx.y == 0) { @@ -985,17 +1017,17 @@ class ParallelReduce, ReducerType, if (cuda_single_inter_block_reduce_scan( ReducerConditional::select(m_functor, m_reducer), blockIdx.x, - gridDim.x, kokkos_impl_cuda_shared_memory(), + gridDim.x, kokkos_impl_cuda_shared_memory(), m_scratch_space, m_scratch_flags)) { // This is the final block with the final result at the final threads' // location - size_type* const shared = - kokkos_impl_cuda_shared_memory() + + word_size_type* const shared = + kokkos_impl_cuda_shared_memory() + (blockDim.y - 1) * word_count.value; - size_type* const global = + word_size_type* const global = m_result_ptr_device_accessible - ? reinterpret_cast(m_result_ptr) + ? reinterpret_cast(m_result_ptr) : (m_unified_space ? m_unified_space : m_scratch_space); if (threadIdx.y == 0) { @@ -1100,15 +1132,21 @@ class ParallelReduce, ReducerType, KOKKOS_ASSERT(block_size > 0); - m_scratch_space = cuda_internal_scratch_space( + // TODO: down casting these uses more space than required? + m_scratch_space = (word_size_type*)cuda_internal_scratch_space( m_policy.space(), ValueTraits::value_size(ReducerConditional::select( m_functor, m_reducer)) * block_size /* block_size == max block_count */); - m_scratch_flags = - cuda_internal_scratch_flags(m_policy.space(), sizeof(size_type)); - m_unified_space = cuda_internal_scratch_unified( - m_policy.space(), ValueTraits::value_size(ReducerConditional::select( - m_functor, m_reducer))); + + // Intentionally do not downcast to word_size_type since we use Cuda + // atomics in Kokkos_Cuda_ReduceScan.hpp + m_scratch_flags = cuda_internal_scratch_flags(m_policy.space(), + sizeof(Cuda::size_type)); + m_unified_space = + reinterpret_cast(cuda_internal_scratch_unified( + m_policy.space(), + ValueTraits::value_size( + ReducerConditional::select(m_functor, m_reducer)))); // REQUIRED ( 1 , N , 1 ) dim3 block(1, block_size, 1); @@ -1139,7 +1177,9 @@ class ParallelReduce, ReducerType, false); // copy to device and execute if (!m_result_ptr_device_accessible) { - m_policy.space().fence(); + m_policy.space().fence( + "Kokkos::Impl::ParallelReduce::execute: Result " + "Not Device Accessible"); if (m_result_ptr) { if (m_unified_space) { @@ -1459,7 +1499,9 @@ class ParallelReduce, ReducerType, false); // copy to device and execute if (!m_result_ptr_device_accessible) { - m_policy.space().fence(); + m_policy.space().fence( + "Kokkos::Impl::ParallelReduce::execute: " + "Result Not Device Accessible"); if (m_result_ptr) { if (m_unified_space) { @@ -1580,6 +1622,7 @@ class ParallelReduce, size_type m_shmem_size; void* m_scratch_ptr[2]; int m_scratch_size[2]; + int m_scratch_pool_id = -1; const size_type m_league_size; int m_team_size; const size_type m_vector_size; @@ -1821,7 +1864,9 @@ class ParallelReduce, true); // copy to device and execute if (!m_result_ptr_device_accessible) { - m_policy.space().fence(); + m_policy.space().fence( + "Kokkos::Impl::ParallelReduce::execute: Result " + "Not Device Accessible"); if (m_result_ptr) { if (m_unified_space) { @@ -1895,16 +1940,19 @@ class ParallelReduce, FunctorTeamShmemSize::value(arg_functor, m_team_size); m_scratch_size[0] = m_shmem_size; m_scratch_size[1] = m_policy.scratch_size(1, m_team_size); - m_scratch_ptr[1] = - m_team_size <= 0 - ? nullptr - : m_policy.space() - .impl_internal_space_instance() - ->resize_team_scratch_space( - static_cast(m_scratch_size[1]) * - (static_cast( - Cuda::concurrency() / - (m_team_size * m_vector_size)))); + if (m_team_size <= 0) { + m_scratch_ptr[1] = nullptr; + } else { + auto scratch_ptr_id = + m_policy.space() + .impl_internal_space_instance() + ->resize_team_scratch_space( + static_cast(m_scratch_size[1]) * + (static_cast(Cuda::concurrency() / + (m_team_size * m_vector_size)))); + m_scratch_ptr[1] = scratch_ptr_id.first; + m_scratch_pool_id = scratch_ptr_id.second; + } // The global parallel_reduce does not support vector_length other than 1 at // the moment @@ -1973,6 +2021,8 @@ class ParallelReduce, cudaFuncAttributes attr = CudaParallelLaunch::get_cuda_func_attributes(); + + // Valid team size not provided, deduce team size m_team_size = m_team_size >= 0 ? m_team_size @@ -1994,15 +2044,19 @@ class ParallelReduce, FunctorTeamShmemSize::value(arg_functor, m_team_size); m_scratch_size[0] = m_shmem_size; m_scratch_size[1] = m_policy.scratch_size(1, m_team_size); - m_scratch_ptr[1] = - m_team_size <= 0 - ? nullptr - : m_policy.space() - .impl_internal_space_instance() - ->resize_team_scratch_space( - static_cast(m_scratch_size[1]) * - static_cast(Cuda::concurrency() / - (m_team_size * m_vector_size))); + if (m_team_size <= 0) { + m_scratch_ptr[1] = nullptr; + } else { + auto scratch_ptr_id = + m_policy.space() + .impl_internal_space_instance() + ->resize_team_scratch_space( + static_cast(m_scratch_size[1]) * + (static_cast(Cuda::concurrency() / + (m_team_size * m_vector_size)))); + m_scratch_ptr[1] = scratch_ptr_id.first; + m_scratch_pool_id = scratch_ptr_id.second; + } // The global parallel_reduce does not support vector_length other than 1 at // the moment @@ -2030,13 +2084,28 @@ class ParallelReduce, Kokkos::Impl::throw_runtime_exception( std::string("Kokkos::Impl::ParallelReduce< Cuda > bad team size")); } - if (int(m_team_size) > - arg_policy.team_size_max(m_functor, m_reducer, ParallelReduceTag())) { + + size_type team_size_max = + Kokkos::Impl::cuda_get_max_block_size( + m_policy.space().impl_internal_space_instance(), attr, m_functor, + m_vector_size, m_policy.team_scratch_size(0), + m_policy.thread_scratch_size(0)) / + m_vector_size; + + if ((int)m_team_size > (int)team_size_max) { Kokkos::Impl::throw_runtime_exception( std::string("Kokkos::Impl::ParallelReduce< Cuda > requested too " "large team size.")); } } + + ~ParallelReduce() { + if (m_scratch_pool_id >= 0) { + m_policy.space() + .impl_internal_space_instance() + ->m_team_scratch_pool[m_scratch_pool_id] = 0; + } + } }; } // namespace Impl @@ -2167,9 +2236,7 @@ class ParallelScan, Kokkos::Cuda> { for (typename Policy::member_type iwork_base = range.begin(); iwork_base < range.end(); iwork_base += blockDim.y) { -#ifdef KOKKOS_IMPL_CUDA_SYNCWARP_NEEDS_MASK - unsigned MASK = KOKKOS_IMPL_CUDA_ACTIVEMASK; -#endif + unsigned MASK = __activemask(); const typename Policy::member_type iwork = iwork_base + threadIdx.y; __syncthreads(); // Don't overwrite previous iteration values until they @@ -2182,11 +2249,7 @@ class ParallelScan, Kokkos::Cuda> { for (unsigned i = threadIdx.y; i < word_count.value; ++i) { shared_data[i + word_count.value] = shared_data[i] = shared_accum[i]; } -#ifdef KOKKOS_IMPL_CUDA_SYNCWARP_NEEDS_MASK - KOKKOS_IMPL_CUDA_SYNCWARP_MASK(MASK); -#else - KOKKOS_IMPL_CUDA_SYNCWARP; -#endif + __syncwarp(MASK); if (CudaTraits::WarpSize < word_count.value) { __syncthreads(); } // Protect against large scan values. @@ -2457,9 +2520,7 @@ class ParallelScanWithTotal, for (typename Policy::member_type iwork_base = range.begin(); iwork_base < range.end(); iwork_base += blockDim.y) { -#ifdef KOKKOS_IMPL_CUDA_SYNCWARP_NEEDS_MASK - unsigned MASK = KOKKOS_IMPL_CUDA_ACTIVEMASK; -#endif + unsigned MASK = __activemask(); const typename Policy::member_type iwork = iwork_base + threadIdx.y; @@ -2474,11 +2535,7 @@ class ParallelScanWithTotal, shared_data[i + word_count.value] = shared_data[i] = shared_accum[i]; } -#ifdef KOKKOS_IMPL_CUDA_SYNCWARP_NEEDS_MASK - KOKKOS_IMPL_CUDA_SYNCWARP_MASK(MASK); -#else - KOKKOS_IMPL_CUDA_SYNCWARP; -#endif + __syncwarp(MASK); if (CudaTraits::WarpSize < word_count.value) { __syncthreads(); } // Protect against large scan values. diff --git a/lib/kokkos/core/src/Cuda/Kokkos_Cuda_ReduceScan.hpp b/lib/kokkos/core/src/Cuda/Kokkos_Cuda_ReduceScan.hpp index fc9fc3770b..e5b05bcc64 100644 --- a/lib/kokkos/core/src/Cuda/Kokkos_Cuda_ReduceScan.hpp +++ b/lib/kokkos/core/src/Cuda/Kokkos_Cuda_ReduceScan.hpp @@ -191,48 +191,28 @@ __device__ bool cuda_inter_block_reduction( value_type tmp = Kokkos::shfl_down(value, 1, 32); if (id + 1 < int(gridDim.x)) join(value, tmp); } -#ifdef KOKKOS_IMPL_CUDA_SYNCWARP_NEEDS_MASK - unsigned int mask = KOKKOS_IMPL_CUDA_ACTIVEMASK; - int active = KOKKOS_IMPL_CUDA_BALLOT_MASK(mask, 1); -#else - int active = KOKKOS_IMPL_CUDA_BALLOT(1); -#endif + unsigned int mask = __activemask(); + int active = __ballot_sync(mask, 1); if (int(blockDim.x * blockDim.y) > 2) { value_type tmp = Kokkos::shfl_down(value, 2, 32); if (id + 2 < int(gridDim.x)) join(value, tmp); } -#ifdef KOKKOS_IMPL_CUDA_SYNCWARP_NEEDS_MASK - active += KOKKOS_IMPL_CUDA_BALLOT_MASK(mask, 1); -#else - active += KOKKOS_IMPL_CUDA_BALLOT(1); -#endif + active += __ballot_sync(mask, 1); if (int(blockDim.x * blockDim.y) > 4) { value_type tmp = Kokkos::shfl_down(value, 4, 32); if (id + 4 < int(gridDim.x)) join(value, tmp); } -#ifdef KOKKOS_IMPL_CUDA_SYNCWARP_NEEDS_MASK - active += KOKKOS_IMPL_CUDA_BALLOT_MASK(mask, 1); -#else - active += KOKKOS_IMPL_CUDA_BALLOT(1); -#endif + active += __ballot_sync(mask, 1); if (int(blockDim.x * blockDim.y) > 8) { value_type tmp = Kokkos::shfl_down(value, 8, 32); if (id + 8 < int(gridDim.x)) join(value, tmp); } -#ifdef KOKKOS_IMPL_CUDA_SYNCWARP_NEEDS_MASK - active += KOKKOS_IMPL_CUDA_BALLOT_MASK(mask, 1); -#else - active += KOKKOS_IMPL_CUDA_BALLOT(1); -#endif + active += __ballot_sync(mask, 1); if (int(blockDim.x * blockDim.y) > 16) { value_type tmp = Kokkos::shfl_down(value, 16, 32); if (id + 16 < int(gridDim.x)) join(value, tmp); } -#ifdef KOKKOS_IMPL_CUDA_SYNCWARP_NEEDS_MASK - active += KOKKOS_IMPL_CUDA_BALLOT_MASK(mask, 1); -#else - active += KOKKOS_IMPL_CUDA_BALLOT(1); -#endif + active += __ballot_sync(mask, 1); } } // The last block has in its thread=0 the global reduction value through @@ -388,48 +368,28 @@ __device__ inline value_type tmp = Kokkos::shfl_down(value, 1, 32); if (id + 1 < int(gridDim.x)) reducer.join(value, tmp); } -#ifdef KOKKOS_IMPL_CUDA_SYNCWARP_NEEDS_MASK - unsigned int mask = KOKKOS_IMPL_CUDA_ACTIVEMASK; - int active = KOKKOS_IMPL_CUDA_BALLOT_MASK(mask, 1); -#else - int active = KOKKOS_IMPL_CUDA_BALLOT(1); -#endif + unsigned int mask = __activemask(); + int active = __ballot_sync(mask, 1); if (int(blockDim.x * blockDim.y) > 2) { value_type tmp = Kokkos::shfl_down(value, 2, 32); if (id + 2 < int(gridDim.x)) reducer.join(value, tmp); } -#ifdef KOKKOS_IMPL_CUDA_SYNCWARP_NEEDS_MASK - active += KOKKOS_IMPL_CUDA_BALLOT_MASK(mask, 1); -#else - active += KOKKOS_IMPL_CUDA_BALLOT(1); -#endif + active += __ballot_sync(mask, 1); if (int(blockDim.x * blockDim.y) > 4) { value_type tmp = Kokkos::shfl_down(value, 4, 32); if (id + 4 < int(gridDim.x)) reducer.join(value, tmp); } -#ifdef KOKKOS_IMPL_CUDA_SYNCWARP_NEEDS_MASK - active += KOKKOS_IMPL_CUDA_BALLOT_MASK(mask, 1); -#else - active += KOKKOS_IMPL_CUDA_BALLOT(1); -#endif + active += __ballot_sync(mask, 1); if (int(blockDim.x * blockDim.y) > 8) { value_type tmp = Kokkos::shfl_down(value, 8, 32); if (id + 8 < int(gridDim.x)) reducer.join(value, tmp); } -#ifdef KOKKOS_IMPL_CUDA_SYNCWARP_NEEDS_MASK - active += KOKKOS_IMPL_CUDA_BALLOT_MASK(mask, 1); -#else - active += KOKKOS_IMPL_CUDA_BALLOT(1); -#endif + active += __ballot_sync(mask, 1); if (int(blockDim.x * blockDim.y) > 16) { value_type tmp = Kokkos::shfl_down(value, 16, 32); if (id + 16 < int(gridDim.x)) reducer.join(value, tmp); } -#ifdef KOKKOS_IMPL_CUDA_SYNCWARP_NEEDS_MASK - active += KOKKOS_IMPL_CUDA_BALLOT_MASK(mask, 1); -#else - active += KOKKOS_IMPL_CUDA_BALLOT(1); -#endif + active += __ballot_sync(mask, 1); } } @@ -573,23 +533,17 @@ struct CudaReductionsFunctor { // part of the reduction const int width) // How much of the warp participates { -#ifdef KOKKOS_IMPL_CUDA_SYNCWARP_NEEDS_MASK unsigned mask = width == 32 ? 0xffffffff : ((1 << width) - 1) << ((threadIdx.y * blockDim.x + threadIdx.x) / width) * width; -#endif const int lane_id = (threadIdx.y * blockDim.x + threadIdx.x) % 32; for (int delta = skip_vector ? blockDim.x : 1; delta < width; delta *= 2) { if (lane_id + delta < 32) { ValueJoin::join(functor, value, value + delta); } -#ifdef KOKKOS_IMPL_CUDA_SYNCWARP_NEEDS_MASK - KOKKOS_IMPL_CUDA_SYNCWARP_MASK(mask); -#else - KOKKOS_IMPL_CUDA_SYNCWARP; -#endif + __syncwarp(mask); } *value = *(value - lane_id); } @@ -612,17 +566,18 @@ struct CudaReductionsFunctor { const unsigned int delta = (threadIdx.y * blockDim.x + threadIdx.x) * 32; if (delta < blockDim.x * blockDim.y) *my_shared_team_buffer_element = shared_team_buffer_element[delta]; - KOKKOS_IMPL_CUDA_SYNCWARP; + __syncwarp(0xffffffff); scalar_intra_warp_reduction(functor, my_shared_team_buffer_element, false, blockDim.x * blockDim.y / 32); if (threadIdx.x + threadIdx.y == 0) *result = *shared_team_buffer_element; } } + template __device__ static inline bool scalar_inter_block_reduction( const FunctorType& functor, const Cuda::size_type /*block_id*/, - const Cuda::size_type block_count, Cuda::size_type* const shared_data, - Cuda::size_type* const global_data, Cuda::size_type* const global_flags) { + const Cuda::size_type block_count, SizeType* const shared_data, + SizeType* const global_data, Cuda::size_type* const global_flags) { Scalar* const global_team_buffer_element = ((Scalar*)global_data); Scalar* const my_global_team_buffer_element = global_team_buffer_element + blockIdx.x; @@ -713,17 +668,17 @@ __device__ void cuda_intra_block_reduce_scan( const pointer_type tdata_intra = base_data + value_count * threadIdx.y; { // Intra-warp reduction: - KOKKOS_IMPL_CUDA_SYNCWARP; + __syncwarp(0xffffffff); BLOCK_REDUCE_STEP(rtid_intra, tdata_intra, 0) - KOKKOS_IMPL_CUDA_SYNCWARP; + __syncwarp(0xffffffff); BLOCK_REDUCE_STEP(rtid_intra, tdata_intra, 1) - KOKKOS_IMPL_CUDA_SYNCWARP; + __syncwarp(0xffffffff); BLOCK_REDUCE_STEP(rtid_intra, tdata_intra, 2) - KOKKOS_IMPL_CUDA_SYNCWARP; + __syncwarp(0xffffffff); BLOCK_REDUCE_STEP(rtid_intra, tdata_intra, 3) - KOKKOS_IMPL_CUDA_SYNCWARP; + __syncwarp(0xffffffff); BLOCK_REDUCE_STEP(rtid_intra, tdata_intra, 4) - KOKKOS_IMPL_CUDA_SYNCWARP; + __syncwarp(0xffffffff); } __syncthreads(); // Wait for all warps to reduce @@ -732,57 +687,31 @@ __device__ void cuda_intra_block_reduce_scan( const unsigned rtid_inter = (threadIdx.y ^ BlockSizeMask) << CudaTraits::WarpIndexShift; -#ifdef KOKKOS_IMPL_CUDA_SYNCWARP_NEEDS_MASK - unsigned inner_mask = - KOKKOS_IMPL_CUDA_BALLOT_MASK(0xffffffff, (rtid_inter < blockDim.y)); -#endif + unsigned inner_mask = __ballot_sync(0xffffffff, (rtid_inter < blockDim.y)); if (rtid_inter < blockDim.y) { const pointer_type tdata_inter = base_data + value_count * (rtid_inter ^ BlockSizeMask); -#ifdef KOKKOS_IMPL_CUDA_SYNCWARP_NEEDS_MASK if ((1 << 5) < BlockSizeMask) { - KOKKOS_IMPL_CUDA_SYNCWARP_MASK(inner_mask); + __syncwarp(inner_mask); BLOCK_REDUCE_STEP(rtid_inter, tdata_inter, 5) } if ((1 << 6) < BlockSizeMask) { - KOKKOS_IMPL_CUDA_SYNCWARP_MASK(inner_mask); + __syncwarp(inner_mask); BLOCK_REDUCE_STEP(rtid_inter, tdata_inter, 6) } if ((1 << 7) < BlockSizeMask) { - KOKKOS_IMPL_CUDA_SYNCWARP_MASK(inner_mask); + __syncwarp(inner_mask); BLOCK_REDUCE_STEP(rtid_inter, tdata_inter, 7) } if ((1 << 8) < BlockSizeMask) { - KOKKOS_IMPL_CUDA_SYNCWARP_MASK(inner_mask); + __syncwarp(inner_mask); BLOCK_REDUCE_STEP(rtid_inter, tdata_inter, 8) } if ((1 << 9) < BlockSizeMask) { - KOKKOS_IMPL_CUDA_SYNCWARP_MASK(inner_mask); + __syncwarp(inner_mask); BLOCK_REDUCE_STEP(rtid_inter, tdata_inter, 9) } -#else - if ((1 << 5) < BlockSizeMask) { - KOKKOS_IMPL_CUDA_SYNCWARP; - BLOCK_REDUCE_STEP(rtid_inter, tdata_inter, 5) - } - if ((1 << 6) < BlockSizeMask) { - KOKKOS_IMPL_CUDA_SYNCWARP; - BLOCK_REDUCE_STEP(rtid_inter, tdata_inter, 6) - } - if ((1 << 7) < BlockSizeMask) { - KOKKOS_IMPL_CUDA_SYNCWARP; - BLOCK_REDUCE_STEP(rtid_inter, tdata_inter, 7) - } - if ((1 << 8) < BlockSizeMask) { - KOKKOS_IMPL_CUDA_SYNCWARP; - BLOCK_REDUCE_STEP(rtid_inter, tdata_inter, 8) - } - if ((1 << 9) < BlockSizeMask) { - KOKKOS_IMPL_CUDA_SYNCWARP; - BLOCK_REDUCE_STEP(rtid_inter, tdata_inter, 9) - } -#endif if (DoScan) { int n = @@ -795,25 +724,14 @@ __device__ void cuda_intra_block_reduce_scan( if (!(rtid_inter + n < blockDim.y)) n = 0; -#ifdef KOKKOS_IMPL_CUDA_SYNCWARP_NEEDS_MASK - KOKKOS_IMPL_CUDA_SYNCWARP_MASK(inner_mask); + __syncwarp(inner_mask); BLOCK_SCAN_STEP(tdata_inter, n, 8) - KOKKOS_IMPL_CUDA_SYNCWARP_MASK(inner_mask); + __syncwarp(inner_mask); BLOCK_SCAN_STEP(tdata_inter, n, 7) - KOKKOS_IMPL_CUDA_SYNCWARP_MASK(inner_mask); + __syncwarp(inner_mask); BLOCK_SCAN_STEP(tdata_inter, n, 6) - KOKKOS_IMPL_CUDA_SYNCWARP_MASK(inner_mask); + __syncwarp(inner_mask); BLOCK_SCAN_STEP(tdata_inter, n, 5) -#else - KOKKOS_IMPL_CUDA_SYNCWARP; - BLOCK_SCAN_STEP(tdata_inter, n, 8) - KOKKOS_IMPL_CUDA_SYNCWARP; - BLOCK_SCAN_STEP(tdata_inter, n, 7) - KOKKOS_IMPL_CUDA_SYNCWARP; - BLOCK_SCAN_STEP(tdata_inter, n, 6) - KOKKOS_IMPL_CUDA_SYNCWARP; - BLOCK_SCAN_STEP(tdata_inter, n, 5) -#endif } } } @@ -832,17 +750,17 @@ __device__ void cuda_intra_block_reduce_scan( : ((rtid_intra & 16) ? 16 : 0)))); if (!(rtid_intra + n < blockDim.y)) n = 0; - KOKKOS_IMPL_CUDA_SYNCWARP; + __syncwarp(0xffffffff); BLOCK_SCAN_STEP(tdata_intra, n, 4) __threadfence_block(); - KOKKOS_IMPL_CUDA_SYNCWARP; + __syncwarp(0xffffffff); BLOCK_SCAN_STEP(tdata_intra, n, 3) __threadfence_block(); - KOKKOS_IMPL_CUDA_SYNCWARP; + __syncwarp(0xffffffff); BLOCK_SCAN_STEP(tdata_intra, n, 2) __threadfence_block(); - KOKKOS_IMPL_CUDA_SYNCWARP; + __syncwarp(0xffffffff); BLOCK_SCAN_STEP(tdata_intra, n, 1) __threadfence_block(); - KOKKOS_IMPL_CUDA_SYNCWARP; + __syncwarp(0xffffffff); BLOCK_SCAN_STEP(tdata_intra, n, 0) __threadfence_block(); - KOKKOS_IMPL_CUDA_SYNCWARP; + __syncwarp(0xffffffff); } #undef BLOCK_SCAN_STEP @@ -858,12 +776,13 @@ __device__ void cuda_intra_block_reduce_scan( * Global reduce result is in the last threads' 'shared_data' location. */ -template +template __device__ bool cuda_single_inter_block_reduce_scan2( const FunctorType& functor, const Cuda::size_type block_id, - const Cuda::size_type block_count, Cuda::size_type* const shared_data, - Cuda::size_type* const global_data, Cuda::size_type* const global_flags) { - using size_type = Cuda::size_type; + const Cuda::size_type block_count, SizeType* const shared_data, + SizeType* const global_data, Cuda::size_type* const global_flags) { + using size_type = SizeType; using ValueTraits = FunctorValueTraits; using ValueJoin = FunctorValueJoin; using ValueInit = FunctorValueInit; @@ -953,11 +872,12 @@ __device__ bool cuda_single_inter_block_reduce_scan2( return is_last_block; } -template +template __device__ bool cuda_single_inter_block_reduce_scan( const FunctorType& functor, const Cuda::size_type block_id, - const Cuda::size_type block_count, Cuda::size_type* const shared_data, - Cuda::size_type* const global_data, Cuda::size_type* const global_flags) { + const Cuda::size_type block_count, SizeType* const shared_data, + SizeType* const global_data, Cuda::size_type* const global_flags) { using ValueTraits = FunctorValueTraits; if (!DoScan && ValueTraits::StaticValueSize > 0) return Kokkos::Impl::CudaReductionsFunctor< diff --git a/lib/kokkos/core/src/Cuda/Kokkos_Cuda_Task.hpp b/lib/kokkos/core/src/Cuda/Kokkos_Cuda_Task.hpp index 2004edbeac..88ac0d1878 100644 --- a/lib/kokkos/core/src/Cuda/Kokkos_Cuda_Task.hpp +++ b/lib/kokkos/core/src/Cuda/Kokkos_Cuda_Task.hpp @@ -54,11 +54,27 @@ #include #include -#include // CUDA_SAFE_CALL +#include // KOKKOS_IMPL_CUDA_SAFE_CALL #include //---------------------------------------------------------------------------- +#if defined(__CUDA_ARCH__) +#define KOKKOS_IMPL_CUDA_SYNCWARP_OR_RETURN(MSG) \ + { \ + __syncwarp(); \ + const unsigned b = __activemask(); \ + if (b != 0xffffffff) { \ + printf(" SYNCWARP AT %s (%d,%d,%d) (%d,%d,%d) failed %x\n", MSG, \ + blockIdx.x, blockIdx.y, blockIdx.z, threadIdx.x, threadIdx.y, \ + threadIdx.z, b); \ + return; \ + } \ + } +#else +#define KOKKOS_IMPL_CUDA_SYNCWARP_OR_RETURN(MSG) +#endif + namespace Kokkos { namespace Impl { namespace { @@ -138,13 +154,13 @@ class TaskQueueSpecialization> { // Broadcast task pointer: // Sync before the broadcast - KOKKOS_IMPL_CUDA_SYNCWARP; + __syncwarp(0xffffffff); // pretend it's an int* for shuffle purposes ((int*)¤t_task)[0] = - KOKKOS_IMPL_CUDA_SHFL(((int*)¤t_task)[0], 0, 32); + __shfl_sync(0xffffffff, ((int*)¤t_task)[0], 0, 32); ((int*)¤t_task)[1] = - KOKKOS_IMPL_CUDA_SHFL(((int*)¤t_task)[1], 0, 32); + __shfl_sync(0xffffffff, ((int*)¤t_task)[1], 0, 32); if (current_task) { KOKKOS_ASSERT(!current_task->as_runnable_task().get_respawn_flag()); @@ -168,7 +184,7 @@ class TaskQueueSpecialization> { // Synchronize threads of the warp and insure memory // writes are visible to all threads in the warp. - KOKKOS_IMPL_CUDA_SYNCWARP; + __syncwarp(0xffffffff); if (shared_memory_task_copy->is_team_runnable()) { // Thread Team Task @@ -182,7 +198,7 @@ class TaskQueueSpecialization> { // Synchronize threads of the warp and insure memory // writes are visible to all threads in the warp. - KOKKOS_IMPL_CUDA_SYNCWARP; + __syncwarp(0xffffffff); // if(warp_lane < b % CudaTraits::WarpSize) b += CudaTraits::WarpSize; // b -= b % CudaTraits::WarpSize; @@ -196,7 +212,7 @@ class TaskQueueSpecialization> { // writes are visible to root thread of the warp for // respawn or completion. - KOKKOS_IMPL_CUDA_SYNCWARP; + __syncwarp(0xffffffff); if (warp_lane == 0) { // If respawn requested copy respawn data back to main memory @@ -249,12 +265,14 @@ class TaskQueueSpecialization> { auto& queue = scheduler.queue(); - CUDA_SAFE_CALL(cudaDeviceSynchronize()); + Impl::cuda_device_synchronize( + "Kokkos::Impl::TaskQueueSpecialization::execute: Pre Task Execution"); // Query the stack size, in bytes: size_t previous_stack_size = 0; - CUDA_SAFE_CALL( + KOKKOS_IMPL_CUDA_SAFE_CALL( cudaDeviceGetLimit(&previous_stack_size, cudaLimitStackSize)); // If not large enough then set the stack size, in bytes: @@ -262,18 +280,21 @@ class TaskQueueSpecialization> { const size_t larger_stack_size = 1 << 11; if (previous_stack_size < larger_stack_size) { - CUDA_SAFE_CALL(cudaDeviceSetLimit(cudaLimitStackSize, larger_stack_size)); + KOKKOS_IMPL_CUDA_SAFE_CALL( + cudaDeviceSetLimit(cudaLimitStackSize, larger_stack_size)); } cuda_task_queue_execute<<>>( scheduler, shared_per_warp); - CUDA_SAFE_CALL(cudaGetLastError()); + KOKKOS_IMPL_CUDA_SAFE_CALL(cudaGetLastError()); - CUDA_SAFE_CALL(cudaDeviceSynchronize()); + Impl::cuda_device_synchronize( + "Kokkos::Impl::TaskQueueSpecialization::execute: Post Task Execution"); if (previous_stack_size < larger_stack_size) { - CUDA_SAFE_CALL( + KOKKOS_IMPL_CUDA_SAFE_CALL( cudaDeviceSetLimit(cudaLimitStackSize, previous_stack_size)); } } @@ -295,13 +316,17 @@ class TaskQueueSpecialization> { destroy_type* dtor_ptr = (destroy_type*)((char*)storage + sizeof(function_type)); - CUDA_SAFE_CALL(cudaDeviceSynchronize()); + Impl::cuda_device_synchronize( + "Kokkos::Impl::TaskQueueSpecialization::execute: Pre Get Function Pointer for Tasks"); set_cuda_task_base_apply_function_pointer <<<1, 1>>>(ptr_ptr, dtor_ptr); - CUDA_SAFE_CALL(cudaGetLastError()); - CUDA_SAFE_CALL(cudaDeviceSynchronize()); + KOKKOS_IMPL_CUDA_SAFE_CALL(cudaGetLastError()); + Impl::cuda_device_synchronize( + "Kokkos::Impl::TaskQueueSpecialization::execute: Post Get Function Pointer for Tasks"); ptr = *ptr_ptr; dtor = *dtor_ptr; @@ -372,23 +397,20 @@ class TaskQueueSpecializationConstrained< // count of 0 also. Otherwise, returns a task from another queue // or `end` if one couldn't be popped task_ptr = team_queue.attempt_to_steal_task(); -#if 0 - if(task != no_more_tasks_sentinel && task != end) { - std::printf("task stolen on rank %d\n", team_exec.league_rank()); - } -#endif } } // Synchronize warp with memory fence before broadcasting task pointer: // KOKKOS_IMPL_CUDA_SYNCWARP_OR_RETURN( "A" ); - KOKKOS_IMPL_CUDA_SYNCWARP; + __syncwarp(0xffffffff); // Broadcast task pointer: - ((int*)&task_ptr)[0] = KOKKOS_IMPL_CUDA_SHFL(((int*)&task_ptr)[0], 0, 32); - ((int*)&task_ptr)[1] = KOKKOS_IMPL_CUDA_SHFL(((int*)&task_ptr)[1], 0, 32); + ((int*)&task_ptr)[0] = + __shfl_sync(0xffffffff, ((int*)&task_ptr)[0], 0, 32); + ((int*)&task_ptr)[1] = + __shfl_sync(0xffffffff, ((int*)&task_ptr)[1], 0, 32); #if defined(KOKKOS_ENABLE_DEBUG) KOKKOS_IMPL_CUDA_SYNCWARP_OR_RETURN("TaskQueue CUDA task_ptr"); @@ -418,7 +440,7 @@ class TaskQueueSpecializationConstrained< // writes are visible to all threads in the warp. // KOKKOS_IMPL_CUDA_SYNCWARP_OR_RETURN( "B" ); - KOKKOS_IMPL_CUDA_SYNCWARP; + __syncwarp(0xffffffff); if (task_root_type::TaskTeam == task_shmem->m_task_type) { // Thread Team Task @@ -432,7 +454,7 @@ class TaskQueueSpecializationConstrained< // writes are visible to all threads in the warp. // KOKKOS_IMPL_CUDA_SYNCWARP_OR_RETURN( "C" ); - KOKKOS_IMPL_CUDA_SYNCWARP; + __syncwarp(0xffffffff); // copy task closure from shared to global memory: @@ -445,7 +467,7 @@ class TaskQueueSpecializationConstrained< // respawn or completion. // KOKKOS_IMPL_CUDA_SYNCWARP_OR_RETURN( "D" ); - KOKKOS_IMPL_CUDA_SYNCWARP; + __syncwarp(0xffffffff); // If respawn requested copy respawn data back to main memory @@ -475,12 +497,14 @@ class TaskQueueSpecializationConstrained< auto& queue = scheduler.queue(); queue.initialize_team_queues(warps_per_block * grid.x); - CUDA_SAFE_CALL(cudaDeviceSynchronize()); + Impl::cuda_device_synchronize( + "Kokkos::Impl::TaskQueueSpecializationConstrained::execute: Pre Execute Task"); // Query the stack size, in bytes: size_t previous_stack_size = 0; - CUDA_SAFE_CALL( + KOKKOS_IMPL_CUDA_SAFE_CALL( cudaDeviceGetLimit(&previous_stack_size, cudaLimitStackSize)); // If not large enough then set the stack size, in bytes: @@ -488,18 +512,21 @@ class TaskQueueSpecializationConstrained< const size_t larger_stack_size = 2048; if (previous_stack_size < larger_stack_size) { - CUDA_SAFE_CALL(cudaDeviceSetLimit(cudaLimitStackSize, larger_stack_size)); + KOKKOS_IMPL_CUDA_SAFE_CALL( + cudaDeviceSetLimit(cudaLimitStackSize, larger_stack_size)); } cuda_task_queue_execute<<>>( scheduler, shared_per_warp); - CUDA_SAFE_CALL(cudaGetLastError()); + KOKKOS_IMPL_CUDA_SAFE_CALL(cudaGetLastError()); - CUDA_SAFE_CALL(cudaDeviceSynchronize()); + Impl::cuda_device_synchronize( + "Kokkos::Impl::TaskQueueSpecializationConstrained::execute: Post Execute Task"); if (previous_stack_size < larger_stack_size) { - CUDA_SAFE_CALL( + KOKKOS_IMPL_CUDA_SAFE_CALL( cudaDeviceSetLimit(cudaLimitStackSize, previous_stack_size)); } } @@ -516,13 +543,17 @@ class TaskQueueSpecializationConstrained< destroy_type* dtor_ptr = (destroy_type*)((char*)storage + sizeof(function_type)); - CUDA_SAFE_CALL(cudaDeviceSynchronize()); + Impl::cuda_device_synchronize( + "Kokkos::Impl::TaskQueueSpecializationConstrained::get_function_pointer: Pre Get Function Pointer"); set_cuda_task_base_apply_function_pointer <<<1, 1>>>(ptr_ptr, dtor_ptr); - CUDA_SAFE_CALL(cudaGetLastError()); - CUDA_SAFE_CALL(cudaDeviceSynchronize()); + KOKKOS_IMPL_CUDA_SAFE_CALL(cudaGetLastError()); + Impl::cuda_device_synchronize( + "Kokkos::Impl::TaskQueueSpecializationConstrained::get_function_pointer: Post Get Function Pointer"); ptr = *ptr_ptr; dtor = *dtor_ptr; @@ -609,7 +640,7 @@ class TaskExec { __device__ void team_barrier() const { if (1 < m_team_size) { - KOKKOS_IMPL_CUDA_SYNCWARP; + __syncwarp(0xffffffff); } } @@ -1205,5 +1236,7 @@ KOKKOS_INLINE_FUNCTION void single( //---------------------------------------------------------------------------- //---------------------------------------------------------------------------- +#undef KOKKOS_IMPL_CUDA_SYNCWARP_OR_RETURN + #endif /* #if defined( KOKKOS_ENABLE_TASKDAG ) */ #endif /* #ifndef KOKKOS_IMPL_CUDA_TASK_HPP */ diff --git a/lib/kokkos/core/src/Cuda/Kokkos_Cuda_Team.hpp b/lib/kokkos/core/src/Cuda/Kokkos_Cuda_Team.hpp index e780639015..922b980a25 100644 --- a/lib/kokkos/core/src/Cuda/Kokkos_Cuda_Team.hpp +++ b/lib/kokkos/core/src/Cuda/Kokkos_Cuda_Team.hpp @@ -340,191 +340,6 @@ class CudaTeamMember { #endif } - //-------------------------------------------------------------------------- - /**\brief Global reduction across all blocks - * - * Return !0 if reducer contains the final value - */ - template - KOKKOS_INLINE_FUNCTION static - typename std::enable_if::value, int>::type - global_reduce(ReducerType const& reducer, int* const global_scratch_flags, - void* const global_scratch_space, void* const shmem, - int const shmem_size) { -#ifdef __CUDA_ARCH__ - - using value_type = typename ReducerType::value_type; - using pointer_type = value_type volatile*; - - // Number of shared memory entries for the reduction: - const int nsh = shmem_size / sizeof(value_type); - - // Number of CUDA threads in the block, rank within the block - const int nid = blockDim.x * blockDim.y * blockDim.z; - const int tid = - threadIdx.x + blockDim.x * (threadIdx.y + blockDim.y * threadIdx.z); - - // Reduces within block using all available shared memory - // Contributes if it is the root "vector lane" - - // wn == number of warps in the block - // wx == which lane within the warp - // wy == which warp within the block - - const int wn = - (nid + CudaTraits::WarpIndexMask) >> CudaTraits::WarpIndexShift; - const int wx = tid & CudaTraits::WarpIndexMask; - const int wy = tid >> CudaTraits::WarpIndexShift; - - //------------------------ - { // Intra warp shuffle reduction from contributing CUDA threads - - value_type tmp(reducer.reference()); - - for (int i = CudaTraits::WarpSize; (int)blockDim.x <= (i >>= 1);) { - Impl::in_place_shfl_down(reducer.reference(), tmp, i, - CudaTraits::WarpSize); - - // Root of each vector lane reduces "thread" contribution - if (0 == threadIdx.x && wx < i) { - reducer.join(&tmp, reducer.data()); - } - } - - // Reduce across warps using shared memory. - // Number of warps may not be power of two. - - __syncthreads(); // Wait before shared data write - - // Number of shared memory entries for the reduction - // is at most one per warp - const int nentry = wn < nsh ? wn : nsh; - - if (0 == wx && wy < nentry) { - // Root thread of warp 'wy' has warp's value to contribute - ((value_type*)shmem)[wy] = tmp; - } - - __syncthreads(); // Wait for write to be visible to block - - // When more warps than shared entries - // then warps must take turns joining their contribution - // to the designated shared memory entry. - for (int i = nentry; i < wn; i += nentry) { - const int k = wy - i; - - if (0 == wx && i <= wy && k < nentry) { - // Root thread of warp 'wy' has warp's value to contribute - reducer.join(((value_type*)shmem) + k, &tmp); - } - - __syncthreads(); // Wait for write to be visible to block - } - - // One warp performs the inter-warp reduction: - - if (0 == wy) { - // Start fan-in at power of two covering nentry - - for (int i = (1 << (32 - __clz(nentry - 1))); (i >>= 1);) { - const int k = wx + i; - if (wx < i && k < nentry) { - reducer.join(((pointer_type)shmem) + wx, ((pointer_type)shmem) + k); - __threadfence_block(); // Wait for write to be visible to warp - } - } - } - } - //------------------------ - { // Write block's value to global_scratch_memory - - int last_block = 0; - - if (0 == wx) { - reducer.copy(((pointer_type)global_scratch_space) + - blockIdx.x * reducer.length(), - reducer.data()); - - __threadfence(); // Wait until global write is visible. - - last_block = (int)gridDim.x == - 1 + Kokkos::atomic_fetch_add(global_scratch_flags, 1); - - // If last block then reset count - if (last_block) *global_scratch_flags = 0; - } - - last_block = __syncthreads_or(last_block); - - if (!last_block) return 0; - } - //------------------------ - // Last block reads global_scratch_memory into shared memory. - - const int nentry = nid < gridDim.x ? (nid < nsh ? nid : nsh) - : (gridDim.x < nsh ? gridDim.x : nsh); - - // nentry = min( nid , nsh , gridDim.x ) - - // whole block reads global memory into shared memory: - - if (tid < nentry) { - const int offset = tid * reducer.length(); - - reducer.copy(((pointer_type)shmem) + offset, - ((pointer_type)global_scratch_space) + offset); - - for (int i = nentry + tid; i < (int)gridDim.x; i += nentry) { - reducer.join( - ((pointer_type)shmem) + offset, - ((pointer_type)global_scratch_space) + i * reducer.length()); - } - } - - __syncthreads(); // Wait for writes to be visible to block - - if (0 == wy) { - // Iterate to reduce shared memory to single warp fan-in size - - const int nreduce = - CudaTraits::WarpSize < nentry ? CudaTraits::WarpSize : nentry; - - // nreduce = min( CudaTraits::WarpSize , nsh , gridDim.x ) - - if (wx < nreduce && nreduce < nentry) { - for (int i = nreduce + wx; i < nentry; i += nreduce) { - reducer.join(((pointer_type)shmem) + wx, ((pointer_type)shmem) + i); - } - __threadfence_block(); // Wait for writes to be visible to warp - } - - // Start fan-in at power of two covering nentry - - for (int i = (1 << (32 - __clz(nreduce - 1))); (i >>= 1);) { - const int k = wx + i; - if (wx < i && k < nreduce) { - reducer.join(((pointer_type)shmem) + wx, ((pointer_type)shmem) + k); - __threadfence_block(); // Wait for writes to be visible to warp - } - } - - if (0 == wx) { - reducer.copy(reducer.data(), (pointer_type)shmem); - return 1; - } - } - return 0; - -#else - (void)reducer; - (void)global_scratch_flags; - (void)global_scratch_space; - (void)shmem; - (void)shmem_size; - return 0; -#endif - } - //---------------------------------------- // Private for the driver @@ -533,7 +348,7 @@ class CudaTeamMember { void* scratch_level_1_ptr, const int scratch_level_1_size, const int arg_league_rank, const int arg_league_size) : m_team_reduce(shared), - m_team_shared(((char*)shared) + shared_begin, shared_size, + m_team_shared(static_cast(shared) + shared_begin, shared_size, scratch_level_1_ptr, scratch_level_1_size), m_team_reduce_size(shared_begin), m_league_rank(arg_league_rank), @@ -854,14 +669,10 @@ KOKKOS_INLINE_FUNCTION void parallel_for( i += blockDim.x) { closure(i); } -#ifdef KOKKOS_IMPL_CUDA_SYNCWARP_NEEDS_MASK - KOKKOS_IMPL_CUDA_SYNCWARP_MASK( - blockDim.x == 32 ? 0xffffffff - : ((1 << blockDim.x) - 1) - << (threadIdx.y % (32 / blockDim.x)) * blockDim.x); -#else - KOKKOS_IMPL_CUDA_SYNCWARP; -#endif + __syncwarp(blockDim.x == 32 + ? 0xffffffff + : ((1 << blockDim.x) - 1) + << (threadIdx.y % (32 / blockDim.x)) * blockDim.x); #endif } @@ -1100,14 +911,10 @@ KOKKOS_INLINE_FUNCTION void single( (void)lambda; #ifdef __CUDA_ARCH__ if (threadIdx.x == 0) lambda(); -#ifdef KOKKOS_IMPL_CUDA_SYNCWARP_NEEDS_MASK - KOKKOS_IMPL_CUDA_SYNCWARP_MASK( - blockDim.x == 32 ? 0xffffffff - : ((1 << blockDim.x) - 1) - << (threadIdx.y % (32 / blockDim.x)) * blockDim.x); -#else - KOKKOS_IMPL_CUDA_SYNCWARP; -#endif + __syncwarp(blockDim.x == 32 + ? 0xffffffff + : ((1 << blockDim.x) - 1) + << (threadIdx.y % (32 / blockDim.x)) * blockDim.x); #endif } @@ -1118,14 +925,10 @@ KOKKOS_INLINE_FUNCTION void single( (void)lambda; #ifdef __CUDA_ARCH__ if (threadIdx.x == 0 && threadIdx.y == 0) lambda(); -#ifdef KOKKOS_IMPL_CUDA_SYNCWARP_NEEDS_MASK - KOKKOS_IMPL_CUDA_SYNCWARP_MASK( - blockDim.x == 32 ? 0xffffffff - : ((1 << blockDim.x) - 1) - << (threadIdx.y % (32 / blockDim.x)) * blockDim.x); -#else - KOKKOS_IMPL_CUDA_SYNCWARP; -#endif + __syncwarp(blockDim.x == 32 + ? 0xffffffff + : ((1 << blockDim.x) - 1) + << (threadIdx.y % (32 / blockDim.x)) * blockDim.x); #endif } diff --git a/lib/kokkos/core/src/Cuda/Kokkos_Cuda_Vectorization.hpp b/lib/kokkos/core/src/Cuda/Kokkos_Cuda_Vectorization.hpp index 7f7b7b6e78..31d3c47e1c 100644 --- a/lib/kokkos/core/src/Cuda/Kokkos_Cuda_Vectorization.hpp +++ b/lib/kokkos/core/src/Cuda/Kokkos_Cuda_Vectorization.hpp @@ -48,7 +48,12 @@ #ifdef KOKKOS_ENABLE_CUDA #include -#include + +#if !defined(KOKKOS_COMPILER_CLANG) +#define KOKKOS_IMPL_CUDA_MAX_SHFL_SIZEOF sizeof(long long) +#else +#define KOKKOS_IMPL_CUDA_MAX_SHFL_SIZEOF sizeof(int) +#endif namespace Kokkos { @@ -61,7 +66,7 @@ constexpr unsigned shfl_all_mask = 0xffffffffu; // Shuffle operations require input to be a register (stack) variable // Derived implements do_shfl_op(unsigned mask, T& in, int lane, int width), -// which turns in to one of KOKKOS_IMPL_CUDA_SHFL(_UP_|_DOWN_|_)MASK +// which turns in to one of __shfl_sync(_up|_down) // Since the logic with respect to value sizes, etc., is the same everywhere, // put it all in one place. template @@ -157,7 +162,7 @@ struct in_place_shfl_fn : in_place_shfl_op { (void)val; (void)lane; (void)width; - return KOKKOS_IMPL_CUDA_SHFL_MASK(mask, val, lane, width); + return __shfl_sync(mask, val, lane, width); } }; template @@ -170,7 +175,7 @@ struct in_place_shfl_up_fn : in_place_shfl_op { __device__ KOKKOS_IMPL_FORCEINLINE T do_shfl_op(unsigned mask, T& val, int lane, int width) const noexcept { - return KOKKOS_IMPL_CUDA_SHFL_UP_MASK(mask, val, lane, width); + return __shfl_up_sync(mask, val, lane, width); } }; template @@ -188,7 +193,7 @@ struct in_place_shfl_down_fn : in_place_shfl_op { (void)val; (void)lane; (void)width; - return KOKKOS_IMPL_CUDA_SHFL_DOWN_MASK(mask, val, lane, width); + return __shfl_down_sync(mask, val, lane, width); } }; template @@ -228,5 +233,7 @@ __device__ inline T shfl_up(const T& val, int delta, int width, } // end namespace Kokkos +#undef KOKKOS_IMPL_CUDA_MAX_SHFL_SIZEOF + #endif // defined( KOKKOS_ENABLE_CUDA ) #endif // !defined( KOKKOS_CUDA_VECTORIZATION_HPP ) diff --git a/lib/kokkos/core/src/Cuda/Kokkos_Cuda_Version_9_8_Compatibility.hpp b/lib/kokkos/core/src/Cuda/Kokkos_Cuda_Version_9_8_Compatibility.hpp deleted file mode 100644 index 0cdd84ce27..0000000000 --- a/lib/kokkos/core/src/Cuda/Kokkos_Cuda_Version_9_8_Compatibility.hpp +++ /dev/null @@ -1,49 +0,0 @@ -#include - -#if defined(__CUDA_ARCH__) -#define KOKKOS_IMPL_CUDA_ACTIVEMASK __activemask() -#define KOKKOS_IMPL_CUDA_SYNCWARP __syncwarp(0xffffffff) -#define KOKKOS_IMPL_CUDA_SYNCWARP_MASK(m) __syncwarp(m) -#define KOKKOS_IMPL_CUDA_BALLOT(x) __ballot_sync(__activemask(), x) -#define KOKKOS_IMPL_CUDA_BALLOT_MASK(m, x) __ballot_sync(m, x) -#define KOKKOS_IMPL_CUDA_SHFL(x, y, z) __shfl_sync(0xffffffff, x, y, z) -#define KOKKOS_IMPL_CUDA_SHFL_MASK(m, x, y, z) __shfl_sync(m, x, y, z) -#define KOKKOS_IMPL_CUDA_SHFL_UP(x, y, z) __shfl_up_sync(0xffffffff, x, y, z) -#define KOKKOS_IMPL_CUDA_SHFL_UP_MASK(m, x, y, z) __shfl_up_sync(m, x, y, z) -#define KOKKOS_IMPL_CUDA_SHFL_DOWN(x, y, z) \ - __shfl_down_sync(0xffffffff, x, y, z) -#define KOKKOS_IMPL_CUDA_SHFL_DOWN_MASK(m, x, y, z) __shfl_down_sync(m, x, y, z) -#else -#define KOKKOS_IMPL_CUDA_ACTIVEMASK 0 -#define KOKKOS_IMPL_CUDA_SYNCWARP -#define KOKKOS_IMPL_CUDA_SYNCWARP_MASK(m) (void)m -#define KOKKOS_IMPL_CUDA_BALLOT(x) 0 -#define KOKKOS_IMPL_CUDA_BALLOT_MASK(m, x) 0 -#define KOKKOS_IMPL_CUDA_SHFL(x, y, z) 0 -#define KOKKOS_IMPL_CUDA_SHFL_MASK(m, x, y, z) 0 -#define KOKKOS_IMPL_CUDA_SHFL_UP(x, y, z) 0 -#define KOKKOS_IMPL_CUDA_SHFL_DOWN(x, y, z) 0 -#define KOKKOS_IMPL_CUDA_SHFL_DOWN_MASK(m, x, y, z) 0 -#endif - -#if !defined(KOKKOS_COMPILER_CLANG) -#define KOKKOS_IMPL_CUDA_MAX_SHFL_SIZEOF sizeof(long long) -#else -#define KOKKOS_IMPL_CUDA_MAX_SHFL_SIZEOF sizeof(int) -#endif - -#if defined(__CUDA_ARCH__) -#define KOKKOS_IMPL_CUDA_SYNCWARP_OR_RETURN(MSG) \ - { \ - __syncwarp(); \ - const unsigned b = __activemask(); \ - if (b != 0xffffffff) { \ - printf(" SYNCWARP AT %s (%d,%d,%d) (%d,%d,%d) failed %x\n", MSG, \ - blockIdx.x, blockIdx.y, blockIdx.z, threadIdx.x, threadIdx.y, \ - threadIdx.z, b); \ - return; \ - } \ - } -#else -#define KOKKOS_IMPL_CUDA_SYNCWARP_OR_RETURN(MSG) -#endif diff --git a/lib/kokkos/core/src/HIP/Kokkos_HIP_BlockSize_Deduction.hpp b/lib/kokkos/core/src/HIP/Kokkos_HIP_BlockSize_Deduction.hpp index 9278d1bdc9..7eb3e1e9f7 100644 --- a/lib/kokkos/core/src/HIP/Kokkos_HIP_BlockSize_Deduction.hpp +++ b/lib/kokkos/core/src/HIP/Kokkos_HIP_BlockSize_Deduction.hpp @@ -45,6 +45,7 @@ #ifndef KOKKOS_HIP_BLOCKSIZE_DEDUCTION_HPP #define KOKKOS_HIP_BLOCKSIZE_DEDUCTION_HPP +#include #include #if defined(__HIPCC__) @@ -56,118 +57,239 @@ namespace Kokkos { namespace Experimental { namespace Impl { -template -void hipOccupancy(int *numBlocks, int blockSize, int sharedmem) { - // FIXME_HIP - currently the "constant" path is unimplemented. - // we should look at whether it's functional, and - // perform some simple scaling studies to see when / - // if the constant launcher outperforms the current - // pass by pointer shared launcher - HIP_SAFE_CALL(hipOccupancyMaxActiveBlocksPerMultiprocessor( - numBlocks, - hip_parallel_launch_local_memory, - blockSize, sharedmem)); -} +enum class BlockType { Max, Preferred }; -template -void hipOccupancy(int *numBlocks, int blockSize, int sharedmem) { - hipOccupancy( - numBlocks, blockSize, sharedmem); -} - -template -int hip_internal_get_block_size(const F &condition_check, - const HIPInternal *hip_instance, - const hipFuncAttributes &attr, - const FunctorType &f, - const size_t vector_length, - const size_t shmem_block, - const size_t shmem_thread) { - const int min_blocks_per_sm = - LaunchBounds::minBperSM == 0 ? 1 : LaunchBounds::minBperSM; - const int max_threads_per_block = LaunchBounds::maxTperB == 0 - ? HIPTraits::MaxThreadsPerBlock - : LaunchBounds::maxTperB; - - const int regs_per_wavefront = std::max(attr.numRegs, 1); - const int regs_per_sm = hip_instance->m_regsPerSM; - const int shmem_per_sm = hip_instance->m_shmemPerSM; - const int max_shmem_per_block = hip_instance->m_maxShmemPerBlock; - const int max_blocks_per_sm = hip_instance->m_maxBlocksPerSM; - const int max_threads_per_sm = hip_instance->m_maxThreadsPerSM; - - int block_size = max_threads_per_block; - KOKKOS_ASSERT(block_size > 0); - const int blocks_per_warp = - (block_size + HIPTraits::WarpSize - 1) / HIPTraits::WarpSize; - - int functor_shmem = ::Kokkos::Impl::FunctorTeamShmemSize::value( - f, block_size / vector_length); - int total_shmem = shmem_block + shmem_thread * (block_size / vector_length) + - functor_shmem + attr.sharedSizeBytes; - int max_blocks_regs = regs_per_sm / (regs_per_wavefront * blocks_per_warp); - int max_blocks_shmem = - (total_shmem < max_shmem_per_block) - ? (total_shmem > 0 ? shmem_per_sm / total_shmem : max_blocks_regs) - : 0; - int blocks_per_sm = std::min(max_blocks_regs, max_blocks_shmem); - int threads_per_sm = blocks_per_sm * block_size; - if (threads_per_sm > max_threads_per_sm) { - blocks_per_sm = max_threads_per_sm / block_size; - threads_per_sm = blocks_per_sm * block_size; - } - int opt_block_size = - (blocks_per_sm >= min_blocks_per_sm) ? block_size : min_blocks_per_sm; - int opt_threads_per_sm = threads_per_sm; - block_size -= HIPTraits::WarpSize; - while (condition_check(blocks_per_sm) && - (block_size >= HIPTraits::WarpSize)) { - functor_shmem = ::Kokkos::Impl::FunctorTeamShmemSize::value( - f, block_size / vector_length); - total_shmem = shmem_block + shmem_thread * (block_size / vector_length) + - functor_shmem + attr.sharedSizeBytes; - max_blocks_regs = regs_per_sm / (regs_per_wavefront * blocks_per_warp); - max_blocks_shmem = - (total_shmem < max_shmem_per_block) - ? (total_shmem > 0 ? shmem_per_sm / total_shmem : max_blocks_regs) - : 0; - blocks_per_sm = std::min(max_blocks_regs, max_blocks_shmem); - threads_per_sm = blocks_per_sm * block_size; - if (threads_per_sm > max_threads_per_sm) { - blocks_per_sm = max_threads_per_sm / block_size; - threads_per_sm = blocks_per_sm * block_size; +template , + HIPLaunchMechanism LaunchMechanism = + DeduceHIPLaunchMechanism::launch_mechanism> +unsigned get_preferred_blocksize_impl() { + // FIXME_HIP - could be if constexpr for c++17 + if (!HIPParallelLaunch::default_launchbounds()) { + // use the user specified value + return LaunchBounds::maxTperB; + } else { + if (HIPParallelLaunch::get_scratch_size() > 0) { + return HIPTraits::ConservativeThreadsPerBlock; } - if ((blocks_per_sm >= min_blocks_per_sm) && - (blocks_per_sm <= max_blocks_per_sm)) { - if (threads_per_sm >= opt_threads_per_sm) { - opt_block_size = block_size; - opt_threads_per_sm = threads_per_sm; + return HIPTraits::MaxThreadsPerBlock; + } +} + +// FIXME_HIP - entire function could be constexpr for c++17 +template , + HIPLaunchMechanism LaunchMechanism = + DeduceHIPLaunchMechanism::launch_mechanism> +unsigned get_max_blocksize_impl() { + // FIXME_HIP - could be if constexpr for c++17 + if (!HIPParallelLaunch::default_launchbounds()) { + // use the user specified value + return LaunchBounds::maxTperB; + } else { + // we can always fit 1024 threads blocks if we only care about registers + // ... and don't mind spilling + return HIPTraits::MaxThreadsPerBlock; + } +} + +// convenience method to select and return the proper function attributes +// for a kernel, given the launch bounds et al. +template , + BlockType BlockSize = BlockType::Max, + HIPLaunchMechanism LaunchMechanism = + DeduceHIPLaunchMechanism::launch_mechanism> +hipFuncAttributes get_hip_func_attributes_impl() { + // FIXME_HIP - could be if constexpr for c++17 + if (!HIPParallelLaunch::default_launchbounds()) { + // for user defined, we *always* honor the request + return HIPParallelLaunch::get_hip_func_attributes(); + } else { + // FIXME_HIP - could be if constexpr for c++17 + if (BlockSize == BlockType::Max) { + return HIPParallelLaunch< + DriverType, Kokkos::LaunchBounds, + LaunchMechanism>::get_hip_func_attributes(); + } else { + const int blocksize = + get_preferred_blocksize_impl(); + if (blocksize == HIPTraits::MaxThreadsPerBlock) { + return HIPParallelLaunch< + DriverType, Kokkos::LaunchBounds, + LaunchMechanism>::get_hip_func_attributes(); + } else { + return HIPParallelLaunch< + DriverType, + Kokkos::LaunchBounds, + LaunchMechanism>::get_hip_func_attributes(); } } - block_size -= HIPTraits::WarpSize; } - return opt_block_size; } -template -int hip_get_max_block_size(const HIPInternal *hip_instance, - const hipFuncAttributes &attr, const FunctorType &f, - const size_t vector_length, const size_t shmem_block, - const size_t shmem_thread) { - return hip_internal_get_block_size( - [](int x) { return x == 0; }, hip_instance, attr, f, vector_length, - shmem_block, shmem_thread); +// Given an initial block-size limitation based on register usage +// determine the block size to select based on LDS limitation +template +unsigned hip_internal_get_block_size(const HIPInternal *hip_instance, + const ShmemFunctor &f, + const unsigned tperb_reg) { + // translate LB from CUDA to HIP + const unsigned min_waves_per_eu = + LaunchBounds::minBperSM ? LaunchBounds::minBperSM : 1; + const unsigned min_threads_per_sm = min_waves_per_eu * HIPTraits::WarpSize; + const unsigned shmem_per_sm = hip_instance->m_shmemPerSM; + unsigned block_size = tperb_reg; + do { + unsigned total_shmem = f(block_size); + // find how many threads we can fit with this blocksize based on LDS usage + unsigned tperb_shmem = total_shmem > shmem_per_sm ? 0 : block_size; + + // FIXME_HIP - could be if constexpr for c++17 + if (BlockSize == BlockType::Max) { + // we want the maximum blocksize possible + // just wait until we get a case where we can fit the LDS per SM + if (tperb_shmem) return block_size; + } else { + if (block_size == tperb_reg && tperb_shmem >= tperb_reg) { + // fast path for exit on first iteration if registers are more limiting + // than LDS usage, just use the register limited size + return tperb_reg; + } + // otherwise we need to apply a heuristic to choose the blocksize + // the current launchbound selection scheme is: + // 1. If no spills, choose 1024 [MaxThreadsPerBlock] + // 2. Otherwise, choose 256 [ConservativeThreadsPerBlock] + // + // For blocksizes between 256 and 1024, we'll be forced to use the 1024 LB + // and we'll already have pretty decent occupancy, thus dropping to 256 + // *probably* isn't a concern + const unsigned blocks_per_cu_shmem = shmem_per_sm / total_shmem; + const unsigned tperb = tperb_shmem < tperb_reg ? tperb_shmem : tperb_reg; + + // for anything with > 4 WF's & can fit multiple blocks + // we're probably not occupancy limited so just return that + if (blocks_per_cu_shmem > 1 && + tperb > HIPTraits::ConservativeThreadsPerBlock) { + return block_size; + } + + // otherwise, it's probably better to drop to the first valid size that + // fits in the ConservativeThreadsPerBlock + if (tperb >= min_threads_per_sm) return block_size; + } + block_size >>= 1; + } while (block_size >= HIPTraits::WarpSize); + // TODO: return a negative, add an error to kernel launch + return 0; } -template -int hip_get_opt_block_size(HIPInternal const *hip_instance, - hipFuncAttributes const &attr, FunctorType const &f, - size_t const vector_length, size_t const shmem_block, - size_t const shmem_thread) { - return hip_internal_get_block_size( - [](int) { return true; }, hip_instance, attr, f, vector_length, - shmem_block, shmem_thread); +// Standardized blocksize deduction for parallel constructs with no LDS usage +// Returns the preferred blocksize as dictated by register usage +// +// Note: a returned block_size of zero indicates that the algorithm could not +// find a valid block size. The caller is responsible for error handling. +template +unsigned hip_get_preferred_blocksize() { + return get_preferred_blocksize_impl(); +} + +// Standardized blocksize deduction for parallel constructs with no LDS usage +// Returns the max blocksize as dictated by register usage +// +// Note: a returned block_size of zero indicates that the algorithm could not +// find a valid block size. The caller is responsible for error handling. +template +unsigned hip_get_max_blocksize() { + return get_max_blocksize_impl(); +} + +// Standardized blocksize deduction for non-teams parallel constructs with LDS +// usage Returns the 'preferred' blocksize, as determined by the heuristics in +// hip_internal_get_block_size +// +// The ShmemFunctor takes a single argument of the current blocksize under +// consideration, and returns the LDS usage +// +// Note: a returned block_size of zero indicates that the algorithm could not +// find a valid block size. The caller is responsible for error handling. +template +unsigned hip_get_preferred_blocksize(HIPInternal const *hip_instance, + ShmemFunctor const &f) { + // get preferred blocksize limited by register usage + const unsigned tperb_reg = + hip_get_preferred_blocksize(); + return hip_internal_get_block_size(hip_instance, f, tperb_reg); +} + +// Standardized blocksize deduction for teams-based parallel constructs with LDS +// usage Returns the 'preferred' blocksize, as determined by the heuristics in +// hip_internal_get_block_size +// +// The ShmemTeamsFunctor takes two arguments: the hipFunctionAttributes and +// the current blocksize under consideration, and returns the LDS usage +// +// Note: a returned block_size of zero indicates that the algorithm could not +// find a valid block size. The caller is responsible for error handling. +template +unsigned hip_get_preferred_team_blocksize(HIPInternal const *hip_instance, + ShmemTeamsFunctor const &f) { + hipFuncAttributes attr = + get_hip_func_attributes_impl(); + // get preferred blocksize limited by register usage + using namespace std::placeholders; + const unsigned tperb_reg = + hip_get_preferred_blocksize(); + return hip_internal_get_block_size( + hip_instance, std::bind(f, attr, _1), tperb_reg); +} + +// Standardized blocksize deduction for non-teams parallel constructs with LDS +// usage Returns the maximum possible blocksize, as determined by the heuristics +// in hip_internal_get_block_size +// +// The ShmemFunctor takes a single argument of the current blocksize under +// consideration, and returns the LDS usage +// +// Note: a returned block_size of zero indicates that the algorithm could not +// find a valid block size. The caller is responsible for error handling. +template +unsigned hip_get_max_blocksize(HIPInternal const *hip_instance, + ShmemFunctor const &f) { + // get max blocksize limited by register usage + const unsigned tperb_reg = hip_get_max_blocksize(); + return hip_internal_get_block_size( + hip_instance, f, tperb_reg); +} + +// Standardized blocksize deduction for teams-based parallel constructs with LDS +// usage Returns the maximum possible blocksize, as determined by the heuristics +// in hip_internal_get_block_size +// +// The ShmemTeamsFunctor takes two arguments: the hipFunctionAttributes and +// the current blocksize under consideration, and returns the LDS usage +// +// Note: a returned block_size of zero indicates that the algorithm could not +// find a valid block size. The caller is responsible for error handling. +template +unsigned hip_get_max_team_blocksize(HIPInternal const *hip_instance, + ShmemTeamsFunctor const &f) { + hipFuncAttributes attr = + get_hip_func_attributes_impl(); + // get max blocksize + using namespace std::placeholders; + const unsigned tperb_reg = hip_get_max_blocksize(); + return hip_internal_get_block_size( + hip_instance, std::bind(f, attr, _1), tperb_reg); } } // namespace Impl diff --git a/lib/kokkos/core/src/HIP/Kokkos_HIP_Error.hpp b/lib/kokkos/core/src/HIP/Kokkos_HIP_Error.hpp index b3480bcad0..a75e7a4a6c 100644 --- a/lib/kokkos/core/src/HIP/Kokkos_HIP_Error.hpp +++ b/lib/kokkos/core/src/HIP/Kokkos_HIP_Error.hpp @@ -66,12 +66,30 @@ inline void hip_internal_safe_call(hipError_t e, const char* name, } } +#ifdef KOKKOS_ENABLE_DEPRECATED_CODE_3 + +KOKKOS_DEPRECATED +inline void hip_internal_safe_call_deprecated(hipError_t e, const char* name, + const char* file = nullptr, + const int line = 0) { + hip_internal_safe_call(e, name, file, line); +} + +#endif + } // namespace Impl } // namespace Kokkos -#define HIP_SAFE_CALL(call) \ +#define KOKKOS_IMPL_HIP_SAFE_CALL(call) \ Kokkos::Impl::hip_internal_safe_call(call, #call, __FILE__, __LINE__) +#ifdef KOKKOS_ENABLE_DEPRECATED_CODE_3 +#define HIP_SAFE_CALL(call) \ + Kokkos::Impl::hip_internal_safe_call_deprecated(call, #call, __FILE__, \ + __LINE__) + +#endif + namespace Kokkos { namespace Experimental { diff --git a/lib/kokkos/core/src/HIP/Kokkos_HIP_Instance.cpp b/lib/kokkos/core/src/HIP/Kokkos_HIP_Instance.cpp index 18ef10e22c..336ac8c698 100644 --- a/lib/kokkos/core/src/HIP/Kokkos_HIP_Instance.cpp +++ b/lib/kokkos/core/src/HIP/Kokkos_HIP_Instance.cpp @@ -77,7 +77,7 @@ class HIPInternalDevices { }; HIPInternalDevices::HIPInternalDevices() { - HIP_SAFE_CALL(hipGetDeviceCount(&m_hipDevCount)); + KOKKOS_IMPL_HIP_SAFE_CALL(hipGetDeviceCount(&m_hipDevCount)); if (m_hipDevCount > MAXIMUM_DEVICE_COUNT) { Kokkos::abort( @@ -85,7 +85,7 @@ HIPInternalDevices::HIPInternalDevices() { "have. Please report this to github.com/kokkos/kokkos."); } for (int i = 0; i < m_hipDevCount; ++i) { - HIP_SAFE_CALL(hipGetDeviceProperties(m_hipProp + i, i)); + KOKKOS_IMPL_HIP_SAFE_CALL(hipGetDeviceProperties(m_hipProp + i, i)); } } @@ -95,6 +95,9 @@ const HIPInternalDevices &HIPInternalDevices::singleton() { } } // namespace +unsigned long *Impl::HIPInternal::constantMemHostStaging = nullptr; +hipEvent_t Impl::HIPInternal::constantMemReusable = nullptr; + namespace Impl { //---------------------------------------------------------------------------- @@ -154,6 +157,9 @@ int HIPInternal::verify_is_initialized(const char *const label) const { return 0 <= m_hipDev; } +uint32_t HIPInternal::impl_get_instance_id() const noexcept { + return m_instance_id; +} HIPInternal &HIPInternal::singleton() { static HIPInternal *self = nullptr; if (!self) { @@ -163,12 +169,23 @@ HIPInternal &HIPInternal::singleton() { } void HIPInternal::fence() const { - HIP_SAFE_CALL(hipStreamSynchronize(m_stream)); - // can reset our cycle id now as well - m_cycleId = 0; + fence("Kokkos::HIPInternal::fence: Unnamed Internal Fence"); +} +void HIPInternal::fence(const std::string &name) const { + Kokkos::Tools::Experimental::Impl::profile_fence_event< + Kokkos::Experimental::HIP>( + name, + Kokkos::Tools::Experimental::Impl::DirectFenceIDHandle{ + impl_get_instance_id()}, + [&]() { + KOKKOS_IMPL_HIP_SAFE_CALL(hipStreamSynchronize(m_stream)); + // can reset our cycle id now as well + m_cycleId = 0; + }); } -void HIPInternal::initialize(int hip_device_id, hipStream_t stream) { +void HIPInternal::initialize(int hip_device_id, hipStream_t stream, + bool manage_stream) { if (was_finalized) Kokkos::abort("Calling HIP::initialize after HIP::finalize is illegal\n"); @@ -197,9 +214,10 @@ void HIPInternal::initialize(int hip_device_id, hipStream_t stream) { m_hipDev = hip_device_id; m_deviceProp = hipProp; - HIP_SAFE_CALL(hipSetDevice(m_hipDev)); + KOKKOS_IMPL_HIP_SAFE_CALL(hipSetDevice(m_hipDev)); m_stream = stream; + m_manage_stream = manage_stream; m_team_scratch_current_size = 0; m_team_scratch_ptr = nullptr; @@ -222,7 +240,7 @@ void HIPInternal::initialize(int hip_device_id, hipStream_t stream) { // theoretically, we can get 40 WF's / CU, but only can sustain 32 // see // https://github.com/ROCm-Developer-Tools/HIP/blob/a0b5dfd625d99af7e288629747b40dd057183173/vdi/hip_platform.cpp#L742 - m_maxBlocksPerSM = 32; + m_maxWavesPerCU = 32; // FIXME_HIP - Nick to implement this upstream // Register count comes from Sec. 2.2. "Data Sharing" of the // Vega 7nm ISA document (see the diagram) @@ -232,7 +250,7 @@ void HIPInternal::initialize(int hip_device_id, hipStream_t stream) { m_regsPerSM = 65536; m_shmemPerSM = hipProp.maxSharedMemoryPerMultiProcessor; m_maxShmemPerBlock = hipProp.sharedMemPerBlock; - m_maxThreadsPerSM = m_maxBlocksPerSM * HIPTraits::WarpSize; + m_maxThreadsPerSM = m_maxWavesPerCU * HIPTraits::WarpSize; //---------------------------------- // Multiblock reduction uses scratch flags for counters // and scratch space for partial reduction values. @@ -265,8 +283,8 @@ void HIPInternal::initialize(int hip_device_id, hipStream_t stream) { m_scratchConcurrentBitset = reinterpret_cast(r->data()); - HIP_SAFE_CALL(hipMemset(m_scratchConcurrentBitset, 0, - sizeof(uint32_t) * buffer_bound)); + KOKKOS_IMPL_HIP_SAFE_CALL(hipMemset(m_scratchConcurrentBitset, 0, + sizeof(uint32_t) * buffer_bound)); } //---------------------------------- @@ -287,6 +305,15 @@ void HIPInternal::initialize(int hip_device_id, hipStream_t stream) { // Init the array for used for arbitrarily sized atomics if (m_stream == nullptr) ::Kokkos::Impl::initialize_host_hip_lock_arrays(); + + // Allocate a staging buffer for constant mem in pinned host memory + // and an event to avoid overwriting driver for previous kernel launches + if (m_stream == nullptr) { + KOKKOS_IMPL_HIP_SAFE_CALL(hipHostMalloc((void **)&constantMemHostStaging, + HIPTraits::ConstantMemoryUsage)); + + KOKKOS_IMPL_HIP_SAFE_CALL(hipEventCreate(&constantMemReusable)); + } } //---------------------------------------------------------------------------- @@ -339,7 +366,7 @@ Kokkos::Experimental::HIP::size_type *HIPInternal::scratch_flags( m_scratchFlags = reinterpret_cast(r->data()); - HIP_SAFE_CALL( + KOKKOS_IMPL_HIP_SAFE_CALL( hipMemset(m_scratchFlags, 0, m_scratchFlagsCount * sizeScratchGrain)); } @@ -365,7 +392,7 @@ void *HIPInternal::resize_team_scratch_space(std::int64_t bytes, //---------------------------------------------------------------------------- void HIPInternal::finalize() { - this->fence(); + this->fence("Kokkos::HIPInternal::finalize: fence on finalization"); was_finalized = true; if (nullptr != m_scratchSpace || nullptr != m_scratchFlags) { using RecordHIP = @@ -378,6 +405,9 @@ void HIPInternal::finalize() { if (m_team_scratch_current_size > 0) Kokkos::kokkos_free(m_team_scratch_ptr); + if (m_manage_stream && m_stream != nullptr) + KOKKOS_IMPL_HIP_SAFE_CALL(hipStreamDestroy(m_stream)); + m_hipDev = -1; m_hipArch = -1; m_multiProcCount = 0; @@ -395,28 +425,36 @@ void HIPInternal::finalize() { m_team_scratch_ptr = nullptr; } if (nullptr != d_driverWorkArray) { - HIP_SAFE_CALL(hipHostFree(d_driverWorkArray)); + KOKKOS_IMPL_HIP_SAFE_CALL(hipHostFree(d_driverWorkArray)); d_driverWorkArray = nullptr; } + + // only destroy these if we're finalizing the singleton + if (this == &singleton()) { + KOKKOS_IMPL_HIP_SAFE_CALL(hipHostFree(constantMemHostStaging)); + KOKKOS_IMPL_HIP_SAFE_CALL(hipEventDestroy(constantMemReusable)); + } } char *HIPInternal::get_next_driver(size_t driverTypeSize) const { std::lock_guard const lock(m_mutexWorkArray); if (d_driverWorkArray == nullptr) { - HIP_SAFE_CALL( + KOKKOS_IMPL_HIP_SAFE_CALL( hipHostMalloc(&d_driverWorkArray, m_maxDriverCycles * m_maxDriverTypeSize * sizeof(char), hipHostMallocNonCoherent)); } if (driverTypeSize > m_maxDriverTypeSize) { // fence handles the cycle id reset for us - fence(); - HIP_SAFE_CALL(hipHostFree(d_driverWorkArray)); + fence( + "Kokkos::HIPInternal::get_next_driver: fence before reallocating " + "resources"); + KOKKOS_IMPL_HIP_SAFE_CALL(hipHostFree(d_driverWorkArray)); m_maxDriverTypeSize = driverTypeSize; if (m_maxDriverTypeSize % 128 != 0) m_maxDriverTypeSize = m_maxDriverTypeSize + 128 - m_maxDriverTypeSize % 128; - HIP_SAFE_CALL( + KOKKOS_IMPL_HIP_SAFE_CALL( hipHostMalloc(&d_driverWorkArray, m_maxDriverCycles * m_maxDriverTypeSize * sizeof(char), hipHostMallocNonCoherent)); @@ -424,7 +462,9 @@ char *HIPInternal::get_next_driver(size_t driverTypeSize) const { m_cycleId = (m_cycleId + 1) % m_maxDriverCycles; if (m_cycleId == 0) { // ensure any outstanding kernels are completed before we wrap around - fence(); + fence( + "Kokkos::HIPInternal::get_next_driver: fence before reusing first " + "driver"); } } return &d_driverWorkArray[m_maxDriverTypeSize * m_cycleId]; @@ -462,7 +502,14 @@ Kokkos::Experimental::HIP::size_type *hip_internal_scratch_flags( namespace Kokkos { namespace Impl { -void hip_device_synchronize() { HIP_SAFE_CALL(hipDeviceSynchronize()); } +void hip_device_synchronize(const std::string &name) { + Kokkos::Tools::Experimental::Impl::profile_fence_event< + Kokkos::Experimental::HIP>( + name, + Kokkos::Tools::Experimental::SpecialSynchronizationCases:: + GlobalDeviceSynchronization, + [&]() { KOKKOS_IMPL_HIP_SAFE_CALL(hipDeviceSynchronize()); }); +} void hip_internal_error_throw(hipError_t e, const char *name, const char *file, const int line) { diff --git a/lib/kokkos/core/src/HIP/Kokkos_HIP_Instance.hpp b/lib/kokkos/core/src/HIP/Kokkos_HIP_Instance.hpp index f4f88628e3..967c6fdd4b 100644 --- a/lib/kokkos/core/src/HIP/Kokkos_HIP_Instance.hpp +++ b/lib/kokkos/core/src/HIP/Kokkos_HIP_Instance.hpp @@ -48,6 +48,7 @@ #define KOKKOS_HIP_INSTANCE_HPP #include +#include #include @@ -59,10 +60,12 @@ struct HIPTraits { static int constexpr WarpSize = 64; static int constexpr WarpIndexMask = 0x003f; /* hexadecimal for 63 */ static int constexpr WarpIndexShift = 6; /* WarpSize == 1 << WarpShift*/ + static int constexpr ConservativeThreadsPerBlock = + 256; // conservative fallback blocksize in case of spills static int constexpr MaxThreadsPerBlock = - 1024; // FIXME_HIP -- assumed constant for now - + 1024; // the maximum we can fit in a block static int constexpr ConstantMemoryUsage = 0x008000; /* 32k bytes */ + static int constexpr KernelArgumentLimit = 0x001000; /* 4k bytes */ static int constexpr ConstantMemoryUseThreshold = 0x000200; /* 512 bytes */ }; @@ -90,7 +93,7 @@ class HIPInternal { unsigned m_multiProcCount = 0; unsigned m_maxWarpCount = 0; unsigned m_maxBlock = 0; - unsigned m_maxBlocksPerSM = 0; + unsigned m_maxWavesPerCU = 0; unsigned m_maxSharedWords = 0; int m_regsPerSM; int m_shmemPerSM = 0; @@ -108,6 +111,8 @@ class HIPInternal { mutable int m_cycleId = 0; // mutex to access d_driverWorkArray mutable std::mutex m_mutexWorkArray; + // mutex to access shared memory + mutable std::mutex m_mutexSharedMemory; // Scratch Spaces for Reductions size_type m_scratchSpaceCount = 0; @@ -119,7 +124,10 @@ class HIPInternal { hipDeviceProp_t m_deviceProp; - hipStream_t m_stream = nullptr; + hipStream_t m_stream = nullptr; + uint32_t m_instance_id = Kokkos::Tools::Experimental::Impl::idForInstance< + Kokkos::Experimental::HIP>(reinterpret_cast(this)); + bool m_manage_stream = false; // Team Scratch Level 1 Space mutable int64_t m_team_scratch_current_size = 0; @@ -128,18 +136,25 @@ class HIPInternal { bool was_finalized = false; + // FIXME_HIP: these want to be per-device, not per-stream... use of 'static' + // here will break once there are multiple devices though + static unsigned long *constantMemHostStaging; + static hipEvent_t constantMemReusable; + static HIPInternal &singleton(); int verify_is_initialized(const char *const label) const; int is_initialized() const { return m_hipDev >= 0; } - void initialize(int hip_device_id, hipStream_t stream = nullptr); + void initialize(int hip_device_id, hipStream_t stream = nullptr, + bool manage_stream = false); void finalize(); void print_configuration(std::ostream &) const; void fence() const; + void fence(const std::string &) const; // returns the next driver type pointer in our work array char *get_next_driver(size_t driverTypeSize) const; @@ -151,13 +166,52 @@ class HIPInternal { // Resizing of reduction related scratch spaces size_type *scratch_space(const size_type size); size_type *scratch_flags(const size_type size); - + uint32_t impl_get_instance_id() const noexcept; // Resizing of team level 1 scratch void *resize_team_scratch_space(std::int64_t bytes, bool force_shrink = false); }; } // namespace Impl + +// Partitioning an Execution Space: expects space and integer arguments for +// relative weight +// Customization point for backends +// Default behavior is to return the passed in instance + +namespace Impl { +inline void create_HIP_instances(std::vector &instances) { + for (int s = 0; s < int(instances.size()); s++) { + hipStream_t stream; + KOKKOS_IMPL_HIP_SAFE_CALL(hipStreamCreate(&stream)); + instances[s] = HIP(stream, true); + } +} +} // namespace Impl + +template +std::vector partition_space(const HIP &, Args...) { +#ifdef __cpp_fold_expressions + static_assert( + (... && std::is_arithmetic_v), + "Kokkos Error: partitioning arguments must be integers or floats"); +#endif + + std::vector instances(sizeof...(Args)); + Impl::create_HIP_instances(instances); + return instances; +} + +template +std::vector partition_space(const HIP &, std::vector &weights) { + static_assert( + std::is_arithmetic::value, + "Kokkos Error: partitioning arguments must be integers or floats"); + + std::vector instances(weights.size()); + Impl::create_HIP_instances(instances); + return instances; +} } // namespace Experimental } // namespace Kokkos diff --git a/lib/kokkos/core/src/HIP/Kokkos_HIP_KernelLaunch.hpp b/lib/kokkos/core/src/HIP/Kokkos_HIP_KernelLaunch.hpp index f774423b37..f209edf7c0 100644 --- a/lib/kokkos/core/src/HIP/Kokkos_HIP_KernelLaunch.hpp +++ b/lib/kokkos/core/src/HIP/Kokkos_HIP_KernelLaunch.hpp @@ -52,6 +52,7 @@ #include #include #include +#include // Must use global variable on the device with HIP-Clang #ifdef __HIP__ @@ -64,7 +65,7 @@ namespace Kokkos { namespace Experimental { template inline __device__ T *kokkos_impl_hip_shared_memory() { - HIP_DYNAMIC_SHARED(HIPSpace::size_type, sh); + extern __shared__ Kokkos::Experimental::HIPSpace::size_type sh[]; return (T *)sh; } } // namespace Experimental @@ -74,10 +75,12 @@ namespace Kokkos { namespace Experimental { namespace Impl { +// The hip_parallel_launch_*_memory code is identical to the cuda code template __global__ static void hip_parallel_launch_constant_memory() { const DriverType &driver = *(reinterpret_cast( kokkos_impl_hip_constant_memory_buffer)); + driver(); } @@ -87,12 +90,13 @@ __global__ __launch_bounds__( const DriverType &driver = *(reinterpret_cast( kokkos_impl_hip_constant_memory_buffer)); - driver->operator()(); + driver(); } template __global__ static void hip_parallel_launch_local_memory( const DriverType *driver) { + // FIXME_HIP driver() pass by copy driver->operator()(); } @@ -101,6 +105,21 @@ __global__ __launch_bounds__( maxTperB, minBperSM) static void hip_parallel_launch_local_memory(const DriverType *driver) { + // FIXME_HIP driver() pass by copy + driver->operator()(); +} + +template +__global__ static void hip_parallel_launch_global_memory( + const DriverType *driver) { + driver->operator()(); +} + +template +__global__ __launch_bounds__( + maxTperB, + minBperSM) static void hip_parallel_launch_global_memory(const DriverType + *driver) { driver->operator()(); } @@ -127,33 +146,238 @@ struct HIPDispatchProperties { HIPLaunchMechanism launch_mechanism = l; }; +// Use local memory up to ConstantMemoryUseThreshold +// Use global memory above ConstantMemoryUsage +// In between use ConstantMemory +// The following code is identical to the cuda code +template +struct DeduceHIPLaunchMechanism { + static constexpr Kokkos::Experimental::WorkItemProperty::HintLightWeight_t + light_weight = Kokkos::Experimental::WorkItemProperty::HintLightWeight; + static constexpr Kokkos::Experimental::WorkItemProperty::HintHeavyWeight_t + heavy_weight = Kokkos::Experimental::WorkItemProperty::HintHeavyWeight; + static constexpr typename DriverType::Policy::work_item_property property = + typename DriverType::Policy::work_item_property(); + + static constexpr HIPLaunchMechanism valid_launch_mechanism = + // BuildValidMask + (sizeof(DriverType) < HIPTraits::KernelArgumentLimit + ? HIPLaunchMechanism::LocalMemory + : HIPLaunchMechanism::Default) | + (sizeof(DriverType) < HIPTraits::ConstantMemoryUsage + ? HIPLaunchMechanism::ConstantMemory + : HIPLaunchMechanism::Default) | + HIPLaunchMechanism::GlobalMemory; + + static constexpr HIPLaunchMechanism requested_launch_mechanism = + (((property & light_weight) == light_weight) + ? HIPLaunchMechanism::LocalMemory + : HIPLaunchMechanism::ConstantMemory) | + HIPLaunchMechanism::GlobalMemory; + + static constexpr HIPLaunchMechanism default_launch_mechanism = + // BuildValidMask + (sizeof(DriverType) < HIPTraits::ConstantMemoryUseThreshold) + ? HIPLaunchMechanism::LocalMemory + : ((sizeof(DriverType) < HIPTraits::ConstantMemoryUsage) + ? HIPLaunchMechanism::ConstantMemory + : HIPLaunchMechanism::GlobalMemory); + + // None LightWeight HeavyWeight + // F +struct HIPParallelLaunchKernelFuncData { + static unsigned int get_scratch_size( + hipFuncAttributes const &hip_func_attributes) { + return hip_func_attributes.localSizeBytes; + } + + static hipFuncAttributes get_hip_func_attributes(void const *kernel_func) { + static hipFuncAttributes attr = [=]() { + hipFuncAttributes attr; + KOKKOS_IMPL_HIP_SAFE_CALL(hipFuncGetAttributes(&attr, kernel_func)); + return attr; + }(); + return attr; + } +}; + +//---------------------------------------------------------------// +// HIPParallelLaunchKernelFunc structure and its specializations // +//---------------------------------------------------------------// template struct HIPParallelLaunchKernelFunc; +// HIPLaunchMechanism::LocalMemory specializations template struct HIPParallelLaunchKernelFunc< DriverType, Kokkos::LaunchBounds, HIPLaunchMechanism::LocalMemory> { + using funcdata_t = HIPParallelLaunchKernelFuncData< + DriverType, Kokkos::LaunchBounds, + HIPLaunchMechanism::LocalMemory>; static auto get_kernel_func() { return hip_parallel_launch_local_memory; } + + static constexpr auto default_launchbounds() { return false; } + + static auto get_scratch_size() { + return funcdata_t::get_scratch_size(get_hip_func_attributes()); + } + + static hipFuncAttributes get_hip_func_attributes() { + return funcdata_t::get_hip_func_attributes( + reinterpret_cast(get_kernel_func())); + } }; template struct HIPParallelLaunchKernelFunc, HIPLaunchMechanism::LocalMemory> { + using funcdata_t = + HIPParallelLaunchKernelFuncData, + HIPLaunchMechanism::LocalMemory>; static auto get_kernel_func() { - return hip_parallel_launch_local_memory; + return HIPParallelLaunchKernelFunc< + DriverType, Kokkos::LaunchBounds, + HIPLaunchMechanism::LocalMemory>::get_kernel_func(); + } + + static constexpr auto default_launchbounds() { return true; } + + static auto get_scratch_size() { + return funcdata_t::get_scratch_size(get_hip_func_attributes()); + } + + static hipFuncAttributes get_hip_func_attributes() { + return funcdata_t::get_hip_func_attributes( + reinterpret_cast(get_kernel_func())); } }; +// HIPLaunchMechanism::GlobalMemory specializations +template +struct HIPParallelLaunchKernelFunc< + DriverType, Kokkos::LaunchBounds, + HIPLaunchMechanism::GlobalMemory> { + using funcdata_t = HIPParallelLaunchKernelFuncData< + DriverType, Kokkos::LaunchBounds, + HIPLaunchMechanism::GlobalMemory>; + static auto get_kernel_func() { + return hip_parallel_launch_global_memory; + } + + static constexpr auto default_launchbounds() { return false; } + + static auto get_scratch_size() { + return funcdata_t::get_scratch_size(get_hip_func_attributes()); + } + + static hipFuncAttributes get_hip_func_attributes() { + return funcdata_t::get_hip_func_attributes( + reinterpret_cast(get_kernel_func())); + } +}; + +template +struct HIPParallelLaunchKernelFunc, + HIPLaunchMechanism::GlobalMemory> { + using funcdata_t = + HIPParallelLaunchKernelFuncData, + HIPLaunchMechanism::GlobalMemory>; + static auto get_kernel_func() { + return hip_parallel_launch_global_memory; + } + + static constexpr auto default_launchbounds() { return true; } + + static auto get_scratch_size() { + return funcdata_t::get_scratch_size(get_hip_func_attributes()); + } + + static hipFuncAttributes get_hip_func_attributes() { + return funcdata_t::get_hip_func_attributes( + reinterpret_cast(get_kernel_func())); + } +}; + +// HIPLaunchMechanism::ConstantMemory specializations +template +struct HIPParallelLaunchKernelFunc< + DriverType, Kokkos::LaunchBounds, + HIPLaunchMechanism::ConstantMemory> { + using funcdata_t = HIPParallelLaunchKernelFuncData< + DriverType, Kokkos::LaunchBounds, + HIPLaunchMechanism::ConstantMemory>; + static auto get_kernel_func() { + return hip_parallel_launch_constant_memory; + } + + static constexpr auto default_launchbounds() { return false; } + + static auto get_scratch_size() { + return funcdata_t::get_scratch_size(get_hip_func_attributes()); + } + + static hipFuncAttributes get_hip_func_attributes() { + return funcdata_t::get_hip_func_attributes( + reinterpret_cast(get_kernel_func())); + } +}; + +template +struct HIPParallelLaunchKernelFunc, + HIPLaunchMechanism::ConstantMemory> { + using funcdata_t = + HIPParallelLaunchKernelFuncData, + HIPLaunchMechanism::ConstantMemory>; + static auto get_kernel_func() { + return hip_parallel_launch_constant_memory; + } + static constexpr auto default_launchbounds() { return true; } + + static auto get_scratch_size() { + return funcdata_t::get_scratch_size(get_hip_func_attributes()); + } + + static hipFuncAttributes get_hip_func_attributes() { + return funcdata_t::get_hip_func_attributes( + reinterpret_cast(get_kernel_func())); + } +}; + +//------------------------------------------------------------------// +// HIPParallelLaunchKernelInvoker structure and its specializations // +//------------------------------------------------------------------// template struct HIPParallelLaunchKernelInvoker; +// HIPLaunchMechanism::LocalMemory specialization template struct HIPParallelLaunchKernelInvoker @@ -170,21 +394,83 @@ struct HIPParallelLaunchKernelInvoker +struct HIPParallelLaunchKernelInvoker + : HIPParallelLaunchKernelFunc { + using base_t = HIPParallelLaunchKernelFunc; + + // FIXME_HIP the code is different than cuda because driver cannot be passed + // by copy + static void invoke_kernel(DriverType const *driver, dim3 const &grid, + dim3 const &block, int shmem, + HIPInternal const *hip_instance) { + (base_t::get_kernel_func())<<m_stream>>>( + driver); + } +}; + +// HIPLaunchMechanism::ConstantMemory specializations +template +struct HIPParallelLaunchKernelInvoker + : HIPParallelLaunchKernelFunc { + using base_t = + HIPParallelLaunchKernelFunc; + static_assert(sizeof(DriverType) < HIPTraits::ConstantMemoryUsage, + "Kokkos Error: Requested HIPLaunchConstantMemory with a " + "Functor larger than 32kB."); + + static void invoke_kernel(DriverType const *driver, dim3 const &grid, + dim3 const &block, int shmem, + HIPInternal const *hip_instance) { + // Wait until the previous kernel that uses the constant buffer is done + KOKKOS_IMPL_HIP_SAFE_CALL( + hipEventSynchronize(hip_instance->constantMemReusable)); + + // Copy functor (synchronously) to staging buffer in pinned host memory + unsigned long *staging = hip_instance->constantMemHostStaging; + std::memcpy((void *)staging, (void *)driver, sizeof(DriverType)); + + // Copy functor asynchronously from there to constant memory on the device + KOKKOS_IMPL_HIP_SAFE_CALL(hipMemcpyToSymbolAsync( + HIP_SYMBOL(kokkos_impl_hip_constant_memory_buffer), staging, + sizeof(DriverType), 0, hipMemcpyHostToDevice, hip_instance->m_stream)); + + // Invoke the driver function on the device + (base_t:: + get_kernel_func())<<m_stream>>>(); + + // Record an event that says when the constant buffer can be reused + KOKKOS_IMPL_HIP_SAFE_CALL(hipEventRecord(hip_instance->constantMemReusable, + hip_instance->m_stream)); + } +}; + +//-----------------------------// +// HIPParallelLaunch structure // +//-----------------------------// template , - HIPLaunchMechanism LaunchMechanism = HIPLaunchMechanism::LocalMemory> + HIPLaunchMechanism LaunchMechanism = + DeduceHIPLaunchMechanism::launch_mechanism> struct HIPParallelLaunch; template + unsigned int MinBlocksPerSM, HIPLaunchMechanism LaunchMechanism> struct HIPParallelLaunch< DriverType, Kokkos::LaunchBounds, - HIPLaunchMechanism::LocalMemory> + LaunchMechanism> : HIPParallelLaunchKernelInvoker< DriverType, Kokkos::LaunchBounds, - HIPLaunchMechanism::LocalMemory> { + LaunchMechanism> { using base_t = HIPParallelLaunchKernelInvoker< DriverType, Kokkos::LaunchBounds, - HIPLaunchMechanism::LocalMemory>; + LaunchMechanism>; HIPParallelLaunch(const DriverType &driver, const dim3 &grid, const dim3 &block, const int shmem, @@ -205,22 +491,48 @@ struct HIPParallelLaunch< base_t::invoke_kernel(d_driver, grid, block, shmem, hip_instance); #if defined(KOKKOS_ENABLE_DEBUG_BOUNDS_CHECK) - HIP_SAFE_CALL(hipGetLastError()); - hip_instance->fence(); + KOKKOS_IMPL_HIP_SAFE_CALL(hipGetLastError()); + hip_instance->fence( + "Kokkos::Experimental::Impl::HIParallelLaunch: Debug Only Check for " + "Execution Error"); #endif } } - - static hipFuncAttributes get_hip_func_attributes() { - static hipFuncAttributes attr = []() { - hipFuncAttributes attr; - HIP_SAFE_CALL(hipFuncGetAttributes( - &attr, reinterpret_cast(base_t::get_kernel_func()))); - return attr; - }(); - return attr; - } }; + +// convenience method to launch the correct kernel given the launch bounds et +// al. +template , + HIPLaunchMechanism LaunchMechanism = + DeduceHIPLaunchMechanism::launch_mechanism> +void hip_parallel_launch(const DriverType &driver, const dim3 &grid, + const dim3 &block, const int shmem, + const HIPInternal *hip_instance, + const bool prefer_shmem) { + // FIXME_HIP - could be if constexpr for c++17 + if (!HIPParallelLaunch::default_launchbounds()) { + // for user defined, we *always* honor the request + HIPParallelLaunch( + driver, grid, block, shmem, hip_instance, prefer_shmem); + } else { + // we can do what we like + const unsigned flat_block_size = block.x * block.y * block.z; + if (flat_block_size <= HIPTraits::ConservativeThreadsPerBlock) { + // we have to use the large blocksize + HIPParallelLaunch< + DriverType, + Kokkos::LaunchBounds, + LaunchMechanism>(driver, grid, block, shmem, hip_instance, + prefer_shmem); + } else { + HIPParallelLaunch, + LaunchMechanism>(driver, grid, block, shmem, + hip_instance, prefer_shmem); + } + } +} } // namespace Impl } // namespace Experimental } // namespace Kokkos diff --git a/lib/kokkos/core/src/HIP/Kokkos_HIP_Locks.cpp b/lib/kokkos/core/src/HIP/Kokkos_HIP_Locks.cpp index 4f5271b6f6..c4292d35ec 100644 --- a/lib/kokkos/core/src/HIP/Kokkos_HIP_Locks.cpp +++ b/lib/kokkos/core/src/HIP/Kokkos_HIP_Locks.cpp @@ -84,11 +84,17 @@ namespace Impl { HIPLockArrays g_host_hip_lock_arrays = {nullptr, nullptr, 0}; void initialize_host_hip_lock_arrays() { +#ifdef KOKKOS_ENABLE_IMPL_DESUL_ATOMICS + desul::Impl::init_lock_arrays(); + + DESUL_ENSURE_HIP_LOCK_ARRAYS_ON_DEVICE(); +#endif + if (g_host_hip_lock_arrays.atomic != nullptr) return; - HIP_SAFE_CALL(hipMalloc( + KOKKOS_IMPL_HIP_SAFE_CALL(hipMalloc( &g_host_hip_lock_arrays.atomic, sizeof(std::int32_t) * (KOKKOS_IMPL_HIP_SPACE_ATOMIC_MASK + 1))); - HIP_SAFE_CALL(hipMalloc( + KOKKOS_IMPL_HIP_SAFE_CALL(hipMalloc( &g_host_hip_lock_arrays.scratch, sizeof(std::int32_t) * (::Kokkos::Experimental::HIP::concurrency()))); @@ -103,10 +109,14 @@ void initialize_host_hip_lock_arrays() { } void finalize_host_hip_lock_arrays() { +#ifdef KOKKOS_ENABLE_IMPL_DESUL_ATOMICS + desul::Impl::finalize_lock_arrays(); +#endif + if (g_host_hip_lock_arrays.atomic == nullptr) return; - HIP_SAFE_CALL(hipFree(g_host_hip_lock_arrays.atomic)); + KOKKOS_IMPL_HIP_SAFE_CALL(hipFree(g_host_hip_lock_arrays.atomic)); g_host_hip_lock_arrays.atomic = nullptr; - HIP_SAFE_CALL(hipFree(g_host_hip_lock_arrays.scratch)); + KOKKOS_IMPL_HIP_SAFE_CALL(hipFree(g_host_hip_lock_arrays.scratch)); g_host_hip_lock_arrays.scratch = nullptr; g_host_hip_lock_arrays.n = 0; #ifdef KOKKOS_ENABLE_HIP_RELOCATABLE_DEVICE_CODE diff --git a/lib/kokkos/core/src/HIP/Kokkos_HIP_Locks.hpp b/lib/kokkos/core/src/HIP/Kokkos_HIP_Locks.hpp index f34f85f43b..71b104c2e4 100644 --- a/lib/kokkos/core/src/HIP/Kokkos_HIP_Locks.hpp +++ b/lib/kokkos/core/src/HIP/Kokkos_HIP_Locks.hpp @@ -51,6 +51,10 @@ #include +#ifdef KOKKOS_ENABLE_IMPL_DESUL_ATOMICS +#include +#endif + namespace Kokkos { namespace Impl { @@ -147,7 +151,7 @@ inline int eliminate_warning_for_lock_array() { return lock_array_copied; } #define KOKKOS_COPY_HIP_LOCK_ARRAYS_TO_DEVICE() \ { \ if (::Kokkos::Impl::lock_array_copied == 0) { \ - HIP_SAFE_CALL(hipMemcpyToSymbol( \ + KOKKOS_IMPL_HIP_SAFE_CALL(hipMemcpyToSymbol( \ HIP_SYMBOL(::Kokkos::Impl::g_device_hip_lock_arrays), \ &::Kokkos::Impl::g_host_hip_lock_arrays, \ sizeof(::Kokkos::Impl::HIPLockArrays))); \ @@ -155,6 +159,8 @@ inline int eliminate_warning_for_lock_array() { return lock_array_copied; } ::Kokkos::Impl::lock_array_copied = 1; \ } +#ifndef KOKKOS_ENABLE_IMPL_DESUL_ATOMICS + #ifdef KOKKOS_ENABLE_HIP_RELOCATABLE_DEVICE_CODE #define KOKKOS_ENSURE_HIP_LOCK_ARRAYS_ON_DEVICE() #else @@ -162,6 +168,19 @@ inline int eliminate_warning_for_lock_array() { return lock_array_copied; } KOKKOS_COPY_HIP_LOCK_ARRAYS_TO_DEVICE() #endif +#else + +#ifdef KOKKOS_ENABLE_HIP_RELOCATABLE_DEVICE_CODE +#define KOKKOS_ENSURE_HIP_LOCK_ARRAYS_ON_DEVICE() +#else +// Still Need COPY_CUDA_LOCK_ARRAYS for team scratch etc. +#define KOKKOS_ENSURE_HIP_LOCK_ARRAYS_ON_DEVICE() \ + KOKKOS_COPY_HIP_LOCK_ARRAYS_TO_DEVICE() \ + DESUL_ENSURE_HIP_LOCK_ARRAYS_ON_DEVICE() +#endif + +#endif /* defined( KOKKOS_ENABLE_IMPL_DESUL_ATOMICS ) */ + #endif /* defined( __HIPCC__ ) */ #endif /* #ifndef KOKKOS_HIP_LOCKS_HPP */ diff --git a/lib/kokkos/core/src/HIP/Kokkos_HIP_MDRangePolicy.hpp b/lib/kokkos/core/src/HIP/Kokkos_HIP_MDRangePolicy.hpp index ce1aff9586..acb538e1cb 100644 --- a/lib/kokkos/core/src/HIP/Kokkos_HIP_MDRangePolicy.hpp +++ b/lib/kokkos/core/src/HIP/Kokkos_HIP_MDRangePolicy.hpp @@ -28,7 +28,8 @@ inline TileSizeProperties get_tile_size_properties( space.impl_internal_space_instance()->m_maxThreadsPerSM; properties.default_largest_tile_size = 16; properties.default_tile_size = 4; - properties.max_total_tile_size = 1024; + properties.max_total_tile_size = + Kokkos::Experimental::Impl::HIPTraits::MaxThreadsPerBlock; return properties; } diff --git a/lib/kokkos/core/src/HIP/Kokkos_HIP_Parallel_MDRange.hpp b/lib/kokkos/core/src/HIP/Kokkos_HIP_Parallel_MDRange.hpp index 35e7d6fb85..eae323dd91 100644 --- a/lib/kokkos/core/src/HIP/Kokkos_HIP_Parallel_MDRange.hpp +++ b/lib/kokkos/core/src/HIP/Kokkos_HIP_Parallel_MDRange.hpp @@ -81,6 +81,8 @@ class ParallelFor, } inline void execute() const { + using ClosureType = + ParallelFor; if (m_policy.m_num_tiles == 0) return; array_index_type const maxblocks = static_cast( m_policy.space().impl_internal_space_instance()->m_maxBlock); @@ -94,7 +96,8 @@ class ParallelFor, block.y, maxblocks), 1); - Kokkos::Experimental::Impl::HIPParallelLaunch( + Kokkos::Experimental::Impl::hip_parallel_launch( *this, grid, block, 0, m_policy.space().impl_internal_space_instance(), false); } else if (Policy::rank == 3) { @@ -110,7 +113,8 @@ class ParallelFor, std::min((m_policy.m_upper[2] - m_policy.m_lower[2] + block.z - 1) / block.z, maxblocks)); - Kokkos::Experimental::Impl::HIPParallelLaunch( + Kokkos::Experimental::Impl::hip_parallel_launch( *this, grid, block, 0, m_policy.space().impl_internal_space_instance(), false); } else if (Policy::rank == 4) { @@ -128,7 +132,8 @@ class ParallelFor, std::min((m_policy.m_upper[3] - m_policy.m_lower[3] + block.z - 1) / block.z, maxblocks)); - Kokkos::Experimental::Impl::HIPParallelLaunch( + Kokkos::Experimental::Impl::hip_parallel_launch( *this, grid, block, 0, m_policy.space().impl_internal_space_instance(), false); } else if (Policy::rank == 5) { @@ -147,7 +152,8 @@ class ParallelFor, std::min((m_policy.m_upper[4] - m_policy.m_lower[4] + block.z - 1) / block.z, maxblocks)); - Kokkos::Experimental::Impl::HIPParallelLaunch( + Kokkos::Experimental::Impl::hip_parallel_launch( *this, grid, block, 0, m_policy.space().impl_internal_space_instance(), false); } else if (Policy::rank == 6) { @@ -165,7 +171,8 @@ class ParallelFor, std::min(static_cast(m_policy.m_tile_end[4] * m_policy.m_tile_end[5]), static_cast(maxblocks))); - Kokkos::Experimental::Impl::HIPParallelLaunch( + Kokkos::Experimental::Impl::hip_parallel_launch( *this, grid, block, 0, m_policy.space().impl_internal_space_instance(), false); } else { @@ -178,22 +185,18 @@ class ParallelFor, : m_functor(arg_functor), m_policy(arg_policy) {} template - static int max_tile_size_product(const Policy& pol, const Functor&) { + static int max_tile_size_product(const Policy&, const Functor&) { using closure_type = ParallelFor, Kokkos::Experimental::HIP>; - hipFuncAttributes attr = Kokkos::Experimental::Impl::HIPParallelLaunch< - closure_type, LaunchBounds>::get_hip_func_attributes(); - auto const& prop = pol.space().hip_device_prop(); - // Limits due to registers/SM, MDRange doesn't have - // shared memory constraints - int const regs_per_sm = prop.regsPerMultiprocessor; - int const regs_per_thread = attr.numRegs; - int const max_threads_per_sm = regs_per_sm / regs_per_thread; - return std::min( - max_threads_per_sm, - static_cast( - Kokkos::Experimental::Impl::HIPTraits::MaxThreadsPerBlock)); + unsigned block_size = + Kokkos::Experimental::Impl::hip_get_max_blocksize(); + if (block_size == 0) + Kokkos::Impl::throw_runtime_exception( + std::string("Kokkos::Impl::ParallelFor< HIP > could not find a valid " + "tile size.")); + return block_size; } }; @@ -242,6 +245,9 @@ class ParallelReduce, ReducerType, const bool m_result_ptr_device_accessible; size_type* m_scratch_space; size_type* m_scratch_flags; + // Only let one Parallel/Scan modify the shared memory. The + // constructor acquires the mutex which is released in the destructor. + std::unique_lock m_shared_memory_lock; using DeviceIteratePattern = typename Kokkos::Impl::Reduce::DeviceIterateTile< Policy::rank, Policy, FunctorType, WorkTag, reference_type>; @@ -307,32 +313,30 @@ class ParallelReduce, ReducerType, // Determine block size constrained by shared memory: // This is copy/paste from Kokkos_HIP_Parallel_Range inline unsigned local_block_size(const FunctorType& f) { - unsigned int n = - ::Kokkos::Experimental::Impl::HIPTraits::MaxThreadsPerBlock; - int shmem_size = ::Kokkos::Impl::hip_single_inter_block_reduce_scan_shmem< - false, FunctorType, WorkTag>(f, n); - using closure_type = Impl::ParallelReduce; - hipFuncAttributes attr = ::Kokkos::Experimental::Impl::HIPParallelLaunch< - closure_type, LaunchBounds>::get_hip_func_attributes(); - while ( - (n && - (m_policy.space().impl_internal_space_instance()->m_maxShmemPerBlock < - shmem_size)) || - (n > - static_cast( - ::Kokkos::Experimental::Impl::hip_get_max_block_size( - m_policy.space().impl_internal_space_instance(), attr, f, 1, - shmem_size, 0)))) { - n >>= 1; - shmem_size = ::Kokkos::Impl::hip_single_inter_block_reduce_scan_shmem< - false, FunctorType, WorkTag>(f, n); + const auto& instance = m_policy.space().impl_internal_space_instance(); + auto shmem_functor = [&f](unsigned n) { + return hip_single_inter_block_reduce_scan_shmem(f, n); + }; + using closure_type = ParallelReduce; + + unsigned block_size = + Kokkos::Experimental::Impl::hip_get_preferred_blocksize( + instance, shmem_functor); + if (block_size == 0) { + Kokkos::Impl::throw_runtime_exception( + std::string("Kokkos::Impl::ParallelReduce< HIP > could not find a " + "valid tile size.")); } - return n; + return block_size; } inline void execute() { - const int nwork = m_policy.m_num_tiles; + using ClosureType = ParallelReduce; + const int nwork = m_policy.m_num_tiles; if (nwork) { int block_size = m_policy.m_prod_tile_dims; // CONSTRAINT: Algorithm requires block_size >= product of tile dimensions @@ -366,14 +370,16 @@ class ParallelReduce, ReducerType, ::Kokkos::Impl::hip_single_inter_block_reduce_scan_shmem< false, FunctorType, WorkTag>(m_functor, block.y); - Kokkos::Experimental::Impl::HIPParallelLaunch( + Kokkos::Experimental::Impl::hip_parallel_launch( *this, grid, block, shmem, m_policy.space().impl_internal_space_instance(), false); // copy to device and execute if (!m_result_ptr_device_accessible) { - m_policy.space().fence(); + m_policy.space().fence( + "Kokkos::Impl::ParallelReduce: fence because " + "reduction can't access result storage location"); if (m_result_ptr) { const int size = ValueTraits::value_size( @@ -403,7 +409,10 @@ class ParallelReduce, ReducerType, MemorySpaceAccess::accessible), m_scratch_space(nullptr), - m_scratch_flags(nullptr) {} + m_scratch_flags(nullptr), + m_shared_memory_lock(m_policy.space() + .impl_internal_space_instance() + ->m_mutexSharedMemory) {} ParallelReduce(const FunctorType& arg_functor, const Policy& arg_policy, const ReducerType& reducer) @@ -416,23 +425,25 @@ class ParallelReduce, ReducerType, typename ReducerType::result_view_type:: memory_space>::accessible), m_scratch_space(nullptr), - m_scratch_flags(nullptr) {} + m_scratch_flags(nullptr), + m_shared_memory_lock(m_policy.space() + .impl_internal_space_instance() + ->m_mutexSharedMemory) {} + template - static int max_tile_size_product(const Policy& pol, const Functor&) { + static int max_tile_size_product(const Policy&, const Functor&) { using closure_type = ParallelReduce, ReducerType, Kokkos::Experimental::HIP>; - hipFuncAttributes attr = Kokkos::Experimental::Impl::HIPParallelLaunch< - closure_type, LaunchBounds>::get_hip_func_attributes(); - auto const& prop = pol.space().hip_device_prop(); - // Limits due do registers/SM - int const regs_per_sm = prop.regsPerMultiprocessor; - int const regs_per_thread = attr.numRegs; - int const max_threads_per_sm = regs_per_sm / regs_per_thread; - return std::min( - max_threads_per_sm, - static_cast( - Kokkos::Experimental::Impl::HIPTraits::MaxThreadsPerBlock)); + unsigned block_size = + Kokkos::Experimental::Impl::hip_get_max_blocksize(); + if (block_size == 0) { + Kokkos::Impl::throw_runtime_exception( + std::string("Kokkos::Impl::ParallelReduce< HIP > could not find a " + "valid tile size.")); + } + return block_size; } }; } // namespace Impl diff --git a/lib/kokkos/core/src/HIP/Kokkos_HIP_Parallel_Range.hpp b/lib/kokkos/core/src/HIP/Kokkos_HIP_Parallel_Range.hpp index 7d2825eeb4..e02ead1e99 100644 --- a/lib/kokkos/core/src/HIP/Kokkos_HIP_Parallel_Range.hpp +++ b/lib/kokkos/core/src/HIP/Kokkos_HIP_Parallel_Range.hpp @@ -108,16 +108,21 @@ class ParallelFor, inline void execute() const { const typename Policy::index_type nwork = m_policy.end() - m_policy.begin(); + using DriverType = + ParallelFor; const int block_size = - LaunchBounds::maxTperB - ? LaunchBounds::maxTperB - : ::Kokkos::Experimental::Impl::HIPTraits:: - MaxThreadsPerBlock; // FIXME_HIP Choose block_size better + Kokkos::Experimental::Impl::hip_get_preferred_blocksize(); const dim3 block(1, block_size, 1); const dim3 grid( typename Policy::index_type((nwork + block.y - 1) / block.y), 1, 1); - Kokkos::Experimental::Impl::HIPParallelLaunch( + if (block_size == 0) { + Kokkos::Impl::throw_runtime_exception( + std::string("Kokkos::Impl::ParallelFor< HIP > could not find a " + "valid execution configuration.")); + } + Kokkos::Experimental::Impl::hip_parallel_launch( *this, grid, block, 0, m_policy.space().impl_internal_space_instance(), false); } @@ -173,15 +178,12 @@ class ParallelReduce, ReducerType, const bool m_result_ptr_host_accessible; size_type* m_scratch_space = nullptr; size_type* m_scratch_flags = nullptr; + // Only let one ParallelReduce/Scan modify the shared memory. The + // constructor acquires the mutex which is released in the destructor. + std::unique_lock m_shared_memory_lock; -#if HIP_VERSION < 401 - static bool constexpr UseShflReduction = - ((sizeof(value_type) > 2 * sizeof(double)) && - static_cast(ValueTraits::StaticValueSize)); -#else static bool constexpr UseShflReduction = static_cast(ValueTraits::StaticValueSize); -#endif private: struct ShflReductionTag {}; @@ -328,30 +330,15 @@ class ParallelReduce, ReducerType, // Determine block size constrained by shared memory: inline unsigned local_block_size(const FunctorType& f) { - unsigned int n = - ::Kokkos::Experimental::Impl::HIPTraits::MaxThreadsPerBlock; - int shmem_size = - hip_single_inter_block_reduce_scan_shmem( - f, n); - using closure_type = Impl::ParallelReduce; - hipFuncAttributes attr = ::Kokkos::Experimental::Impl::HIPParallelLaunch< - closure_type, LaunchBounds>::get_hip_func_attributes(); - while ( - (n && - (m_policy.space().impl_internal_space_instance()->m_maxShmemPerBlock < - shmem_size)) || - (n > - static_cast( - ::Kokkos::Experimental::Impl::hip_get_max_block_size( - m_policy.space().impl_internal_space_instance(), attr, f, 1, - shmem_size, 0)))) { - n >>= 1; - shmem_size = - hip_single_inter_block_reduce_scan_shmem( - f, n); - } - return n; + const auto& instance = m_policy.space().impl_internal_space_instance(); + auto shmem_functor = [&f](unsigned n) { + return hip_single_inter_block_reduce_scan_shmem(f, n); + }; + using DriverType = ParallelReduce; + return Kokkos::Experimental::Impl::hip_get_preferred_blocksize< + DriverType, LaunchBounds>(instance, shmem_functor); } inline void execute() { @@ -362,7 +349,11 @@ class ParallelReduce, ReducerType, !std::is_same::value; if ((nwork > 0) || need_device_set) { const int block_size = local_block_size(m_functor); - KOKKOS_ASSERT(block_size > 0); + if (block_size == 0) { + Kokkos::Impl::throw_runtime_exception( + std::string("Kokkos::Impl::ParallelReduce< HIP > could not find a " + "valid execution configuration.")); + } m_scratch_space = ::Kokkos::Experimental::Impl::hip_internal_scratch_space( @@ -391,14 +382,17 @@ class ParallelReduce, ReducerType, WorkTag>(m_functor, block.y); - Kokkos::Experimental::Impl::HIPParallelLaunch( + using DriverType = ParallelReduce; + Kokkos::Experimental::Impl::hip_parallel_launch( *this, grid, block, shmem, m_policy.space().impl_internal_space_instance(), false); // copy to device and execute if (!m_result_ptr_device_accessible) { - m_policy.space().impl_internal_space_instance()->fence(); + m_policy.space().impl_internal_space_instance()->fence( + "Kokkos::Impl::ParallelReduce: fence because " + "reduction can't access result storage location"); if (m_result_ptr) { const int size = ValueTraits::value_size( @@ -429,7 +423,10 @@ class ParallelReduce, ReducerType, typename ViewType::memory_space>::accessible), m_result_ptr_host_accessible( MemorySpaceAccess::accessible) {} + typename ViewType::memory_space>::accessible), + m_shared_memory_lock(m_policy.space() + .impl_internal_space_instance() + ->m_mutexSharedMemory) {} ParallelReduce(const FunctorType& arg_functor, const Policy& arg_policy, const ReducerType& reducer) @@ -444,7 +441,10 @@ class ParallelReduce, ReducerType, m_result_ptr_host_accessible( MemorySpaceAccess::accessible) {} + memory_space>::accessible), + m_shared_memory_lock(m_policy.space() + .impl_internal_space_instance() + ->m_mutexSharedMemory) {} }; template @@ -482,6 +482,9 @@ class ParallelScanHIPBase { size_type* m_scratch_flags = nullptr; size_type m_final = false; int m_grid_x = 0; + // Only let one ParallelReduce/Scan modify the shared memory. The + // constructor acquires the mutex which is released in the destructor. + std::unique_lock m_shared_memory_lock; private: template @@ -624,22 +627,7 @@ class ParallelScanHIPBase { } // Determine block size constrained by shared memory: - inline unsigned local_block_size(const FunctorType& f) { - // blockDim.y must be power of two = 128 (2 warps) or 256 (4 warps) or - // 512 (8 warps) gridDim.x <= blockDim.y * blockDim.y - // - // TODO check best option - - unsigned n = Experimental::Impl::HIPTraits::WarpSize * 4; - while (n && static_cast(m_policy.space() - .impl_internal_space_instance() - ->m_maxShmemPerBlock) < - hip_single_inter_block_reduce_scan_shmem(f, n)) { - n >>= 1; - } - return n; - } + virtual inline unsigned local_block_size(const FunctorType& f) = 0; inline void impl_execute() { const index_type nwork = m_policy.end() - m_policy.begin(); @@ -649,7 +637,11 @@ class ParallelScanHIPBase { const int gridMaxComputeCapability_2x = 0x01fff; const int block_size = static_cast(local_block_size(m_functor)); - KOKKOS_ASSERT(block_size > 0); + if (block_size == 0) { + Kokkos::Impl::throw_runtime_exception( + std::string("Kokkos::Impl::ParallelScan< HIP > could not find a " + "valid execution configuration.")); + } const int grid_max = std::min(block_size * block_size, gridMaxComputeCapability_2x); @@ -674,15 +666,16 @@ class ParallelScanHIPBase { const int shmem = ValueTraits::value_size(m_functor) * (block_size + 2); m_final = false; - Kokkos::Experimental::Impl::HIPParallelLaunch( + // these ones are OK to be just the base because the specializations + // do not modify the kernel at all + using DriverType = ParallelScanHIPBase; + Kokkos::Experimental::Impl::hip_parallel_launch( *this, grid, block, shmem, m_policy.space().impl_internal_space_instance(), false); // copy to device and execute m_final = true; - Kokkos::Experimental::Impl::HIPParallelLaunch( + Kokkos::Experimental::Impl::hip_parallel_launch( *this, grid, block, shmem, m_policy.space().impl_internal_space_instance(), false); // copy to device and execute @@ -690,13 +683,17 @@ class ParallelScanHIPBase { } ParallelScanHIPBase(const FunctorType& arg_functor, const Policy& arg_policy) - : m_functor(arg_functor), m_policy(arg_policy) {} + : m_functor(arg_functor), + m_policy(arg_policy), + m_shared_memory_lock(m_policy.space() + .impl_internal_space_instance() + ->m_mutexSharedMemory) {} }; template class ParallelScan, Kokkos::Experimental::HIP> - : private ParallelScanHIPBase { + : public ParallelScanHIPBase { public: using Base = ParallelScanHIPBase; using Base::operator(); @@ -706,6 +703,23 @@ class ParallelScan, ParallelScan(const FunctorType& arg_functor, const typename Base::Policy& arg_policy) : Base(arg_functor, arg_policy) {} + + inline unsigned local_block_size(const FunctorType& f) { + // blockDim.y must be power of two = 128 (2 warps) or 256 (4 warps) or + // 512 (8 warps) gridDim.x <= blockDim.y * blockDim.y + + const auto& instance = + Base::m_policy.space().impl_internal_space_instance(); + auto shmem_functor = [&f](unsigned n) { + return hip_single_inter_block_reduce_scan_shmem( + f, n); + }; + using DriverType = ParallelScan; + return Kokkos::Experimental::Impl::hip_get_preferred_blocksize< + DriverType, typename Base::LaunchBounds>(instance, shmem_functor); + } }; //---------------------------------------------------------------------------- @@ -713,7 +727,7 @@ class ParallelScan, template class ParallelScanWithTotal, ReturnType, Kokkos::Experimental::HIP> - : private ParallelScanHIPBase { + : public ParallelScanHIPBase { public: using Base = ParallelScanHIPBase; using Base::operator(); @@ -737,6 +751,24 @@ class ParallelScanWithTotal, const typename Base::Policy& arg_policy, ReturnType& arg_returnvalue) : Base(arg_functor, arg_policy), m_returnvalue(arg_returnvalue) {} + + inline unsigned local_block_size(const FunctorType& f) { + // blockDim.y must be power of two = 128 (2 warps) or 256 (4 warps) or + // 512 (8 warps) gridDim.x <= blockDim.y * blockDim.y + + const auto& instance = + Base::m_policy.space().impl_internal_space_instance(); + auto shmem_functor = [&f](unsigned n) { + return hip_single_inter_block_reduce_scan_shmem( + f, n); + }; + using DriverType = + ParallelScanWithTotal; + return Kokkos::Experimental::Impl::hip_get_preferred_blocksize< + DriverType, typename Base::LaunchBounds>(instance, shmem_functor); + } }; } // namespace Impl diff --git a/lib/kokkos/core/src/HIP/Kokkos_HIP_Parallel_Team.hpp b/lib/kokkos/core/src/HIP/Kokkos_HIP_Parallel_Team.hpp index 96c3ff2a75..b794f5bc03 100644 --- a/lib/kokkos/core/src/HIP/Kokkos_HIP_Parallel_Team.hpp +++ b/lib/kokkos/core/src/HIP/Kokkos_HIP_Parallel_Team.hpp @@ -56,20 +56,20 @@ namespace Kokkos { namespace Impl { + template class TeamPolicyInternal : public PolicyTraits { public: using execution_policy = TeamPolicyInternal; - using traits = PolicyTraits; + using traits = PolicyTraits; + using BlockType = Kokkos::Experimental::Impl::BlockType; template friend class TeamPolicyInternal; private: - static int constexpr MAX_WARP = 8; - typename traits::execution_space m_space; int m_league_size; int m_team_size; @@ -101,17 +101,9 @@ class TeamPolicyInternal template int team_size_max(FunctorType const& f, ParallelForTag const&) const { using closure_type = - Impl::ParallelFor >; - hipFuncAttributes attr = ::Kokkos::Experimental::Impl::HIPParallelLaunch< - closure_type, - typename traits::launch_bounds>::get_hip_func_attributes(); - int const block_size = ::Kokkos::Experimental::Impl::hip_get_max_block_size< - FunctorType, typename traits::launch_bounds>( - space().impl_internal_space_instance(), attr, f, - static_cast(impl_vector_length()), - static_cast(team_scratch_size(0)) + 2 * sizeof(double), - static_cast(thread_scratch_size(0)) + sizeof(double)); - return block_size / impl_vector_length(); + Impl::ParallelFor>; + + return internal_team_size_common(f); } template @@ -129,8 +121,8 @@ class TeamPolicyInternal return internal_team_size_max(f); } - template - inline int team_size_max(const FunctorType& f, const ReducerType& /*r*/, + template + inline int team_size_max(const FunctorType& f, const ReducerType&, const ParallelReduceTag&) const { using closure_type = Impl::ParallelReduce, @@ -141,17 +133,9 @@ class TeamPolicyInternal template int team_size_recommended(FunctorType const& f, ParallelForTag const&) const { using closure_type = - Impl::ParallelFor >; - hipFuncAttributes attr = ::Kokkos::Experimental::Impl::HIPParallelLaunch< - closure_type, - typename traits::launch_bounds>::get_hip_func_attributes(); - int const block_size = ::Kokkos::Experimental::Impl::hip_get_opt_block_size< - FunctorType, typename traits::launch_bounds>( - space().impl_internal_space_instance(), attr, f, - static_cast(impl_vector_length()), - static_cast(team_scratch_size(0)) + 2 * sizeof(double), - static_cast(thread_scratch_size(0)) + sizeof(double)); - return block_size / impl_vector_length(); + Impl::ParallelFor>; + + return internal_team_size_common(f); } template @@ -169,7 +153,7 @@ class TeamPolicyInternal return internal_team_size_recommended(f); } - template + template int team_size_recommended(FunctorType const& f, ReducerType const&, ParallelReduceTag const&) const { using closure_type = @@ -177,6 +161,7 @@ class TeamPolicyInternal ReducerType>; return internal_team_size_recommended(f); } + inline bool impl_auto_vector_length() const { return m_tune_vector_length; } inline bool impl_auto_team_size() const { return m_tune_team_size; } static int vector_length_max() { @@ -211,7 +196,10 @@ class TeamPolicyInternal inline void impl_set_vector_length(size_t size) { m_vector_length = size; } inline void impl_set_team_size(size_t size) { m_team_size = size; } int impl_vector_length() const { return m_vector_length; } + +#ifdef KOKKOS_ENABLE_DEPRECATED_CODE_3 KOKKOS_DEPRECATED int vector_length() const { return impl_vector_length(); } +#endif int team_size() const { return m_team_size; } @@ -266,7 +254,8 @@ class TeamPolicyInternal "space."); // Make sure total block size is permissible - if (m_team_size * m_vector_length > 1024) { + if (m_team_size * m_vector_length > + ::Kokkos::Experimental::Impl::HIPTraits::MaxThreadsPerBlock) { Impl::throw_runtime_exception( std::string("Kokkos::TeamPolicy< HIP > the team size is too large. " "Team size x vector length must be smaller than 1024.")); @@ -363,26 +352,84 @@ class TeamPolicyInternal using member_type = Kokkos::Impl::HIPTeamMember; protected: - template - int internal_team_size_common(const FunctorType& f, - BlockSizeCallable&& block_size_callable) const { - using closure_type = ClosureType; + template + int internal_team_size_common(const FunctorType& f) const { + // FIXME_HIP: this could be unified with the + // internal_team_size_common_reduce + // once we can turn c++17 constexpr on by default. + // The problem right now is that we can't turn off the evaluation + // of the functor_value_traits's valuesize / StaticValueSize + + const unsigned shmem_block = team_scratch_size(0) + 2 * sizeof(double); + const unsigned shmem_thread = thread_scratch_size(0) + sizeof(double); + const int vector_length = impl_vector_length(); + + const auto functor = [&f, shmem_block, shmem_thread, vector_length]( + const hipFuncAttributes& attr, int block_size) { + int functor_shmem = + ::Kokkos::Impl::FunctorTeamShmemSize::value( + f, block_size / vector_length); + return shmem_block + shmem_thread * (block_size / vector_length) + + functor_shmem + attr.sharedSizeBytes; + }; + int block_size; + // FIXME_HIP - could be if constexpr for c++17 + if (BlockSize == BlockType::Max) { + block_size = ::Kokkos::Experimental::Impl::hip_get_max_team_blocksize< + ClosureType, typename traits::launch_bounds>( + space().impl_internal_space_instance(), functor); + } else { + block_size = + ::Kokkos::Experimental::Impl::hip_get_preferred_team_blocksize< + ClosureType, typename traits::launch_bounds>( + space().impl_internal_space_instance(), functor); + } + if (block_size == 0) { + Kokkos::Impl::throw_runtime_exception( + std::string("Kokkos::Impl::ParallelFor< HIP > could not find a valid " + "team size.")); + } + return block_size / impl_vector_length(); + } + + template + int internal_team_size_common_reduce(const FunctorType& f) const { using functor_value_traits = Impl::FunctorValueTraits; - hipFuncAttributes attr = ::Kokkos::Experimental::Impl::HIPParallelLaunch< - closure_type, - typename traits::launch_bounds>::get_hip_func_attributes(); - const int block_size = std::forward(block_size_callable)( - space().impl_internal_space_instance(), attr, f, - static_cast(impl_vector_length()), - static_cast(team_scratch_size(0)) + 2 * sizeof(double), - static_cast(thread_scratch_size(0)) + sizeof(double) + - ((functor_value_traits::StaticValueSize != 0) - ? 0 - : functor_value_traits::value_size(f))); - KOKKOS_ASSERT(block_size > 0); + const unsigned shmem_block = team_scratch_size(0) + 2 * sizeof(double); + const unsigned shmem_thread = thread_scratch_size(0) + sizeof(double) + + ((functor_value_traits::StaticValueSize != 0) + ? 0 + : functor_value_traits::value_size(f)); + const int vector_length = impl_vector_length(); + const auto functor = [&f, shmem_block, shmem_thread, vector_length]( + const hipFuncAttributes& attr, int block_size) { + int functor_shmem = + ::Kokkos::Impl::FunctorTeamShmemSize::value( + f, block_size / vector_length); + return shmem_block + shmem_thread * (block_size / vector_length) + + functor_shmem + attr.sharedSizeBytes; + }; + int block_size; + // FIXME_HIP - could be if constexpr for c++17 + if (BlockSize == BlockType::Max) { + block_size = ::Kokkos::Experimental::Impl::hip_get_max_team_blocksize< + ClosureType, typename traits::launch_bounds>( + space().impl_internal_space_instance(), functor); + } else { + block_size = + ::Kokkos::Experimental::Impl::hip_get_preferred_team_blocksize< + ClosureType, typename traits::launch_bounds>( + space().impl_internal_space_instance(), functor); + } + + if (block_size == 0) { + Kokkos::Impl::throw_runtime_exception( + std::string("Kokkos::Impl::ParallelReduce< HIP > could not find a " + "valid team size.")); + } // Currently we require Power-of-2 team size for reductions. int p2 = 1; while (p2 <= block_size) p2 *= 2; @@ -392,16 +439,13 @@ class TeamPolicyInternal template int internal_team_size_max(const FunctorType& f) const { - return internal_team_size_common( - f, ::Kokkos::Experimental::Impl::hip_get_max_block_size< - FunctorType, typename traits::launch_bounds>); + return internal_team_size_common_reduce(f); } template int internal_team_size_recommended(const FunctorType& f) const { - return internal_team_size_common( - f, ::Kokkos::Experimental::Impl::hip_get_opt_block_size< - FunctorType, typename traits::launch_bounds>); + return internal_team_size_common_reduce( + f); } }; @@ -505,7 +549,11 @@ class ParallelFor, dim3 const block(static_cast(m_vector_size), static_cast(m_team_size), 1); - ::Kokkos::Experimental::Impl::HIPParallelLaunch( + using closure_type = + ParallelFor, + Kokkos::Experimental::HIP>; + ::Kokkos::Experimental::Impl::hip_parallel_launch( *this, grid, block, shmem_size_total, m_policy.space().impl_internal_space_instance(), true); // copy to device and execute @@ -520,17 +568,9 @@ class ParallelFor, m_scratch_lock(m_policy.space() .impl_internal_space_instance() ->m_team_scratch_mutex) { - hipFuncAttributes attr = ::Kokkos::Experimental::Impl::HIPParallelLaunch< - ParallelFor, launch_bounds>::get_hip_func_attributes(); - m_team_size = - m_team_size >= 0 - ? m_team_size - : ::Kokkos::Experimental::Impl::hip_get_opt_block_size< - FunctorType, launch_bounds>( - m_policy.space().impl_internal_space_instance(), attr, - m_functor, m_vector_size, m_policy.team_scratch_size(0), - m_policy.thread_scratch_size(0)) / - m_vector_size; + m_team_size = m_team_size >= 0 ? m_team_size + : arg_policy.team_size_recommended( + arg_functor, ParallelForTag()); m_shmem_begin = (sizeof(double) * (m_team_size + 2)); m_shmem_size = @@ -556,23 +596,12 @@ class ParallelFor, int const shmem_size_total = m_shmem_begin + m_shmem_size; if (m_policy.space().impl_internal_space_instance()->m_maxShmemPerBlock < shmem_size_total) { - printf( - "%i %i\n", - m_policy.space().impl_internal_space_instance()->m_maxShmemPerBlock, - shmem_size_total); Kokkos::Impl::throw_runtime_exception(std::string( "Kokkos::Impl::ParallelFor< HIP > insufficient shared memory")); } - if (static_cast(m_team_size) > - static_cast( - ::Kokkos::Experimental::Impl::hip_get_max_block_size( - m_policy.space().impl_internal_space_instance(), attr, - arg_functor, arg_policy.impl_vector_length(), - arg_policy.team_scratch_size(0), - arg_policy.thread_scratch_size(0)) / - arg_policy.impl_vector_length())) { + size_t max_size = arg_policy.team_size_max(arg_functor, ParallelForTag()); + if (static_cast(m_team_size) > static_cast(max_size)) { Kokkos::Impl::throw_runtime_exception(std::string( "Kokkos::Impl::ParallelFor< HIP > requested too large team size.")); } @@ -839,8 +868,11 @@ class ParallelReduce, } const int shmem_size_total = m_team_begin + m_shmem_begin + m_shmem_size; - Kokkos::Experimental::Impl::HIPParallelLaunch( + using closure_type = + ParallelReduce, + ReducerType, Kokkos::Experimental::HIP>; + Kokkos::Experimental::Impl::hip_parallel_launch( *this, grid, block, shmem_size_total, m_policy.space().impl_internal_space_instance(), true); // copy to device and execute @@ -890,17 +922,9 @@ class ParallelReduce, m_scratch_lock(m_policy.space() .impl_internal_space_instance() ->m_team_scratch_mutex) { - hipFuncAttributes attr = Kokkos::Experimental::Impl::HIPParallelLaunch< - ParallelReduce, launch_bounds>::get_hip_func_attributes(); - m_team_size = - m_team_size >= 0 - ? m_team_size - : Kokkos::Experimental::Impl::hip_get_opt_block_size( - m_policy.space().impl_internal_space_instance(), attr, - m_functor, m_vector_size, m_policy.team_scratch_size(0), - m_policy.thread_scratch_size(0)) / - m_vector_size; + m_team_size = m_team_size >= 0 ? m_team_size + : arg_policy.team_size_recommended( + arg_functor, ParallelReduceTag()); m_team_begin = UseShflReduction @@ -958,8 +982,9 @@ class ParallelReduce, "L0 scratch memory")); } - if (static_cast(m_team_size) > - arg_policy.team_size_max(m_functor, m_reducer, ParallelReduceTag())) { + size_t max_size = + arg_policy.team_size_max(arg_functor, ParallelReduceTag()); + if (static_cast(m_team_size) > static_cast(max_size)) { Kokkos::Impl::throw_runtime_exception( std::string("Kokkos::Impl::ParallelReduce< HIP > requested too " "large team size.")); @@ -992,18 +1017,10 @@ class ParallelReduce, m_scratch_lock(m_policy.space() .impl_internal_space_instance() ->m_team_scratch_mutex) { - hipFuncAttributes attr = Kokkos::Experimental::Impl::HIPParallelLaunch< - ParallelReduce, launch_bounds>::get_hip_func_attributes(); - m_team_size = - m_team_size >= 0 - ? m_team_size - : Kokkos::Experimental::Impl::hip_get_opt_block_size( - m_policy.space().impl_internal_space_instance(), attr, - m_functor, m_vector_size, m_policy.team_scratch_size(0), - m_policy.thread_scratch_size(0)) / - m_vector_size; - + m_team_size = m_team_size >= 0 + ? m_team_size + : arg_policy.team_size_recommended(arg_functor, reducer, + ParallelReduceTag()); m_team_begin = UseShflReduction ? 0 @@ -1046,7 +1063,6 @@ class ParallelReduce, // upon team size. const int shmem_size_total = m_team_begin + m_shmem_begin + m_shmem_size; - if ((!Kokkos::Impl::is_integral_power_of_two(m_team_size) && !UseShflReduction) || m_policy.space().impl_internal_space_instance()->m_maxShmemPerBlock < @@ -1054,8 +1070,10 @@ class ParallelReduce, Kokkos::Impl::throw_runtime_exception( std::string("Kokkos::Impl::ParallelReduce< HIP > bad team size")); } - if (static_cast(m_team_size) > - arg_policy.team_size_max(m_functor, m_reducer, ParallelReduceTag())) { + + size_t max_size = + arg_policy.team_size_max(arg_functor, reducer, ParallelReduceTag()); + if (static_cast(m_team_size) > static_cast(max_size)) { Kokkos::Impl::throw_runtime_exception( std::string("Kokkos::Impl::ParallelReduce< HIP > requested too " "large team size.")); diff --git a/lib/kokkos/core/src/HIP/Kokkos_HIP_Space.cpp b/lib/kokkos/core/src/HIP/Kokkos_HIP_Space.cpp index 15ca089d14..e25ebe2ab3 100644 --- a/lib/kokkos/core/src/HIP/Kokkos_HIP_Space.cpp +++ b/lib/kokkos/core/src/HIP/Kokkos_HIP_Space.cpp @@ -67,102 +67,32 @@ namespace { hipStream_t get_deep_copy_stream() { static hipStream_t s = nullptr; if (s == nullptr) { - HIP_SAFE_CALL(hipStreamCreate(&s)); + KOKKOS_IMPL_HIP_SAFE_CALL(hipStreamCreate(&s)); } return s; } } // namespace -DeepCopy::DeepCopy(void* dst, const void* src, - size_t n) { - HIP_SAFE_CALL(hipMemcpy(dst, src, n, hipMemcpyDefault)); +void DeepCopyHIP(void* dst, void const* src, size_t n) { + KOKKOS_IMPL_HIP_SAFE_CALL(hipMemcpy(dst, src, n, hipMemcpyDefault)); } -DeepCopy::DeepCopy(void* dst, const void* src, - size_t n) { - HIP_SAFE_CALL(hipMemcpy(dst, src, n, hipMemcpyDefault)); -} - -DeepCopy::DeepCopy(void* dst, const void* src, - size_t n) { - HIP_SAFE_CALL(hipMemcpy(dst, src, n, hipMemcpyDefault)); -} - -DeepCopy::DeepCopy(const Kokkos::Experimental::HIP& - instance, - void* dst, const void* src, - size_t n) { - HIP_SAFE_CALL( - hipMemcpyAsync(dst, src, n, hipMemcpyDefault, instance.hip_stream())); -} - -DeepCopy:: - DeepCopy(const Kokkos::Experimental::HIP& instance, void* dst, - const void* src, size_t n) { - HIP_SAFE_CALL( - hipMemcpyAsync(dst, src, n, hipMemcpyDefault, instance.hip_stream())); -} - -DeepCopy:: - DeepCopy(const Kokkos::Experimental::HIP& instance, void* dst, - const void* src, size_t n) { - HIP_SAFE_CALL( - hipMemcpyAsync(dst, src, n, hipMemcpyDefault, instance.hip_stream())); -} - -DeepCopy::DeepCopy(void* dst, const void* src, - size_t n) { - HIP_SAFE_CALL(hipMemcpy(dst, src, n, hipMemcpyDefault)); -} - -DeepCopy::DeepCopy(void* dst, const void* src, - size_t n) { - HIP_SAFE_CALL(hipMemcpy(dst, src, n, hipMemcpyDefault)); -} - -DeepCopy::DeepCopy(void* dst, const void* src, - size_t n) { - HIP_SAFE_CALL(hipMemcpy(dst, src, n, hipMemcpyDefault)); -} - -DeepCopy:: - DeepCopy(const Kokkos::Experimental::HIP& instance, void* dst, - const void* src, size_t n) { - HIP_SAFE_CALL( - hipMemcpyAsync(dst, src, n, hipMemcpyDefault, instance.hip_stream())); -} - -DeepCopy::DeepCopy(const Kokkos::Experimental::HIP& - instance, - void* dst, const void* src, - size_t n) { - HIP_SAFE_CALL( - hipMemcpyAsync(dst, src, n, hipMemcpyDefault, instance.hip_stream())); -} - -DeepCopy::DeepCopy(const Kokkos::Experimental::HIP& - instance, - void* dst, const void* src, - size_t n) { - HIP_SAFE_CALL( +void DeepCopyAsyncHIP(const Kokkos::Experimental::HIP& instance, void* dst, + void const* src, size_t n) { + KOKKOS_IMPL_HIP_SAFE_CALL( hipMemcpyAsync(dst, src, n, hipMemcpyDefault, instance.hip_stream())); } void DeepCopyAsyncHIP(void* dst, void const* src, size_t n) { hipStream_t s = get_deep_copy_stream(); - HIP_SAFE_CALL(hipMemcpyAsync(dst, src, n, hipMemcpyDefault, s)); - HIP_SAFE_CALL(hipStreamSynchronize(s)); + KOKKOS_IMPL_HIP_SAFE_CALL(hipMemcpyAsync(dst, src, n, hipMemcpyDefault, s)); + Kokkos::Tools::Experimental::Impl::profile_fence_event< + Kokkos::Experimental::HIP>( + "Kokkos::Impl::DeepCopyAsyncHIP: Post Deep Copy Fence on Deep-Copy " + "stream", + Kokkos::Tools::Experimental::SpecialSynchronizationCases:: + DeepCopyResourceSynchronization, + [&]() { KOKKOS_IMPL_HIP_SAFE_CALL(hipStreamSynchronize(s)); }); } } // namespace Impl @@ -171,6 +101,7 @@ void DeepCopyAsyncHIP(void* dst, void const* src, size_t n) { /*--------------------------------------------------------------------------*/ /*--------------------------------------------------------------------------*/ +#ifdef KOKKOS_ENABLE_DEPRECATED_CODE_3 namespace Kokkos { KOKKOS_DEPRECATED void Experimental::HIPSpace::access_error() { @@ -188,6 +119,7 @@ KOKKOS_DEPRECATED void Experimental::HIPSpace::access_error(const void* const) { } } // namespace Kokkos +#endif /*--------------------------------------------------------------------------*/ /*--------------------------------------------------------------------------*/ @@ -283,7 +215,7 @@ void HIPSpace::impl_deallocate( Kokkos::Profiling::deallocateData(arg_handle, arg_label, arg_alloc_ptr, reported_size); } - HIP_SAFE_CALL(hipFree(arg_alloc_ptr)); + KOKKOS_IMPL_HIP_SAFE_CALL(hipFree(arg_alloc_ptr)); } void HIPHostPinnedSpace::deallocate(void* const arg_alloc_ptr, @@ -307,7 +239,7 @@ void HIPHostPinnedSpace::impl_deallocate( Kokkos::Profiling::deallocateData(arg_handle, arg_label, arg_alloc_ptr, reported_size); } - HIP_SAFE_CALL(hipHostFree(arg_alloc_ptr)); + KOKKOS_IMPL_HIP_SAFE_CALL(hipHostFree(arg_alloc_ptr)); } } // namespace Experimental @@ -427,23 +359,42 @@ HIP::HIP() "HIP instance constructor"); } -HIP::HIP(hipStream_t const stream) +HIP::HIP(hipStream_t const stream, bool manage_stream) : m_space_instance(new Impl::HIPInternal, [](Impl::HIPInternal* ptr) { ptr->finalize(); delete ptr; }) { Impl::HIPInternal::singleton().verify_is_initialized( "HIP instance constructor"); - m_space_instance->initialize(Impl::HIPInternal::singleton().m_hipDev, stream); + m_space_instance->initialize(Impl::HIPInternal::singleton().m_hipDev, stream, + manage_stream); } void HIP::print_configuration(std::ostream& s, const bool) { Impl::HIPInternal::singleton().print_configuration(s); } -void HIP::impl_static_fence() { HIP_SAFE_CALL(hipDeviceSynchronize()); } +uint32_t HIP::impl_instance_id() const noexcept { + return m_space_instance->impl_get_instance_id(); +} +void HIP::impl_static_fence(const std::string& name) { + Kokkos::Tools::Experimental::Impl::profile_fence_event< + Kokkos::Experimental::HIP>( + name, + Kokkos::Tools::Experimental::SpecialSynchronizationCases:: + GlobalDeviceSynchronization, + [&]() { KOKKOS_IMPL_HIP_SAFE_CALL(hipDeviceSynchronize()); }); +} +void HIP::impl_static_fence() { + impl_static_fence("Kokkos::HIP::impl_static_fence: Unnamed Static Fence"); +} -void HIP::fence() const { m_space_instance->fence(); } +void HIP::fence(const std::string& name) const { + m_space_instance->fence(name); +} +void HIP::fence() const { + fence("Kokkos::HIP::fence(): Unnamed Instance Fence"); +} hipStream_t HIP::hip_stream() const { return m_space_instance->m_stream; } @@ -489,6 +440,9 @@ void HIPSpaceInitializer::finalize(const bool all_spaces) { void HIPSpaceInitializer::fence() { Kokkos::Experimental::HIP::impl_static_fence(); } +void HIPSpaceInitializer::fence(const std::string& name) { + Kokkos::Experimental::HIP::impl_static_fence(name); +} void HIPSpaceInitializer::print_configuration(std::ostream& msg, const bool detail) { diff --git a/lib/kokkos/core/src/HIP/Kokkos_HIP_Team.hpp b/lib/kokkos/core/src/HIP/Kokkos_HIP_Team.hpp index fe52886ced..fb67a25c5e 100644 --- a/lib/kokkos/core/src/HIP/Kokkos_HIP_Team.hpp +++ b/lib/kokkos/core/src/HIP/Kokkos_HIP_Team.hpp @@ -316,198 +316,6 @@ class HIPTeamMember { #endif } - //-------------------------------------------------------------------------- - /**\brief Global reduction across all blocks - * - * Return !0 if reducer contains the final value - */ - template - KOKKOS_INLINE_FUNCTION static - typename std::enable_if::value, int>::type - global_reduce(ReducerType const& reducer, int* const global_scratch_flags, - void* const global_scratch_space, void* const shmem, - int const shmem_size) { -#ifdef __HIP_DEVICE_COMPILE__ - using value_type = typename ReducerType::value_type; - using pointer_type = value_type volatile*; - - // Number of shared memory entries for the reduction: - const int nsh = shmem_size / sizeof(value_type); - - // Number of HIP threads in the block, rank within the block - const int nid = blockDim.x * blockDim.y * blockDim.z; - const int tid = - threadIdx.x + blockDim.x * (threadIdx.y + blockDim.y * threadIdx.z); - - // Reduces within block using all available shared memory - // Contributes if it is the root "vector lane" - - // wn == number of warps in the block - // wx == which lane within the warp - // wy == which warp within the block - - const int wn = (nid + Experimental::Impl::HIPTraits::WarpIndexMask) >> - Experimental::Impl::HIPTraits::WarpIndexShift; - const int wx = tid & Experimental::Impl::HIPTraits::WarpIndexMask; - const int wy = tid >> Experimental::Impl::HIPTraits::WarpIndexShift; - - //------------------------ - { // Intra warp shuffle reduction from contributing HIP threads - - value_type tmp(reducer.reference()); - - int constexpr warp_size = - ::Kokkos::Experimental::Impl::HIPTraits::WarpSize; - for (int i = warp_size; static_cast(blockDim.x) <= (i >>= 1);) { - Experimental::Impl::in_place_shfl_down(reducer.reference(), tmp, i, - warp_size); - - // Root of each vector lane reduces "thread" contribution - if (0 == threadIdx.x && wx < i) { - reducer.join(&tmp, reducer.data()); - } - } - - // Reduce across warps using shared memory. - // Number of warps may not be power of two. - - __syncthreads(); // Wait before shared data write - - // Number of shared memory entries for the reduction - // is at most one per warp - const int nentry = wn < nsh ? wn : nsh; - - if (0 == wx && wy < nentry) { - // Root thread of warp 'wy' has warp's value to contribute - (reinterpret_cast(shmem))[wy] = tmp; - } - - __syncthreads(); // Wait for write to be visible to block - - // When more warps than shared entries - // then warps must take turns joining their contribution - // to the designated shared memory entry. - for (int i = nentry; i < wn; i += nentry) { - const int k = wy - i; - - if (0 == wx && i <= wy && k < nentry) { - // Root thread of warp 'wy' has warp's value to contribute - reducer.join((reinterpret_cast(shmem)) + k, &tmp); - } - - __syncthreads(); // Wait for write to be visible to block - } - - // One warp performs the inter-warp reduction: - - if (0 == wy) { - // Start fan-in at power of two covering nentry - - for (int i = (1 << (warp_size - __clz(nentry - 1))); (i >>= 1);) { - const int k = wx + i; - if (wx < i && k < nentry) { - reducer.join((reinterpret_cast(shmem)) + wx, - (reinterpret_cast(shmem)) + k); - __threadfence_block(); // Wait for write to be visible to warp - } - } - } - } - //------------------------ - { // Write block's value to global_scratch_memory - - int last_block = 0; - - if (0 == wx) { - reducer.copy((reinterpret_cast(global_scratch_space)) + - blockIdx.x * reducer.length(), - reducer.data()); - - __threadfence(); // Wait until global write is visible. - - last_block = static_cast(gridDim.x) == - 1 + Kokkos::atomic_fetch_add(global_scratch_flags, 1); - - // If last block then reset count - if (last_block) *global_scratch_flags = 0; - } - - // FIXME hip does not support __syncthreads_or so we need to do it by hand - // last_block = __syncthreads_or(last_block); - - __shared__ int last_block_shared; - if (last_block) last_block_shared = last_block; - __threadfence_block(); - - if (!last_block_shared) return 0; - } - //------------------------ - // Last block reads global_scratch_memory into shared memory. - - const int nentry = nid < gridDim.x ? (nid < nsh ? nid : nsh) - : (gridDim.x < nsh ? gridDim.x : nsh); - - // nentry = min( nid , nsh , gridDim.x ) - - // whole block reads global memory into shared memory: - - if (tid < nentry) { - const int offset = tid * reducer.length(); - - reducer.copy( - (reinterpret_cast(shmem)) + offset, - (reinterpret_cast(global_scratch_space)) + offset); - - for (int i = nentry + tid; i < static_cast(gridDim.x); i += nentry) { - reducer.join((reinterpret_cast(shmem)) + offset, - (reinterpret_cast(global_scratch_space)) + - i * reducer.length()); - } - } - - __syncthreads(); // Wait for writes to be visible to block - - if (0 == wy) { - // Iterate to reduce shared memory to single warp fan-in size - - int constexpr warp_size = - ::Kokkos::Experimental::Impl::HIPTraits::WarpSize; - const int nreduce = warp_size < nentry ? warp_size : nentry; - - if (wx < nreduce && nreduce < nentry) { - for (int i = nreduce + wx; i < nentry; i += nreduce) { - reducer.join(((pointer_type)shmem) + wx, ((pointer_type)shmem) + i); - } - __threadfence_block(); // Wait for writes to be visible to warp - } - - // Start fan-in at power of two covering nentry - - for (int i = (1 << (warp_size - __clz(nreduce - 1))); (i >>= 1);) { - const int k = wx + i; - if (wx < i && k < nreduce) { - reducer.join((reinterpret_cast(shmem)) + wx, - (reinterpret_cast(shmem)) + k); - __threadfence_block(); // Wait for writes to be visible to warp - } - } - - if (0 == wx) { - reducer.copy(reducer.data(), reinterpret_cast(shmem)); - return 1; - } - } - return 0; -#else - (void)reducer; - (void)global_scratch_flags; - (void)global_scratch_space; - (void)shmem; - (void)shmem_size; - return 0; -#endif - } - //---------------------------------------- // Private for the driver diff --git a/lib/kokkos/core/src/HPX/Kokkos_HPX.cpp b/lib/kokkos/core/src/HPX/Kokkos_HPX.cpp index 910d5e52e6..d9cb66e11f 100644 --- a/lib/kokkos/core/src/HPX/Kokkos_HPX.cpp +++ b/lib/kokkos/core/src/HPX/Kokkos_HPX.cpp @@ -191,6 +191,9 @@ void HPXSpaceInitializer::finalize(const bool all_spaces) { } void HPXSpaceInitializer::fence() { Kokkos::Experimental::HPX().fence(); } +void HPXSpaceInitializer::fence(const std::string &name) { + Kokkos::Experimental::HPX().fence(name); +} void HPXSpaceInitializer::print_configuration(std::ostream &msg, const bool detail) { diff --git a/lib/kokkos/core/src/HPX/Kokkos_HPX_Task.hpp b/lib/kokkos/core/src/HPX/Kokkos_HPX_Task.hpp index df09e026fd..7bb3ca5d00 100644 --- a/lib/kokkos/core/src/HPX/Kokkos_HPX_Task.hpp +++ b/lib/kokkos/core/src/HPX/Kokkos_HPX_Task.hpp @@ -82,7 +82,9 @@ class TaskQueueSpecialization< task_queue.scheduler = &scheduler; Kokkos::Impl::dispatch_execute_task(&task_queue, Kokkos::Experimental::HPX()); - Kokkos::Experimental::HPX().fence(); + Kokkos::Experimental::HPX().fence( + "Kokkos::Impl::TaskQueueSpecialization::execute: fence " + "after task execution"); } // Must provide task queue execution function @@ -214,7 +216,7 @@ class TaskQueueSpecializationConstrained< task_queue.scheduler = &scheduler; Kokkos::Impl::dispatch_execute_task(&task_queue, Kokkos::Experimental::HPX()); - Kokkos::Experimental::HPX().fence(); + Kokkos::Experimental::HPX().fence()"Kokkos::Impl::TaskQueueSpecializationConstrained::execute: fence after task execution"; } // Must provide task queue execution function diff --git a/lib/kokkos/core/src/HPX/Kokkos_HPX_WorkGraphPolicy.hpp b/lib/kokkos/core/src/HPX/Kokkos_HPX_WorkGraphPolicy.hpp index 527fe12ad9..d7e13e28f0 100644 --- a/lib/kokkos/core/src/HPX/Kokkos_HPX_WorkGraphPolicy.hpp +++ b/lib/kokkos/core/src/HPX/Kokkos_HPX_WorkGraphPolicy.hpp @@ -79,7 +79,9 @@ class ParallelFor, public: void execute() const { dispatch_execute_task(this, m_policy.space()); - m_policy.space().fence(); + m_policy.space().fence( + "Kokkos::Experimental::Impl::HPX::ParallelFor: fence " + "after kernel execution"); } void execute_task() const { diff --git a/lib/kokkos/core/src/KokkosExp_InterOp.hpp b/lib/kokkos/core/src/KokkosExp_InterOp.hpp new file mode 100644 index 0000000000..37c2088f88 --- /dev/null +++ b/lib/kokkos/core/src/KokkosExp_InterOp.hpp @@ -0,0 +1,147 @@ +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 3.0 +// Copyright (2020) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ + +#ifndef KOKKOS_CORE_EXP_INTEROP_HPP +#define KOKKOS_CORE_EXP_INTEROP_HPP + +#include +#include +#include +#include +#include +#include + +namespace Kokkos { +namespace Impl { + +// ------------------------------------------------------------------ // +// this is used to convert +// Kokkos::Device to MemSpace +// +template +struct device_memory_space { + using type = Tp; +}; + +template +struct device_memory_space> { + using type = MemT; +}; + +template +using device_memory_space_t = typename device_memory_space::type; + +// ------------------------------------------------------------------ // +// this is the impl version which takes a view and converts to python +// view type +// +template +struct python_view_type_impl; + +template